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

(Решено)Runnable

Тема в разделе "Разработка плагинов для новичков", создана пользователем reZero, 6 сен 2018.

Статус темы:
Закрыта.
  1. Автор темы
    reZero

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

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

    Есть второй вопрос. Мне нужно после опр.действия давать игроку метадату, а через какое-то время удалять её, но другой игрок, например, написав команду, может удалить у игрока метадату и по сути, я должен буду отменить ранебл для этого игрока. Как это все сделать более-менее не говнокодерски?
     
  2. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    BukkitRunnable - содержит логику, которую надо выполнить, BukkitScheduler - "планирует" и распоряжается выполнением этой логики.
     
  3. _TheZit445_

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

    Баллы:
    76
    Skype:
    kirik2425
    Имя в Minecraft:
    _TheZit445_
    Новый класс, который наследует 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();
    //Удаляем метадату вручкую, при этом таймер останавливается
     
  4. Nikolai_Faint

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

    Баллы:
    96
    *ОФФТОП*
    Не знаю как на букките без говно кода, но на банже как-то скодил. (гитхаб)
     
  5. Автор темы
    reZero

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

    Баллы:
    76
    Всем большое спасибо!
     
Статус темы:
Закрыта.

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