Skip to content

Commit 02af1b3

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

1 file changed

Lines changed: 10 additions & 2 deletions

File tree

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

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
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.Lectern;
32+
import org.bukkit.block.data.type.*;
3333
import org.bukkit.entity.Player;
3434
import org.bukkit.event.EventHandler;
3535
import org.bukkit.event.EventPriority;
@@ -64,14 +64,15 @@ public void playerInteract(PlayerInteractEvent event) {
6464
sendMessage(player, Translator.get(TranslationKey.MESSAGES__NO_PERMISSION));
6565
} else {
6666
BlockNBTHandler handler = new BlockNBTHandler(event.getClickedBlock());
67+
final var blockData = event.getClickedBlock().getBlockData();
6768
if (!(handler.canAccess(player.getUniqueId().toString()) || player.hasPermission(Permissions.BYPASS.key()))) {
6869
event.setCancelled(true);
6970
sendMessage(player, Translator.get(TranslationKey.MESSAGES__NO_PERMISSION));
7071
} else if (event.getClickedBlock().getType() == Material.LECTERN && !handler.isOwner(player.getUniqueId())) {
7172
// With Lecterns you place the books by interacting with the block. canAccess will return true because the
7273
// player has the READ permission, but this should not be allowed in this case. In the case that the player
7374
// wants to take the book from the lectern (hasBook returns true) we already listen for PlayerTakeLecternBookEvent.
74-
final var lectern = (Lectern)event.getClickedBlock().getBlockData();
75+
final var lectern = (Lectern)blockData;
7576
if (!lectern.hasBook()) {
7677
final var friend = handler.getFriend(player.getUniqueId().toString());
7778
if (friend.isEmpty() || !friend.get().canWrite()) {
@@ -80,6 +81,13 @@ public void playerInteract(PlayerInteractEvent event) {
8081
sendMessage(player, Translator.get(TranslationKey.MESSAGES__NO_PERMISSION));
8182
}
8283
}
84+
} else if ((blockData instanceof Door || blockData instanceof TrapDoor || blockData instanceof Gate) && !handler.isOwner(player.getUniqueId())) {
85+
final var friend = handler.getFriend(player.getUniqueId().toString());
86+
if (friend.isEmpty() || !friend.get().canWrite()) {
87+
// The player cannot write and therefore is not allowed to change the door open state.
88+
event.setCancelled(true);
89+
sendMessage(player, Translator.get(TranslationKey.MESSAGES__NO_PERMISSION));
90+
}
8391
} else if (!(new PlayerSettingsHandler(player).hasPlayerInteractedWithMenu())) {
8492
Long timestamp = LockHintMessageCooldown.getTimestamp(player);
8593
if (timestamp == null || timestamp < System.currentTimeMillis() - (BlockProt.getDefaultConfig().getLockHintCooldown() * 1000)) { // 10 seconds in milliseconds

0 commit comments

Comments
 (0)