diff --git a/common/src/main/java/com/lishid/openinv/util/Permissions.java b/common/src/main/java/com/lishid/openinv/util/Permissions.java index 0f2fcd65..911dcb5e 100644 --- a/common/src/main/java/com/lishid/openinv/util/Permissions.java +++ b/common/src/main/java/com/lishid/openinv/util/Permissions.java @@ -49,7 +49,9 @@ public enum Permissions { SPECTATE_CLICK("spectate.click"), CONTAINER_ANY("container.any"), + CONTAINER_ANY_USE("container.any.use"), CONTAINER_SILENT("container.silent"), + CONTAINER_SILENT_USE("container.silent.use"), SEARCH_INVENTORY("search.inventory"), SEARCH_CONTAINER("search.container"); @@ -63,4 +65,9 @@ public boolean hasPermission(@NotNull Permissible permissible) { return permissible.hasPermission(permission); } + public boolean hasPermission(@NotNull Permissible permissible, @NotNull Permissions parent) { + if (permissible.hasPermission(permission)) return true; + if (permissible.isPermissionSet(permission) && !permissible.hasPermission(permission)) return false; + return permissible.hasPermission(parent.permission); + } } diff --git a/plugin/src/main/java/com/lishid/openinv/listener/ContainerListener.java b/plugin/src/main/java/com/lishid/openinv/listener/ContainerListener.java index ae3dcc1e..ffcba7d4 100644 --- a/plugin/src/main/java/com/lishid/openinv/listener/ContainerListener.java +++ b/plugin/src/main/java/com/lishid/openinv/listener/ContainerListener.java @@ -72,14 +72,14 @@ private void onPlayerInteract(@NotNull PlayerInteractEvent event) { Player player = event.getPlayer(); UUID playerId = player.getUniqueId(); - boolean any = Permissions.CONTAINER_ANY.hasPermission(player) && PlayerToggles.any().is(playerId); + boolean any = Permissions.CONTAINER_ANY_USE.hasPermission(player, Permissions.CONTAINER_ANY) && PlayerToggles.any().is(playerId); boolean needsAny = accessor.getAnySilentContainer().isAnyContainerNeeded(event.getClickedBlock()); if (!any && needsAny) { return; } - boolean silent = Permissions.CONTAINER_SILENT.hasPermission(player) && PlayerToggles.silent().is(playerId); + boolean silent = Permissions.CONTAINER_SILENT_USE.hasPermission(player, Permissions.CONTAINER_SILENT) && PlayerToggles.silent().is(playerId); // If anycontainer or silentcontainer is active if (any || silent) { diff --git a/plugin/src/main/resources/plugin.yml b/plugin/src/main/resources/plugin.yml index e3da2390..6ec9d2ef 100644 --- a/plugin/src/main/resources/plugin.yml +++ b/plugin/src/main/resources/plugin.yml @@ -76,8 +76,16 @@ permissions: # Container features openinv.container: children: - openinv.container.any: true - openinv.container.silent: true + openinv.container.any: + children: + openinv.container.any.use: true + openinv.container.any.use: + default: false + openinv.container.silent: + children: + openinv.container.silent.use: true + openinv.container.silent.use: + default: false # Search functionality openinv.search: children: