From 63e2eaffedbaa3bb2fa34cf2543ae71db1253139 Mon Sep 17 00:00:00 2001 From: "Tobias Burdow [Kaleidox]" Date: Fri, 22 Mar 2024 14:29:13 +0100 Subject: [PATCH] Add parameter to check for explicit permission state --- .../mineaurion/aurionchat/bukkit/PlayerFactory.java | 9 ++++++--- .../aurionchat/common/AurionChatPlayer.java | 4 ++-- .../mineaurion/aurionchat/common/LuckPermsUtils.java | 11 +++++++++-- .../aurionchat/common/player/AbstractPlayer.java | 4 ++-- .../mineaurion/aurionchat/common/player/Player.java | 6 +++++- .../aurionchat/common/player/PlayerFactory.java | 4 ++-- .../mineaurion/aurionchat/sponge/PlayerFactory.java | 6 ++++-- 7 files changed, 30 insertions(+), 14 deletions(-) diff --git a/bukkit/src/main/java/com/mineaurion/aurionchat/bukkit/PlayerFactory.java b/bukkit/src/main/java/com/mineaurion/aurionchat/bukkit/PlayerFactory.java index 67e23af..245af29 100644 --- a/bukkit/src/main/java/com/mineaurion/aurionchat/bukkit/PlayerFactory.java +++ b/bukkit/src/main/java/com/mineaurion/aurionchat/bukkit/PlayerFactory.java @@ -10,7 +10,7 @@ public class PlayerFactory extends com.mineaurion.aurionchat.common.player.Playe private final BukkitAudiences audiences; - public PlayerFactory(AurionChat plugin){ + public PlayerFactory(AurionChat plugin) { super(true); this.audiences = plugin.getAudiences(); } @@ -31,7 +31,10 @@ protected void sendMessage(Player player, Component message) { } @Override - protected boolean hasPermission(Player player, String permission) { - return player.hasPermission(permission); + protected boolean hasPermission(Player player, String permission, boolean explicitly) { + return explicitly + ? player.getEffectivePermissions().stream() + .anyMatch(perm -> permission.equals(perm.getPermission())) + : player.hasPermission(permission); } } diff --git a/common/src/main/java/com/mineaurion/aurionchat/common/AurionChatPlayer.java b/common/src/main/java/com/mineaurion/aurionchat/common/AurionChatPlayer.java index 539f500..d0bcf37 100644 --- a/common/src/main/java/com/mineaurion/aurionchat/common/AurionChatPlayer.java +++ b/common/src/main/java/com/mineaurion/aurionchat/common/AurionChatPlayer.java @@ -18,10 +18,10 @@ public AurionChatPlayer(Player player, AbstractAurionChat plugin){ this.setCurrentChannel(DEFAULT_CHANNEL); this.setChannels(new HashSet<>(Collections.singletonList(DEFAULT_CHANNEL))); for(String channel: plugin.getConfigurationAdapter().getChannels().keySet()){ - if(player.hasPermission("aurionchat.joinchannel." + channel)){ + if(player.hasPermission("aurionchat.joinchannel." + channel, true)){ this.addChannel(channel); this.setCurrentChannel(channel); - } else if (player.hasPermission("aurionchat.listenchannel." + channel)) { + } else if (player.hasPermission("aurionchat.listenchannel." + channel, true)) { this.addChannel(channel); } } diff --git a/common/src/main/java/com/mineaurion/aurionchat/common/LuckPermsUtils.java b/common/src/main/java/com/mineaurion/aurionchat/common/LuckPermsUtils.java index bdbee6f..e07df52 100644 --- a/common/src/main/java/com/mineaurion/aurionchat/common/LuckPermsUtils.java +++ b/common/src/main/java/com/mineaurion/aurionchat/common/LuckPermsUtils.java @@ -1,7 +1,9 @@ package com.mineaurion.aurionchat.common; import net.luckperms.api.LuckPerms; +import net.luckperms.api.cacheddata.CachedPermissionData; import net.luckperms.api.model.user.User; +import net.luckperms.api.util.Tristate; import java.util.Optional; import java.util.UUID; @@ -26,7 +28,12 @@ public Optional getPlayerSuffix(UUID uuid) { return Optional.ofNullable(getUser(uuid).getCachedData().getMetaData().getSuffix()); } - public boolean hasPermission(UUID uuid, String permission){ - return getUser(uuid).getCachedData().getPermissionData().checkPermission(permission).asBoolean(); + public boolean hasPermission(UUID uuid, String permission, boolean explicitly){ + Tristate result = getUser(uuid) + .getCachedData() + .getPermissionData() + .queryPermission(permission) + .result(); + return explicitly ? result == Tristate.TRUE : result != Tristate.FALSE; } } diff --git a/common/src/main/java/com/mineaurion/aurionchat/common/player/AbstractPlayer.java b/common/src/main/java/com/mineaurion/aurionchat/common/player/AbstractPlayer.java index 00b8526..ae1c191 100644 --- a/common/src/main/java/com/mineaurion/aurionchat/common/player/AbstractPlayer.java +++ b/common/src/main/java/com/mineaurion/aurionchat/common/player/AbstractPlayer.java @@ -35,8 +35,8 @@ public void sendMessage(Component message) { } @Override - public boolean hasPermission(String permission) { - return this.factory.hasPermission(player, permission); + public boolean hasPermission(String permission, boolean explicitly) { + return this.factory.hasPermission(player, permission, explicitly); } @Override diff --git a/common/src/main/java/com/mineaurion/aurionchat/common/player/Player.java b/common/src/main/java/com/mineaurion/aurionchat/common/player/Player.java index f8b6126..f88b2fe 100644 --- a/common/src/main/java/com/mineaurion/aurionchat/common/player/Player.java +++ b/common/src/main/java/com/mineaurion/aurionchat/common/player/Player.java @@ -12,7 +12,11 @@ public interface Player { void sendMessage(Component message); - boolean hasPermission(String permission); + default boolean hasPermission(String permission) { + return hasPermission(permission, false); + } + + boolean hasPermission(String permission, boolean explicitly); String getPreffix(); diff --git a/common/src/main/java/com/mineaurion/aurionchat/common/player/PlayerFactory.java b/common/src/main/java/com/mineaurion/aurionchat/common/player/PlayerFactory.java index 95e6c3f..cf7a717 100644 --- a/common/src/main/java/com/mineaurion/aurionchat/common/player/PlayerFactory.java +++ b/common/src/main/java/com/mineaurion/aurionchat/common/player/PlayerFactory.java @@ -29,8 +29,8 @@ public String getSuffix(T player){ return luckPermsUtils != null ? luckPermsUtils.getPlayerSuffix(getUUID(player)).orElse("") : ""; }; - protected boolean hasPermission(T player, String permission) { - return luckPermsUtils.hasPermission(getUUID(player), permission); + protected boolean hasPermission(T player, String permission, boolean explicitly) { + return luckPermsUtils.hasPermission(getUUID(player), permission, explicitly); } public final Player wrap(T player){ diff --git a/sponge/src/main/java/com/mineaurion/aurionchat/sponge/PlayerFactory.java b/sponge/src/main/java/com/mineaurion/aurionchat/sponge/PlayerFactory.java index a18cb48..0587bb6 100644 --- a/sponge/src/main/java/com/mineaurion/aurionchat/sponge/PlayerFactory.java +++ b/sponge/src/main/java/com/mineaurion/aurionchat/sponge/PlayerFactory.java @@ -3,6 +3,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; import org.spongepowered.api.entity.living.player.server.ServerPlayer; +import org.spongepowered.api.util.Tristate; import java.util.UUID; @@ -28,7 +29,8 @@ protected void sendMessage(ServerPlayer player, Component message) { } @Override - protected boolean hasPermission(ServerPlayer player, String permission) { - return player.hasPermission(permission); + protected boolean hasPermission(ServerPlayer player, String permission, boolean explicitly) { + Tristate tristate = player.permissionValue(permission); + return explicitly ? tristate == Tristate.TRUE : tristate != Tristate.FALSE; } }