2929import net .md_5 .bungee .api .chat .hover .content .Text ;
3030import org .bukkit .Bukkit ;
3131import org .bukkit .Material ;
32- import org .bukkit .block .data .type .Lectern ;
32+ import org .bukkit .block .data .type .* ;
3333import org .bukkit .entity .Player ;
3434import org .bukkit .event .EventHandler ;
3535import 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