- Баллы
- 76
- Имя в Minecraft
- Lisenochek
Всем привет. Нужна помощь по проблема. Она заключается вот в чем:
Имеются два ивента PlayerInteractEvent. Один ивент отвечает за использование предмета - второй за открытие железной двери рукой. Все работает по отдельности, но возникают проблемы, когда ты используешь предмет, нажимая на дверь.
Что именно происходит? У меня в первом ивенте заложена проверка, что если кликнутый блок является блоком двери и игрок еще присел, то дверь открываться не будет, а предмет используется, но не работает схема наоборот, а именно дверь по идее, если игрок не присел, должна открыться, а предмет не должен юзнуться.
Эта проверка выполняется, но return не срабатывает. Ивент продолжает работать, чего мне не нужно.
Я перепробовал все, от банальной перестановки проверок, до приоритетов с отменой последних ивентов.
Кстати говоря. У меня помимо двери есть и другие блоки, обладающие внутренним GUI. Они по странности то и работают.
Мне необходимо, чтобы предмет не использовался, а дверь открывалась, если игрок не присел пред эти и наоборот: чтобы предмет использовался, когда он присел, но дверь при этом не открывалась.
Первый ивент:
Второй ивент:
Имеются два ивента 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();
}