Skip to content

Commit 295ab93

Browse files
committed
Fix door, trapdoor and gate permissions not checked
1 parent 507ed6c commit 295ab93

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

spigot/src/main/java/de/sean/blockprot/bukkit/listeners/InteractEventListener.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@
2929
import net.md_5.bungee.api.chat.hover.content.Text;
3030
import org.bukkit.Bukkit;
3131
import org.bukkit.Material;
32+
import org.bukkit.block.data.type.Door;
33+
import org.bukkit.block.data.type.Gate;
3234
import org.bukkit.block.data.type.Lectern;
35+
import org.bukkit.block.data.type.TrapDoor;
3336
import org.bukkit.entity.Player;
3437
import org.bukkit.event.EventHandler;
3538
import org.bukkit.event.EventPriority;
@@ -64,14 +67,15 @@ public void playerInteract(PlayerInteractEvent event) {
6467
sendMessage(player, Translator.get(TranslationKey.MESSAGES__NO_PERMISSION));
6568
} else {
6669
BlockNBTHandler handler = new BlockNBTHandler(event.getClickedBlock());
70+
final var blockData = event.getClickedBlock().getBlockData();
6771
if (!(handler.canAccess(player.getUniqueId().toString()) || player.hasPermission(Permissions.BYPASS.key()))) {
6872
event.setCancelled(true);
6973
sendMessage(player, Translator.get(TranslationKey.MESSAGES__NO_PERMISSION));
70-
} else if (event.getClickedBlock().getType() == Material.LECTERN && !handler.isOwner(player.getUniqueId())) {
74+
} else if (event.getClickedBlock().getType() == Material.LECTERN && handler.isProtected() && !handler.isOwner(player.getUniqueId())) {
7175
// With Lecterns you place the books by interacting with the block. canAccess will return true because the
7276
// player has the READ permission, but this should not be allowed in this case. In the case that the player
7377
// wants to take the book from the lectern (hasBook returns true) we already listen for PlayerTakeLecternBookEvent.
74-
final var lectern = (Lectern)event.getClickedBlock().getBlockData();
78+
final var lectern = (Lectern)blockData;
7579
if (!lectern.hasBook()) {
7680
final var friend = handler.getFriend(player.getUniqueId().toString());
7781
if (friend.isEmpty() || !friend.get().canWrite()) {
@@ -80,6 +84,13 @@ public void playerInteract(PlayerInteractEvent event) {
8084
sendMessage(player, Translator.get(TranslationKey.MESSAGES__NO_PERMISSION));
8185
}
8286
}
87+
} else if ((blockData instanceof Door || blockData instanceof TrapDoor || blockData instanceof Gate) && handler.isProtected() && !handler.isOwner(player.getUniqueId())) {
88+
final var friend = handler.getFriend(player.getUniqueId().toString());
89+
if (friend.isEmpty() || !friend.get().canWrite()) {
90+
// The player cannot write and therefore is not allowed to change the door open state.
91+
event.setCancelled(true);
92+
sendMessage(player, Translator.get(TranslationKey.MESSAGES__NO_PERMISSION));
93+
}
8394
} else if (!(new PlayerSettingsHandler(player).hasPlayerInteractedWithMenu())) {
8495
Long timestamp = LockHintMessageCooldown.getTimestamp(player);
8596
if (timestamp == null || timestamp < System.currentTimeMillis() - (BlockProt.getDefaultConfig().getLockHintCooldown() * 1000)) { // 10 seconds in milliseconds

0 commit comments

Comments
 (0)