Помогите Выход из шедуллера 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
 
Последнее редактирование:
Можешь использовать BukkitRunnable вместо Runnable. В этом случае внутри достаточно будет просто прописать:
Код:
this.cancel();
//запуск игры

Либо ещё второй вариант.
Bukkit.getScheduler().runTaskTimer(plugin, task, delay, period) возвращает BukkitTask, который можно отменить методом:
Код:
Bukkit.getScheduler().cancelTask(task);
 
Последнее редактирование:
Можешь использовать BukkitRunnable вместо Runnable. В этом случае внутри достаточно будет просто прописать:
Код:
this.cancel();
//запуск игры
Eclipse это не понравилось, пишет, что метод устарел : D Просто проигнорить, поставив СупрессВарнингс?)
 
Можешь использовать BukkitRunnable вместо Runnable. В этом случае внутри достаточно будет просто прописать:
Код:
this.cancel();
//запуск игры

Либо ещё второй вариант.
Bukkit.getScheduler().runTaskTimer(plugin, task, delay, period) возвращает BukkitTask, который можно отменить методом:
Код:
Bukkit.getScheduler().cancelTask(task);
И в первом и во втором случае выбрасывает исключение ниже
Во втором пишу Bukkit.getScheduler().cancelTask(getTaskId());
И вроде бы он должен закрывать выполнение, но этого не происходит (
 

Вложения

  • wtf.png
    wtf.png
    478,2 КБ · Просмотры: 26
И в первом и во втором случае выбрасывает исключение ниже
Во втором пишу Bukkit.getScheduler().cancelTask(getTaskId());
И вроде бы он должен закрывать выполнение, но этого не происходит (
Зачем тебе Bukkit getscheduler?
 
Зачем тебе Bukkit getscheduler?
А как по другому? cancel(); не работает - No scheduled yet. Так же с cancelTask(int);
Работает только cancelAllTasks();, но это не вариант, так как у меня в плагине еще есть шедулеры...
Есть конечно вариант использовать рантасклэйтер в for столько раз, сколько нужно, но это не гуманно... Ведь есть runTaskTimer, но его мне не удается остановить...
 
А как по другому? cancel(); не работает - No scheduled yet. Так же с cancelTask(int);
Работает только cancelAllTasks();, но это не вариант, так как у меня в плагине еще есть шедулеры...
Есть конечно вариант использовать рантасклэйтер в for столько раз, сколько нужно, но это не гуманно... Ведь есть runTaskTimer, но его мне не удается остановить...
Код:
TaskID_1 = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
. . .
 if(k <= 1) {
    Bukkit.getScheduler().cancelTask(TaskID_1);
 }
 
Код:
TaskID_1 = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {
            @Override
            public void run() {
. . .
 if(k <= 1) {
    Bukkit.getScheduler().cancelTask(TaskID_1);
 }
int TaskID_1 = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
int k = 21;
@Override
public void run() {
k --;
p.sendMessage(colorTranslator("&fДо начала игры осталось &e" + smartSecondReturner(k)));
if(k < 1){
Bukkit.getScheduler().cancelTask(TaskID_1); //Eclipse говорит: The local variable TaskID_1 may not have been initialized
}
}

},0,20);
 
int TaskID_1 = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable(){
int k = 21;
@Override
public void run() {
k --;
p.sendMessage(colorTranslator("&fДо начала игры осталось &e" + smartSecondReturner(k)));
if(k < 1){
Bukkit.getScheduler().cancelTask(TaskID_1); //Eclipse говорит: The local variable TaskID_1 may not have been initialized
}
}

},0,20);
Так инициализируй:
int TaskID_1 = -1;
 
Так инициализируй:
int TaskID_1 = -1;
Инициализировал, всё равно не нравится

//Local variable TaskID_1 defined in an enclosing scope must be final or effectively final
Хочет сделать переменную финальной? Попробовал поставить - не нравится...
 
Инициализировал, всё равно не нравится

//Local variable TaskID_1 defined in an enclosing scope must be final or effectively final
Хочет сделать переменную финальной? Попробовал поставить - не нравится...
Ля чувак я те сказал, не юзай Bukkit get scheduler. Юзай это new BukkitRunnable {…}.start()
 
Ля чувак я те сказал, не юзай Bukkit get scheduler. Юзай это new BukkitRunnable {…}.start()
Тогда уже пример кода, где при условии шедулер будет останавливатся, а то я не оч понимаю
runTaskLater деприкатен и после BukkitRunnable никакое старт не поставишь, лол, и зачем старт если надо стоп...

Или я чего-то не понимаю )


Bukkit.getScheduler().runTaskLater(this, new BukkitRunnable(){ //deprecated
/*
*A program element annotated @Deprecated is one that programmers are discouraged from using, typically because *it is dangerous, or because a better alternative exists. Compilers warn when a deprecated program element is

*used or overridden in non-deprecated code.
*/

int k = 21;
@Override
public void run() {
k --;
p.sendMessage(colorTranslator("&fДо начала игры осталось &e " + smartSecondReturner(k)));
if(k < 1){
Bukkit.getScheduler().cancelTask(TaskID_1);
}
}

}.start() , 20); //method not found (?)
 
Остановится на 1 секунде до начала.
PHP:
new BukkitRunnable() {
                    int k = 20;
                    @Override
                    public void run() {
                        p.sendMessage(colorTranslator("&fДо начала игры осталось &e " + smartSecondReturner(k)));
                        k--;
                        if(k==0) this.cancel();
                    }
                }.runTaskTimer(plugin, 0, 20);
 
Тогда уже пример кода, где при условии шедулер будет останавливатся, а то я не оч понимаю
runTaskLater деприкатен и после BukkitRunnable никакое старт не поставишь, лол, и зачем старт если надо стоп...

Или я чего-то не понимаю )


Bukkit.getScheduler().runTaskLater(this, new BukkitRunnable(){ //deprecated
/*
*A program element annotated @Deprecated is one that programmers are discouraged from using, typically because *it is dangerous, or because a better alternative exists. Compilers warn when a deprecated program element is

*used or overridden in non-deprecated code.
*/

int k = 21;
@Override
public void run() {
k --;
p.sendMessage(colorTranslator("&fДо начала игры осталось &e " + smartSecondReturner(k)));
if(k < 1){
Bukkit.getScheduler().cancelTask(TaskID_1);
}
}

}.start() , 20); //method not found (?)
Ля я тебе сказал не юзать Bukkit scheduler, ты че тупой?
 
Тебе нужен scheduleSyncRepeatingTask, а не runTaskTimer.
И как ты объявляешь переменную?
Вставь весь код класса на pastebin и пришли ссылку.
 
Тебе нужен scheduleSyncRepeatingTask, а не runTaskTimer.
И как ты объявляешь переменную?
Вставь весь код класса на pastebin и пришли ссылку.
Он уже разобрался и был готов закрыть тему. Сейчас опять его заплутаем.
 
Назад
Верх