pass and account for the holder type when building PermissionCalculators

This commit is contained in:
Luck
2017-12-19 22:48:53 +00:00
Unverified
parent fb92fd9357
commit f793fd5010
8 changed files with 81 additions and 9 deletions
@@ -39,6 +39,7 @@ import me.lucko.luckperms.api.caching.MetaContexts;
import me.lucko.luckperms.common.caching.type.MetaAccumulator;
import me.lucko.luckperms.common.caching.type.MetaCache;
import me.lucko.luckperms.common.caching.type.PermissionCache;
import me.lucko.luckperms.common.calculators.PermissionCalculatorMetadata;
import me.lucko.luckperms.common.config.ConfigKeys;
import me.lucko.luckperms.common.metastacking.SimpleMetaStack;
import me.lucko.luckperms.common.model.PermissionHolder;
@@ -85,7 +86,8 @@ public abstract class HolderCachedData<T extends PermissionHolder> implements Ca
*/
private PermissionCache calculatePermissions(@NonNull Contexts contexts, PermissionCache data) {
if (data == null) {
data = new PermissionCache(contexts, getHolderName(), holder.getPlugin().getCalculatorFactory());
PermissionCalculatorMetadata metadata = PermissionCalculatorMetadata.of(holder.getType(), getHolderName(), contexts.getContexts());
data = new PermissionCache(contexts, metadata, holder.getPlugin().getCalculatorFactory());
}
if (contexts == Contexts.allowAll()) {
@@ -61,12 +61,10 @@ public class PermissionCache implements PermissionData {
*/
private final PermissionCalculator calculator;
public PermissionCache(Contexts contexts, String friendlyName, CalculatorFactory calculatorFactory) {
public PermissionCache(Contexts contexts, PermissionCalculatorMetadata metadata, CalculatorFactory calculatorFactory) {
permissions = new ConcurrentHashMap<>();
permissionsUnmodifiable = Collections.unmodifiableMap(permissions);
PermissionCalculatorMetadata metadata = PermissionCalculatorMetadata.of(friendlyName, contexts.getContexts());
calculator = calculatorFactory.build(contexts, metadata);
calculator.updateBacking(permissions); // Initial setup.
}
@@ -29,11 +29,17 @@ import lombok.AllArgsConstructor;
import lombok.Getter;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.references.HolderType;
@Getter
@AllArgsConstructor(staticName = "of")
public class PermissionCalculatorMetadata {
/**
* The type of the object which owns the permission calculator
*/
private final HolderType holderType;
/**
* The name of the object which owns the permission calculator
*/