diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/LuckPermsService.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/LuckPermsService.java index 3adafec9a..d6b8e69e4 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/LuckPermsService.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/LuckPermsService.java @@ -51,6 +51,7 @@ import me.lucko.luckperms.sponge.managers.SpongeUserManager; import me.lucko.luckperms.sponge.service.base.LPSubject; import me.lucko.luckperms.sponge.service.base.LPSubjectCollection; import me.lucko.luckperms.sponge.service.base.LPSubjectData; +import me.lucko.luckperms.sponge.service.calculated.CalculatedSubjectData; import me.lucko.luckperms.sponge.service.calculated.OptionLookup; import me.lucko.luckperms.sponge.service.calculated.PermissionLookup; import me.lucko.luckperms.sponge.service.persisted.PersistedCollection; @@ -96,6 +97,7 @@ public class LuckPermsService implements PermissionService { private final Set> localPermissionCaches; private final Set>> localParentCaches; private final Set>> localOptionCaches; + private final Set localDataCaches; @Getter(value = AccessLevel.NONE) private final LoadingCache collections = CacheBuilder.newBuilder() @@ -117,6 +119,7 @@ public class LuckPermsService implements PermissionService { localPermissionCaches = Collections.newSetFromMap(new MapMaker().weakKeys().makeMap()); localParentCaches = Collections.newSetFromMap(new MapMaker().weakKeys().makeMap()); localOptionCaches = Collections.newSetFromMap(new MapMaker().weakKeys().makeMap()); + localDataCaches = Collections.newSetFromMap(new MapMaker().weakKeys().makeMap()); storage = new SubjectStorage(new File(plugin.getDataFolder(), "local")); @@ -219,6 +222,9 @@ public class LuckPermsService implements PermissionService { for (LoadingCache c : localPermissionCaches) { c.invalidateAll(); } + for (CalculatedSubjectData subjectData : localDataCaches) { + subjectData.invalidateLookupCache(); + } } public void invalidateParentCaches() { diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubjectData.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubjectData.java index e935aa131..0c8623cd6 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubjectData.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubjectData.java @@ -125,6 +125,10 @@ public class CalculatedSubjectData implements LPSubjectData { permissionCache.cleanUp(); } + public void invalidateLookupCache() { + permissionCache.invalidateAll(); + } + public Tristate getPermissionValue(ContextSet contexts, String permission) { return permissionCache.getUnchecked(contexts).getCalculator().getPermissionValue(permission); } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/persisted/PersistedSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/persisted/PersistedSubject.java index 5aa13b787..e37e15c30 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/persisted/PersistedSubject.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/persisted/PersistedSubject.java @@ -114,6 +114,8 @@ public class PersistedSubject implements LPSubject { this.subjectData = new PersistedSubjectData(service, "local:" + containingCollection.getIdentifier() + "/" + identifier + "(p)", this); this.transientSubjectData = new CalculatedSubjectData(this, service, "local:" + containingCollection.getIdentifier() + "/" + identifier + "(t)"); + service.getLocalDataCaches().add(subjectData); + service.getLocalDataCaches().add(transientSubjectData); service.getLocalPermissionCaches().add(permissionLookupCache); service.getLocalParentCaches().add(parentLookupCache); service.getLocalOptionCaches().add(optionLookupCache);