Помогите Не вызывается InteractEvent, в консоль не выводит ошибки

  • Автор темы Автор темы Kloper
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Kloper

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
f3azzy
Не вызывается ивент, мой код:
Код:
    @EventHandler
    public void usageHeal(PlayerInteractEvent e) {
        Player p = e.getPlayer();
        Action a = e.getAction();
        if(a != Action.RIGHT_CLICK_AIR || a != Action.RIGHT_CLICK_BLOCK) {
            return;
        } else {
            String checkRank = plugin.getConfig().getString("players." + p.getName() + ".rank");
            if(p.getInventory().getItemInMainHand().getType().equals(Material.PAPER)) {
                if(p.getInventory().getItemInMainHand().getItemMeta().getDisplayName().contains(ChatColor.WHITE + "Свиток мгновенного лечения")) {
                    int rank = Integer.parseInt(checkRank);
                    if(rank >= 3) {
                        p.getInventory().removeItem(p.getInventory().getItemInMainHand());
                        p.setHealth(p.getHealth() + 2);
                    } else {
                        return;
                    }
                } else {
                    return;
                }
            } else {
                return;
            }
        }
    }
config.yml:
Код:
players:
  f3azzy:
    rank: 10
класс в onEnable зарегистрировал.
в консоле ошибок никаких нету
 
Если я правильно понимаю у тебя возвращается 'return' (отмена)

Связано это с проверкой:

Код:
if(a != Action.RIGHT_CLICK_AIR || a != Action.RIGHT_CLICK_BLOCK) {
            return;

*Если правый-клик не по воздуху и правый-клик не по блоку то завершаем процесс*
Тебе нужно сделать в точности наоборот.

Замени проверку которую я отметил выше, на:

Код:
if(a == Action.RIGHT_CLICK_AIR || a == Action.RIGHT_CLICK_BLOCK) {
            return;
        }

*Если действие произведено по воздуху или по блоку, то*
Делай следующую проверку на содержания предмета у него в руках.

(Может я где то и не догоняю, более опытные люди могут меня поправить, ну я пытался помочь) Сильно не чморите уш меня)
 
if (a != Action.RIGHT_CLICK_AIR || a != Action.RIGHT_CLICK_BLOCK) return;

А теперь тебе вопрос - какое должно быть действие, чтобы твой код продолжил работу? )

UPD: Упс, опередили.

Вместо логического "или" тебе нужно "и"
 
Если я правильно понимаю у тебя возвращается 'return' (отмена)

Связано это с проверкой:

Код:
if(a != Action.RIGHT_CLICK_AIR || a != Action.RIGHT_CLICK_BLOCK) {
            return;

*Если правый-клик не по воздуху и правый-клик не по блоку то завершаем процесс*
Тебе нужно сделать в точности наоборот.

Замени проверку которую я отметил выше, на:

Код:
if(a == Action.RIGHT_CLICK_AIR || a == Action.RIGHT_CLICK_BLOCK) {
            return;
        }

*Если действие произведено по воздуху или по блоку, то*
Делай следующую проверку на содержания предмета у него в руках.

(Может я где то и не догоняю, более опытные люди могут меня поправить, ну я пытался помочь) Сильно не чморите уш меня)


Да, да, да. Заметил что у тупень, сейчас исправлю
сорри
 
Меня свою проверку клика на эту:

Код:
if(a == Action.RIGHT_CLICK_AIR || a == Action.RIGHT_CLICK_BLOCK) {

               // твой код

        }else{
      return;
}
 
не заметил, спасибо
закрыто
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх