Помогите Нормальный таймер

hyndorik

Активный участник
Пользователь
Баллы
98
Имя в Minecraft
hyndo
Код:
    public void startCountDown(Arena arena){
       
            int id = Bukkit.getScheduler().scheduleSyncRepeatingTask(AntWars.instance(), new Runnable(){
            int start = arena.getTimeToStart();
            public void run(){
                for (String str : arena.getPlayers()){
                  if(Bukkit.getPlayer(str) == null){
                      arena.getPlayers().remove(str);
                  }
              }
                String[] CDOn = config.getString("startCounDownOn").split(",");
                for(int i = 0; i < CDOn.length; i++){
                    if(start == Integer.parseInt(CDOn[i])){
                        arena.sendMessage(format(prefix + "Начало через " + start + " секунд(ы)"));
                    }
                }
               
                start--;
            }
        }, 20, 20);
        Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(AntWars.instance(), new Runnable(){

            public void run(){
                Bukkit.getServer().getScheduler().cancelTask(id);
                startArena(arena);
            }
        }, (arena.getTimeToStart() * 20) + 1);
    }

Имеется вот такой код. Его проблема в том, что если игрок выйдет и снова зайдет, то вызовется два раза этот метод и соответственно будет два начала и два отсчета.
 
Код:
    public void startCountDown(Arena arena){
      
            int id = Bukkit.getScheduler().scheduleSyncRepeatingTask(AntWars.instance(), new Runnable(){
            int start = arena.getTimeToStart();
            public void run(){
                for (String str : arena.getPlayers()){
                  if(Bukkit.getPlayer(str) == null){
                      arena.getPlayers().remove(str);
                  }
              }
                String[] CDOn = config.getString("startCounDownOn").split(",");
                for(int i = 0; i < CDOn.length; i++){
                    if(start == Integer.parseInt(CDOn[i])){
                        arena.sendMessage(format(prefix + "Начало через " + start + " секунд(ы)"));
                    }
                }
              
                start--;
            }
        }, 20, 20);
        Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(AntWars.instance(), new Runnable(){

            public void run(){
                Bukkit.getServer().getScheduler().cancelTask(id);
                startArena(arena);
            }
        }, (arena.getTimeToStart() * 20) + 1);
    }

Имеется вот такой код. Его проблема в том, что если игрок выйдет и снова зайдет, то вызовется два раза этот метод и соответственно будет два начала и два отсчета.
Присваивай таску переменную и проверяй его на нулл, если он существует - ретурн.
 
Присваивай таску переменную и проверяй его на нулл, если он существует - ретурн.
Конечно так можно, но так будет работать только одна арена. Для мультиарен нужен hashmap, но я то не смогу в хеш мап сразу айди положить.
 
Конечно так можно, но так будет работать только одна арена. Для мультиарен нужен hashmap, но я то не смогу в хеш мап сразу айди положить.
В классе арена создай переменную task и геттер к ней
 
Назад
Верх