Ошибка при использование PlayerInteractEvent

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

_Ruleto4ka_

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
_EneRGO_
Есть у меня код:
Код:
      @EventHandler
      public void onPlayerInteract(PlayerInteractEvent event) {
        if (event.getAction() == Action.RIGHT_CLICK_BLOCK &&
          event.getClickedBlock().getType().toString().endsWith("SHULKER_BOX") || event.getClickedBlock().getType().toString().endsWith("BARREL"))
          event.setCancelled(true);
      }
    }
И почему-то выводит иногда ошибку
https://pastebin.com/3AShmiZ6
 
Клик по воздуху и getClickedBlock() возвращает null? Не?
 
Сравнивай через материал, а не по названию./


Клик по воздуху и getClickedBlock() возвращает null? Не?
У него стоит что Action = right click block Клик по воздуху в данном случае игнорируется.
Но возможно ты прав. Стоит проверять event.getClickedBlock на значение null мало ли что)
 
Сравнивай через материал, а не по названию./



У него стоит что Action = right click block Клик по воздуху в данном случае игнорируется.
Но возможно ты прав. Стоит проверять event.getClickedBlock на значение null мало ли что)
Код:
      @EventHandler
      public void onPlayerInteract(PlayerInteractEvent event) {
        Block block = event.getClickedBlock();
        if (block == null)
            return;
        if (block.getType() != Material.SHULKER_BOX)
        /*if (event.getAction() == Action.RIGHT_CLICK_BLOCK &&
            event.getClickedBlock().getType().toString().endsWith("SHULKER_BOX") || event.getClickedBlock().getType().toString().endsWith("BARREL"))*/
          event.setCancelled(true);
      }
Сделал так, только теперь отменяется любое действия
 
Код:
      @EventHandler
      public void onPlayerInteract(PlayerInteractEvent event) {
        Block block = event.getClickedBlock();
        if (block == null)
            return;
        if (block.getType() != Material.SHULKER_BOX)
        /*if (event.getAction() == Action.RIGHT_CLICK_BLOCK &&
            event.getClickedBlock().getType().toString().endsWith("SHULKER_BOX") || event.getClickedBlock().getType().toString().endsWith("BARREL"))*/
          event.setCancelled(true);
      }
Сделал так, только теперь отменяется любое действия
Даже клик по шалкеру?
 
Код:
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        Material mat = event.getClickedBlock().getType();
        if (mat == null) {
            return;
        } else if (mat.equals(Material.BLACK_SHULKER_BOX)) {
            event.setCancelled(true);
        } else {
            return;
        }
    }
Ступил, сделай так. Теперь нельзя будет кликнуть по черному шалкер-боксу
 
Можно как-то сделать, чтобы вписать шалкер и оно блочило все шалкера, а не каждого по цвету писать
И в логги пишет ошибку
https://pastebin.com/SCSgHELV
 
Код:
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        if (event.getClickedBlock() == null) {
            return;
        } else {
            Material mat = event.getClickedBlock().getType();
            if (event.getClickedBlock().getState() instanceof ShulkerBox) {
                event.setCancelled(true);
            } else {
                return;
            }
        }
Ошибка должна исчезнуть
 
Последнее редактирование:
Можно как-то сделать, чтобы вписать шалкер и оно блочило все шалкера, а не каждого по цвету писать
И в логги пишет ошибку
https://pastebin.com/SCSgHELV
1.
PHP:
        if (e.getClickedBlock().getState() instanceof ShulkerBox) {
            //TODO
        }
2. Скинь код через pastebin, чтобы мы могли видеть, что находится в строке, где происходит ошибка.
 
1.
PHP:
        if (e.getClickedBlock().getState() instanceof ShulkerBox) {
            //TODO
        }
2. Скинь код через pastebin, чтобы мы могли видеть, что находится в строке, где происходит ошибка.
Ошибка скорее всего в
Код:
Material mat = event.getClickedBlock().getType();
была, т.к. нет проверки на null
 
Ошибка скорее всего в
Код:
Material mat = event.getClickedBlock().getType();
была, т.к. нет проверки на null
Так пусть сделает в начале проверку на действие и все.
PHP:
        if (e.getAction() != Action.RIGHT_CLICK_BLOCK)
            return;
        //TODO
 
Код:
    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent event) {
        if (event.getClickedBlock().getType() == null) {
            return;
        } else {
            Material mat = event.getClickedBlock().getType();
            if (event.getClickedBlock().getState() instanceof ShulkerBox) {
                event.setCancelled(true);
            } else {
                return;
            }
        }
Ошибка должна исчезнуть
Кстати, мне кажется, что тут надо проверять не Material на null, а сам блок, ибо
PHP:
    @Nullable
    public Block getClickedBlock() {
        return this.blockClicked;
    }
Если блок будет null, то выкинет ту же ошибку NPE.
 
Кстати, мне кажется, что тут надо проверять не Material на null, а сам блок, ибо
PHP:
    @Nullable
    public Block getClickedBlock() {
        return this.blockClicked;
    }
Если блок будет null, то выкинет ту же ошибку NPE.
Поправил
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх