Skip to content

Commit 3203896

Browse files
committed
Add method for checking a toggle with permissions
1 parent 036e46a commit 3203896

4 files changed

Lines changed: 30 additions & 14 deletions

File tree

api/src/main/java/com/lishid/openinv/util/Permissions.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,4 @@ public boolean hasPermission(@NotNull Permissible permissible) {
125125
return permissible.hasPermission(permission);
126126
}
127127

128-
public boolean hasPermission(@NotNull Permissible permissible, @NotNull Permissions parent) {
129-
if (permissible.hasPermission(permission)) return true;
130-
if (permissible.isPermissionSet(permission) && !permissible.hasPermission(permission)) return false;
131-
return permissible.hasPermission(parent.permission);
132-
}
133128
}

api/src/main/java/com/lishid/openinv/util/setting/PlayerToggle.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.lishid.openinv.util.setting;
22

3+
import org.bukkit.entity.Player;
34
import org.jetbrains.annotations.NotNull;
45

56
import java.util.UUID;
@@ -24,6 +25,15 @@ public interface PlayerToggle {
2425
*/
2526
boolean is(@NotNull UUID uuid);
2627

28+
/**
29+
* Get the state of the toggle for a particular {@link Player},
30+
* accounting for permissions required to use the feature.
31+
*
32+
* @param player the player
33+
* @return true if the setting is enabled and the player has the required permissions
34+
*/
35+
boolean is(@NotNull Player player);
36+
2737
/**
2838
* Set the state of the toggle for a particular player ID.
2939
*

api/src/main/java/com/lishid/openinv/util/setting/PlayerToggles.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.lishid.openinv.util.setting;
22

3+
import com.lishid.openinv.util.Permissions;
4+
import org.bukkit.entity.Player;
35
import org.jetbrains.annotations.NotNull;
46
import org.jetbrains.annotations.Nullable;
57
import org.jetbrains.annotations.UnmodifiableView;
@@ -19,8 +21,20 @@
1921
public final class PlayerToggles {
2022

2123
private static final Map<String, PlayerToggle> TOGGLES = new HashMap<>();
22-
private static final PlayerToggle ANY = add(new MemoryToggle("AnyContainer"));
23-
private static final PlayerToggle SILENT = add(new MemoryToggle("SilentContainer"));
24+
private static final PlayerToggle ANY = add(new MemoryToggle("AnyContainer") {
25+
@Override
26+
public boolean is(@NotNull Player player) {
27+
return is(player.getUniqueId())
28+
&& (Permissions.CONTAINER_ANY.hasPermission(player) || Permissions.CONTAINER_ANY_USE.hasPermission(player));
29+
}
30+
});
31+
private static final PlayerToggle SILENT = add(new MemoryToggle("SilentContainer") {
32+
@Override
33+
public boolean is(@NotNull Player player) {
34+
return is(player.getUniqueId())
35+
&& (Permissions.CONTAINER_SILENT.hasPermission(player) || Permissions.CONTAINER_SILENT_USE.hasPermission(player));
36+
}
37+
});
2438

2539
/**
2640
* Get the AnyContainer toggle.
@@ -72,7 +86,7 @@ private PlayerToggles() {
7286
throw new IllegalStateException("Cannot create instance of utility class.");
7387
}
7488

75-
private static class MemoryToggle implements PlayerToggle {
89+
private static abstract class MemoryToggle implements PlayerToggle {
7690

7791
private final @NotNull Set<UUID> enabled;
7892
private final @NotNull String name;

plugin/src/main/java/com/lishid/openinv/listener/ContainerListener.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@
3939
import org.bukkit.inventory.InventoryHolder;
4040
import org.jetbrains.annotations.NotNull;
4141

42-
import java.util.UUID;
43-
4442
/**
4543
* A listener managing AnyContainer, SilentContainer, and more.
4644
*/
@@ -71,15 +69,14 @@ private void onPlayerInteract(@NotNull PlayerInteractEvent event) {
7169
}
7270

7371
Player player = event.getPlayer();
74-
UUID playerId = player.getUniqueId();
75-
boolean any = Permissions.CONTAINER_ANY_USE.hasPermission(player, Permissions.CONTAINER_ANY) && PlayerToggles.any().is(playerId);
72+
boolean any = PlayerToggles.any().is(player);
7673
boolean needsAny = accessor.getAnySilentContainer().isAnyContainerNeeded(event.getClickedBlock());
7774

7875
if (!any && needsAny) {
7976
return;
8077
}
8178

82-
boolean silent = Permissions.CONTAINER_SILENT_USE.hasPermission(player, Permissions.CONTAINER_SILENT) && PlayerToggles.silent().is(playerId);
79+
boolean silent = PlayerToggles.silent().is(player);
8380

8481
// If anycontainer or silentcontainer is active
8582
if (any || silent) {
@@ -104,7 +101,7 @@ private void onInventoryClose(@NotNull final InventoryCloseEvent event) {
104101
}
105102

106103
InventoryHolder holder = event.getInventory().getHolder();
107-
if (PlayerToggles.silent().is(player.getUniqueId())
104+
if (PlayerToggles.silent().is(player)
108105
&& holder != null
109106
&& this.accessor.getAnySilentContainer().isAnySilentContainer(holder)) {
110107
this.accessor.getAnySilentContainer().deactivateContainer(player);

0 commit comments

Comments
 (0)