Помогите Выход из шедуллера runTaskTimer

SpokeKamchatka

Активный участник
Пользователь
Баллы
66
[РЕШЕНО]​
Привет
Нужно после выполнения условия в run(){} код выходил из шедуллера и шел дальше, пробовал ставить if(someboolean) return;
Но шедуллер идет дальше...

Хочу сделать что-то наподобие "Таймера для отсчета игры"

Вот, что у меня сейчас...
PHP:
Bukkit.getScheduler().runTaskTimer(this, new Runnable(){
                int k = 20;
                @Override
                public void run() {
                    k--;
                    p.playSound(p.getLocation(), Sound.BLOCK_LEVER_CLICK, 1, 1);
                    p.sendMessage(colorTranslator("&aИгра начнется через " + k + " секунд(а/у)"));
                    if(k <= 1) return;
                }
            }, 20, 20);
//colorTranslator(String) заменяет "&" на \u007a
//return не помогает...

Алекс Рендж, жду тебя : D
 
Последнее редактирование:
Тебе нужен scheduleSyncRepeatingTask, а не runTaskTimer.
И как ты объявляешь переменную?
Вставь весь код класса на pastebin и пришли ссылку.
Дядь ты вообще не в тему и хрень советуешь
 
Не видел кода от тебя, только набор непонятных слов.
Я ему сказал юзать BukkitRunnable, чел ниже пример кинул, ему надо внутри таска отменить таск, твое решение вообще не к месту
 
Я ему сказал юзать BukkitRunnable, чел ниже пример кинул, ему надо внутри таска отменить таск, твое решение вообще не к месту
Этот код разве не будет работать как надо:

Код:
        TaskID_2 = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
                k--;
                // player.playSound(player.getLocation(), Sound.BLOCK_LEVER_CLICK, 1, 1);
                // player.sendMessage(colorTranslator("&aИгра начнется через " + k + " секунд(а/у)"));
                if(k <= 1) {
                    Bukkit.getScheduler().cancelTask(TaskID_2);
                }
            }
        }, 20, 20);
Почему не уместно? Этот код понятнее для нашего разработчика, так ка он показал подобный пример вначале. Пусть выбирает, какой лучше использовать.
 
Почему не уместно? Этот код понятнее для нашего разработчика, так ка он показал подобный пример вначале. Пусть выбирает, какой лучше использовать.
Задай себе вопрос: "Что я буду делать с полученным BukkitTask?"
Если ответ на него что-то вроде "отменять таск изнутри" - то тебе он не нужен, используй this.cancel() внутри BukkitRunnable. Меньше переменных - меньше шансов накосячить. И код понятнее.

Код:
new BukkitRunnable(){
   void run() {
      if (statement) {
         this.cancel();
      }
   }
}.runTaskTimer(plugin, 20L, 20L);
И всё. Ещё и на пару нс быстрее, но это не важно.
 
Последнее редактирование:
Этот код разве не будет работать как надо:

Код:
        TaskID_2 = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
                k--;
                // player.playSound(player.getLocation(), Sound.BLOCK_LEVER_CLICK, 1, 1);
                // player.sendMessage(colorTranslator("&aИгра начнется через " + k + " секунд(а/у)"));
                if(k <= 1) {
                    Bukkit.getScheduler().cancelTask(TaskID_2);
                }
            }
        }, 20, 20);
Почему не уместно? Этот код понятнее для нашего разработчика, так ка он показал подобный пример вначале. Пусть выбирает, какой лучше использовать.
Ля дядь, ты вообще не понимаешь о чем речь? С чего бы твой код будет работать? Переменная внутри анонимус класса должна быть файнл и так же инициализирована, твой код не будет работать
 
Он уже разобрался и был готов закрыть тему. Сейчас опять его заплутаем.
Если вы готовы поболтать на эту тему - я с радостью) Я в шедуликах пока мало что понимаю - вот и делаю, что бог даст...
Тебе нужен scheduleSyncRepeatingTask, а не runTaskTimer.
И как ты объявляешь переменную?
Вставь весь код класса на pastebin и пришли ссылку.
Прошу: https://pastebin.com/xreR6bSm
Строка #124
 
Ля дядь, ты вообще не понимаешь о чем речь? С чего бы твой код будет работать? Переменная внутри анонимус класса должна быть файнл и так же инициализирована, твой код не будет работать
Тиха, уже решили всё, BukkitRunnable закрываю при условии и всё.
 
Ля дядь, ты вообще не понимаешь о чем речь? С чего бы твой код будет работать? Переменная внутри анонимус класса должна быть файнл и так же инициализирована, твой код не будет работать
Представь себе, у меня работает. Наверно это чудо.
90de6bea91f0de5cd40ee65ad9e49f02.jpg
 
Ля такого говнокода давно не видел, уходи отсюда
То есть ты признаешь, что он всё-таки работает?! А обзывать чужой код не следует, я лишь предложил его для разработчика, и ему решать, что с ним делать. И тебе тоже опыт, ведь ты об этом похоже не знал.
 
То есть ты признаешь, что он всё-таки работает?! А обзывать чужой код не следует, я лишь предложил его для разработчика, и ему решать, что с ним делать. И тебе тоже опыт, ведь ты об этом похоже не знал.
То что ты скинул не как не сходится с тем что ты скинул в первый раз, у тебя в первом примере не было инициализации филда на уровне класса, а только на уровне метода. И с чего бы мне не обзывать твой код? Это парашное не читабельное говно, когда есть нормальная замена ввиде BukkitRunable
 
То есть ты признаешь, что он всё-таки работает?! А обзывать чужой код не следует, я лишь предложил его для разработчика, и ему решать, что с ним делать. И тебе тоже опыт, ведь ты об этом похоже не знал.
Во-первых, твой код из сообщения выше действительно не работал бы, если бы k была локальной переменной. Но ты применил чудеса СмЕкАлОчКи и засунул её в поле класса, что вообще-то неимоверный говнокод. Твой код никто не обзывает - это просто констатация факта.
Во-вторых: да, ты действительно можешь предлагать что-то, но остальные в полном праве критиковать твоё предложение. В данном случае ты предложил третью ногу (которая к тому же пованивает), поэтому не удивляйся реакции.
 
Во-первых, твой код из сообщения выше действительно не работал бы, если бы k была локальной переменной. Но ты применил чудеса СмЕкАлОчКи и засунул её в поле класса, что вообще-то неимоверный говнокод. Твой код никто не обзывает - это просто констатация факта.
Во-вторых: да, ты действительно можешь предлагать что-то, но остальные в полном праве критиковать твоё предложение. В данном случае ты предложил третью ногу (которая к тому же пованивает), поэтому не удивляйся реакции.
Это только пример, в конечном итоге переменная будет использоваться из какого-нибудь ConfigManage'а и выглядеть примерно так "ConfigManager.getTimer()".
И самое главное, я этот код использую и у меня он работает. Никаких проблем не наблюдаю. А решать, использовать его или нет, выбирать вам самим.
 
То что ты скинул не как не сходится с тем что ты скинул в первый раз, у тебя в первом примере не было инициализации филда на уровне класса, а только на уровне метода. И с чего бы мне не обзывать твой код? Это парашное не читабельное говно, когда есть нормальная замена ввиде BukkitRunable
Для меня BukkitRunable куда более нечитабельный. Но я не называю это говном.
 
Для меня BukkitRunable куда более нечитабельный. Но я не называю это говном.
Не то чтобы это не читабельно, просто занимает много места. Как по мне более лучше для легких задач юзать Skript. (С дополнениями)
 
Для меня BukkitRunable куда более нечитабельный. Но я не называю это говном.
Чувак, все понимают что BukkitRunnable более читабельный, чем твое говно. Даже если смотреть не с точки зрения читабельности, а с точки зрения ООП то твой код так же остается полным говном
 
Назад
Верх