diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculator/ChildProcessor.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculator/ChildProcessor.java index ad01a546..7eb073a9 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculator/ChildProcessor.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculator/ChildProcessor.java @@ -29,6 +29,7 @@ import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.bukkit.LPBukkitPlugin; import me.lucko.luckperms.common.calculator.processor.AbstractPermissionProcessor; import me.lucko.luckperms.common.calculator.processor.PermissionProcessor; +import me.lucko.luckperms.common.calculator.result.TristateResult; import java.util.Collections; import java.util.Map; @@ -38,6 +39,8 @@ import java.util.concurrent.ConcurrentHashMap; * Permission Processor for Bukkits "child" permission system. */ public class ChildProcessor extends AbstractPermissionProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(ChildProcessor.class); + private final LPBukkitPlugin plugin; private Map childPermissions = Collections.emptyMap(); @@ -46,8 +49,8 @@ public class ChildProcessor extends AbstractPermissionProcessor implements Permi } @Override - public Tristate hasPermission(String permission) { - return Tristate.fromNullableBoolean(this.childPermissions.get(permission)); + public TristateResult hasPermission(String permission) { + return RESULT_FACTORY.result(Tristate.fromNullableBoolean(this.childPermissions.get(permission))); } @Override diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculator/DefaultsProcessor.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculator/DefaultsProcessor.java index 96e5dffa..e8b6d27f 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculator/DefaultsProcessor.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculator/DefaultsProcessor.java @@ -28,13 +28,15 @@ package me.lucko.luckperms.bukkit.calculator; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.bukkit.LPBukkitPlugin; import me.lucko.luckperms.common.calculator.processor.PermissionProcessor; - +import me.lucko.luckperms.common.calculator.result.TristateResult; import org.bukkit.permissions.Permission; /** * Permission Processor for Bukkits "default" permission system. */ public class DefaultsProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(DefaultsProcessor.class); + private final LPBukkitPlugin plugin; private final boolean isOp; @@ -44,13 +46,16 @@ public class DefaultsProcessor implements PermissionProcessor { } @Override - public Tristate hasPermission(String permission) { + public TristateResult hasPermission(String permission) { Tristate t = this.plugin.getDefaultPermissionMap().lookupDefaultPermission(permission, this.isOp); if (t != Tristate.UNDEFINED) { - return t; + return RESULT_FACTORY.result(t, "default permission map"); } Permission defPerm = this.plugin.getPermissionMap().get(permission); - return defPerm == null ? Tristate.UNDEFINED : Tristate.fromBoolean(defPerm.getDefault().getValue(this.isOp)); + if (defPerm == null) { + return TristateResult.UNDEFINED; + } + return RESULT_FACTORY.result(Tristate.fromBoolean(defPerm.getDefault().getValue(this.isOp)), "permission map"); } } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissible.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissible.java index ee77f5aa..a463feab 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissible.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissible.java @@ -26,7 +26,6 @@ package me.lucko.luckperms.bukkit.inject.permissible; import com.google.common.collect.ImmutableList; - import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.bukkit.LPBukkitPlugin; import me.lucko.luckperms.common.config.ConfigKeys; @@ -34,7 +33,6 @@ import me.lucko.luckperms.common.context.ContextsSupplier; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.util.ImmutableCollectors; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; - import org.bukkit.entity.Player; import org.bukkit.permissions.PermissibleBase; import org.bukkit.permissions.Permission; @@ -136,7 +134,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result(); return ts != Tristate.UNDEFINED || Permission.DEFAULT_PERMISSION.getValue(isOp()); } @@ -146,7 +144,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result(); if (ts != Tristate.UNDEFINED) { return true; } @@ -164,7 +162,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result(); return ts != Tristate.UNDEFINED ? ts.asBoolean() : Permission.DEFAULT_PERMISSION.getValue(isOp()); } @@ -174,7 +172,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result(); if (ts != Tristate.UNDEFINED) { return ts.asBoolean(); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/MonitoredPermissibleBase.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/MonitoredPermissibleBase.java index ca7a3011..cd56ee93 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/MonitoredPermissibleBase.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/MonitoredPermissibleBase.java @@ -28,10 +28,10 @@ package me.lucko.luckperms.bukkit.inject.permissible; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.bukkit.inject.dummy.DummyPermissibleBase; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.verbose.VerboseHandler; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; - import org.bukkit.permissions.PermissibleBase; import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionAttachment; @@ -67,7 +67,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } private void logCheck(PermissionCheckEvent.Origin origin, String permission, boolean result) { - this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result)); + this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.name, ContextSet.empty(), permission, TristateResult.of(Tristate.fromBoolean(result))); this.plugin.getPermissionRegistry().offer(permission); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java index c172ce99..6466157a 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java @@ -26,7 +26,6 @@ package me.lucko.luckperms.bukkit.vault; import com.google.common.base.Preconditions; - import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.Tristate; @@ -43,9 +42,7 @@ import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.util.Uuids; import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; - import net.milkbowl.vault.permission.Permission; - import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -170,7 +167,7 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission { Contexts contexts = contextForLookup(user, world); PermissionCache permissionData = user.getCachedData().getPermissionData(contexts); - Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API); + Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API).result(); if (log()) { logMsg("#userHasPermission: %s - %s - %s - %s", user.getPlainDisplayName(), contexts.getContexts().toMultimap(), permission, result); } @@ -275,7 +272,7 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission { Contexts contexts = contextForLookup(null, world); PermissionCache permissionData = group.getCachedData().getPermissionData(contexts); - Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API); + Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API).result(); if (log()) { logMsg("#groupHasPermission: %s - %s - %s - %s", group.getName(), contexts.getContexts().toMultimap(), permission, result); } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeePermissionCheckListener.java b/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeePermissionCheckListener.java index 441396c1..aed81ba0 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeePermissionCheckListener.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeePermissionCheckListener.java @@ -30,9 +30,9 @@ import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.bungee.LPBungeePlugin; import me.lucko.luckperms.bungee.event.TristateCheckEvent; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.model.User; - import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.PermissionCheckEvent; import net.md_5.bungee.api.plugin.Listener; @@ -66,7 +66,7 @@ public class BungeePermissionCheckListener implements Listener { } Contexts contexts = this.plugin.getContextManager().getApplicableContexts(player); - Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); + Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result(); if (result == Tristate.UNDEFINED && this.plugin.getConfiguration().get(ConfigKeys.APPLY_BUNGEE_CONFIG_PERMISSIONS)) { return; // just use the result provided by the proxy when the event was created } @@ -92,7 +92,7 @@ public class BungeePermissionCheckListener implements Listener { } Contexts contexts = this.plugin.getContextManager().getApplicableContexts(player); - Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); + Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result(); if (result == Tristate.UNDEFINED && this.plugin.getConfiguration().get(ConfigKeys.APPLY_BUNGEE_CONFIG_PERMISSIONS)) { return; // just use the result provided by the proxy when the event was created } @@ -113,7 +113,7 @@ public class BungeePermissionCheckListener implements Listener { Tristate result = Tristate.fromBoolean(e.hasPermission()); String name = "internal/" + e.getSender().getName(); - this.plugin.getVerboseHandler().offerPermissionCheckEvent(me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK, name, ContextSet.empty(), permission, result); + this.plugin.getVerboseHandler().offerPermissionCheckEvent(me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK, name, ContextSet.empty(), permission, TristateResult.of(result)); this.plugin.getPermissionRegistry().offer(permission); } @@ -130,7 +130,7 @@ public class BungeePermissionCheckListener implements Listener { Tristate result = e.getResult(); String name = "internal/" + e.getSender().getName(); - this.plugin.getVerboseHandler().offerPermissionCheckEvent(me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, result); + this.plugin.getVerboseHandler().offerPermissionCheckEvent(me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, TristateResult.of(result)); this.plugin.getPermissionRegistry().offer(permission); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/cacheddata/type/PermissionCache.java b/common/src/main/java/me/lucko/luckperms/common/cacheddata/type/PermissionCache.java index 650a17a4..02fc698f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/cacheddata/type/PermissionCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/cacheddata/type/PermissionCache.java @@ -31,8 +31,8 @@ import me.lucko.luckperms.api.caching.PermissionData; import me.lucko.luckperms.common.cacheddata.CacheMetadata; import me.lucko.luckperms.common.calculator.CalculatorFactory; import me.lucko.luckperms.common.calculator.PermissionCalculator; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; - import org.checkerframework.checker.nullness.qual.NonNull; import java.util.Collections; @@ -102,21 +102,18 @@ public class PermissionCache implements PermissionData { return this.permissionsUnmodifiable; } - @Override - public @NonNull Tristate getPermissionValue(@NonNull String permission) { - if (permission == null) { - throw new NullPointerException("permission"); - } - return this.calculator.getPermissionValue(permission, PermissionCheckEvent.Origin.LUCKPERMS_API); - } - - public Tristate getPermissionValue(String permission, PermissionCheckEvent.Origin origin) { + public TristateResult getPermissionValue(String permission, PermissionCheckEvent.Origin origin) { if (permission == null) { throw new NullPointerException("permission"); } return this.calculator.getPermissionValue(permission, origin); } + @Override + public @NonNull Tristate getPermissionValue(@NonNull String permission) { + return getPermissionValue(permission, PermissionCheckEvent.Origin.LUCKPERMS_API).result(); + } + @Override public @NonNull Contexts getContexts() { return this.contexts; diff --git a/common/src/main/java/me/lucko/luckperms/common/calculator/PermissionCalculator.java b/common/src/main/java/me/lucko/luckperms/common/calculator/PermissionCalculator.java index 30b3b7fa..29846773 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculator/PermissionCalculator.java +++ b/common/src/main/java/me/lucko/luckperms/common/calculator/PermissionCalculator.java @@ -26,14 +26,13 @@ package me.lucko.luckperms.common.calculator; import com.google.common.collect.ImmutableList; - import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.cacheddata.CacheMetadata; import me.lucko.luckperms.common.calculator.processor.PermissionProcessor; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.util.LoadingMap; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; - import org.checkerframework.checker.nullness.qual.NonNull; import java.util.List; @@ -43,7 +42,7 @@ import java.util.function.Function; /** * Calculates and caches permissions */ -public class PermissionCalculator implements Function { +public class PermissionCalculator implements Function { /** * The plugin instance @@ -63,7 +62,7 @@ public class PermissionCalculator implements Function { /** * Loading cache for permission checks */ - private final LoadingMap lookupCache = LoadingMap.of(this); + private final LoadingMap lookupCache = LoadingMap.of(this); public PermissionCalculator(LuckPermsPlugin plugin, CacheMetadata metadata, ImmutableList processors) { this.plugin = plugin; @@ -80,9 +79,9 @@ public class PermissionCalculator implements Function { * @param origin marks where this check originated from * @return the result */ - public Tristate getPermissionValue(String permission, PermissionCheckEvent.Origin origin) { + public TristateResult getPermissionValue(String permission, PermissionCheckEvent.Origin origin) { // get the result - Tristate result = this.lookupCache.get(permission); + TristateResult result = this.lookupCache.get(permission); // log this permission lookup to the verbose handler this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.metadata.getObjectName(), this.metadata.getContext(), permission, result); @@ -92,7 +91,7 @@ public class PermissionCalculator implements Function { } @Override - public Tristate apply(@NonNull String permission) { + public TristateResult apply(@NonNull String permission) { // convert the permission to lowercase, as all values in the backing map are also lowercase. // this allows fast case insensitive lookups permission = permission.toLowerCase(); @@ -103,13 +102,13 @@ public class PermissionCalculator implements Function { this.plugin.getPermissionRegistry().offer(permission); for (PermissionProcessor processor : this.processors) { - Tristate result = processor.hasPermission(permission); - if (result != Tristate.UNDEFINED) { + TristateResult result = processor.hasPermission(permission); + if (result.result() != Tristate.UNDEFINED) { return result; } } - return Tristate.UNDEFINED; + return TristateResult.UNDEFINED; } /** diff --git a/common/src/main/java/me/lucko/luckperms/common/calculator/processor/MapProcessor.java b/common/src/main/java/me/lucko/luckperms/common/calculator/processor/MapProcessor.java index a4a281c4..cb37b563 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculator/processor/MapProcessor.java +++ b/common/src/main/java/me/lucko/luckperms/common/calculator/processor/MapProcessor.java @@ -26,12 +26,14 @@ package me.lucko.luckperms.common.calculator.processor; import me.lucko.luckperms.api.Tristate; +import me.lucko.luckperms.common.calculator.result.TristateResult; public class MapProcessor extends AbstractPermissionProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(MapProcessor.class); @Override - public Tristate hasPermission(String permission) { - return Tristate.fromNullableBoolean(this.sourceMap.get(permission)); + public TristateResult hasPermission(String permission) { + return RESULT_FACTORY.result(Tristate.fromNullableBoolean(this.sourceMap.get(permission))); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/calculator/processor/PermissionProcessor.java b/common/src/main/java/me/lucko/luckperms/common/calculator/processor/PermissionProcessor.java index a91ae790..63cf7939 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculator/processor/PermissionProcessor.java +++ b/common/src/main/java/me/lucko/luckperms/common/calculator/processor/PermissionProcessor.java @@ -25,8 +25,8 @@ package me.lucko.luckperms.common.calculator.processor; -import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.calculator.PermissionCalculator; +import me.lucko.luckperms.common.calculator.result.TristateResult; import java.util.Map; @@ -44,7 +44,7 @@ public interface PermissionProcessor { * @param permission the permission * @return a tristate */ - Tristate hasPermission(String permission); + TristateResult hasPermission(String permission); /** * Sets the source permissions which should be used by this processor diff --git a/common/src/main/java/me/lucko/luckperms/common/calculator/processor/RegexProcessor.java b/common/src/main/java/me/lucko/luckperms/common/calculator/processor/RegexProcessor.java index 4fd12b1f..38707677 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculator/processor/RegexProcessor.java +++ b/common/src/main/java/me/lucko/luckperms/common/calculator/processor/RegexProcessor.java @@ -26,9 +26,9 @@ package me.lucko.luckperms.common.calculator.processor; import com.google.common.collect.ImmutableMap; - import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.nodetype.types.RegexType; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.node.model.NodeTypes; import java.util.Collections; @@ -36,17 +36,19 @@ import java.util.Map; import java.util.regex.Pattern; public class RegexProcessor extends AbstractPermissionProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(RegexProcessor.class); + private Map regexPermissions = Collections.emptyMap(); @Override - public Tristate hasPermission(String permission) { + public TristateResult hasPermission(String permission) { for (Map.Entry e : this.regexPermissions.entrySet()) { if (e.getKey().matcher(permission).matches()) { - return Tristate.fromBoolean(e.getValue()); + return RESULT_FACTORY.result(Tristate.fromBoolean(e.getValue()), "pattern: " + e.getKey().pattern()); } } - return Tristate.UNDEFINED; + return TristateResult.UNDEFINED; } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/calculator/processor/WildcardProcessor.java b/common/src/main/java/me/lucko/luckperms/common/calculator/processor/WildcardProcessor.java index 3e3d888f..aba669cb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculator/processor/WildcardProcessor.java +++ b/common/src/main/java/me/lucko/luckperms/common/calculator/processor/WildcardProcessor.java @@ -26,23 +26,25 @@ package me.lucko.luckperms.common.calculator.processor; import com.google.common.collect.ImmutableMap; - import me.lucko.luckperms.api.Tristate; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.node.model.ImmutableNode; import java.util.Collections; import java.util.Map; public class WildcardProcessor extends AbstractPermissionProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(WildcardProcessor.class); + public static final String WILDCARD_SUFFIX = ".*"; - private static final String GLOBAL_WILDCARD = "*"; - private static final String GLOBAL_WILDCARD_WITH_QUOTES = "'*'"; + private static final String ROOT_WILDCARD = "*"; + private static final String ROOT_WILDCARD_WITH_QUOTES = "'*'"; private Map wildcardPermissions = Collections.emptyMap(); - private Tristate globalWildcardState = Tristate.UNDEFINED; + private TristateResult rootWildcardState = TristateResult.UNDEFINED; @Override - public Tristate hasPermission(String permission) { + public TristateResult hasPermission(String permission) { String node = permission; while (true) { @@ -55,12 +57,12 @@ public class WildcardProcessor extends AbstractPermissionProcessor implements Pe if (!node.isEmpty()) { Tristate t = Tristate.fromNullableBoolean(this.wildcardPermissions.get(node)); if (t != Tristate.UNDEFINED) { - return t; + return RESULT_FACTORY.result(t, "match: " + node); } } } - return this.globalWildcardState; + return this.rootWildcardState; } @Override @@ -76,11 +78,11 @@ public class WildcardProcessor extends AbstractPermissionProcessor implements Pe } this.wildcardPermissions = builder.build(); - Tristate state = Tristate.fromNullableBoolean(this.sourceMap.get(GLOBAL_WILDCARD)); + Tristate state = Tristate.fromNullableBoolean(this.sourceMap.get(ROOT_WILDCARD)); if (state == Tristate.UNDEFINED) { - state = Tristate.fromNullableBoolean(this.sourceMap.get(GLOBAL_WILDCARD_WITH_QUOTES)); + state = Tristate.fromNullableBoolean(this.sourceMap.get(ROOT_WILDCARD_WITH_QUOTES)); } - this.globalWildcardState = state; + this.rootWildcardState = RESULT_FACTORY.result(state, "root"); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/calculator/result/TristateResult.java b/common/src/main/java/me/lucko/luckperms/common/calculator/result/TristateResult.java new file mode 100644 index 00000000..310b1f56 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/calculator/result/TristateResult.java @@ -0,0 +1,109 @@ +/* + * This file is part of LuckPerms, licensed under the MIT License. + * + * Copyright (c) lucko (Luck) + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.calculator.result; + +import me.lucko.luckperms.api.Tristate; +import me.lucko.luckperms.common.calculator.PermissionCalculator; +import me.lucko.luckperms.common.calculator.processor.PermissionProcessor; + +/** + * Represents the result of a {@link PermissionCalculator} lookup. + */ +public final class TristateResult { + + public static final TristateResult UNDEFINED = new TristateResult(Tristate.UNDEFINED, null, null); + + public static TristateResult of(Tristate result, Class processorClass, String cause) { + if (result == Tristate.UNDEFINED) { + return UNDEFINED; + } + return new TristateResult(result, processorClass, cause); + } + + public static TristateResult of(Tristate result, Class processorClass) { + return of(result, processorClass, null); + } + + public static TristateResult of(Tristate result) { + return of(result, null, null); + } + + private final Tristate result; + private final Class processorClass; + private final String cause; + + private TristateResult(Tristate result, Class processorClass, String cause) { + this.result = result; + this.processorClass = processorClass; + this.cause = cause; + } + + public Tristate result() { + return this.result; + } + + public Class processorClass() { + return this.processorClass; + } + + public String cause() { + return this.cause; + } + + public static final class Factory { + private final Class processorClass; + + private final TristateResult trueResult; + private final TristateResult falseResult; + + public Factory(Class processorClass) { + this.processorClass = processorClass; + + this.trueResult = of(Tristate.TRUE, processorClass); + this.falseResult = of(Tristate.FALSE, processorClass); + } + + public TristateResult result(Tristate result) { + switch (result) { + case TRUE: + return this.trueResult; + case FALSE: + return this.falseResult; + case UNDEFINED: + return UNDEFINED; + default: + throw new AssertionError(); + } + } + + public TristateResult result(Tristate result, String cause) { + if (cause == null) { + return result(result); + } + return of(result, this.processorClass, cause); + } + } +} diff --git a/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java b/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java index 41d97ec0..56acd7ca 100644 --- a/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java +++ b/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java @@ -299,7 +299,7 @@ public final class ArgumentPermissions { } PermissionCache permissionData = user.getCachedData().getPermissionData(Contexts.of(contextSet, Contexts.global().getSettings())); - return !permissionData.getPermissionValue(NodeFactory.groupNode(targetGroupName), PermissionCheckEvent.Origin.INTERNAL).asBoolean(); + return !permissionData.getPermissionValue(NodeFactory.groupNode(targetGroupName), PermissionCheckEvent.Origin.INTERNAL).result().asBoolean(); } private ArgumentPermissions() {} diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/misc/CheckCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/misc/CheckCommand.java index 40fc53b7..7248c7c4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/misc/CheckCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/misc/CheckCommand.java @@ -70,7 +70,7 @@ public class CheckCommand extends SingleCommand { return CommandResult.STATE_ERROR; } - Tristate tristate = user.getCachedData().getPermissionData(plugin.getContextForUser(user).orElse(plugin.getContextManager().getStaticContexts())).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL); + Tristate tristate = user.getCachedData().getPermissionData(plugin.getContextForUser(user).orElse(plugin.getContextManager().getStaticContexts())).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).result(); Message.CHECK_RESULT.send(sender, user.getFormattedDisplayName(), permission, MessageUtils.formatTristate(tristate)); return CommandResult.SUCCESS; } diff --git a/common/src/main/java/me/lucko/luckperms/common/treeview/TreeView.java b/common/src/main/java/me/lucko/luckperms/common/treeview/TreeView.java index 83dfb5d7..3f4e73ba 100644 --- a/common/src/main/java/me/lucko/luckperms/common/treeview/TreeView.java +++ b/common/src/main/java/me/lucko/luckperms/common/treeview/TreeView.java @@ -27,7 +27,6 @@ package me.lucko.luckperms.common.treeview; import com.google.common.base.Splitter; import com.google.gson.JsonObject; - import me.lucko.luckperms.common.cacheddata.type.PermissionCache; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.sender.Sender; @@ -151,7 +150,7 @@ public class TreeView { checks = new JObject(); for (Map.Entry node : this.view.getNodeEndings()) { String permission = prefix + node.getValue(); - checks.add(permission, checker.getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).name().toLowerCase()); + checks.add(permission, checker.getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).result().name().toLowerCase()); } } else { checks = null; diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseFilter.java b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseFilter.java index b8d79990..921b586f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseFilter.java +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseFilter.java @@ -26,19 +26,17 @@ package me.lucko.luckperms.common.verbose; import com.google.common.collect.ImmutableList; - import me.lucko.luckperms.common.util.Scripting; import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.common.verbose.event.VerboseEvent; +import javax.script.ScriptEngine; +import javax.script.ScriptException; import java.util.List; import java.util.StringTokenizer; import java.util.stream.Collectors; -import javax.script.ScriptEngine; -import javax.script.ScriptException; - /** * Represents a verbose filter expression. * @@ -278,7 +276,7 @@ public final class VerboseFilter { this.value.equals("permission") || permissionEvent.getCheckTarget().equalsIgnoreCase(this.value) || permissionEvent.getPermission().toLowerCase().startsWith(this.value.toLowerCase()) || - permissionEvent.getResult().name().equalsIgnoreCase(this.value) + permissionEvent.getResult().result().name().equalsIgnoreCase(this.value) ); } diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseHandler.java b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseHandler.java index 3f0de026..ca753c2c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseHandler.java +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseHandler.java @@ -25,8 +25,8 @@ package me.lucko.luckperms.common.verbose; -import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.plugin.scheduler.SchedulerAdapter; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.util.RepeatingTask; @@ -73,7 +73,7 @@ public class VerboseHandler extends RepeatingTask { * @param permission the permission which was checked for * @param result the result of the permission check */ - public void offerPermissionCheckEvent(PermissionCheckEvent.Origin origin, String checkTarget, ContextSet checkContext, String permission, Tristate result) { + public void offerPermissionCheckEvent(PermissionCheckEvent.Origin origin, String checkTarget, ContextSet checkContext, String permission, TristateResult result) { // don't bother even processing the check if there are no listeners registered if (!this.listening) { return; diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java index 981c17bb..b897a586 100644 --- a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java @@ -26,7 +26,6 @@ package me.lucko.luckperms.common.verbose; import com.google.gson.JsonObject; - import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.command.CommandManager; import me.lucko.luckperms.common.command.utils.MessageUtils; @@ -41,7 +40,6 @@ import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.common.verbose.event.VerboseEvent; import me.lucko.luckperms.common.web.Bytebin; - import net.kyori.text.TextComponent; import net.kyori.text.event.HoverEvent; @@ -145,8 +143,8 @@ public class VerboseListener { Message.VERBOSE_LOG_PERMISSION.send(this.notifiedSender, permissionEvent.getCheckTarget(), permissionEvent.getPermission(), - getTristateColor(permissionEvent.getResult()), - permissionEvent.getResult().name().toLowerCase() + getTristateColor(permissionEvent.getResult().result()), + permissionEvent.getResult().result().name().toLowerCase() ); } else if (event instanceof MetaCheckEvent) { MetaCheckEvent metaEvent = (MetaCheckEvent) event; @@ -169,8 +167,8 @@ public class VerboseListener { textComponent = Message.VERBOSE_LOG_PERMISSION.asComponent(this.notifiedSender.getPlugin().getLocaleManager(), permissionEvent.getCheckTarget(), permissionEvent.getPermission(), - getTristateColor(permissionEvent.getResult()), - permissionEvent.getResult().name().toLowerCase() + getTristateColor(permissionEvent.getResult().result()), + permissionEvent.getResult().result().name().toLowerCase() ); } else if (event instanceof MetaCheckEvent) { MetaCheckEvent metaEvent = (MetaCheckEvent) event; diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/event/PermissionCheckEvent.java b/common/src/main/java/me/lucko/luckperms/common/verbose/event/PermissionCheckEvent.java index 81bad164..6b5a3885 100644 --- a/common/src/main/java/me/lucko/luckperms/common/verbose/event/PermissionCheckEvent.java +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/event/PermissionCheckEvent.java @@ -25,8 +25,8 @@ package me.lucko.luckperms.common.verbose.event; -import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ImmutableContextSet; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.util.gson.JObject; public class PermissionCheckEvent extends VerboseEvent { @@ -44,9 +44,9 @@ public class PermissionCheckEvent extends VerboseEvent { /** * The result of the permission check */ - private final Tristate result; + private final TristateResult result; - public PermissionCheckEvent(Origin origin, String checkTarget, ImmutableContextSet checkContext, StackTraceElement[] checkTrace, String permission, Tristate result) { + public PermissionCheckEvent(Origin origin, String checkTarget, ImmutableContextSet checkContext, StackTraceElement[] checkTrace, String permission, TristateResult result) { super(checkTarget, checkContext, checkTrace); this.origin = origin; this.permission = permission; @@ -61,16 +61,28 @@ public class PermissionCheckEvent extends VerboseEvent { return this.permission; } - public Tristate getResult() { + public TristateResult getResult() { return this.result; } @Override protected void serializeTo(JObject object) { - object.add("type", "permission") - .add("permission", this.permission) - .add("result", this.result.name().toLowerCase()) - .add("origin", this.origin.name().toLowerCase()); + object.add("type", "permission"); + object.add("permission", this.permission); + + object.add("result", this.result.result().name().toLowerCase()); + if (this.result.processorClass() != null || this.result.cause() != null) { + JObject resultInfo = new JObject(); + if (this.result.processorClass() != null) { + resultInfo.add("processorClass", this.result.processorClass().getName()); + } + if (this.result.cause() != null) { + resultInfo.add("cause", this.result.cause()); + } + object.add("resultInfo", resultInfo); + } + + object.add("origin", this.origin.name().toLowerCase()); } /** diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculator/ChildProcessor.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculator/ChildProcessor.java index e6ff7a6e..188f3239 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculator/ChildProcessor.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculator/ChildProcessor.java @@ -28,6 +28,7 @@ package me.lucko.luckperms.nukkit.calculator; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.calculator.processor.AbstractPermissionProcessor; import me.lucko.luckperms.common.calculator.processor.PermissionProcessor; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.nukkit.LPNukkitPlugin; import java.util.Collections; @@ -38,6 +39,8 @@ import java.util.concurrent.ConcurrentHashMap; * Permission Processor for Nukkits "child" permission system. */ public class ChildProcessor extends AbstractPermissionProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(ChildProcessor.class); + private final LPNukkitPlugin plugin; private Map childPermissions = Collections.emptyMap(); @@ -46,8 +49,8 @@ public class ChildProcessor extends AbstractPermissionProcessor implements Permi } @Override - public Tristate hasPermission(String permission) { - return Tristate.fromNullableBoolean(this.childPermissions.get(permission)); + public TristateResult hasPermission(String permission) { + return RESULT_FACTORY.result(Tristate.fromNullableBoolean(this.childPermissions.get(permission))); } @Override diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculator/DefaultsProcessor.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculator/DefaultsProcessor.java index 7cf740f8..7c17a9f5 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculator/DefaultsProcessor.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculator/DefaultsProcessor.java @@ -27,6 +27,7 @@ package me.lucko.luckperms.nukkit.calculator; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.calculator.processor.PermissionProcessor; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.nukkit.LPNukkitPlugin; import me.lucko.luckperms.nukkit.inject.PermissionDefault; @@ -34,6 +35,8 @@ import me.lucko.luckperms.nukkit.inject.PermissionDefault; * Permission Processor for Nukkits "default" permission system. */ public class DefaultsProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(DefaultsProcessor.class); + private final LPNukkitPlugin plugin; private final boolean isOp; @@ -43,13 +46,16 @@ public class DefaultsProcessor implements PermissionProcessor { } @Override - public Tristate hasPermission(String permission) { + public TristateResult hasPermission(String permission) { Tristate t = this.plugin.getDefaultPermissionMap().lookupDefaultPermission(permission, this.isOp); if (t != Tristate.UNDEFINED) { - return t; + return RESULT_FACTORY.result(t, "default permission map"); } PermissionDefault def = PermissionDefault.fromPermission(this.plugin.getPermissionMap().get(permission)); - return def == null ? Tristate.UNDEFINED : Tristate.fromBoolean(def.getValue(this.isOp)); + if (def == null) { + return TristateResult.UNDEFINED; + } + return RESULT_FACTORY.result(Tristate.fromBoolean(def.getValue(this.isOp)), "permission map"); } } diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissible.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissible.java index b2548e1a..46019043 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissible.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissible.java @@ -25,8 +25,13 @@ package me.lucko.luckperms.nukkit.inject.permissible; +import cn.nukkit.Player; +import cn.nukkit.permission.PermissibleBase; +import cn.nukkit.permission.Permission; +import cn.nukkit.permission.PermissionAttachment; +import cn.nukkit.permission.PermissionAttachmentInfo; +import cn.nukkit.plugin.Plugin; import com.google.common.collect.ImmutableList; - import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.context.ContextsSupplier; @@ -35,16 +40,8 @@ import me.lucko.luckperms.common.util.ImmutableCollectors; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.nukkit.LPNukkitPlugin; import me.lucko.luckperms.nukkit.inject.PermissionDefault; - import org.checkerframework.checker.nullness.qual.NonNull; -import cn.nukkit.Player; -import cn.nukkit.permission.PermissibleBase; -import cn.nukkit.permission.Permission; -import cn.nukkit.permission.PermissionAttachment; -import cn.nukkit.permission.PermissionAttachmentInfo; -import cn.nukkit.plugin.Plugin; - import java.lang.reflect.Field; import java.util.Collection; import java.util.Iterator; @@ -137,7 +134,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result(); return ts != Tristate.UNDEFINED || PermissionDefault.OP.getValue(isOp()); } @@ -147,7 +144,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result(); if (ts != Tristate.UNDEFINED) { return true; } @@ -166,7 +163,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result(); return ts != Tristate.UNDEFINED ? ts.asBoolean() : PermissionDefault.OP.getValue(isOp()); } @@ -176,7 +173,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result(); if (ts != Tristate.UNDEFINED) { return ts.asBoolean(); } diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/MonitoredPermissibleBase.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/MonitoredPermissibleBase.java index 353d085a..f1f33b3e 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/MonitoredPermissibleBase.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/MonitoredPermissibleBase.java @@ -25,18 +25,18 @@ package me.lucko.luckperms.nukkit.inject.permissible; -import me.lucko.luckperms.api.Tristate; -import me.lucko.luckperms.api.context.ContextSet; -import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.verbose.VerboseHandler; -import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; -import me.lucko.luckperms.nukkit.inject.dummy.DummyPermissibleBase; - import cn.nukkit.permission.PermissibleBase; import cn.nukkit.permission.Permission; import cn.nukkit.permission.PermissionAttachment; import cn.nukkit.permission.PermissionAttachmentInfo; import cn.nukkit.plugin.Plugin; +import me.lucko.luckperms.api.Tristate; +import me.lucko.luckperms.api.context.ContextSet; +import me.lucko.luckperms.common.calculator.result.TristateResult; +import me.lucko.luckperms.common.plugin.LuckPermsPlugin; +import me.lucko.luckperms.common.verbose.VerboseHandler; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; +import me.lucko.luckperms.nukkit.inject.dummy.DummyPermissibleBase; import java.util.Map; @@ -67,7 +67,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } private void logCheck(PermissionCheckEvent.Origin origin, String permission, boolean result) { - this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result)); + this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.name, ContextSet.empty(), permission, TristateResult.of(Tristate.fromBoolean(result))); this.plugin.getPermissionRegistry().offer(permission); } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/calculator/DefaultsProcessor.java b/sponge/src/main/java/me/lucko/luckperms/sponge/calculator/DefaultsProcessor.java index 59c48c21..b44fb643 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/calculator/DefaultsProcessor.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/calculator/DefaultsProcessor.java @@ -28,10 +28,13 @@ package me.lucko.luckperms.sponge.calculator; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ImmutableContextSet; import me.lucko.luckperms.common.calculator.processor.PermissionProcessor; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.sponge.service.model.LPPermissionService; import me.lucko.luckperms.sponge.service.model.LPSubject; public abstract class DefaultsProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(DefaultsProcessor.class); + protected final LPPermissionService service; private final ImmutableContextSet contexts; @@ -43,17 +46,17 @@ public abstract class DefaultsProcessor implements PermissionProcessor { protected abstract LPSubject getTypeDefaults(); @Override - public Tristate hasPermission(String permission) { + public TristateResult hasPermission(String permission) { Tristate t = getTypeDefaults().getPermissionValue(this.contexts, permission); if (t != Tristate.UNDEFINED) { - return t; + return RESULT_FACTORY.result(t, "type defaults"); } t = this.service.getRootDefaults().getPermissionValue(this.contexts, permission); if (t != Tristate.UNDEFINED) { - return t; + return RESULT_FACTORY.result(t, "root defaults"); } - return Tristate.UNDEFINED; + return TristateResult.UNDEFINED; } } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/calculator/SpongeWildcardProcessor.java b/sponge/src/main/java/me/lucko/luckperms/sponge/calculator/SpongeWildcardProcessor.java index 5f329777..d4b20452 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/calculator/SpongeWildcardProcessor.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/calculator/SpongeWildcardProcessor.java @@ -28,12 +28,14 @@ package me.lucko.luckperms.sponge.calculator; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.calculator.processor.AbstractPermissionProcessor; import me.lucko.luckperms.common.calculator.processor.PermissionProcessor; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.node.model.ImmutableNode; public class SpongeWildcardProcessor extends AbstractPermissionProcessor implements PermissionProcessor { + private static final TristateResult.Factory RESULT_FACTORY = new TristateResult.Factory(SpongeWildcardProcessor.class); @Override - public Tristate hasPermission(String permission) { + public TristateResult hasPermission(String permission) { String node = permission; while (true) { @@ -46,12 +48,12 @@ public class SpongeWildcardProcessor extends AbstractPermissionProcessor impleme if (!node.isEmpty()) { Tristate t = Tristate.fromNullableBoolean(this.sourceMap.get(node)); if (t != Tristate.UNDEFINED) { - return t; + return RESULT_FACTORY.result(t, "match: " + node); } } } - return Tristate.UNDEFINED; + return TristateResult.UNDEFINED; } } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubject.java index 32e13e71..16e6c508 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubject.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubject.java @@ -26,7 +26,6 @@ package me.lucko.luckperms.sponge.service.model.calculated; import com.google.common.collect.ImmutableList; - import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; @@ -295,7 +294,7 @@ public abstract class CalculatedSubject implements LPSubject { @Override public Tristate getPermissionValue(ImmutableContextSet contexts, String permission) { Contexts lookupContexts = Contexts.of(contexts, Contexts.global().getSettings()); - return this.cachedData.getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL); + return this.cachedData.getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).result(); } @Override diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubject.java index 8e9bbfe7..f81d6105 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubject.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubject.java @@ -26,7 +26,6 @@ package me.lucko.luckperms.sponge.service.model.permissionholder; import com.google.common.collect.ImmutableList; - import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ImmutableContextSet; @@ -46,7 +45,6 @@ import me.lucko.luckperms.sponge.service.LuckPermsService; import me.lucko.luckperms.sponge.service.ProxyFactory; import me.lucko.luckperms.sponge.service.model.LPSubject; import me.lucko.luckperms.sponge.service.model.LPSubjectReference; - import org.spongepowered.api.service.permission.PermissionService; import org.spongepowered.api.service.permission.Subject; @@ -111,7 +109,7 @@ public abstract class PermissionHolderSubject implem @Override public Tristate getPermissionValue(ImmutableContextSet contexts, String permission) { Contexts lookupContexts = this.plugin.getContextManager().formContexts(contexts); - return this.parent.getCachedData().getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); + return this.parent.getCachedData().getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK).result(); } @Override diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/listeners/MonitoringPermissionCheckListener.java b/velocity/src/main/java/me/lucko/luckperms/velocity/listeners/MonitoringPermissionCheckListener.java index 449a94ea..8260b84a 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/listeners/MonitoringPermissionCheckListener.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/listeners/MonitoringPermissionCheckListener.java @@ -32,13 +32,12 @@ import com.velocitypowered.api.permission.PermissionFunction; import com.velocitypowered.api.permission.PermissionProvider; import com.velocitypowered.api.permission.PermissionSubject; import com.velocitypowered.api.proxy.Player; - import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; +import me.lucko.luckperms.common.calculator.result.TristateResult; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.velocity.LPVelocityPlugin; import me.lucko.luckperms.velocity.service.CompatibilityUtil; - import org.checkerframework.checker.nullness.qual.NonNull; public class MonitoringPermissionCheckListener { @@ -89,7 +88,7 @@ public class MonitoringPermissionCheckListener { Tristate result = CompatibilityUtil.convertTristate(setting); String name = "internal/" + this.name; - MonitoringPermissionCheckListener.this.plugin.getVerboseHandler().offerPermissionCheckEvent(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, result); + MonitoringPermissionCheckListener.this.plugin.getVerboseHandler().offerPermissionCheckEvent(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, TristateResult.of(result)); MonitoringPermissionCheckListener.this.plugin.getPermissionRegistry().offer(permission); return setting; diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/service/PlayerPermissionProvider.java b/velocity/src/main/java/me/lucko/luckperms/velocity/service/PlayerPermissionProvider.java index bedc0dd1..c5701cc2 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/service/PlayerPermissionProvider.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/service/PlayerPermissionProvider.java @@ -31,11 +31,9 @@ import com.velocitypowered.api.permission.PermissionProvider; import com.velocitypowered.api.permission.PermissionSubject; import com.velocitypowered.api.permission.Tristate; import com.velocitypowered.api.proxy.Player; - import me.lucko.luckperms.common.context.ContextsSupplier; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; - import org.checkerframework.checker.nullness.qual.NonNull; public class PlayerPermissionProvider implements PermissionProvider, PermissionFunction { @@ -57,6 +55,6 @@ public class PlayerPermissionProvider implements PermissionProvider, PermissionF @Override public @NonNull Tristate getPermissionValue(@NonNull String permission) { - return CompatibilityUtil.convertTristate(this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK)); + return CompatibilityUtil.convertTristate(this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK).result()); } }