From 5e0b8ebdf66bda62205450fa4236a282c6254600 Mon Sep 17 00:00:00 2001 From: Luck Date: Sun, 28 Oct 2018 12:31:47 +0000 Subject: [PATCH] Include meta lookup events in verbose output --- .../calculators/BukkitCalculatorFactory.java | 4 +- .../model/permissible/LPPermissible.java | 10 +- .../permissible/MonitoredPermissibleBase.java | 14 +- .../luckperms/bukkit/vault/VaultChatHook.java | 13 +- .../bukkit/vault/VaultPermissionHook.java | 9 +- .../calculators/BungeeCalculatorFactory.java | 4 +- .../BungeePermissionCheckListener.java | 9 +- .../common/caching/AbstractCachedData.java | 18 ++- .../CacheMetadata.java} | 27 ++-- .../common/caching/GroupCachedData.java | 5 +- .../common/caching/HolderCachedData.java | 8 +- .../common/caching/UserCachedData.java | 5 +- .../common/caching/type/MetaCache.java | 46 ++++++- .../common/caching/type/PermissionCache.java | 11 +- .../common/calculators/CalculatorFactory.java | 3 +- .../calculators/PermissionCalculator.java | 11 +- .../command/access/ArgumentPermissions.java | 4 +- .../common/commands/misc/CheckCommand.java | 4 +- .../common/commands/misc/DebugCommand.java | 5 +- .../common/commands/user/UserInfo.java | 15 ++- .../luckperms/common/treeview/TreeView.java | 4 +- .../luckperms/common/verbose/CheckOrigin.java | 53 -------- .../common/verbose/VerboseFilter.java | 40 ++++-- .../common/verbose/VerboseHandler.java | 50 ++++++-- .../common/verbose/VerboseListener.java | 120 ++++++++++++------ .../common/verbose/event/MetaCheckEvent.java | 101 +++++++++++++++ .../verbose/event/PermissionCheckEvent.java | 107 ++++++++++++++++ .../VerboseEvent.java} | 45 +------ .../calculators/NukkitCalculatorFactory.java | 4 +- .../model/permissible/LPPermissible.java | 10 +- .../permissible/MonitoredPermissibleBase.java | 14 +- .../calculators/SpongeCalculatorFactory.java | 4 +- .../service/calculated/CalculatedSubject.java | 8 +- .../service/calculated/SubjectCachedData.java | 10 +- .../service/internal/HolderSubject.java | 21 +-- .../VelocityCalculatorFactory.java | 4 +- .../MonitoringPermissionCheckListener.java | 4 +- .../service/PlayerPermissionProvider.java | 4 +- 38 files changed, 552 insertions(+), 276 deletions(-) rename common/src/main/java/me/lucko/luckperms/common/{calculators/PermissionCalculatorMetadata.java => caching/CacheMetadata.java} (73%) delete mode 100644 common/src/main/java/me/lucko/luckperms/common/verbose/CheckOrigin.java create mode 100644 common/src/main/java/me/lucko/luckperms/common/verbose/event/MetaCheckEvent.java create mode 100644 common/src/main/java/me/lucko/luckperms/common/verbose/event/PermissionCheckEvent.java rename common/src/main/java/me/lucko/luckperms/common/verbose/{CheckData.java => event/VerboseEvent.java} (75%) diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculators/BukkitCalculatorFactory.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculators/BukkitCalculatorFactory.java index 02d88e2d..670457d4 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculators/BukkitCalculatorFactory.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/calculators/BukkitCalculatorFactory.java @@ -32,9 +32,9 @@ import me.lucko.luckperms.api.LookupSetting; import me.lucko.luckperms.bukkit.LPBukkitPlugin; import me.lucko.luckperms.bukkit.processors.ChildProcessor; import me.lucko.luckperms.bukkit.processors.DefaultsProcessor; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.calculators.PermissionCalculator; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.model.HolderType; import me.lucko.luckperms.common.processors.MapProcessor; @@ -50,7 +50,7 @@ public class BukkitCalculatorFactory implements CalculatorFactory { } @Override - public PermissionCalculator build(Contexts contexts, PermissionCalculatorMetadata metadata) { + public PermissionCalculator build(Contexts contexts, CacheMetadata metadata) { ImmutableList.Builder processors = ImmutableList.builder(); processors.add(new MapProcessor()); diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/model/permissible/LPPermissible.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/model/permissible/LPPermissible.java index 81abebe4..be76ec6b 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/model/permissible/LPPermissible.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/model/permissible/LPPermissible.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.contexts.ContextsSupplier; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.utils.ImmutableCollectors; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import org.bukkit.entity.Player; import org.bukkit.permissions.PermissibleBase; @@ -136,7 +136,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, CheckOrigin.PLATFORM_LOOKUP_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); return ts != Tristate.UNDEFINED || Permission.DEFAULT_PERMISSION.getValue(isOp()); } @@ -146,7 +146,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), CheckOrigin.PLATFORM_LOOKUP_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); if (ts != Tristate.UNDEFINED) { return true; } @@ -164,7 +164,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, CheckOrigin.PLATFORM_PERMISSION_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); return ts != Tristate.UNDEFINED ? ts.asBoolean() : Permission.DEFAULT_PERMISSION.getValue(isOp()); } @@ -174,7 +174,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), CheckOrigin.PLATFORM_PERMISSION_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); if (ts != Tristate.UNDEFINED) { return ts.asBoolean(); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/model/permissible/MonitoredPermissibleBase.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/model/permissible/MonitoredPermissibleBase.java index 5478cc7d..5685b9e4 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/model/permissible/MonitoredPermissibleBase.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/model/permissible/MonitoredPermissibleBase.java @@ -29,8 +29,8 @@ import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.bukkit.model.dummy.DummyPermissibleBase; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.verbose.CheckOrigin; 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; @@ -70,8 +70,8 @@ public class MonitoredPermissibleBase extends PermissibleBase { recalculatePermissions(); } - private void logCheck(CheckOrigin origin, String permission, boolean result) { - this.plugin.getVerboseHandler().offerCheckData(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result)); + 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.getPermissionRegistry().offer(permission); } @@ -86,7 +86,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } final boolean result = this.delegate.isPermissionSet(permission); - logCheck(CheckOrigin.PLATFORM_LOOKUP_CHECK, permission, result); + logCheck(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, permission, result); return result; } @@ -97,7 +97,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } final boolean result = this.delegate.isPermissionSet(permission); - logCheck(CheckOrigin.PLATFORM_LOOKUP_CHECK, permission.getName(), result); + logCheck(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, permission.getName(), result); return result; } @@ -108,7 +108,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } final boolean result = this.delegate.hasPermission(permission); - logCheck(CheckOrigin.PLATFORM_PERMISSION_CHECK, permission, result); + logCheck(PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK, permission, result); return result; } @@ -119,7 +119,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } final boolean result = this.delegate.hasPermission(permission); - logCheck(CheckOrigin.PLATFORM_PERMISSION_CHECK, permission.getName(), result); + logCheck(PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK, permission.getName(), result); return result; } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultChatHook.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultChatHook.java index 563b235e..9e8a9223 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultChatHook.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultChatHook.java @@ -41,6 +41,7 @@ import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.node.model.NodeTypes; +import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; import net.milkbowl.vault.chat.Chat; @@ -87,7 +88,7 @@ public class VaultChatHook extends AbstractVaultChat { User user = this.permissionHook.lookupUser(uuid); Contexts contexts = this.permissionHook.contextForLookup(user, world); MetaCache metaData = user.getCachedData().getMetaData(contexts); - String ret = metaData.getPrefix(); + String ret = metaData.getPrefix(MetaCheckEvent.Origin.THIRD_PARTY_API); if (log()) { logMsg("#getUserChatPrefix: %s - %s - %s", user.getPlainDisplayName(), contexts.getContexts().toMultimap(), ret); } @@ -101,7 +102,7 @@ public class VaultChatHook extends AbstractVaultChat { User user = this.permissionHook.lookupUser(uuid); Contexts contexts = this.permissionHook.contextForLookup(user, world); MetaCache metaData = user.getCachedData().getMetaData(contexts); - String ret = metaData.getSuffix(); + String ret = metaData.getSuffix(MetaCheckEvent.Origin.THIRD_PARTY_API); if (log()) { logMsg("#getUserChatSuffix: %s - %s - %s", user.getPlainDisplayName(), contexts.getContexts().toMultimap(), ret); } @@ -132,7 +133,7 @@ public class VaultChatHook extends AbstractVaultChat { User user = this.permissionHook.lookupUser(uuid); Contexts contexts = this.permissionHook.contextForLookup(user, world); MetaCache metaData = user.getCachedData().getMetaData(contexts); - String ret = metaData.getMeta().get(key); + String ret = metaData.getMetaValue(key, MetaCheckEvent.Origin.THIRD_PARTY_API); if (log()) { logMsg("#getUserMeta: %s - %s - %s - %s", user.getPlainDisplayName(), contexts.getContexts().toMultimap(), key, ret); } @@ -157,7 +158,7 @@ public class VaultChatHook extends AbstractVaultChat { } Contexts contexts = this.permissionHook.contextForLookup(null, world); MetaCache metaData = group.getCachedData().getMetaData(contexts); - String ret = metaData.getPrefix(); + String ret = metaData.getPrefix(MetaCheckEvent.Origin.THIRD_PARTY_API); if (log()) { logMsg("#getGroupPrefix: %s - %s - %s", group.getName(), contexts.getContexts().toMultimap(), ret); } @@ -173,7 +174,7 @@ public class VaultChatHook extends AbstractVaultChat { } Contexts contexts = this.permissionHook.contextForLookup(null, world); MetaCache metaData = group.getCachedData().getMetaData(contexts); - String ret = metaData.getSuffix(); + String ret = metaData.getSuffix(MetaCheckEvent.Origin.THIRD_PARTY_API); if (log()) { logMsg("#getGroupSuffix: %s - %s - %s", group.getName(), contexts.getContexts().toMultimap(), ret); } @@ -210,7 +211,7 @@ public class VaultChatHook extends AbstractVaultChat { } Contexts contexts = this.permissionHook.contextForLookup(null, world); MetaCache metaData = group.getCachedData().getMetaData(contexts); - String ret = metaData.getMeta().get(key); + String ret = metaData.getMetaValue(key, MetaCheckEvent.Origin.THIRD_PARTY_API); if (log()) { logMsg("#getGroupMeta: %s - %s - %s - %s", group.getName(), contexts.getContexts().toMultimap(), key, ret); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultPermissionHook.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultPermissionHook.java index ef549ee6..e3bb653b 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultPermissionHook.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultPermissionHook.java @@ -40,7 +40,8 @@ import me.lucko.luckperms.common.model.Group; import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.node.factory.NodeFactory; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import net.milkbowl.vault.permission.Permission; @@ -162,7 +163,7 @@ public class VaultPermissionHook extends AbstractVaultPermission { Contexts contexts = contextForLookup(user, world); PermissionCache permissionData = user.getCachedData().getPermissionData(contexts); - Tristate result = permissionData.getPermissionValue(permission, CheckOrigin.INTERNAL); + Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API); if (log()) { logMsg("#userHasPermission: %s - %s - %s - %s", user.getPlainDisplayName(), contexts.getContexts().toMultimap(), permission, result); } @@ -245,6 +246,8 @@ public class VaultPermissionHook extends AbstractVaultPermission { value = group.getPlainDisplayName(); } + this.plugin.getVerboseHandler().offerMetaCheckEvent(MetaCheckEvent.Origin.THIRD_PARTY_API, user.getPlainDisplayName(), ContextSet.empty(), "primarygroup", value); + if (log()) { logMsg("#userGetPrimaryGroup: %s - %s - %s", user.getPlainDisplayName(), world, value); } @@ -265,7 +268,7 @@ public class VaultPermissionHook extends AbstractVaultPermission { Contexts contexts = contextForLookup(null, world); PermissionCache permissionData = group.getCachedData().getPermissionData(contexts); - Tristate result = permissionData.getPermissionValue(permission, CheckOrigin.INTERNAL); + Tristate result = permissionData.getPermissionValue(permission, PermissionCheckEvent.Origin.THIRD_PARTY_API); 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/calculators/BungeeCalculatorFactory.java b/bungee/src/main/java/me/lucko/luckperms/bungee/calculators/BungeeCalculatorFactory.java index dde4894a..bfd2923c 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/calculators/BungeeCalculatorFactory.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/calculators/BungeeCalculatorFactory.java @@ -29,9 +29,9 @@ import com.google.common.collect.ImmutableList; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.bungee.LPBungeePlugin; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.calculators.PermissionCalculator; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.processors.MapProcessor; import me.lucko.luckperms.common.processors.PermissionProcessor; @@ -46,7 +46,7 @@ public class BungeeCalculatorFactory implements CalculatorFactory { } @Override - public PermissionCalculator build(Contexts contexts, PermissionCalculatorMetadata metadata) { + public PermissionCalculator build(Contexts contexts, CacheMetadata metadata) { ImmutableList.Builder processors = ImmutableList.builder(); processors.add(new MapProcessor()); 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 1c0ff96d..441396c1 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 @@ -32,7 +32,6 @@ import me.lucko.luckperms.bungee.LPBungeePlugin; import me.lucko.luckperms.bungee.event.TristateCheckEvent; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.model.User; -import me.lucko.luckperms.common.verbose.CheckOrigin; import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.event.PermissionCheckEvent; @@ -67,7 +66,7 @@ public class BungeePermissionCheckListener implements Listener { } Contexts contexts = this.plugin.getContextManager().getApplicableContexts(player); - Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), CheckOrigin.PLATFORM_PERMISSION_CHECK); + Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); 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 } @@ -93,7 +92,7 @@ public class BungeePermissionCheckListener implements Listener { } Contexts contexts = this.plugin.getContextManager().getApplicableContexts(player); - Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), CheckOrigin.PLATFORM_LOOKUP_CHECK); + Tristate result = user.getCachedData().getPermissionData(contexts).getPermissionValue(e.getPermission(), me.lucko.luckperms.common.verbose.event.PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); 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 } @@ -114,7 +113,7 @@ public class BungeePermissionCheckListener implements Listener { Tristate result = Tristate.fromBoolean(e.hasPermission()); String name = "internal/" + e.getSender().getName(); - this.plugin.getVerboseHandler().offerCheckData(CheckOrigin.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, result); this.plugin.getPermissionRegistry().offer(permission); } @@ -131,7 +130,7 @@ public class BungeePermissionCheckListener implements Listener { Tristate result = e.getResult(); String name = "internal/" + e.getSender().getName(); - this.plugin.getVerboseHandler().offerCheckData(CheckOrigin.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, result); this.plugin.getPermissionRegistry().offer(permission); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/AbstractCachedData.java b/common/src/main/java/me/lucko/luckperms/common/caching/AbstractCachedData.java index d11efa57..ce614088 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/AbstractCachedData.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/AbstractCachedData.java @@ -39,7 +39,6 @@ import me.lucko.luckperms.common.caching.type.MetaCache; import me.lucko.luckperms.common.caching.type.PermissionCache; import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.calculators.PermissionCalculator; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.metastacking.SimpleMetaStack; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -60,7 +59,7 @@ public abstract class AbstractCachedData implements CachedData { /** * The plugin instance */ - protected final LuckPermsPlugin plugin; + private final LuckPermsPlugin plugin; /** * The cache used for {@link PermissionCache} instances. @@ -80,13 +79,17 @@ public abstract class AbstractCachedData implements CachedData { this.plugin = plugin; } + public LuckPermsPlugin getPlugin() { + return this.plugin; + } + /** - * Returns a {@link PermissionCalculatorMetadata} instance for the given {@link Contexts}. + * Returns a {@link CacheMetadata} instance for the given {@link Contexts}. * - * @param contexts the contexts the permission calculator is for + * @param contexts the contexts the cache is for * @return the metadata instance */ - protected abstract PermissionCalculatorMetadata getMetadataForContexts(Contexts contexts); + protected abstract CacheMetadata getMetadataForContexts(Contexts contexts); /** * Gets the {@link CalculatorFactory} used to build {@link PermissionCalculator}s. @@ -146,7 +149,7 @@ public abstract class AbstractCachedData implements CachedData { Objects.requireNonNull(contexts, "contexts"); if (data == null) { - PermissionCalculatorMetadata metadata = getMetadataForContexts(contexts); + CacheMetadata metadata = getMetadataForContexts(contexts); data = new PermissionCache(contexts, metadata, getCalculatorFactory()); } @@ -170,7 +173,8 @@ public abstract class AbstractCachedData implements CachedData { Objects.requireNonNull(contexts, "contexts"); if (data == null) { - data = new MetaCache(contexts); + CacheMetadata metadata = getMetadataForContexts(contexts.getContexts()); + data = new MetaCache(contexts, metadata); } MetaAccumulator accumulator = newAccumulator(contexts); diff --git a/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculatorMetadata.java b/common/src/main/java/me/lucko/luckperms/common/caching/CacheMetadata.java similarity index 73% rename from common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculatorMetadata.java rename to common/src/main/java/me/lucko/luckperms/common/caching/CacheMetadata.java index 6d7fdb4c..9c0e92a2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculatorMetadata.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/CacheMetadata.java @@ -23,27 +23,29 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.calculators; +package me.lucko.luckperms.common.caching; +import me.lucko.luckperms.api.caching.CachedDataContainer; import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.common.model.HolderType; /** - * Metadata about a given {@link PermissionCalculator}. + * Metadata about a given {@link CachedDataContainer}. */ -public class PermissionCalculatorMetadata { - - public static PermissionCalculatorMetadata of(HolderType holderType, String objectName, ContextSet context) { - return new PermissionCalculatorMetadata(holderType, objectName, context); - } +public class CacheMetadata { /** - * The type of the object which owns the permission calculator + * The cached data instance which creates this container + */ + private final AbstractCachedData parentContainer; + + /** + * The type of the object which owns the cache */ private final HolderType holderType; /** - * The name of the object which owns the permission calculator + * The name of the object which owns the cache */ private final String objectName; @@ -52,12 +54,17 @@ public class PermissionCalculatorMetadata { */ private final ContextSet context; - private PermissionCalculatorMetadata(HolderType holderType, String objectName, ContextSet context) { + public CacheMetadata(AbstractCachedData parentContainer, HolderType holderType, String objectName, ContextSet context) { + this.parentContainer = parentContainer; this.holderType = holderType; this.objectName = objectName; this.context = context; } + public AbstractCachedData getParentContainer() { + return this.parentContainer; + } + public HolderType getHolderType() { return this.holderType; } diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/GroupCachedData.java b/common/src/main/java/me/lucko/luckperms/common/caching/GroupCachedData.java index b831c6f4..a0ab48ee 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/GroupCachedData.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/GroupCachedData.java @@ -27,7 +27,6 @@ package me.lucko.luckperms.common.caching; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.caching.GroupData; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.model.Group; import me.lucko.luckperms.common.model.HolderType; @@ -41,7 +40,7 @@ public class GroupCachedData extends HolderCachedData implements GroupDat } @Override - protected PermissionCalculatorMetadata getMetadataForContexts(Contexts contexts) { - return PermissionCalculatorMetadata.of(HolderType.GROUP, this.holder.getPlainDisplayName(), contexts.getContexts()); + protected CacheMetadata getMetadataForContexts(Contexts contexts) { + return new CacheMetadata(this, HolderType.GROUP, this.holder.getPlainDisplayName(), contexts.getContexts()); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/HolderCachedData.java b/common/src/main/java/me/lucko/luckperms/common/caching/HolderCachedData.java index 85605183..33519a33 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/HolderCachedData.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/HolderCachedData.java @@ -51,22 +51,22 @@ public abstract class HolderCachedData extends Abstr @Override protected CalculatorFactory getCalculatorFactory() { - return this.plugin.getCalculatorFactory(); + return getPlugin().getCalculatorFactory(); } @Override protected MetaContexts getDefaultMetaContexts(Contexts contexts) { - return this.plugin.getContextManager().formMetaContexts(contexts); + return getPlugin().getContextManager().formMetaContexts(contexts); } @Override protected Map resolvePermissions() { - return this.holder.exportPermissions(true, this.plugin.getConfiguration().get(ConfigKeys.APPLYING_SHORTHAND)); + return this.holder.exportPermissions(true, getPlugin().getConfiguration().get(ConfigKeys.APPLYING_SHORTHAND)); } @Override protected Map resolvePermissions(Contexts contexts) { - return this.holder.exportPermissions(contexts, true, this.plugin.getConfiguration().get(ConfigKeys.APPLYING_SHORTHAND)); + return this.holder.exportPermissions(contexts, true, getPlugin().getConfiguration().get(ConfigKeys.APPLYING_SHORTHAND)); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/UserCachedData.java b/common/src/main/java/me/lucko/luckperms/common/caching/UserCachedData.java index ba0dbd5f..b591a9f2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/UserCachedData.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/UserCachedData.java @@ -27,7 +27,6 @@ package me.lucko.luckperms.common.caching; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.caching.UserData; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.model.HolderType; import me.lucko.luckperms.common.model.User; @@ -41,7 +40,7 @@ public class UserCachedData extends HolderCachedData implements UserData { } @Override - protected PermissionCalculatorMetadata getMetadataForContexts(Contexts contexts) { - return PermissionCalculatorMetadata.of(HolderType.USER, this.holder.getPlainDisplayName(), contexts.getContexts()); + protected CacheMetadata getMetadataForContexts(Contexts contexts) { + return new CacheMetadata(this, HolderType.USER, this.holder.getPlainDisplayName(), contexts.getContexts()); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/type/MetaCache.java b/common/src/main/java/me/lucko/luckperms/common/caching/type/MetaCache.java index 1c30f164..e6409fc8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/type/MetaCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/type/MetaCache.java @@ -34,7 +34,11 @@ import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.caching.MetaContexts; import me.lucko.luckperms.api.caching.MetaData; import me.lucko.luckperms.api.metastacking.MetaStackDefinition; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.metastacking.MetaStack; +import me.lucko.luckperms.common.node.model.NodeTypes; +import me.lucko.luckperms.common.verbose.VerboseHandler; +import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; import org.checkerframework.checker.nullness.qual.NonNull; @@ -52,6 +56,11 @@ public class MetaCache implements MetaData { */ private final MetaContexts metaContexts; + /** + * The metadata for this cache + */ + private final CacheMetadata metadata; + private ListMultimap metaMultimap = ImmutableListMultimap.of(); private Map meta = ImmutableMap.of(); private SortedMap prefixes = ImmutableSortedMap.of(); @@ -59,8 +68,9 @@ public class MetaCache implements MetaData { private MetaStack prefixStack = null; private MetaStack suffixStack = null; - public MetaCache(MetaContexts metaContexts) { + public MetaCache(MetaContexts metaContexts, CacheMetadata metadata) { this.metaContexts = metaContexts; + this.metadata = metadata; } public void loadMeta(MetaAccumulator meta) { @@ -90,14 +100,34 @@ public class MetaCache implements MetaData { @Override public String getPrefix() { + return getPrefix(MetaCheckEvent.Origin.LUCKPERMS_API); + } + + public String getPrefix(MetaCheckEvent.Origin origin) { MetaStack prefixStack = this.prefixStack; - return prefixStack == null ? null : prefixStack.toFormattedString(); + String value = prefixStack == null ? null : prefixStack.toFormattedString(); + + // log this meta lookup to the verbose handler + VerboseHandler verboseHandler = this.metadata.getParentContainer().getPlugin().getVerboseHandler(); + verboseHandler.offerMetaCheckEvent(origin, this.metadata.getObjectName(), this.metadata.getContext(), NodeTypes.PREFIX_KEY, String.valueOf(value)); + + return value; } @Override public String getSuffix() { + return getSuffix(MetaCheckEvent.Origin.LUCKPERMS_API); + } + + public String getSuffix(MetaCheckEvent.Origin origin) { MetaStack suffixStack = this.suffixStack; - return suffixStack == null ? null : suffixStack.toFormattedString(); + String value = suffixStack == null ? null : suffixStack.toFormattedString(); + + // log this meta lookup to the verbose handler + VerboseHandler verboseHandler = this.metadata.getParentContainer().getPlugin().getVerboseHandler(); + verboseHandler.offerMetaCheckEvent(origin, this.metadata.getObjectName(), this.metadata.getContext(), NodeTypes.SUFFIX_KEY, String.valueOf(value)); + + return value; } @Override @@ -130,6 +160,16 @@ public class MetaCache implements MetaData { return this.meta; } + public String getMetaValue(String key, MetaCheckEvent.Origin origin) { + String value = this.meta.get(key); + + // log this meta lookup to the verbose handler + VerboseHandler verboseHandler = this.metadata.getParentContainer().getPlugin().getVerboseHandler(); + verboseHandler.offerMetaCheckEvent(origin, this.metadata.getObjectName(), this.metadata.getContext(), key, String.valueOf(value)); + + return value; + } + @Override public @NonNull SortedMap getPrefixes() { return this.prefixes; diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/type/PermissionCache.java b/common/src/main/java/me/lucko/luckperms/common/caching/type/PermissionCache.java index 0c6f6c43..a4ca46d2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/type/PermissionCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/type/PermissionCache.java @@ -28,10 +28,10 @@ package me.lucko.luckperms.common.caching.type; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.caching.PermissionData; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.calculators.PermissionCalculator; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import org.checkerframework.checker.nullness.qual.NonNull; @@ -66,7 +66,7 @@ public class PermissionCache implements PermissionData { */ private final PermissionCalculator calculator; - public PermissionCache(Contexts contexts, PermissionCalculatorMetadata metadata, CalculatorFactory calculatorFactory) { + public PermissionCache(Contexts contexts, CacheMetadata metadata, CalculatorFactory calculatorFactory) { this.contexts = contexts; this.permissions = new ConcurrentHashMap<>(); this.permissionsUnmodifiable = Collections.unmodifiableMap(this.permissions); @@ -107,10 +107,10 @@ public class PermissionCache implements PermissionData { if (permission == null) { throw new NullPointerException("permission"); } - return this.calculator.getPermissionValue(permission, CheckOrigin.API); + return this.calculator.getPermissionValue(permission, PermissionCheckEvent.Origin.LUCKPERMS_API); } - public Tristate getPermissionValue(String permission, CheckOrigin origin) { + public Tristate getPermissionValue(String permission, PermissionCheckEvent.Origin origin) { if (permission == null) { throw new NullPointerException("permission"); } @@ -121,4 +121,5 @@ public class PermissionCache implements PermissionData { public @NonNull Contexts getContexts() { return this.contexts; } + } diff --git a/common/src/main/java/me/lucko/luckperms/common/calculators/CalculatorFactory.java b/common/src/main/java/me/lucko/luckperms/common/calculators/CalculatorFactory.java index 8ad36d70..7e0904ff 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculators/CalculatorFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/calculators/CalculatorFactory.java @@ -26,6 +26,7 @@ package me.lucko.luckperms.common.calculators; import me.lucko.luckperms.api.Contexts; +import me.lucko.luckperms.common.caching.CacheMetadata; /** * Creates a calculator instance given a set of contexts @@ -39,6 +40,6 @@ public interface CalculatorFactory { * @param metadata the calculator metadata * @return a permission calculator instance */ - PermissionCalculator build(Contexts contexts, PermissionCalculatorMetadata metadata); + PermissionCalculator build(Contexts contexts, CacheMetadata metadata); } diff --git a/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculator.java b/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculator.java index b10d3275..c7790d43 100644 --- a/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculator.java +++ b/common/src/main/java/me/lucko/luckperms/common/calculators/PermissionCalculator.java @@ -31,9 +31,10 @@ import com.github.benmanes.caffeine.cache.LoadingCache; import com.google.common.collect.ImmutableList; import me.lucko.luckperms.api.Tristate; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.processors.PermissionProcessor; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import org.checkerframework.checker.nullness.qual.NonNull; @@ -53,7 +54,7 @@ public class PermissionCalculator implements CacheLoader { /** * Info about the nature of this calculator. */ - private final PermissionCalculatorMetadata metadata; + private final CacheMetadata metadata; /** * The processors which back this calculator @@ -65,7 +66,7 @@ public class PermissionCalculator implements CacheLoader { */ private final LoadingCache lookupCache = Caffeine.newBuilder().build(this); - public PermissionCalculator(LuckPermsPlugin plugin, PermissionCalculatorMetadata metadata, ImmutableList processors) { + public PermissionCalculator(LuckPermsPlugin plugin, CacheMetadata metadata, ImmutableList processors) { this.plugin = plugin; this.metadata = metadata; this.processors = processors; @@ -80,7 +81,7 @@ public class PermissionCalculator implements CacheLoader { * @param origin marks where this check originated from * @return the result */ - public Tristate getPermissionValue(String permission, CheckOrigin origin) { + public Tristate getPermissionValue(String permission, PermissionCheckEvent.Origin origin) { // convert the permission to lowercase, as all values in the backing map are also lowercase. // this allows fast case insensitive lookups permission = permission.toLowerCase(); @@ -89,7 +90,7 @@ public class PermissionCalculator implements CacheLoader { Tristate result = this.lookupCache.get(permission); // log this permission lookup to the verbose handler - this.plugin.getVerboseHandler().offerCheckData(origin, this.metadata.getObjectName(), this.metadata.getContext(), permission, result); + this.plugin.getVerboseHandler().offerPermissionCheckEvent(origin, this.metadata.getObjectName(), this.metadata.getContext(), permission, result); // return the result return result; 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 aa507d81..bf3deb3e 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 @@ -37,7 +37,7 @@ import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import java.util.Map; import java.util.function.BiFunction; @@ -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), CheckOrigin.INTERNAL).asBoolean(); + return !permissionData.getPermissionValue(NodeFactory.groupNode(targetGroupName), PermissionCheckEvent.Origin.INTERNAL).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 b4c20c24..924b8661 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 @@ -41,7 +41,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.utils.Predicates; import me.lucko.luckperms.common.utils.Uuids; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import java.util.List; import java.util.UUID; @@ -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, CheckOrigin.INTERNAL); + Tristate tristate = user.getCachedData().getPermissionData(plugin.getContextForUser(user).orElse(plugin.getContextManager().getStaticContexts())).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL); 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/commands/misc/DebugCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/misc/DebugCommand.java index 7cd90e1b..5c56c505 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/misc/DebugCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/misc/DebugCommand.java @@ -50,6 +50,7 @@ import me.lucko.luckperms.common.utils.Predicates; import me.lucko.luckperms.common.utils.gson.GsonProvider; import me.lucko.luckperms.common.utils.gson.JArray; import me.lucko.luckperms.common.utils.gson.JObject; +import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; import me.lucko.luckperms.common.web.Pastebin; import me.lucko.luckperms.common.web.StandardPastebin; @@ -239,8 +240,8 @@ public class DebugCommand extends SingleCommand { private static JObject serializeMetaData(MetaCache metaData) { return new JObject() - .add("prefix", metaData.getPrefix()) - .add("suffix", metaData.getSuffix()) + .add("prefix", metaData.getPrefix(MetaCheckEvent.Origin.INTERNAL)) + .add("suffix", metaData.getSuffix(MetaCheckEvent.Origin.INTERNAL)) .add("prefixes", () -> { JArray prefixes = new JArray(); for (Map.Entry entry : metaData.getPrefixes().entrySet()) { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserInfo.java index 49063f73..55418a62 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserInfo.java @@ -29,8 +29,8 @@ import com.google.common.collect.ListMultimap; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Node; -import me.lucko.luckperms.api.caching.MetaData; import me.lucko.luckperms.api.context.ContextSet; +import me.lucko.luckperms.common.caching.type.MetaCache; import me.lucko.luckperms.common.command.CommandResult; import me.lucko.luckperms.common.command.abstraction.SubCommand; import me.lucko.luckperms.common.command.access.ArgumentPermissions; @@ -44,6 +44,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.utils.DurationFormatter; import me.lucko.luckperms.common.utils.Predicates; +import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; import java.util.List; import java.util.Set; @@ -110,12 +111,14 @@ public class UserInfo extends SubCommand { .collect(Collectors.joining(" ")); } - MetaData data = user.getCachedData().getMetaData(contexts); - if (data.getPrefix() != null) { - prefix = "&f\"" + data.getPrefix() + "&f\""; + MetaCache data = user.getCachedData().getMetaData(contexts); + String prefixValue = data.getPrefix(MetaCheckEvent.Origin.INTERNAL); + if (prefixValue != null) { + prefix = "&f\"" + prefixValue + "&f\""; } - if (data.getSuffix() != null) { - suffix = "&f\"" + data.getSuffix() + "&f\""; + String sussexValue = data.getSuffix(MetaCheckEvent.Origin.INTERNAL); + if (sussexValue != null) { + suffix = "&f\"" + sussexValue + "&f\""; } ListMultimap metaMap = data.getMetaMultimap(); 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 28f365ff..18882bf8 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 @@ -32,7 +32,7 @@ import me.lucko.luckperms.common.caching.type.PermissionCache; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.utils.gson.JObject; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.common.web.StandardPastebin; import java.text.SimpleDateFormat; @@ -150,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, CheckOrigin.INTERNAL).name().toLowerCase()); + checks.add(permission, checker.getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL).name().toLowerCase()); } } else { checks = null; diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/CheckOrigin.java b/common/src/main/java/me/lucko/luckperms/common/verbose/CheckOrigin.java deleted file mode 100644 index 1b4792a1..00000000 --- a/common/src/main/java/me/lucko/luckperms/common/verbose/CheckOrigin.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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.verbose; - -/** - * Represents the origin of a permission check - */ -public enum CheckOrigin { - - /** - * Indicates the check was caused by a 'hasPermission' check on the platform - */ - PLATFORM_PERMISSION_CHECK, - - /** - * Indicates the check was caused by a 'hasPermissionSet' type check on the platform - */ - PLATFORM_LOOKUP_CHECK, - - /** - * Indicates the check was caused by an API call - */ - API, - - /** - * Indicates the check was caused by a LuckPerms internal - */ - INTERNAL - -} 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 300f51c3..732f12b8 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 @@ -28,6 +28,9 @@ package me.lucko.luckperms.common.verbose; import com.google.common.collect.ImmutableList; import me.lucko.luckperms.common.utils.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 java.util.List; import java.util.StringTokenizer; @@ -137,7 +140,7 @@ public final class VerboseFilter { * @param data the check data * @return if the check data passes the filter */ - public boolean evaluate(CheckData data) { + public boolean evaluate(VerboseEvent data) { if (this.expression.isEmpty()) { return true; } @@ -201,10 +204,10 @@ public final class VerboseFilter { /** * Returns the value of this token when part of an evaluated expression * - * @param data the data which an expression is being formed for + * @param event the data which an expression is being formed for * @return the value to be used as part of the evaluated expression */ - String forExpression(CheckData data); + String forExpression(VerboseEvent event); /** * Returns a 'dummy' value for this token in order to build a test @@ -235,7 +238,7 @@ public final class VerboseFilter { } @Override - public String forExpression(CheckData data) { + public String forExpression(VerboseEvent event) { return this.string; } @@ -257,7 +260,7 @@ public final class VerboseFilter { * * The check data will be deemed a "match" if: * - the target of the check is equal to the value of the token - * - the permission being checked for starts with the value of the token + * - the permission/meta key being checked for starts with the value of the token * - the result of the check is equal to the value of the token */ private static final class VariableToken implements Token { @@ -268,12 +271,27 @@ public final class VerboseFilter { } @Override - public String forExpression(CheckData data) { - return Boolean.toString( - data.getCheckTarget().equalsIgnoreCase(this.value) || - data.getPermission().toLowerCase().startsWith(this.value.toLowerCase()) || - data.getResult().name().equalsIgnoreCase(this.value) - ); + public String forExpression(VerboseEvent event) { + if (event instanceof PermissionCheckEvent) { + PermissionCheckEvent permissionEvent = (PermissionCheckEvent) event; + return Boolean.toString( + permissionEvent.getCheckTarget().equalsIgnoreCase(this.value) || + permissionEvent.getPermission().toLowerCase().startsWith(this.value.toLowerCase()) || + permissionEvent.getResult().name().equalsIgnoreCase(this.value) + ); + } + + if (event instanceof MetaCheckEvent) { + MetaCheckEvent metaEvent = (MetaCheckEvent) event; + return Boolean.toString( + metaEvent.getCheckTarget().equalsIgnoreCase(this.value) || + metaEvent.getKey().toLowerCase().startsWith(this.value.toLowerCase()) || + metaEvent.getResult().equalsIgnoreCase(this.value) + ); + } + + throw new IllegalArgumentException("Unknown event type: " + event); + } @Override 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 9f3d2b1f..441eac62 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 @@ -30,6 +30,9 @@ import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.common.plugin.scheduler.SchedulerAdapter; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.utils.RepeatingTask; +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 java.util.Map; import java.util.Queue; @@ -39,15 +42,15 @@ import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.TimeUnit; /** - * Accepts {@link CheckData} and passes it onto registered {@link VerboseListener}s. + * Accepts {@link VerboseEvent}s and passes them onto registered {@link VerboseListener}s. */ public class VerboseHandler extends RepeatingTask { // the listeners currently registered private final Map listeners; - // a queue of check data - private final Queue queue; + // a queue of events + private final Queue queue; // if there are any listeners currently registered private boolean listening = false; @@ -59,18 +62,18 @@ public class VerboseHandler extends RepeatingTask { } /** - * Offers check data to the handler, to be eventually passed onto listeners. + * Offers permission check data to the handler, to be eventually passed onto listeners. * *

The check data is added to a queue to be processed later, to avoid blocking * the main thread each time a permission check is made.

* - * @param checkOrigin the origin of the check + * @param origin the origin of the check * @param checkTarget the target of the permission check * @param checkContext the contexts where the check occurred * @param permission the permission which was checked for * @param result the result of the permission check */ - public void offerCheckData(CheckOrigin checkOrigin, String checkTarget, ContextSet checkContext, String permission, Tristate result) { + public void offerPermissionCheckEvent(PermissionCheckEvent.Origin origin, String checkTarget, ContextSet checkContext, String permission, Tristate result) { // don't bother even processing the check if there are no listeners registered if (!this.listening) { return; @@ -80,7 +83,32 @@ public class VerboseHandler extends RepeatingTask { StackTraceElement[] trace = new Exception().getStackTrace(); // add the check data to a queue to be processed later. - this.queue.offer(new CheckData(checkOrigin, checkTarget, checkContext.makeImmutable(), trace, permission, result)); + this.queue.offer(new PermissionCheckEvent(origin, checkTarget, checkContext.makeImmutable(), trace, permission, result)); + } + + /** + * Offers meta check data to the handler, to be eventually passed onto listeners. + * + *

The check data is added to a queue to be processed later, to avoid blocking + * the main thread each time a meta check is made.

+ * + * @param origin the origin of the check + * @param checkTarget the target of the meta check + * @param checkContext the contexts where the check occurred + * @param key the meta key which was checked for + * @param result the result of the meta check + */ + public void offerMetaCheckEvent(MetaCheckEvent.Origin origin, String checkTarget, ContextSet checkContext, String key, String result) { + // don't bother even processing the check if there are no listeners registered + if (!this.listening) { + return; + } + + //noinspection ThrowableNotThrown + StackTraceElement[] trace = new Exception().getStackTrace(); + + // add the check data to a queue to be processed later. + this.queue.offer(new MetaCheckEvent(origin, checkTarget, checkContext.makeImmutable(), trace, key, result)); } /** @@ -113,7 +141,7 @@ public class VerboseHandler extends RepeatingTask { // remove listeners where the sender is no longer valid this.listeners.values().removeIf(l -> !l.getNotifiedSender().isValid()); - // handle all checks in the queue + // handle all events in the queue flush(); // update listening state @@ -121,12 +149,12 @@ public class VerboseHandler extends RepeatingTask { } /** - * Flushes the current check data to the listeners. + * Flushes the pending events to listeners. */ public synchronized void flush() { - for (CheckData e; (e = this.queue.poll()) != null; ) { + for (VerboseEvent e; (e = this.queue.poll()) != null; ) { for (VerboseListener listener : this.listeners.values()) { - listener.acceptData(e); + listener.acceptEvent(e); } } } 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 1ba48d27..c4f3d748 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 @@ -37,6 +37,9 @@ import me.lucko.luckperms.common.utils.StackTracePrinter; import me.lucko.luckperms.common.utils.TextUtils; import me.lucko.luckperms.common.utils.gson.JArray; import me.lucko.luckperms.common.utils.gson.JObject; +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.StandardPastebin; import net.kyori.text.TextComponent; @@ -50,7 +53,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Consumer; /** - * Accepts and processes {@link CheckData}, passed from the {@link VerboseHandler}. + * Accepts and processes {@link VerboseEvent}, passed from the {@link VerboseHandler}. */ public class VerboseListener { private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); @@ -64,7 +67,6 @@ public class VerboseListener { private static final StackTracePrinter FILTERING_PRINTER = StackTracePrinter.builder() .ignoreClassStartingWith("me.lucko.luckperms.") - .ignoreClassStartingWith("com.github.benmanes.caffeine") .ignoreClass("java.util.concurrent.CompletableFuture") .ignoreClass("java.util.concurrent.ConcurrentHashMap") .build(); @@ -93,13 +95,13 @@ public class VerboseListener { private final VerboseFilter filter; // if we should notify the sender private final boolean notify; - // the number of checks we have processed + // the number of events we have processed private final AtomicInteger counter = new AtomicInteger(0); - // the number of checks we have processed and accepted, based on the filter rules for this + // the number of events we have processed and accepted, based on the filter rules for this // listener private final AtomicInteger matchedCounter = new AtomicInteger(0); - // the checks which passed the filter, up to a max size of #DATA_TRUNCATION - private final List results = new ArrayList<>(DATA_TRUNCATION / 10); + // the events which passed the filter, up to a max size of #DATA_TRUNCATION + private final List results = new ArrayList<>(DATA_TRUNCATION / 10); public VerboseListener(Sender notifiedSender, VerboseFilter filter, boolean notify) { this.notifiedSender = notifiedSender; @@ -108,16 +110,16 @@ public class VerboseListener { } /** - * Accepts and processes check data. + * Accepts and processes verbose events. * - * @param data the data to process + * @param event the event to process */ - public void acceptData(CheckData data) { + public void acceptEvent(VerboseEvent event) { // increment handled counter this.counter.incrementAndGet(); // check if the data passes our filter - if (!this.filter.evaluate(data)) { + if (!this.filter.evaluate(event)) { return; } @@ -126,47 +128,84 @@ public class VerboseListener { // record the check, if we have space for it if (this.results.size() < DATA_TRUNCATION) { - this.results.add(data); + this.results.add(event); } // handle notifications if (this.notify) { - sendNotification(data); + sendNotification(event); } } - private void sendNotification(CheckData data) { + private void sendNotification(VerboseEvent event) { if (this.notifiedSender.isConsole()) { // just send as a raw message - Message.VERBOSE_LOG.send(this.notifiedSender, - data.getCheckTarget(), - data.getPermission(), - getTristateColor(data.getResult()), - data.getResult().name().toLowerCase() - ); + if (event instanceof PermissionCheckEvent) { + PermissionCheckEvent permissionEvent = (PermissionCheckEvent) event; + Message.VERBOSE_LOG.send(this.notifiedSender, + permissionEvent.getCheckTarget(), + permissionEvent.getPermission(), + getTristateColor(permissionEvent.getResult()), + permissionEvent.getResult().name().toLowerCase() + ); + } else if (event instanceof MetaCheckEvent) { + MetaCheckEvent metaEvent = (MetaCheckEvent) event; + Message.VERBOSE_LOG.send(this.notifiedSender, + metaEvent.getCheckTarget(), + metaEvent.getKey() + " (meta)", + "&7", + metaEvent.getResult() + ); + } else { + throw new IllegalArgumentException("Unknown event type: " + event); + } return; } - // form a hoverevent from the check trace - TextComponent textComponent = Message.VERBOSE_LOG.asComponent(this.notifiedSender.getPlugin().getLocaleManager(), - data.getCheckTarget(), - data.getPermission(), - getTristateColor(data.getResult()), - data.getResult().name().toLowerCase() - ); + // form a text component from the check trace + TextComponent textComponent; - // build the text + if (event instanceof PermissionCheckEvent) { + PermissionCheckEvent permissionEvent = (PermissionCheckEvent) event; + textComponent = Message.VERBOSE_LOG.asComponent(this.notifiedSender.getPlugin().getLocaleManager(), + permissionEvent.getCheckTarget(), + permissionEvent.getPermission(), + getTristateColor(permissionEvent.getResult()), + permissionEvent.getResult().name().toLowerCase() + ); + } else if (event instanceof MetaCheckEvent) { + MetaCheckEvent metaEvent = (MetaCheckEvent) event; + textComponent = Message.VERBOSE_LOG.asComponent(this.notifiedSender.getPlugin().getLocaleManager(), + metaEvent.getCheckTarget(), + metaEvent.getKey() + " (meta)", + "&7", + metaEvent.getResult() + ); + } else { + throw new IllegalArgumentException("Unknown event type: " + event); + } + + // build the hover text List hover = new ArrayList<>(); - hover.add("&bOrigin: &2" + data.getCheckOrigin().name()); - hover.add("&bContext: &r" + MessageUtils.contextSetToString(this.notifiedSender.getPlugin().getLocaleManager(), data.getCheckContext())); + + if (event instanceof PermissionCheckEvent) { + PermissionCheckEvent permissionEvent = (PermissionCheckEvent) event; + hover.add("&bOrigin: &2" + permissionEvent.getOrigin().name()); + } + if (event instanceof MetaCheckEvent) { + MetaCheckEvent metaEvent = (MetaCheckEvent) event; + hover.add("&bOrigin: &2" + metaEvent.getOrigin().name()); + } + + hover.add("&bContext: &r" + MessageUtils.contextSetToString(this.notifiedSender.getPlugin().getLocaleManager(), event.getCheckContext())); hover.add("&bTrace: &r"); Consumer printer = StackTracePrinter.elementToString(str -> hover.add("&7" + str)); int overflow; - if (data.getCheckOrigin() == CheckOrigin.API || data.getCheckOrigin() == CheckOrigin.INTERNAL) { - overflow = CHAT_UNFILTERED_PRINTER.process(data.getCheckTrace(), printer); + if (shouldFilterStackTrace(event)) { + overflow = CHAT_FILTERED_PRINTER.process(event.getCheckTrace(), printer); } else { - overflow = CHAT_FILTERED_PRINTER.process(data.getCheckTrace(), printer); + overflow = CHAT_UNFILTERED_PRINTER.process(event.getCheckTrace(), printer); } if (overflow != 0) { hover.add("&f... and " + overflow + " more"); @@ -178,6 +217,15 @@ public class VerboseListener { this.notifiedSender.sendMessage(text); } + private static boolean shouldFilterStackTrace(VerboseEvent event) { + if (event instanceof PermissionCheckEvent) { + PermissionCheckEvent permissionEvent = (PermissionCheckEvent) event; + return permissionEvent.getOrigin() == PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK || + permissionEvent.getOrigin() == PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK; + } + return false; + } + /** * Uploads the captured data in this listener to a paste and returns the url * @@ -217,12 +265,8 @@ public class VerboseListener { .add("truncated", truncated); JArray data = new JArray(); - for (CheckData c : this.results) { - if (c.getCheckOrigin() == CheckOrigin.API || c.getCheckOrigin() == CheckOrigin.INTERNAL) { - data.add(c.toJson(WEB_UNFILTERED_PRINTER)); - } else { - data.add(c.toJson(WEB_FILTERED_PRINTER)); - } + for (VerboseEvent events : this.results) { + data.add(events.toJson(shouldFilterStackTrace(events) ? WEB_FILTERED_PRINTER : WEB_UNFILTERED_PRINTER)); } this.results.clear(); diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/event/MetaCheckEvent.java b/common/src/main/java/me/lucko/luckperms/common/verbose/event/MetaCheckEvent.java new file mode 100644 index 00000000..3db2fdcb --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/event/MetaCheckEvent.java @@ -0,0 +1,101 @@ +/* + * 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.verbose.event; + +import me.lucko.luckperms.api.context.ImmutableContextSet; +import me.lucko.luckperms.common.utils.gson.JObject; + +public class MetaCheckEvent extends VerboseEvent { + + /** + * The origin of the check + */ + private final Origin origin; + + /** + * The meta key which was checked for + */ + private final String key; + + /** + * The result of the meta check + */ + private final String result; + + public MetaCheckEvent(Origin origin, String checkTarget, ImmutableContextSet checkContext, StackTraceElement[] checkTrace, String key, String result) { + super(checkTarget, checkContext, checkTrace); + this.origin = origin; + this.key = key; + this.result = result; + } + + public Origin getOrigin() { + return this.origin; + } + + public String getKey() { + return this.key; + } + + public String getResult() { + return this.result; + } + + @Override + protected void serializeTo(JObject object) { + object.add("type", "meta") + .add("key", this.key) + .add("result", this.result) + .add("origin", this.origin.name().toLowerCase()); + } + + /** + * Represents the origin of a meta check + */ + public enum Origin { + + /** + * Indicates the check was caused by a lookup in a platform API + */ + PLATFORM_API, + + /** + * Indicates the check was caused by a 3rd party API call + */ + THIRD_PARTY_API, + + /** + * Indicates the check was caused by a LuckPerms API call + */ + LUCKPERMS_API, + + /** + * Indicates the check was caused by a LuckPerms internal + */ + INTERNAL + + } +} 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 new file mode 100644 index 00000000..31c031b5 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/event/PermissionCheckEvent.java @@ -0,0 +1,107 @@ +/* + * 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.verbose.event; + +import me.lucko.luckperms.api.Tristate; +import me.lucko.luckperms.api.context.ImmutableContextSet; +import me.lucko.luckperms.common.utils.gson.JObject; + +public class PermissionCheckEvent extends VerboseEvent { + + /** + * The origin of the check + */ + private final Origin origin; + + /** + * The permission which was checked for + */ + private final String permission; + + /** + * The result of the permission check + */ + private final Tristate result; + + public PermissionCheckEvent(Origin origin, String checkTarget, ImmutableContextSet checkContext, StackTraceElement[] checkTrace, String permission, Tristate result) { + super(checkTarget, checkContext, checkTrace); + this.origin = origin; + this.permission = permission; + this.result = result; + } + + public Origin getOrigin() { + return this.origin; + } + + public String getPermission() { + return this.permission; + } + + public Tristate 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()); + } + + /** + * Represents the origin of a permission check + */ + public enum Origin { + + /** + * Indicates the check was caused by a 'hasPermission' check on the platform + */ + PLATFORM_PERMISSION_CHECK, + + /** + * Indicates the check was caused by a 'hasPermissionSet' type check on the platform + */ + PLATFORM_LOOKUP_CHECK, + + /** + * Indicates the check was caused by a 3rd party API call + */ + THIRD_PARTY_API, + + /** + * Indicates the check was caused by an LuckPerms API call + */ + LUCKPERMS_API, + + /** + * Indicates the check was caused by a LuckPerms internal + */ + INTERNAL + + } +} diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/CheckData.java b/common/src/main/java/me/lucko/luckperms/common/verbose/event/VerboseEvent.java similarity index 75% rename from common/src/main/java/me/lucko/luckperms/common/verbose/CheckData.java rename to common/src/main/java/me/lucko/luckperms/common/verbose/event/VerboseEvent.java index 8c0a6619..31507bc9 100644 --- a/common/src/main/java/me/lucko/luckperms/common/verbose/CheckData.java +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/event/VerboseEvent.java @@ -23,11 +23,10 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.verbose; +package me.lucko.luckperms.common.verbose.event; import com.google.gson.JsonObject; -import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ImmutableContextSet; import me.lucko.luckperms.common.utils.StackTracePrinter; import me.lucko.luckperms.common.utils.gson.JArray; @@ -36,14 +35,9 @@ import me.lucko.luckperms.common.utils.gson.JObject; import java.util.Map; /** - * Holds the data from a permission check + * Represents a verbose event. */ -public class CheckData { - - /** - * The origin of the check - */ - private final CheckOrigin checkOrigin; +public abstract class VerboseEvent { /** * The name of the entity which was checked @@ -60,27 +54,10 @@ public class CheckData { */ private final StackTraceElement[] checkTrace; - /** - * The permission which was checked for - */ - private final String permission; - - /** - * The result of the permission check - */ - private final Tristate result; - - public CheckData(CheckOrigin checkOrigin, String checkTarget, ImmutableContextSet checkContext, StackTraceElement[] checkTrace, String permission, Tristate result) { - this.checkOrigin = checkOrigin; + protected VerboseEvent(String checkTarget, ImmutableContextSet checkContext, StackTraceElement[] checkTrace) { this.checkTarget = checkTarget; this.checkContext = checkContext; this.checkTrace = checkTrace; - this.permission = permission; - this.result = result; - } - - public CheckOrigin getCheckOrigin() { - return this.checkOrigin; } public String getCheckTarget() { @@ -95,29 +72,21 @@ public class CheckData { return this.checkTrace; } - public String getPermission() { - return this.permission; - } - - public Tristate getResult() { - return this.result; - } + protected abstract void serializeTo(JObject object); private JObject formBaseJson() { return new JObject() .add("who", new JObject() .add("identifier", this.checkTarget) ) - .add("permission", this.permission) - .add("result", this.result.name().toLowerCase()) - .add("origin", this.checkOrigin.name().toLowerCase()) .add("context", new JArray() .consume(arr -> { for (Map.Entry contextPair : this.checkContext.toSet()) { arr.add(new JObject().add("key", contextPair.getKey()).add("value", contextPair.getValue())); } }) - ); + ) + .consume(this::serializeTo); } public JsonObject toJson() { diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculators/NukkitCalculatorFactory.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculators/NukkitCalculatorFactory.java index 75742462..ccbf7fba 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculators/NukkitCalculatorFactory.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/calculators/NukkitCalculatorFactory.java @@ -29,9 +29,9 @@ import com.google.common.collect.ImmutableList; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.LookupSetting; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.calculators.PermissionCalculator; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.model.HolderType; import me.lucko.luckperms.common.processors.MapProcessor; @@ -50,7 +50,7 @@ public class NukkitCalculatorFactory implements CalculatorFactory { } @Override - public PermissionCalculator build(Contexts contexts, PermissionCalculatorMetadata metadata) { + public PermissionCalculator build(Contexts contexts, CacheMetadata metadata) { ImmutableList.Builder processors = ImmutableList.builder(); processors.add(new MapProcessor()); diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/model/permissible/LPPermissible.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/model/permissible/LPPermissible.java index 183e7d00..49331288 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/model/permissible/LPPermissible.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/model/permissible/LPPermissible.java @@ -32,7 +32,7 @@ import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.contexts.ContextsSupplier; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.utils.ImmutableCollectors; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.nukkit.LPNukkitPlugin; import me.lucko.luckperms.nukkit.model.PermissionDefault; @@ -137,7 +137,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, CheckOrigin.PLATFORM_LOOKUP_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); return ts != Tristate.UNDEFINED || PermissionDefault.OP.getValue(isOp()); } @@ -147,7 +147,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), CheckOrigin.PLATFORM_LOOKUP_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); if (ts != Tristate.UNDEFINED) { return true; } @@ -166,7 +166,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, CheckOrigin.PLATFORM_PERMISSION_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); return ts != Tristate.UNDEFINED ? ts.asBoolean() : PermissionDefault.OP.getValue(isOp()); } @@ -176,7 +176,7 @@ public class LPPermissible extends PermissibleBase { throw new NullPointerException("permission"); } - Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), CheckOrigin.PLATFORM_PERMISSION_CHECK); + Tristate ts = this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission.getName(), PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK); if (ts != Tristate.UNDEFINED) { return ts.asBoolean(); } diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/model/permissible/MonitoredPermissibleBase.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/model/permissible/MonitoredPermissibleBase.java index 11a1fdc3..11e4240a 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/model/permissible/MonitoredPermissibleBase.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/model/permissible/MonitoredPermissibleBase.java @@ -28,8 +28,8 @@ package me.lucko.luckperms.nukkit.model.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.CheckOrigin; import me.lucko.luckperms.common.verbose.VerboseHandler; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.nukkit.model.dummy.DummyPermissibleBase; import cn.nukkit.permission.PermissibleBase; @@ -70,8 +70,8 @@ public class MonitoredPermissibleBase extends PermissibleBase { recalculatePermissions(); } - private void logCheck(CheckOrigin origin, String permission, boolean result) { - this.plugin.getVerboseHandler().offerCheckData(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result)); + 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.getPermissionRegistry().offer(permission); } @@ -86,7 +86,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } final boolean result = this.delegate.isPermissionSet(permission); - logCheck(CheckOrigin.PLATFORM_LOOKUP_CHECK, permission, result); + logCheck(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, permission, result); return result; } @@ -97,7 +97,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } final boolean result = this.delegate.isPermissionSet(permission); - logCheck(CheckOrigin.PLATFORM_LOOKUP_CHECK, permission.getName(), result); + logCheck(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, permission.getName(), result); return result; } @@ -108,7 +108,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } final boolean result = this.delegate.hasPermission(permission); - logCheck(CheckOrigin.PLATFORM_PERMISSION_CHECK, permission, result); + logCheck(PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK, permission, result); return result; } @@ -119,7 +119,7 @@ public class MonitoredPermissibleBase extends PermissibleBase { } final boolean result = this.delegate.hasPermission(permission); - logCheck(CheckOrigin.PLATFORM_PERMISSION_CHECK, permission.getName(), result); + logCheck(PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK, permission.getName(), result); return result; } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/calculators/SpongeCalculatorFactory.java b/sponge/src/main/java/me/lucko/luckperms/sponge/calculators/SpongeCalculatorFactory.java index e6e15d53..5c4bc6ad 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/calculators/SpongeCalculatorFactory.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/calculators/SpongeCalculatorFactory.java @@ -28,9 +28,9 @@ package me.lucko.luckperms.sponge.calculators; import com.google.common.collect.ImmutableList; import me.lucko.luckperms.api.Contexts; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.calculators.PermissionCalculator; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.processors.MapProcessor; import me.lucko.luckperms.common.processors.PermissionProcessor; @@ -49,7 +49,7 @@ public class SpongeCalculatorFactory implements CalculatorFactory { } @Override - public PermissionCalculator build(Contexts contexts, PermissionCalculatorMetadata metadata) { + public PermissionCalculator build(Contexts contexts, CacheMetadata metadata) { ImmutableList.Builder processors = ImmutableList.builder(); processors.add(new MapProcessor()); diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubject.java index 4dd88588..16c35834 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubject.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubject.java @@ -33,7 +33,8 @@ import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.api.context.ImmutableContextSet; import me.lucko.luckperms.common.caching.type.MetaAccumulator; import me.lucko.luckperms.common.graph.TraversalAlgorithm; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.sponge.LPSpongePlugin; import me.lucko.luckperms.sponge.service.inheritance.SubjectInheritanceGraph; import me.lucko.luckperms.sponge.service.inheritance.SubjectInheritanceGraphs; @@ -294,7 +295,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, CheckOrigin.INTERNAL); + return this.cachedData.getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.INTERNAL); } @Override @@ -310,8 +311,7 @@ public abstract class CalculatedSubject implements LPSubject { @Override public Optional getOption(ImmutableContextSet contexts, String key) { Contexts lookupContexts = Contexts.of(contexts, Contexts.global().getSettings()); - Map meta = this.cachedData.getMetaData(lookupContexts).getMeta(); - return Optional.ofNullable(meta.get(key)); + return Optional.ofNullable(this.cachedData.getMetaData(lookupContexts).getMetaValue(key, MetaCheckEvent.Origin.PLATFORM_API)); } @Override diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/SubjectCachedData.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/SubjectCachedData.java index 1548711c..c9393f6b 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/SubjectCachedData.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/SubjectCachedData.java @@ -31,10 +31,10 @@ import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.caching.MetaContexts; import me.lucko.luckperms.api.metastacking.MetaStackDefinition; import me.lucko.luckperms.common.caching.AbstractCachedData; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.caching.type.MetaAccumulator; import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.calculators.PermissionCalculator; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.metastacking.SimpleMetaStackDefinition; import me.lucko.luckperms.common.metastacking.StandardStackElements; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -60,8 +60,8 @@ public class SubjectCachedData extends AbstractCachedData implements CalculatorF } @Override - protected PermissionCalculatorMetadata getMetadataForContexts(Contexts contexts) { - return PermissionCalculatorMetadata.of(null, this.subject.getParentCollection().getIdentifier() + "/" + this.subject.getIdentifier(), contexts.getContexts()); + protected CacheMetadata getMetadataForContexts(Contexts contexts) { + return new CacheMetadata(this, null, this.subject.getParentCollection().getIdentifier() + "/" + this.subject.getIdentifier(), contexts.getContexts()); } @Override @@ -95,7 +95,7 @@ public class SubjectCachedData extends AbstractCachedData implements CalculatorF } @Override - public PermissionCalculator build(Contexts contexts, PermissionCalculatorMetadata metadata) { + public PermissionCalculator build(Contexts contexts, CacheMetadata metadata) { ImmutableList.Builder processors = ImmutableList.builder(); processors.add(new MapProcessor()); processors.add(new SpongeWildcardProcessor()); @@ -105,6 +105,6 @@ public class SubjectCachedData extends AbstractCachedData implements CalculatorF processors.add(new FixedDefaultsProcessor(this.subject.getService(), contexts.getContexts().makeImmutable(), this.subject.getDefaults())); } - return new PermissionCalculator(this.plugin, metadata, processors.build()); + return new PermissionCalculator(getPlugin(), metadata, processors.build()); } } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/internal/HolderSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/internal/HolderSubject.java index 0b31728b..9acd320d 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/internal/HolderSubject.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/internal/HolderSubject.java @@ -29,8 +29,8 @@ import com.google.common.collect.ImmutableList; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Tristate; -import me.lucko.luckperms.api.caching.MetaData; import me.lucko.luckperms.api.context.ImmutableContextSet; +import me.lucko.luckperms.common.caching.type.MetaCache; import me.lucko.luckperms.common.graph.TraversalAlgorithm; import me.lucko.luckperms.common.inheritance.InheritanceGraph; import me.lucko.luckperms.common.model.Group; @@ -38,7 +38,8 @@ import me.lucko.luckperms.common.model.NodeMapType; import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.node.model.NodeTypes; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.MetaCheckEvent; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.sponge.LPSpongePlugin; import me.lucko.luckperms.sponge.model.SpongeGroup; import me.lucko.luckperms.sponge.service.LuckPermsService; @@ -110,7 +111,7 @@ public abstract class HolderSubject implements LPSub @Override public Tristate getPermissionValue(ImmutableContextSet contexts, String permission) { Contexts lookupContexts = this.plugin.getContextManager().formContexts(contexts); - return this.parent.getCachedData().getPermissionData(lookupContexts).getPermissionValue(permission, CheckOrigin.PLATFORM_LOOKUP_CHECK); + return this.parent.getCachedData().getPermissionData(lookupContexts).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK); } @Override @@ -137,20 +138,22 @@ public abstract class HolderSubject implements LPSub @Override public Optional getOption(ImmutableContextSet contexts, String s) { - MetaData data = this.parent.getCachedData().getMetaData(this.plugin.getContextManager().formContexts(contexts)); + MetaCache data = this.parent.getCachedData().getMetaData(this.plugin.getContextManager().formContexts(contexts)); if (s.equalsIgnoreCase(NodeTypes.PREFIX_KEY)) { - if (data.getPrefix() != null) { - return Optional.of(data.getPrefix()); + String prefix = data.getPrefix(MetaCheckEvent.Origin.PLATFORM_API); + if (prefix != null) { + return Optional.of(prefix); } } if (s.equalsIgnoreCase(NodeTypes.SUFFIX_KEY)) { - if (data.getSuffix() != null) { - return Optional.of(data.getSuffix()); + String suffix = data.getSuffix(MetaCheckEvent.Origin.PLATFORM_API); + if (suffix != null) { + return Optional.of(suffix); } } - String val = data.getMeta().get(s); + String val = data.getMetaValue(s, MetaCheckEvent.Origin.PLATFORM_API); if (val != null) { return Optional.of(val); } diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/calculators/VelocityCalculatorFactory.java b/velocity/src/main/java/me/lucko/luckperms/velocity/calculators/VelocityCalculatorFactory.java index bf26534d..5b192c85 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/calculators/VelocityCalculatorFactory.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/calculators/VelocityCalculatorFactory.java @@ -28,9 +28,9 @@ package me.lucko.luckperms.velocity.calculators; import com.google.common.collect.ImmutableList; import me.lucko.luckperms.api.Contexts; +import me.lucko.luckperms.common.caching.CacheMetadata; import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.calculators.PermissionCalculator; -import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.processors.MapProcessor; import me.lucko.luckperms.common.processors.PermissionProcessor; @@ -46,7 +46,7 @@ public class VelocityCalculatorFactory implements CalculatorFactory { } @Override - public PermissionCalculator build(Contexts contexts, PermissionCalculatorMetadata metadata) { + public PermissionCalculator build(Contexts contexts, CacheMetadata metadata) { ImmutableList.Builder processors = ImmutableList.builder(); processors.add(new MapProcessor()); 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 94efb5c7..449a94ea 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 @@ -35,7 +35,7 @@ import com.velocitypowered.api.proxy.Player; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import me.lucko.luckperms.velocity.LPVelocityPlugin; import me.lucko.luckperms.velocity.service.CompatibilityUtil; @@ -89,7 +89,7 @@ public class MonitoringPermissionCheckListener { Tristate result = CompatibilityUtil.convertTristate(setting); String name = "internal/" + this.name; - MonitoringPermissionCheckListener.this.plugin.getVerboseHandler().offerCheckData(CheckOrigin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, result); + MonitoringPermissionCheckListener.this.plugin.getVerboseHandler().offerPermissionCheckEvent(PermissionCheckEvent.Origin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, 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 d4b88719..62e34fac 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 @@ -34,7 +34,7 @@ import com.velocitypowered.api.proxy.Player; import me.lucko.luckperms.common.contexts.ContextsSupplier; import me.lucko.luckperms.common.model.User; -import me.lucko.luckperms.common.verbose.CheckOrigin; +import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent; import org.checkerframework.checker.nullness.qual.NonNull; @@ -57,6 +57,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, CheckOrigin.PLATFORM_PERMISSION_CHECK)); + return CompatibilityUtil.convertTristate(this.user.getCachedData().getPermissionData(this.contextsSupplier.getContexts()).getPermissionValue(permission, PermissionCheckEvent.Origin.PLATFORM_PERMISSION_CHECK)); } }