При проверке ArrayList, плагин не находит в нём нужного игрока

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

VirtualGuys

Активный участник
Пользователь
Баллы
61
Здравствуйте. Я пишу плагин на различные классы, и в данный момент пишу класс "Колдуна". У него есть свои заклинания, которые можно использовать раз в какое-то время (например, 1 раз в 40 секунд). Когда игрок пишет заклинание, идёт проверка на то, существует ли игрок в ArrayList, и если нет, то накладывает на игрока эффект и добавляет в тот самый ArrayList. А после этого включает таймер, который через определённое время удалит игрока из ArrayList. Проблема в том, что после выполнения заклинания, я могу сразу же использовать его повторно, хотя время перед использованием команды ещё не прошло. Вот код:
Код:
@EventHandler
    public void magicWords(PlayerChatEvent c) {
        Player p = (Player) c.getPlayer();
        ArrayList<String> delays = new ArrayList<String>();
        String lang = plugin.getConfig().getString("language");
        File players = new File(plugin.getDataFolder() + File.separator + "players.yml");
        FileConfiguration classes = YamlConfiguration.loadConfiguration(players);
        List<String> wizards = classes.getStringList("wizards");
        if(wizards.contains(p.getName())) {
            if(c.getMessage().equalsIgnoreCase("avazeda")) {
              if(!delays.contains(p.getName())) {
                  PotionEffect protection = new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 300, 0);
                  p.addPotionEffect(protection);
                  delays.add(p.getName());
                  plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
                        public void run() {
                            delays.remove(p.getName());
                            p.sendMessage("removed");
                        }   
                  }, 800L);
          } else {
              if(lang.equals("en")) {
                  p.sendMessage(ChatColor.BLUE + "" + ChatColor.BOLD + "[JoClass] " + ChatColor.GOLD + "" + ChatColor.BOLD + "You should wait 40s before using this spell again");
              } else if(lang.equals("ru")) {
                  p.sendMessage(ChatColor.BLUE + "" + ChatColor.BOLD + "[JoClass] " + ChatColor.GOLD + "" + ChatColor.BOLD + "Вы должны подождать 40сек перед тем, как использовать это заклинание снова");
              }
            }
          }
       }
   }
Т.е при проверке ArrayList, игрок там не обнаруживается, и заклинание снова используется. В чём может быть проблема? Заранее спасибо
 
ArrayList<String> delays = new ArrayList<String>();
каждый раз создает новый пустой список. то что ты туда добавляешь после завершения метода
magicWords выбрасывается в помойку (ну если быть точнее после того как отработает шедулер)
а новый вызов метода возьмет новый пустой список без делеев
 
Список с КД игроками засунь в глобал класа, то бишь:
Код:
class main {

private final List<String> cdplayers=new ArrayList<>();

*твой метод*

}
и уже его юзай в методе своем.
 
ArrayList<String> delays = new ArrayList<String>();
каждый раз создает новый пустой список. то что ты туда добавляешь после завершения метода
magicWords выбрасывается в помойку (ну если быть точнее после того как отработает шедулер)
а новый вызов метода возьмет новый пустой список без делеев
Теперь всё работает как должно, спасибо!
 
Список с КД игроками засунь в глобал класа, то бишь:
Код:
class main {

private final List<String> cdplayers=new ArrayList<>();

*твой метод*

}
и уже его юзай в методе своем.
Уже написали ответ) Но всё равно спасибо
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх