1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем VirtualGuys, 18 сен 2020.

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

    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, игрок там не обнаруживается, и заклинание снова используется. В чём может быть проблема? Заранее спасибо
     
  2. Code

    Code Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    _Gizmo
    ArrayList<String> delays = new ArrayList<String>();
    каждый раз создает новый пустой список. то что ты туда добавляешь после завершения метода
    magicWords выбрасывается в помойку (ну если быть точнее после того как отработает шедулер)
    а новый вызов метода возьмет новый пустой список без делеев
     
  3. Vieprog

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

    Баллы:
    6
    Список с КД игроками засунь в глобал класа, то бишь:
    Код:
    class main {
    
    private final List<String> cdplayers=new ArrayList<>();
    
    *твой метод*
    
    }
    и уже его юзай в методе своем.
     
  4. Автор темы
    VirtualGuys

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

    Баллы:
    61
    Теперь всё работает как должно, спасибо!
     
  5. Автор темы
    VirtualGuys

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

    Баллы:
    61
    Уже написали ответ) Но всё равно спасибо
     
Статус темы:
Закрыта.

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