Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

KinajUFO

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

Мне нужна команда /event delay , которая будет показывать счётчик от двух часов до 0 сек и обновляться! Как на сервере FunTime. Есть такая возможность?
 
КАК СДЕЛАТЬ КОМАНДУ , типо /event delay

Мне нужна команда /event delay , которая будет показывать счётчик от двух часов до 0 сек и обновляться! Как на сервере FunTime. Есть такая возможность?
Что должна делать команда, то?
 
Создаешь переменную (например time) и каждую секунду (~20 тиков) уменьшаешь на 1. При команде получаешь переменную
 
а ты можешь помочь? Не разбираюсь в этом просто...
Либо начинай разбираться: смотри гайды, туториалы по java и bukkit api. Если есть конкетные вопросы - задавай. Готовый код вместо тебя никто писать не будет.

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

Либо создавай заявку на бесплатную разработку и жди, пока найдётся желающий сделать: https://rubukkit.org/forums/6
 
Код:
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;
}

}
 
Последнее редактирование:
Данный способ тоже рабочий
Без интента не рабочий, но интент тут и не нужен.

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

Касательно твоего кода - вряд ли он поможет ТСу, потому что таймер без функционала смысла не имеет. А сам он этот код не изменит, потому что не разбирается. А код у тебя ещё и без табуляции, поэтому он и не разберётся.
Скорее всего, у него ещё и возникнут вопросы "а как каждому игроку сделать уникальный таймер каждому игроку", "а как то", "а как сё".
Так что тут всё совсем грустно, если человек не пытается разобраться самостоятельно
 
С чего бы, каждый пишет как умеет, нету разницы.
Если бы не было разницы между == и equals(), то equals() бы никто и не использовал. Но разница есть, причём крайне важная, поэтому принцип "кто как умеет" тут не работает. Есть однозначно верное и однозначно неверное использование. Почитай об этом на досуге
 
Если бы не было разницы между == и equals(), то equals() бы никто и не использовал. Но разница есть, причём крайне важная, поэтому принцип "кто как умеет" тут не работает. Есть однозначно верное и однозначно неверное использование. Почитай об этом на досуге
Я согласен, что equals лучше, но часто он работает также, как и ==.
Вот исходники данной функции:
Код:
    public boolean equals(Object obj) {
        return (this == obj);
    }

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

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

Почему так происходит - можно почитать в любой статье по запросу в гугл "java сравнение строк"
 
Я согласен, что equals лучше, но часто он работает также, как и ==.
Вот исходники данной функции:
Код:
    public boolean equals(Object obj) {
        return (this == obj);
    }


Если адреса одинаковые, то и хэшкоды будут одинаковыми.
Первая ссылка в Гугле, ознакомься.
 
Не аргументированная фигня, в примере экземпляр обьекта сравнивается со строкой (ясен пень оно так работать и не будет).
Ну так в коде чела было ровно то же самое:
Код:
args[0] == "delay"
 
Не аргументированная фигня, в примере экземпляр обьекта сравнивается со строкой (ясен пень оно так работать и не будет).
Если строки создаются не как объекты, а просто через литералы, то они будут верно сравниваться через ==, так как больше строки с одинаковым содержимым не создается в пуле строк, но если хотя бы одна из строк будет объектом, то она будет создана отдельно в пуле строк, даже если строка с таким содержимым там уже есть. Конечно, это можно обойти, используя метод .intern(), но ЗАЧЕМ, если можно просто использовать .equals() или .equalsIgnoreCase() хотя бы потому, что это хорошая практика?! Я уже не говорю про описанную выше проблему
 

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

Назад
Верх