diff --git a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/BukkitPermissionAttachmentManager.java b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/BukkitPermissionAttachmentManager.java index 651c56217..8c065b9ac 100644 --- a/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/BukkitPermissionAttachmentManager.java +++ b/worldedit-bukkit/src/main/java/com/fastasyncworldedit/bukkit/BukkitPermissionAttachmentManager.java @@ -2,6 +2,7 @@ package com.fastasyncworldedit.bukkit; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import org.bukkit.entity.Player; +import org.bukkit.permissions.PermissibleBase; import org.bukkit.permissions.PermissionAttachment; import javax.annotation.Nullable; @@ -12,6 +13,7 @@ public class BukkitPermissionAttachmentManager { private final WorldEditPlugin plugin; private final Map attachments = new ConcurrentHashMap<>(); + private PermissionAttachment noopAttachment; public BukkitPermissionAttachmentManager(WorldEditPlugin plugin) { this.plugin = plugin; @@ -21,6 +23,12 @@ public class BukkitPermissionAttachmentManager { if (p == null) { return null; } + if (p.hasMetadata("NPC")) { + if (this.noopAttachment == null) { + this.noopAttachment = new PermissionAttachment(plugin, new PermissibleBase(null)); + } + return noopAttachment; + } return attachments.computeIfAbsent(p, k -> k.addAttachment(plugin)); } @@ -28,6 +36,10 @@ public class BukkitPermissionAttachmentManager { if (p == null) { return; } + if (p.hasMetadata("NPC") && noopAttachment != null) { + p.removeAttachment(noopAttachment); + return; + } PermissionAttachment attach = attachments.remove(p); if (attach != null) { p.removeAttachment(attach);