Помогите Проблема с ивентом.

Lisenochek

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
Lisenochek
Всем привет. Нужна помощь по проблема. Она заключается вот в чем:

Имеются два ивента PlayerInteractEvent. Один ивент отвечает за использование предмета - второй за открытие железной двери рукой. Все работает по отдельности, но возникают проблемы, когда ты используешь предмет, нажимая на дверь.

Что именно происходит? У меня в первом ивенте заложена проверка, что если кликнутый блок является блоком двери и игрок еще присел, то дверь открываться не будет, а предмет используется, но не работает схема наоборот, а именно дверь по идее, если игрок не присел, должна открыться, а предмет не должен юзнуться.

Эта проверка выполняется, но return не срабатывает. Ивент продолжает работать, чего мне не нужно.
Я перепробовал все, от банальной перестановки проверок, до приоритетов с отменой последних ивентов.

Кстати говоря. У меня помимо двери есть и другие блоки, обладающие внутренним GUI. Они по странности то и работают.

Мне необходимо, чтобы предмет не использовался, а дверь открывалась, если игрок не присел пред эти и наоборот: чтобы предмет использовался, когда он присел, но дверь при этом не открывалась.

Первый ивент:
Код:
    @EventHandler
    public void event(PlayerInteractEvent e) {

        Player player = e.getPlayer();

        if (e.getHand() != EquipmentSlot.HAND) return;
        if (e.getAction() != Action.RIGHT_CLICK_AIR && e.getAction() != Action.RIGHT_CLICK_BLOCK) return;
        if (!Utils.checkItem(player.getInventory().getItemInMainHand(), Items.BEAN_EXPLOSIVE.getStack()) && !Utils.checkItem(player.getInventory().getItemInMainHand(), Items.C4.getStack())) return;

        if (e.getAction() == Action.RIGHT_CLICK_BLOCK && Lists.newArrayList(Material.FURNACE, Material.BURNING_FURNACE, Material.CHEST, Material.TRAPPED_CHEST, Material.IRON_DOOR_BLOCK).contains(e.getClickedBlock().getType())) {
            if (!player.isSneaking()) return;
        }

        Bukkit.broadcastMessage("код использования предмета");
    }

Второй ивент:
Код:
    @EventHandler
    public void onOpenDoors(PlayerInteractEvent e) {

        if (e.getHand() != EquipmentSlot.HAND) return;
        if (e.getAction() != Action.RIGHT_CLICK_BLOCK) return;

        Player player = e.getPlayer();

        if (e.getClickedBlock().getType() != Material.IRON_DOOR_BLOCK) return;

        BlockState blockData = e.getClickedBlock().getState();
        Door downDoor = (Door) blockData.getData();
       
        player.getWorld().playSound(e.getClickedBlock().getLocation(), Sound.BLOCK_WOODEN_DOOR_OPEN, 1, 1);

        if (downDoor.isTopHalf()) {
            BlockState stateUpDoor = e.getClickedBlock().getRelative(BlockFace.DOWN).getState();
            Door upDoor = (Door) stateUpDoor.getData();
            upDoor.setOpen(!upDoor.isOpen());
            stateUpDoor.update();
            return;
        }

        downDoor.setOpen(!downDoor.isOpen());
        blockData.update();
    }
 
Назад
Верх