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 .Door ;
33+ import org .bukkit .block .data .type .Gate ;
3234import org .bukkit .block .data .type .Lectern ;
35+ import org .bukkit .block .data .type .TrapDoor ;
3336import org .bukkit .entity .Player ;
3437import org .bukkit .event .EventHandler ;
3538import 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