(Решено)Runnable

  • Автор темы Автор темы reZero
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

reZero

Активный участник
Пользователь
Баллы
76
Всем привет. Я знаю что существует runnable и scheduler...
Может это будет очень глупый вопрос, но какая между ними разница, и вообще, не одно ли это и то же ?

Есть второй вопрос. Мне нужно после опр.действия давать игроку метадату, а через какое-то время удалять её, но другой игрок, например, написав команду, может удалить у игрока метадату и по сути, я должен буду отменить ранебл для этого игрока. Как это все сделать более-менее не говнокодерски?
 
BukkitRunnable - содержит логику, которую надо выполнить, BukkitScheduler - "планирует" и распоряжается выполнением этой логики.
 
Новый класс, который наследует BukkitRunnable. В классе метод который тормозит и удаляет метадату. В конструкторе запускается таймер. В методе run() проверяем условие. В общем по коду думаю поймёшь.

Код:
public class Timer extends BukkitRunnable {
    private int seconds;
    private int second = 0;
    private Player player;
    public Timer(Player player, int seconds){
        this.seconds = seconds;
        this.player = player;
        this.runTaskTimer(Main.getPlugin(Main.class), 20, 20);
    }

    @Override
     public void run(){
         if (second < seconds){
             second++;
         } else {
             stop();
         }
     }

     public void stop(){
         player.removeMetadata("SOMETHING", Main.getPlugin(Main.class));
         cancel();
     }
}

Код:
Timer timer = new Timer(60, player);
//Будет работать 60 секунд, после остановится и удалит метадату
timer.stop();
//Удаляем метадату вручкую, при этом таймер останавливается
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх