Помогите Почему ивент не видит ArrayList

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

OJIEKCAHDP

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
OJIEKCAHDP
Код:
    ArrayList<String> godMode = new ArrayList<String>();
    
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        
        Player p = (Player) sender;
        
        //тут видит нормально, если пустой и если в нём есть имя игрока
            
            if (godMode.contains(p.getName())) {
                
                godMode.remove(p.getName());
                
                
                return true;
                
            }
            
            if (!godMode.contains(p.getName())) {
                
                godMode.add(p.getName());
                
                
                return true;
                
            }
            return false;
            
        }
        
    
    @EventHandler
    public void damageEvent(EntityDamageEvent e) {
        
        Player p;
        
        if (e.getEntity() instanceof Player) {
            
            p = (Player) e.getEntity();
            
        } else {
            
            return;
            
        }
        
        if (godMode.contains(p.getName())) { //godMode пустой всегда
            
             e.setCancelled(true);
            
        } else {
            
            return;
            
        }

    }

Почему в ивенте ArrayList всегда пустой, а в самой команде отображает нормально?
 
Потому что ты регистрируешь разные экземпляры своего класса. Вместо
PHP:
Bukkit.getPluginManager.registerEvents(new GodMode(), this);
getCommand("god").setExecutor(new GodMode());
надо
PHP:
GodMode godMode = new GodMode();
Bukkit.getPluginManager.registerEvents(godMode, this);
getCommand("god").setExecutor(godMode);
 
Потому что ты регистрируешь разные экземпляры своего класса. Вместо
PHP:
Bukkit.getPluginManager.registerEvents(new GodMode(), this);
getCommand("god").setExecutor(new GodMode());
надо
PHP:
GodMode godMode = new GodMode();
Bukkit.getPluginManager.registerEvents(godMode, this);
getCommand("god").setExecutor(godMode);
Я мб и упоролся, но у меня вроде как работало и как в 1 варианте, но это не точно
 
Потому что ты регистрируешь разные экземпляры своего класса. Вместо
PHP:
Bukkit.getPluginManager.registerEvents(new GodMode(), this);
getCommand("god").setExecutor(new GodMode());
надо
PHP:
GodMode godMode = new GodMode();
Bukkit.getPluginManager.registerEvents(godMode, this);
getCommand("god").setExecutor(godMode);
Вы точно об одном и том же? В его коде godMode это лист.
Код:
ArrayList<String> godMode = new ArrayList<String>();
Bukkit.getPluginManager.registerEvents(new MyEvents(godMode), this);
getCommand("god").setExecutor(new MyCommand(godMode));
 
У него класс отвечает и за слушатель, и за команду. Название класса и название переменной взял по контексту.
Он не говорит о том, что ивент не срабатывает, скорее всего они у него в разных классах.
 
Он не говорит о том, что ивент не срабатывает, скорее всего они у него в разных классах.
Дак ивент и должен срабатывать - он же его зарегистрировал, просто отдельным от команды экземпляром, как я показал в первом своем сообщении.
Естественно, я не могу об этом знать наверняка, но в абсолютном большинстве случаев с такими симптомами приходят на этот форум именно из-за этой проблемы. Код к тому же вставлен одним блоком, да и переменную он указал там без передачи через конструктор.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх