Fix getting primary groups for offline users

This commit is contained in:
Luck 2017-04-15 20:32:03 +01:00
parent fe5554ffb1
commit a27436b086
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B
7 changed files with 38 additions and 8 deletions

View File

@ -277,7 +277,10 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin {
contextManager = new ContextManager<>(); contextManager = new ContextManager<>();
worldCalculator = new WorldCalculator(this); worldCalculator = new WorldCalculator(this);
contextManager.registerCalculator(worldCalculator); contextManager.registerCalculator(worldCalculator);
contextManager.registerCalculator(new StaticCalculator<>(getConfiguration()));
StaticCalculator<Player> staticCalculator = new StaticCalculator<>(getConfiguration());
contextManager.registerCalculator(staticCalculator);
contextManager.registerStaticCalculator(staticCalculator);
// Provide vault support // Provide vault support
tryVaultHook(false); tryVaultHook(false);

View File

@ -220,7 +220,10 @@ public class LPBungeePlugin extends Plugin implements LuckPermsPlugin {
contextManager = new ContextManager<>(); contextManager = new ContextManager<>();
BackendServerCalculator serverCalculator = new BackendServerCalculator(); BackendServerCalculator serverCalculator = new BackendServerCalculator();
contextManager.registerCalculator(serverCalculator); contextManager.registerCalculator(serverCalculator);
contextManager.registerCalculator(new StaticCalculator<>(configuration));
StaticCalculator<ProxiedPlayer> staticCalculator = new StaticCalculator<>(getConfiguration());
contextManager.registerCalculator(staticCalculator);
contextManager.registerStaticCalculator(staticCalculator);
// register with the LP API // register with the LP API
getLog().info("Registering API..."); getLog().info("Registering API...");

View File

@ -409,7 +409,7 @@ public enum Message {
private static String format(String s, Object... objects) { private static String format(String s, Object... objects) {
for (int i = 0; i < objects.length; i++) { for (int i = 0; i < objects.length; i++) {
Object o = objects[i]; Object o = objects[i];
s = s.replace("{" + i + "}", o.toString()); s = s.replace("{" + i + "}", String.valueOf(o));
} }
return s; return s;
} }

View File

@ -39,6 +39,7 @@ import java.util.concurrent.TimeUnit;
public class ContextManager<T> { public class ContextManager<T> {
private final List<ContextCalculator<T>> calculators = new CopyOnWriteArrayList<>(); private final List<ContextCalculator<T>> calculators = new CopyOnWriteArrayList<>();
private final List<ContextCalculator<?>> staticCalculators = new CopyOnWriteArrayList<>();
private final LoadingCache<T, ContextSet> cache = Caffeine.newBuilder() private final LoadingCache<T, ContextSet> cache = Caffeine.newBuilder()
.weakKeys() .weakKeys()
@ -61,6 +62,18 @@ public class ContextManager<T> {
calculators.add(0, calculator); calculators.add(0, calculator);
} }
public void registerStaticCalculator(ContextCalculator<?> calculator) {
staticCalculators.add(0, calculator);
}
public ContextSet getStaticContexts() {
MutableContextSet accumulator = MutableContextSet.create();
for (ContextCalculator<?> calculator : staticCalculators) {
calculator.giveApplicableContext(null, accumulator);
}
return accumulator.makeImmutable();
}
public int getCalculatorsSize() { public int getCalculatorsSize() {
return calculators.size(); return calculators.size();
} }

View File

@ -25,8 +25,11 @@
package me.lucko.luckperms.common.primarygroup; package me.lucko.luckperms.common.primarygroup;
import lombok.NonNull;
import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Contexts;
import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.Node;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.core.model.Group; import me.lucko.luckperms.common.core.model.Group;
import me.lucko.luckperms.common.core.model.User; import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.utils.ExtractedContexts; import me.lucko.luckperms.common.utils.ExtractedContexts;
@ -40,7 +43,7 @@ public class AllParentsByWeightHolder extends StoredHolder {
private String cachedValue = null; private String cachedValue = null;
private boolean useCached = false; private boolean useCached = false;
public AllParentsByWeightHolder(User user) { public AllParentsByWeightHolder(@NonNull User user) {
super(user); super(user);
user.getStateListeners().add(() -> useCached = false); user.getStateListeners().add(() -> useCached = false);
} }
@ -52,7 +55,8 @@ public class AllParentsByWeightHolder extends StoredHolder {
} }
Contexts contexts = user.getPlugin().getContextForUser(user); Contexts contexts = user.getPlugin().getContextForUser(user);
cachedValue = user.resolveInheritancesAlmostEqual(ExtractedContexts.generate(contexts)).stream() ContextSet contextSet = contexts != null ? contexts.getContexts() : user.getPlugin().getContextManager().getStaticContexts();
cachedValue = user.resolveInheritancesAlmostEqual(ExtractedContexts.generate(contextSet)).stream()
.filter(Node::isGroupNode) .filter(Node::isGroupNode)
.filter(Node::getValue) .filter(Node::getValue)
.map(n -> Optional.ofNullable(user.getPlugin().getGroupManager().getIfLoaded(n.getGroupName()))) .map(n -> Optional.ofNullable(user.getPlugin().getGroupManager().getIfLoaded(n.getGroupName())))

View File

@ -25,8 +25,11 @@
package me.lucko.luckperms.common.primarygroup; package me.lucko.luckperms.common.primarygroup;
import lombok.NonNull;
import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Contexts;
import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.Node;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.core.model.Group; import me.lucko.luckperms.common.core.model.Group;
import me.lucko.luckperms.common.core.model.User; import me.lucko.luckperms.common.core.model.User;
@ -39,7 +42,7 @@ public class ParentsByWeightHolder extends StoredHolder {
private String cachedValue = null; private String cachedValue = null;
private boolean useCached = false; private boolean useCached = false;
public ParentsByWeightHolder(User user) { public ParentsByWeightHolder(@NonNull User user) {
super(user); super(user);
user.getStateListeners().add(() -> useCached = false); user.getStateListeners().add(() -> useCached = false);
} }
@ -51,7 +54,8 @@ public class ParentsByWeightHolder extends StoredHolder {
} }
Contexts contexts = user.getPlugin().getContextForUser(user); Contexts contexts = user.getPlugin().getContextForUser(user);
cachedValue = user.flattenAndMergeNodesToList(contexts.getContexts()).stream() ContextSet contextSet = contexts != null ? contexts.getContexts() : user.getPlugin().getContextManager().getStaticContexts();
cachedValue = user.flattenAndMergeNodesToList(contextSet).stream()
.filter(Node::isGroupNode) .filter(Node::isGroupNode)
.filter(Node::getValue) .filter(Node::getValue)
.map(n -> Optional.ofNullable(user.getPlugin().getGroupManager().getIfLoaded(n.getGroupName()))) .map(n -> Optional.ofNullable(user.getPlugin().getGroupManager().getIfLoaded(n.getGroupName())))

View File

@ -268,9 +268,12 @@ public class LPSpongePlugin implements LuckPermsPlugin {
cachedStateManager = new CachedStateManager(this); cachedStateManager = new CachedStateManager(this);
contextManager = new ContextManager<>(); contextManager = new ContextManager<>();
contextManager.registerCalculator(new StaticCalculator<>(configuration));
contextManager.registerCalculator(new WorldCalculator()); contextManager.registerCalculator(new WorldCalculator());
StaticCalculator<Subject> staticCalculator = new StaticCalculator<>(getConfiguration());
contextManager.registerCalculator(staticCalculator);
contextManager.registerStaticCalculator(staticCalculator);
// register the PermissionService with Sponge // register the PermissionService with Sponge
getLog().info("Registering PermissionService..."); getLog().info("Registering PermissionService...");
service = new LuckPermsService(this); service = new LuckPermsService(this);