1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Как сделать команду , типо /event delay

Тема в разделе "Разработка плагинов для новичков", создана пользователем KinajUFO, 27 май 2024.

  1. Автор темы
    KinajUFO

    KinajUFO Новичок

    Баллы:
    6
    Имя в Minecraft:
    NezeriGames
    КАК СДЕЛАТЬ КОМАНДУ , типо /event delay

    Мне нужна команда /event delay , которая будет показывать счётчик от двух часов до 0 сек и обновляться! Как на сервере FunTime. Есть такая возможность?
     
  2. BetterLex

    BetterLex Активный участник Пользователь

    Баллы:
    76
    Что должна делать команда, то?
     
  3. koten0k

    koten0k Активный участник Пользователь

    Баллы:
    46
    Создаешь переменную (например time) и каждую секунду (~20 тиков) уменьшаешь на 1. При команде получаешь переменную
     
  4. Автор темы
    KinajUFO

    KinajUFO Новичок

    Баллы:
    6
    Имя в Minecraft:
    NezeriGames

    а ты можешь помочь? Не разбираюсь в этом просто...
     
  5. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Либо начинай разбираться: смотри гайды, туториалы по java и bukkit api. Если есть конкетные вопросы - задавай. Готовый код вместо тебя никто писать не будет.

    Либо заказывай плагин у разработчика за денежку: https://rubukkit.org/forums/market/

    Либо создавай заявку на бесплатную разработку и жди, пока найдётся желающий сделать: https://rubukkit.org/forums/6
     
  6. koten0k

    koten0k Активный участник Пользователь

    Баллы:
    46
    Код:
    public class Main extends JavaPlugin {
    
    private int time;
    
    public void onEnable(){
    getServer().getPluginCommand("event").setExecutor(new EventDelayCommand());
    Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
    
    
    
    @Override
    
    public void run() {
    time -= 1;
    }
    }, 20L, 20L);
    }
    public int getTime() {
    return time;
    }
    public void setTime(int t){
    time = t;
    }
    }
    
    public class EventDelayCommand implements CommandExecutor {
    
    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
    if (args.length == 1 && args[0].equalsIgnoreCase("delay")){
    sender.sendMessage("§cОсталось: "+Main.getTime()/60+"м "+Main.getTime()%60+"сек");
    sender.sendMessage("§cНе пропусти артефакт!");
    return true;
    }
    if (args.length == 1 && args[0].equalsIgnoreCase("reset")){
    Main.setTime(7200);
    sender.sendMessage("§aВы сбросили время! Теперь до артефакта осталось 2 часа!");
    }
    return false;
    }
    
    }
    
     
    Последнее редактирование: 30 май 2024
  7. mirrerror

    mirrerror Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    строки так не проверяются, так ты проверяешь адреса в памяти, нужно использовать .equals() или .equalsIgnoreCase()
     
  8. koten0k

    koten0k Активный участник Пользователь

    Баллы:
    46
    Поправил
    Данный способ тоже рабочий, а ссылки проверяются через .hashCode()
     
  9. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Без интента не рабочий, но интент тут и не нужен.

    Хеш-код у строк возвращает именно хеш-сумму строки, а не получает адрес объекта в памяти, поэтому тут ты тоже не прав.

    Касательно твоего кода - вряд ли он поможет ТСу, потому что таймер без функционала смысла не имеет. А сам он этот код не изменит, потому что не разбирается. А код у тебя ещё и без табуляции, поэтому он и не разберётся.
    Скорее всего, у него ещё и возникнут вопросы "а как каждому игроку сделать уникальный таймер каждому игроку", "а как то", "а как сё".
    Так что тут всё совсем грустно, если человек не пытается разобраться самостоятельно
     
  10. NuaN

    NuaN Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    NuaN
    Или же ищи программиста и заказывай у него плагин. Сделает всё как пожелаешь :good:
     
  11. SlenderMix

    SlenderMix Активный участник Пользователь

    Баллы:
    76
    С чего бы, каждый пишет как умеет, нету разницы.
     
  12. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Если бы не было разницы между == и equals(), то equals() бы никто и не использовал. Но разница есть, причём крайне важная, поэтому принцип "кто как умеет" тут не работает. Есть однозначно верное и однозначно неверное использование. Почитай об этом на досуге
     
  13. koten0k

    koten0k Активный участник Пользователь

    Баллы:
    46
    Я согласен, что equals лучше, но часто он работает также, как и ==.
    Вот исходники данной функции:
    Код:
        public boolean equals(Object obj) {
            return (this == obj);
        }
    Если адреса одинаковые, то и хэшкоды будут одинаковыми.
     
    Последнее редактирование: 30 май 2024
  14. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    equals() у строк никогда не работает так же, как и ==.
    Максимум, что может случиться - у тебя == вернёт true для двух визуально одинаковых строк. Но происходит это случайно по воле случая: в зависимости от кода, в котором эти строки были созданы, в зависимости от размера и заполненности кэша строк. Короче говоря, практически рандом. Поэтому на == при сравнении строк полагаться ну никак нельзя.

    И тут ты вновь не прав. У строк переопределены hashCode() и equals(). Эти методы никогда не опираются на ссылки или адреса в памяти, они всегда работают исключительно с содержимым строк (символами).

    Почему так происходит - можно почитать в любой статье по запросу в гугл "java сравнение строк"
     
  15. BetterLex

    BetterLex Активный участник Пользователь

    Баллы:
    76
    Первая ссылка в Гугле, ознакомься.
     
  16. SlenderMix

    SlenderMix Активный участник Пользователь

    Баллы:
    76
    Не аргументированная фигня, в примере экземпляр обьекта сравнивается со строкой (ясен пень оно так работать и не будет).
     
  17. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Ну так в коде чела было ровно то же самое:
    Код:
    args[0] == "delay"
     
  18. mirrerror

    mirrerror Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Если строки создаются не как объекты, а просто через литералы, то они будут верно сравниваться через ==, так как больше строки с одинаковым содержимым не создается в пуле строк, но если хотя бы одна из строк будет объектом, то она будет создана отдельно в пуле строк, даже если строка с таким содержимым там уже есть. Конечно, это можно обойти, используя метод .intern(), но ЗАЧЕМ, если можно просто использовать .equals() или .equalsIgnoreCase() хотя бы потому, что это хорошая практика?! Я уже не говорю про описанную выше проблему
     

Поделиться этой страницей