From ae6eaee183d247a4c4d464f58dbf9697f4d7687b Mon Sep 17 00:00:00 2001 From: okx-code Date: Sat, 16 Mar 2024 20:17:58 +0000 Subject: [PATCH 1/2] Allow interacting with chests and trapdoors if doing so would not actually open them Previously players were not able to use potions on top of these kinds of blocks or place blocks on top of them with shift right click. This change will allow that behaviour. --- .../mc/citadel/listener/BlockListener.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index f1f8a2cf4..fc6596ab3 100644 --- a/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -222,21 +222,30 @@ public class BlockListener implements Listener { if (rein == null) { return; } + Player player = e.getPlayer(); + + // Logic copied from ServerPlayerGameMode#useItemOn + // This will let the event happen if the player is not going to actually open/interact with the block + boolean flag = player.getInventory().getItemInMainHand().getType() != Material.AIR || player.getInventory().getItemInOffHand().getType() != Material.AIR; + if (player.isSneaking() && flag) { + return; + } + if (e.getClickedBlock().getState() instanceof Container) { - if (!rein.hasPermission(e.getPlayer(), CitadelPermissionHandler.getChests())) { + if (!rein.hasPermission(player, CitadelPermissionHandler.getChests())) { e.setCancelled(true); String msg = String.format("%s is locked with %s%s", e.getClickedBlock().getType().name(), ChatColor.AQUA, rein.getType().getName()); - CitadelUtility.sendAndLog(e.getPlayer(), ChatColor.RED, msg, e.getClickedBlock().getLocation()); + CitadelUtility.sendAndLog(player, ChatColor.RED, msg, e.getClickedBlock().getLocation()); } return; } if (e.getClickedBlock().getBlockData() instanceof Openable) { - if (!rein.hasPermission(e.getPlayer(), CitadelPermissionHandler.getDoors())) { + if (!rein.hasPermission(player, CitadelPermissionHandler.getDoors())) { e.setCancelled(true); String msg = String.format("%s is locked with %s%s", e.getClickedBlock().getType().name(), ChatColor.AQUA, rein.getType().getName()); - CitadelUtility.sendAndLog(e.getPlayer(), ChatColor.RED, msg, e.getClickedBlock().getLocation()); + CitadelUtility.sendAndLog(player, ChatColor.RED, msg, e.getClickedBlock().getLocation()); } } } From e75bbbc75627de2d14bb9f77f5d10f1d6ee173f7 Mon Sep 17 00:00:00 2001 From: okx-code Date: Sat, 16 Mar 2024 20:22:49 +0000 Subject: [PATCH 2/2] Add exception for iron trapdoors and doors --- .../java/vg/civcraft/mc/citadel/listener/BlockListener.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java b/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java index fc6596ab3..c6fc56d8d 100644 --- a/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java +++ b/plugins/citadel-paper/src/main/java/vg/civcraft/mc/citadel/listener/BlockListener.java @@ -231,6 +231,11 @@ public class BlockListener implements Listener { return; } + // Iron trapdoors and doors cannot be opened by right clicking on them + if (e.getClickedBlock().getType() == Material.IRON_TRAPDOOR || e.getClickedBlock().getType() == Material.IRON_DOOR) { + return; + } + if (e.getClickedBlock().getState() instanceof Container) { if (!rein.hasPermission(player, CitadelPermissionHandler.getChests())) { e.setCancelled(true);