Помогите Счедулер обратного отсчета

  • Автор темы Автор темы SergK35
  • Дата начала Дата начала

SergK35

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Sergk35
Доброго времени суток. Подскажите пожалуйста, как получить id счедулера, для того, чтоб его отключить в нужный момент?

Или есть какой-нибудь более правильный способ запуска обратного отсчета?

Код:
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BukkitRunnable() {
    @Override
    public void run() {
        p.sendMessage("Через " + countdown + " секунд произойдет магия");
        countdown--;
        if (countdown == 0) {
            Bukkit.getScheduler().cancelTask(вот сюды надо засунуть айди счедулера);
            p.sendMessage(ChatColor.RED + "Vse");
        }
 
Попробовал сделать еще так:
Код:
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BukkitRunnable() {
            @Override
            public void run() {
                if(countdown >= 0) {
                    p.sendMessage("Через " + countdown + " секунд произойдет магия");
                    countdown--;
                }
                this.cancel();
            }
        }, 0, 20);
Первый раз заработало как надо, но вот при последующих отказывает работать и выбрасывает следующее:
Код:
[WARNING] [Plugin] Task #18 for Plugin v1.0 generated an exception
java.lang.IllegalStateException: Not scheduled yet
    at org.bukkit.scheduler.BukkitRunnable.getTaskId(BukkitRunnable.java:129)
    at org.bukkit.scheduler.BukkitRunnable.cancel(BukkitRunnable.java:18)
​
 
Доброго времени суток. Подскажите пожалуйста, как получить id счедулера, для того, чтоб его отключить в нужный момент?

Или есть какой-нибудь более правильный способ запуска обратного отсчета?

Код:
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BukkitRunnable() {
    @Override
    public void run() {
        p.sendMessage("Через " + countdown + " секунд произойдет магия");
        countdown--;
        if (countdown == 0) {
            Bukkit.getScheduler().cancelTask(вот сюды надо засунуть айди счедулера);
            p.sendMessage(ChatColor.RED + "Vse");
        }
HTML:
new BukkitRunnable(){

            int cooldown = 10;//Секудны кулдауна
            @Override
            public void run() {
               Player.sendMessage("Через "+cooldown+"секунд произойдёт магия!");
                if(cooldown == 0){ //Если секудны кулдауна равны 0 то останавливаем
                    cancel();
                } else { //Иначе уменьшаем на 1
                    cooldown--;
                }
            }
        }.runTaskTimer(Main.getPlugin(Main.class), 20/*через 1 секуду*/,/*каждую 1 секудну будет повторяться*/20);
 
Последнее редактирование:
Смотрел бы внимательнее методы
scheduleSyncRepeatingTask() тебе как раз в ответ вернёт ID таска.
Лучше использовать более новые методы runTask*, они BukkitTask возвращают, у которого есть метод cancel() для отмены.
Спасибо, учту.
 
Назад
Верх