Помогите Остановка Scheduler'а

Статус
Закрыто для дальнейших ответов.

Mizerathom

Активный участник
Пользователь
Баллы
61
Читал и вики, и статьи на РБ, и ДжаваДоки, но так и не могу понять, как останавливать Шедулеры после определённого количества повторений (SyncRepeatingTask). Помогите и объясните пожалуйста, код ниже (Эклипс ругается на переменную id)

Код:
    public void onCountdown(){
        id = Bukkit.getScheduler().scheduleSyncRepeatingTask(
                (Plugin) this,
                new Runnable(){
                    @Override
                    public void run(){
                        Bukkit.broadcastMessage(ChatColor.RED+"test");
                        if(id == 10){
                            Bukkit.getScheduler().cancelTask(id);
                        }
                    }
                }, 0L, 20L);
    }
 
Java:
int scheduler;

void всякие_действия() {
   scheduler = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> {
      //ляляля
      Bukkit.getScheduler().cancelTask(scheduler);
   }, время, время);
}
Или если делать через BukkitRunnable.
Java:
void всякие_действия() {
   Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BukkitRunnable() {
      public void run() {
         //ляляля
         cancel();
      }
   }, время, время);
}
Писал от руки. Смысл думаю передал)
 
Последнее редактирование:
Включить мозги и подумать
int count = 0; <- за пределами шедулера
count++; <- в шедулере
Java:
public void onCountdown(){
        BukkitTask task = Bukkit.getScheduler().runTaskTimer( // не используйте устеревшие schedule методы
                this,
                new Runnable(){
                    @Override
                    public void run(){
                        Bukkit.broadcastMessage(ChatColor.RED+"test");
                    }
                }, 0L, 20L);
        task.cancel(); // отмена задания
    }

if(count == 10){ [действие] }

В итоге вышел следующий код, но шедулер всё равно не останавливается.
Код:
    private int count = 0;
    public void onCountdown(){
        BukkitTask task = Bukkit.getScheduler().runTaskTimer(
                this,
                new Runnable(){
                    @Override
                    public void run(){
                        Bukkit.broadcastMessage(ChatColor.RED+"test");
                        count++;
                    }
                }, 0L, 20L);
        if(count==10){task.cancel();}
    }
 
Последнее редактирование:
Java:
package Example;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;

public class Scheduler extends BukkitRunnable {

    @Override
    public void run() {
        Bukkit.broadcastMessage(ChatColor.RED+"test");
        if(Main.count==10) {
            Main.count = 0;
            this.cancel();
        }
        Main.count++;
    }
}
public static int count = 0;
new Scheduler().runTaskTimer(this, 0, 20);
 
Java:
package Example;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;

public class Scheduler extends BukkitRunnable {

    @Override
    public void run() {
        Bukkit.broadcastMessage(ChatColor.RED+"test");
        if(Main.count==10) {
            Main.count = 0;
            this.cancel();
        }
        Main.count++;
    }
}
public static int count = 0;
new Scheduler().runTaskTimer(this, 0, 20);

Благодарю. Кажется, уже вник в шедулеры. Закрываю тему.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх