Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mizerathom, 8 май 2017.

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

    Mizerathom Новичок Пользователь

    Баллы:
    16
    Читал и вики, и статьи на РБ, и ДжаваДоки, но так и не могу понять, как останавливать Шедулеры после определённого количества повторений (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);
        }
     
  2. Хостинг MineCraft
    <
  3. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    int id = ...
     
  4. Автор темы
    Mizerathom

    Mizerathom Новичок Пользователь

    Баллы:
    16
    The local variable id may not have been initialized
     
  5. xDark

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

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Код ><
     
  6. Автор темы
    Mizerathom

    Mizerathom Новичок Пользователь

    Баллы:
    16
    Код:
        public void onCountdown(){
            int 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);
        }
     
  7. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    B1ruk
    Переменная id - это айди шедулера.
     
  8. Автор темы
    Mizerathom

    Mizerathom Новичок Пользователь

    Баллы:
    16
    Так как его можно достать?
     
  9. Типа админ:D

    Типа админ:D Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    B1ruk
    Включить мозги и подумать
    int count = 0; <- за пределами шедулера
    count++; <- в шедулере
    if(count == 10){ [действие] }
     
  10. iD3LSY

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

    Баллы:
    46
    Имя в Minecraft:
    opy
    Код:
    int scheduler;
    
    void всякие_действия() {
       scheduler = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, () -> {
          //ляляля
          Bukkit.getScheduler().cancelTask(scheduler);
       }, время, время);
    }
    Или если делать через BukkitRunnable.
    Код:
    void всякие_действия() {
       Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new BukkitRunnable() {
          public void run() {
             //ляляля
             cancel();
          }
       }, время, время);
    }
    
    Писал от руки. Смысл думаю передал)
     
    Последнее редактирование: 8 май 2017
  11. GoodCoder

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

    Баллы:
    76
    Код:
    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(); // отмена задания
        }
     
  12. Автор темы
    Mizerathom

    Mizerathom Новичок Пользователь

    Баллы:
    16
    В итоге вышел следующий код, но шедулер всё равно не останавливается.
    Код:
        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();}
        }
     
    Последнее редактирование: 9 май 2017
  13. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Код:
    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);
     
  14. Автор темы
    Mizerathom

    Mizerathom Новичок Пользователь

    Баллы:
    16
    Благодарю. Кажется, уже вник в шедулеры. Закрываю тему.
     
Статус темы:
Закрыта.

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