From a95a7bc27b32146976f233e49f477468d885cc39 Mon Sep 17 00:00:00 2001 From: Teriuihi Date: Sun, 9 Jun 2024 16:24:08 +0200 Subject: [PATCH] Add functionality to toggle iron trapdoors Method 'toggleTrapDoor' has been added to the RotateBlockEvent class. This function allows players to open and close trapdoors by left-clicking on them if the block is an instance of a TrapDoor. The original behavior of the block will be preserved when the player does not have build permissions. --- .../event_listeners/RotateBlockEvent.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/main/java/com/alttd/playerutils/event_listeners/RotateBlockEvent.java b/src/main/java/com/alttd/playerutils/event_listeners/RotateBlockEvent.java index ae2d24d..2a592fd 100644 --- a/src/main/java/com/alttd/playerutils/event_listeners/RotateBlockEvent.java +++ b/src/main/java/com/alttd/playerutils/event_listeners/RotateBlockEvent.java @@ -9,6 +9,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.block.data.*; import org.bukkit.block.data.type.Fence; import org.bukkit.block.data.type.Stairs; +import org.bukkit.block.data.type.TrapDoor; import org.bukkit.block.data.type.Wall; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -69,6 +70,9 @@ public class RotateBlockEvent implements Listener { } else if(Tag.RAILS.isTagged(type)) { event.setCancelled(true); toggleRails(block, player); + } else if (type.equals(Material.IRON_TRAPDOOR) && event.getAction().isLeftClick()){ + event.setCancelled(true); + toggleTrapDoor(block, player); } else if (block.getBlockData() instanceof Directional directional) { event.setCancelled(true); rotateDirectionalBlock(block, directional, player); @@ -78,6 +82,18 @@ public class RotateBlockEvent implements Listener { } } + private void toggleTrapDoor(Block block, Player player) { + if (!(block instanceof TrapDoor trapDoor)) { + return; + } + + if (cannotBuild(block, player)) { + return; + } + + trapDoor.setOpen(!trapDoor.isOpen()); + } + private void toggleRails(Block block, Player player) { if (!(block instanceof Rail rail)) { return;