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 9e8a9223..7abca978 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 @@ -133,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.getMetaValue(key, MetaCheckEvent.Origin.THIRD_PARTY_API); + String ret = metaData.getMeta(MetaCheckEvent.Origin.THIRD_PARTY_API).get(key); if (log()) { logMsg("#getUserMeta: %s - %s - %s - %s", user.getPlainDisplayName(), contexts.getContexts().toMultimap(), key, ret); } @@ -211,7 +211,7 @@ public class VaultChatHook extends AbstractVaultChat { } Contexts contexts = this.permissionHook.contextForLookup(null, world); MetaCache metaData = group.getCachedData().getMetaData(contexts); - String ret = metaData.getMetaValue(key, MetaCheckEvent.Origin.THIRD_PARTY_API); + String ret = metaData.getMeta(MetaCheckEvent.Origin.THIRD_PARTY_API).get(key); if (log()) { logMsg("#getGroupMeta: %s - %s - %s - %s", group.getName(), contexts.getContexts().toMultimap(), key, ret); } 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 e6409fc8..0a7f4471 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 @@ -25,6 +25,8 @@ package me.lucko.luckperms.common.caching.type; +import com.google.common.collect.ForwardingListMultimap; +import com.google.common.collect.ForwardingMap; import com.google.common.collect.ImmutableListMultimap; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedMap; @@ -152,22 +154,20 @@ public class MetaCache implements MetaData { @Override public @NonNull ListMultimap getMetaMultimap() { - return this.metaMultimap; + return getMetaMultimap(MetaCheckEvent.Origin.LUCKPERMS_API); + } + + public ListMultimap getMetaMultimap(MetaCheckEvent.Origin origin) { + return new VerboseLoggedMetaMultimap(origin); } @Override public @NonNull Map getMeta() { - return this.meta; + return getMeta(MetaCheckEvent.Origin.LUCKPERMS_API); } - 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; + public Map getMeta(MetaCheckEvent.Origin origin) { + return new VerboseLoggedMetaMap(origin); } @Override @@ -180,4 +180,54 @@ public class MetaCache implements MetaData { return this.suffixes; } + private final class VerboseLoggedMetaMap extends ForwardingMap { + private final MetaCheckEvent.Origin origin; + + private VerboseLoggedMetaMap(MetaCheckEvent.Origin origin) { + this.origin = origin; + } + + @Override + protected Map delegate() { + return MetaCache.this.meta; + } + + @Override + public String get(Object key) { + String value = super.get(key); + + // log this meta lookup to the verbose handler + VerboseHandler verboseHandler = MetaCache.this.metadata.getParentContainer().getPlugin().getVerboseHandler(); + verboseHandler.offerMetaCheckEvent(this.origin, MetaCache.this.metadata.getObjectName(), MetaCache.this.metadata.getContext(), (String) key, String.valueOf(value)); + + return value; + } + } + + private final class VerboseLoggedMetaMultimap extends ForwardingListMultimap { + private final MetaCheckEvent.Origin origin; + + private VerboseLoggedMetaMultimap(MetaCheckEvent.Origin origin) { + this.origin = origin; + } + + @Override + protected ListMultimap delegate() { + return MetaCache.this.metaMultimap; + } + + @Override + public List get(String key) { + List values = super.get(key); + + // log this meta lookup to the verbose handler + VerboseHandler verboseHandler = MetaCache.this.metadata.getParentContainer().getPlugin().getVerboseHandler(); + for (String value : values) { + verboseHandler.offerMetaCheckEvent(this.origin, MetaCache.this.metadata.getObjectName(), MetaCache.this.metadata.getContext(), key, String.valueOf(value)); + } + + return values; + } + } + } 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 5c56c505..dbb01fca 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 @@ -264,14 +264,14 @@ public class DebugCommand extends SingleCommand { }) .add("meta", () -> { JObject metaMap = new JObject(); - for (Map.Entry entry : metaData.getMeta().entrySet()) { + for (Map.Entry entry : metaData.getMeta(MetaCheckEvent.Origin.INTERNAL).entrySet()) { metaMap.add(entry.getKey(), entry.getValue()); } return metaMap; }) .add("metaMap", () -> { JObject metaMultimap = new JObject(); - for (Map.Entry> entry : metaData.getMetaMultimap().asMap().entrySet()) { + for (Map.Entry> entry : metaData.getMetaMultimap(MetaCheckEvent.Origin.INTERNAL).asMap().entrySet()) { JArray values = new JArray(); for (String v : entry.getValue()) { values.add(v); 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 55418a62..3fda90a2 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 @@ -121,7 +121,7 @@ public class UserInfo extends SubCommand { suffix = "&f\"" + sussexValue + "&f\""; } - ListMultimap metaMap = data.getMetaMultimap(); + ListMultimap metaMap = data.getMetaMultimap(MetaCheckEvent.Origin.INTERNAL); if (!metaMap.isEmpty()) { meta = metaMap.entries().stream() .map(e -> MessageUtils.contextToString(plugin.getLocaleManager(), e.getKey(), e.getValue())) 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 16c35834..dd9c4e0d 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 @@ -311,7 +311,7 @@ public abstract class CalculatedSubject implements LPSubject { @Override public Optional getOption(ImmutableContextSet contexts, String key) { Contexts lookupContexts = Contexts.of(contexts, Contexts.global().getSettings()); - return Optional.ofNullable(this.cachedData.getMetaData(lookupContexts).getMetaValue(key, MetaCheckEvent.Origin.PLATFORM_API)); + return Optional.ofNullable(this.cachedData.getMetaData(lookupContexts).getMeta(MetaCheckEvent.Origin.PLATFORM_API).get(key)); } @Override 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 9acd320d..71c267b7 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 @@ -153,7 +153,7 @@ public abstract class HolderSubject implements LPSub } } - String val = data.getMetaValue(s, MetaCheckEvent.Origin.PLATFORM_API); + String val = data.getMeta(MetaCheckEvent.Origin.PLATFORM_API).get(s); if (val != null) { return Optional.of(val); }