Changes for version 2.16

This commit is contained in:
Luck
2016-12-02 20:20:24 +00:00
Unverified
parent a063f7664d
commit 307e2b889c
264 changed files with 3450 additions and 2063 deletions
@@ -22,8 +22,10 @@
package me.lucko.luckperms.sponge;
import com.google.inject.Inject;
import lombok.Getter;
import com.google.inject.Inject;
import me.lucko.luckperms.ApiHandler;
import me.lucko.luckperms.api.Contexts;
import me.lucko.luckperms.api.LuckPermsApi;
@@ -48,7 +50,11 @@ import me.lucko.luckperms.common.storage.Storage;
import me.lucko.luckperms.common.storage.StorageFactory;
import me.lucko.luckperms.common.tasks.ExpireTemporaryTask;
import me.lucko.luckperms.common.tasks.UpdateTask;
import me.lucko.luckperms.common.utils.*;
import me.lucko.luckperms.common.utils.BufferedRequest;
import me.lucko.luckperms.common.utils.DebugHandler;
import me.lucko.luckperms.common.utils.LocaleManager;
import me.lucko.luckperms.common.utils.LogFactory;
import me.lucko.luckperms.common.utils.PermissionCache;
import me.lucko.luckperms.sponge.commands.SpongeMainCommand;
import me.lucko.luckperms.sponge.contexts.WorldCalculator;
import me.lucko.luckperms.sponge.managers.SpongeGroupManager;
@@ -56,6 +62,7 @@ import me.lucko.luckperms.sponge.managers.SpongeUserManager;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import me.lucko.luckperms.sponge.timings.LPTimings;
import me.lucko.luckperms.sponge.utils.VersionData;
import org.slf4j.Logger;
import org.spongepowered.api.Game;
import org.spongepowered.api.Sponge;
@@ -81,7 +88,12 @@ import org.spongepowered.api.text.Text;
import java.io.File;
import java.nio.file.Path;
import java.util.*;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -91,31 +103,23 @@ import java.util.stream.StreamSupport;
@Plugin(id = "luckperms", name = "LuckPerms", version = VersionData.VERSION, authors = {"Luck"}, description = "A permissions plugin")
public class LPSpongePlugin implements LuckPermsPlugin {
private final Set<UUID> ignoringLogs = ConcurrentHashMap.newKeySet();
@Inject
private Logger logger;
@Inject
private Game game;
@Inject
@ConfigDir(sharedRoot = false)
private Path configDir;
private Scheduler scheduler = Sponge.getScheduler();
@Inject
@SynchronousExecutor
private SpongeExecutorService syncExecutor;
@Inject
@AsynchronousExecutor
private SpongeExecutorService asyncExecutor;
private LPTimings timings;
private boolean lateLoad = false;
private final Set<UUID> ignoringLogs = ConcurrentHashMap.newKeySet();
private LPConfiguration configuration;
private SpongeUserManager userManager;
private SpongeGroupManager groupManager;
@@ -22,8 +22,10 @@
package me.lucko.luckperms.sponge;
import com.google.common.collect.ImmutableList;
import lombok.AllArgsConstructor;
import com.google.common.collect.ImmutableList;
import me.lucko.luckperms.api.Contexts;
import me.lucko.luckperms.common.calculators.AbstractCalculatorFactory;
import me.lucko.luckperms.common.calculators.PermissionCalculator;
@@ -22,12 +22,13 @@
package me.lucko.luckperms.sponge;
import co.aikar.timings.Timing;
import com.google.common.base.Splitter;
import me.lucko.luckperms.common.commands.CommandManager;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Patterns;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.command.CommandCallable;
import org.spongepowered.api.command.CommandException;
import org.spongepowered.api.command.CommandResult;
@@ -36,10 +37,13 @@ import org.spongepowered.api.text.Text;
import org.spongepowered.api.world.Location;
import org.spongepowered.api.world.World;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Optional;
import javax.annotation.Nullable;
import co.aikar.timings.Timing;
@SuppressWarnings("NullableProblems")
class SpongeCommand extends CommandManager implements CommandCallable {
private final LPSpongePlugin plugin;
@@ -23,11 +23,8 @@
package me.lucko.luckperms.sponge;
import com.google.common.base.Splitter;
import me.lucko.luckperms.common.config.AbstractConfiguration;
import ninja.leaping.configurate.ConfigurationNode;
import ninja.leaping.configurate.commented.CommentedConfigurationNode;
import ninja.leaping.configurate.hocon.HoconConfigurationLoader;
import ninja.leaping.configurate.loader.ConfigurationLoader;
import java.io.File;
import java.io.IOException;
@@ -39,6 +36,11 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import ninja.leaping.configurate.ConfigurationNode;
import ninja.leaping.configurate.commented.CommentedConfigurationNode;
import ninja.leaping.configurate.hocon.HoconConfigurationLoader;
import ninja.leaping.configurate.loader.ConfigurationLoader;
class SpongeConfig extends AbstractConfiguration<LPSpongePlugin> {
private ConfigurationNode root;
@@ -22,13 +22,13 @@
package me.lucko.luckperms.sponge;
import co.aikar.timings.Timing;
import me.lucko.luckperms.api.caching.UserData;
import me.lucko.luckperms.api.context.MutableContextSet;
import me.lucko.luckperms.common.constants.Message;
import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.utils.AbstractListener;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.Order;
@@ -41,6 +41,8 @@ import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import co.aikar.timings.Timing;
@SuppressWarnings("WeakerAccess")
public class SpongeListener extends AbstractListener {
private final LPSpongePlugin plugin;
@@ -25,6 +25,7 @@ package me.lucko.luckperms.sponge;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.commands.sender.SenderFactory;
import me.lucko.luckperms.common.constants.Constants;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.text.serializer.TextSerializers;
@@ -23,6 +23,7 @@
package me.lucko.luckperms.sponge.calculators;
import lombok.AllArgsConstructor;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.calculators.PermissionProcessor;
@@ -37,7 +38,7 @@ public class DefaultsProcessor implements PermissionProcessor {
@Override
public Tristate hasPermission(String permission) {
Tristate t = service.getUserSubjects().getDefaultSubject().resolve(service).getPermissionValue(contexts, permission);
Tristate t = service.getUserSubjects().getDefaultSubject().resolve(service).getPermissionValue(contexts, permission);
if (t != Tristate.UNDEFINED) {
return t;
}
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.permission.SubjectData;
import java.util.List;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.SubjectData;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.permission.SubjectData;
import java.util.List;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.permission.SubjectData;
import java.util.List;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.service.permission.PermissionService;
import org.spongepowered.api.service.permission.Subject;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.permission.SubjectData;
import java.util.List;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.service.permission.SubjectData;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.service.permission.PermissionService;
import org.spongepowered.api.service.permission.Subject;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.permission.SubjectData;
import java.util.List;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.SubjectData;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.service.permission.SubjectData;
import org.spongepowered.api.util.Tristate;
@@ -24,8 +24,14 @@ package me.lucko.luckperms.sponge.commands;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import me.lucko.luckperms.common.LuckPermsPlugin;
import me.lucko.luckperms.common.commands.*;
import me.lucko.luckperms.common.commands.Arg;
import me.lucko.luckperms.common.commands.BaseCommand;
import me.lucko.luckperms.common.commands.Command;
import me.lucko.luckperms.common.commands.CommandException;
import me.lucko.luckperms.common.commands.CommandManager;
import me.lucko.luckperms.common.commands.CommandResult;
import me.lucko.luckperms.common.commands.sender.Sender;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.common.constants.Message;
@@ -33,11 +39,16 @@ import me.lucko.luckperms.common.utils.ImmutableCollectors;
import me.lucko.luckperms.common.utils.Predicates;
import me.lucko.luckperms.sponge.LPSpongePlugin;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.service.permission.SubjectCollection;
import org.spongepowered.api.service.permission.SubjectData;
import java.util.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
@@ -22,10 +22,13 @@
package me.lucko.luckperms.sponge.commands;
import com.google.common.collect.Maps;
import lombok.experimental.UtilityClass;
import com.google.common.collect.Maps;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.util.Tristate;
@@ -23,9 +23,11 @@
package me.lucko.luckperms.sponge.contexts;
import lombok.AllArgsConstructor;
import me.lucko.luckperms.api.context.ContextCalculator;
import me.lucko.luckperms.api.context.MutableContextSet;
import me.lucko.luckperms.sponge.service.base.Util;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
@@ -23,10 +23,12 @@
package me.lucko.luckperms.sponge.contexts;
import lombok.RequiredArgsConstructor;
import me.lucko.luckperms.api.context.ContextCalculator;
import me.lucko.luckperms.api.context.MutableContextSet;
import me.lucko.luckperms.common.commands.utils.Util;
import me.lucko.luckperms.sponge.LPSpongePlugin;
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
@@ -22,14 +22,15 @@
package me.lucko.luckperms.sponge.managers;
import co.aikar.timings.Timing;
import lombok.NonNull;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.NonNull;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.core.model.Group;
@@ -43,11 +44,14 @@ import me.lucko.luckperms.sponge.service.base.LPSubject;
import me.lucko.luckperms.sponge.service.base.LPSubjectCollection;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.service.permission.PermissionService;
import java.util.Collection;
import java.util.Map;
import co.aikar.timings.Timing;
public class SpongeGroupManager implements GroupManager, LPSubjectCollection {
private final LPSpongePlugin plugin;
@@ -22,14 +22,15 @@
package me.lucko.luckperms.sponge.managers;
import co.aikar.timings.Timing;
import lombok.NonNull;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.NonNull;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.commands.utils.Util;
@@ -45,6 +46,7 @@ import me.lucko.luckperms.sponge.service.base.LPSubject;
import me.lucko.luckperms.sponge.service.base.LPSubjectCollection;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.service.permission.PermissionService;
import java.util.Collection;
@@ -52,6 +54,8 @@ import java.util.Map;
import java.util.Set;
import java.util.UUID;
import co.aikar.timings.Timing;
public class SpongeUserManager implements UserManager, LPSubjectCollection {
private final LPSpongePlugin plugin;
@@ -33,6 +33,7 @@ import me.lucko.luckperms.common.constants.Permission;
import me.lucko.luckperms.common.core.model.Group;
import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.utils.Predicates;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.plugin.PluginContainer;
import org.spongepowered.api.service.permission.PermissionService;
@@ -35,6 +35,7 @@ import me.lucko.luckperms.common.core.model.User;
import me.lucko.luckperms.common.utils.Predicates;
import me.lucko.luckperms.sponge.LPSpongePlugin;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.plugin.PluginContainer;
import org.spongepowered.api.service.permission.PermissionService;
@@ -23,6 +23,7 @@
package me.lucko.luckperms.sponge.migration;
import lombok.experimental.UtilityClass;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.core.NodeBuilder;
import me.lucko.luckperms.common.core.NodeFactory;
@@ -30,6 +31,7 @@ import me.lucko.luckperms.common.core.model.PermissionHolder;
import me.lucko.luckperms.common.utils.ExtractedContexts;
import me.lucko.luckperms.exceptions.ObjectAlreadyHasException;
import me.lucko.luckperms.sponge.service.base.Util;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.PermissionService;
import org.spongepowered.api.service.permission.Subject;
@@ -57,7 +59,8 @@ public class MigrationUtils {
for (Map.Entry<String, Boolean> perm : e.getValue().entrySet()) {
try {
holder.setPermission(new NodeBuilder(perm.getKey()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(perm.getValue()).build());
} catch (ObjectAlreadyHasException ignored) {}
} catch (ObjectAlreadyHasException ignored) {
}
}
}
@@ -76,15 +79,18 @@ public class MigrationUtils {
if (opt.getKey().equalsIgnoreCase("prefix")) {
try {
holder.setPermission(NodeFactory.makePrefixNode(100, opt.getValue()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
} catch (ObjectAlreadyHasException ignored) {}
} catch (ObjectAlreadyHasException ignored) {
}
} else if (opt.getKey().equalsIgnoreCase("suffix")) {
try {
holder.setPermission(NodeFactory.makeSuffixNode(100, opt.getValue()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
} catch (ObjectAlreadyHasException ignored) {}
} catch (ObjectAlreadyHasException ignored) {
}
} else {
try {
holder.setPermission(NodeFactory.makeMetaNode(opt.getKey(), opt.getValue()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
} catch (ObjectAlreadyHasException ignored) {}
} catch (ObjectAlreadyHasException ignored) {
}
}
}
}
@@ -110,7 +116,8 @@ public class MigrationUtils {
try {
holder.setPermission(new NodeBuilder("group." + s.getIdentifier().toLowerCase()).setServerRaw(server).setWorld(world).withExtraContext(contexts).setValue(true).build());
} catch (ObjectAlreadyHasException ignored) {}
} catch (ObjectAlreadyHasException ignored) {
}
}
}
}
@@ -22,9 +22,10 @@
package me.lucko.luckperms.sponge.model;
import co.aikar.timings.Timing;
import com.google.common.collect.ImmutableSet;
import lombok.Getter;
import com.google.common.collect.ImmutableSet;
import me.lucko.luckperms.api.LocalizedNode;
import me.lucko.luckperms.api.MetaUtils;
import me.lucko.luckperms.api.Node;
@@ -40,6 +41,7 @@ import me.lucko.luckperms.sponge.service.base.Util;
import me.lucko.luckperms.sponge.service.references.SubjectCollectionReference;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.service.permission.NodeTree;
import org.spongepowered.api.service.permission.PermissionService;
@@ -49,6 +51,8 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import co.aikar.timings.Timing;
public class SpongeGroup extends Group {
@Getter
@@ -22,9 +22,10 @@
package me.lucko.luckperms.sponge.model;
import co.aikar.timings.Timing;
import com.google.common.collect.ImmutableSet;
import lombok.Getter;
import com.google.common.collect.ImmutableSet;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.caching.MetaData;
import me.lucko.luckperms.api.context.ContextSet;
@@ -36,6 +37,7 @@ import me.lucko.luckperms.sponge.service.base.LPSubject;
import me.lucko.luckperms.sponge.service.references.SubjectCollectionReference;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.entity.living.player.Player;
@@ -45,6 +47,8 @@ import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import co.aikar.timings.Timing;
public class SpongeUser extends User {
@Getter
@@ -22,7 +22,14 @@
package me.lucko.luckperms.sponge.service;
import co.aikar.timings.Timing;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import lombok.ToString;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@@ -31,7 +38,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.MapMaker;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import lombok.*;
import me.lucko.luckperms.api.Contexts;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
@@ -50,6 +57,7 @@ import me.lucko.luckperms.sponge.service.persisted.SubjectStorage;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import me.lucko.luckperms.sponge.service.simple.SimpleCollection;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.plugin.PluginContainer;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.context.ContextCalculator;
@@ -60,9 +68,17 @@ import org.spongepowered.api.service.permission.SubjectCollection;
import org.spongepowered.api.text.Text;
import java.io.File;
import java.util.*;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import co.aikar.timings.Timing;
/**
* The LuckPerms implementation of the Sponge Permission Service
*/
@@ -197,10 +213,9 @@ public class LuckPermsService implements PermissionService {
public static class DescriptionBuilder implements PermissionDescription.Builder {
private final LuckPermsService service;
private final PluginContainer container;
private final Map<String, Tristate> roles = new HashMap<>();
private String id = null;
private Text description = null;
private final Map<String, Tristate> roles = new HashMap<>();
@Override
public PermissionDescription.Builder id(@NonNull String s) {
@@ -22,12 +22,13 @@
package me.lucko.luckperms.sponge.service;
import co.aikar.timings.Timing;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NonNull;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import me.lucko.luckperms.api.Node;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
@@ -44,12 +45,20 @@ import me.lucko.luckperms.sponge.service.base.LPSubject;
import me.lucko.luckperms.sponge.service.base.LPSubjectData;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.PermissionService;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import co.aikar.timings.Timing;
@SuppressWarnings({"OptionalGetWithoutIsPresent", "unused"})
@AllArgsConstructor
public class LuckPermsSubjectData implements LPSubjectData {
@@ -119,7 +128,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
} else {
holder.unsetTransientPermission(node);
}
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
objectSave(holder);
return true;
@@ -131,10 +141,11 @@ public class LuckPermsSubjectData implements LPSubjectData {
try {
if (enduring) {
holder.unsetPermission(node);
}else {
} else {
holder.unsetTransientPermission(node);
}
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
try {
if (enduring) {
@@ -142,7 +153,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
} else {
holder.setTransientPermission(node);
}
} catch (ObjectAlreadyHasException ignored) {}
} catch (ObjectAlreadyHasException ignored) {
}
objectSave(holder);
return true;
@@ -189,7 +201,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
} else {
holder.unsetTransientPermission(n);
}
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
});
if (holder instanceof User) {
@@ -252,7 +265,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
.withExtraContext(contexts)
.build());
}
} catch (ObjectAlreadyHasException ignored) {}
} catch (ObjectAlreadyHasException ignored) {
}
objectSave(holder);
return true;
@@ -277,7 +291,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
.withExtraContext(contexts)
.build());
}
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
objectSave(holder);
return true;
@@ -300,7 +315,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
} else {
holder.unsetTransientPermission(n);
}
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
});
if (holder instanceof User) {
@@ -343,7 +359,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
} else {
holder.unsetTransientPermission(n);
}
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
});
if (holder instanceof User) {
@@ -429,7 +446,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
toRemove.forEach(n -> {
try {
holder.unsetPermission(n);
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
});
try {
@@ -438,7 +456,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
} else {
holder.setTransientPermission(NodeFactory.makeMetaNode(key, value).withExtraContext(context).build());
}
} catch (ObjectAlreadyHasException ignored) {}
} catch (ObjectAlreadyHasException ignored) {
}
objectSave(holder);
return true;
}
@@ -454,7 +473,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
toRemove.forEach(n -> {
try {
holder.unsetPermission(n);
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
});
objectSave(holder);
@@ -493,7 +513,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
} else {
holder.unsetTransientPermission(n);
}
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
});
objectSave(holder);
@@ -515,7 +536,8 @@ public class LuckPermsSubjectData implements LPSubjectData {
} else {
holder.unsetTransientPermission(n);
}
} catch (ObjectLacksException ignored) {}
} catch (ObjectLacksException ignored) {
}
});
objectSave(holder);
@@ -23,11 +23,13 @@
package me.lucko.luckperms.sponge.service.base;
import lombok.NonNull;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.utils.ImmutableCollectors;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import me.lucko.luckperms.sponge.service.references.SubjectCollectionReference;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
@@ -23,11 +23,13 @@
package me.lucko.luckperms.sponge.service.base;
import lombok.NonNull;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.utils.ImmutableCollectors;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import me.lucko.luckperms.sponge.service.references.SubjectCollectionReference;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.service.permission.SubjectCollection;
@@ -24,19 +24,22 @@ package me.lucko.luckperms.sponge.service.base;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.utils.ImmutableCollectors;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.service.permission.SubjectData;
import org.spongepowered.api.util.Tristate;
import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
import static me.lucko.luckperms.sponge.service.base.Util.convertContexts;
import static me.lucko.luckperms.sponge.service.base.Util.convertTristate;
@@ -22,10 +22,13 @@
package me.lucko.luckperms.sponge.service.base;
import com.google.common.collect.Maps;
import lombok.experimental.UtilityClass;
import com.google.common.collect.Maps;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.utils.ImmutableCollectors;
import org.spongepowered.api.service.context.Context;
import org.spongepowered.api.util.Tristate;
@@ -22,6 +22,9 @@
package me.lucko.luckperms.sponge.service.calculated;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@@ -29,8 +32,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedMap;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.calculators.PermissionCalculator;
@@ -42,19 +44,60 @@ import me.lucko.luckperms.sponge.service.base.LPSubject;
import me.lucko.luckperms.sponge.service.base.LPSubjectData;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import java.util.*;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.SortedMap;
import java.util.concurrent.ConcurrentHashMap;
@RequiredArgsConstructor
public class CalculatedSubjectData implements LPSubjectData {
private static final ContextComparator CONTEXT_COMPARATOR = new ContextComparator();
private static <V> Map<String, V> flattenMap(ContextSet contexts, Map<ContextSet, Map<String, V>> source) {
Map<String, V> map = new HashMap<>();
SortedMap<ContextSet, Map<String, V>> ret = getRelevantEntries(contexts, source);
for (Map<String, V> m : ret.values()) {
for (Map.Entry<String, V> e : m.entrySet()) {
if (!map.containsKey(e.getKey())) {
map.put(e.getKey(), e.getValue());
}
}
}
return ImmutableMap.copyOf(map);
}
private static <K, V> SortedMap<ContextSet, Map<K, V>> getRelevantEntries(ContextSet set, Map<ContextSet, Map<K, V>> map) {
ImmutableSortedMap.Builder<ContextSet, Map<K, V>> perms = ImmutableSortedMap.orderedBy(CONTEXT_COMPARATOR);
loop:
for (Map.Entry<ContextSet, Map<K, V>> e : map.entrySet()) {
for (Map.Entry<String, String> c : e.getKey().toSet()) {
if (!set.has(c.getKey(), c.getValue())) {
continue loop;
}
}
perms.put(e.getKey().makeImmutable(), ImmutableMap.copyOf(e.getValue()));
}
return perms.build();
}
private static boolean stringEquals(String a, String b) {
return a == null && b == null || a != null && b != null && a.equalsIgnoreCase(b);
}
@Getter
private final LPSubject parentSubject;
private final LuckPermsService service;
private final String calculatorDisplayName;
private final Map<ContextSet, Map<String, Boolean>> permissions = new ConcurrentHashMap<>();
private final LoadingCache<ContextSet, CalculatorHolder> permissionCache = CacheBuilder.newBuilder()
.build(new CacheLoader<ContextSet, CalculatorHolder>() {
@Override
@@ -69,7 +112,8 @@ public class CalculatedSubjectData implements LPSubjectData {
return holder;
}
});
private final Map<ContextSet, Set<SubjectReference>> parents = new ConcurrentHashMap<>();
private final Map<ContextSet, Map<String, String>> options = new ConcurrentHashMap<>();
private final LoadingCache<ContextSet, Map<String, String>> optionCache = CacheBuilder.newBuilder()
.build(new CacheLoader<ContextSet, Map<String, String>>() {
@Override
@@ -78,10 +122,6 @@ public class CalculatedSubjectData implements LPSubjectData {
}
});
private final Map<ContextSet, Map<String, Boolean>> permissions = new ConcurrentHashMap<>();
private final Map<ContextSet, Set<SubjectReference>> parents = new ConcurrentHashMap<>();
private final Map<ContextSet, Map<String, String>> options = new ConcurrentHashMap<>();
public Tristate getPermissionValue(ContextSet contexts, String permission) {
return permissionCache.getUnchecked(contexts).getCalculator().getPermissionValue(permission);
}
@@ -274,43 +314,6 @@ public class CalculatedSubjectData implements LPSubjectData {
return false;
}
private static <V> Map<String, V> flattenMap(ContextSet contexts, Map<ContextSet, Map<String, V>> source) {
Map<String, V> map = new HashMap<>();
SortedMap<ContextSet, Map<String, V>> ret = getRelevantEntries(contexts, source);
for (Map<String, V> m : ret.values()) {
for (Map.Entry<String, V> e : m.entrySet()) {
if (!map.containsKey(e.getKey())) {
map.put(e.getKey(), e.getValue());
}
}
}
return ImmutableMap.copyOf(map);
}
private static <K, V> SortedMap<ContextSet, Map<K, V>> getRelevantEntries(ContextSet set, Map<ContextSet, Map<K, V>> map) {
ImmutableSortedMap.Builder<ContextSet, Map<K, V>> perms = ImmutableSortedMap.orderedBy(CONTEXT_COMPARATOR);
loop:
for (Map.Entry<ContextSet, Map<K, V>> e : map.entrySet()) {
for (Map.Entry<String, String> c : e.getKey().toSet()) {
if (!set.has(c.getKey(), c.getValue())) {
continue loop;
}
}
perms.put(e.getKey().makeImmutable(), ImmutableMap.copyOf(e.getValue()));
}
return perms.build();
}
private static boolean stringEquals(String a, String b) {
return a == null && b == null || a != null && b != null && a.equalsIgnoreCase(b);
}
private static class ContextComparator implements Comparator<ContextSet> {
@Override
@@ -26,6 +26,7 @@ import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
import me.lucko.luckperms.api.context.ContextSet;
@Getter
@@ -26,6 +26,7 @@ import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
import me.lucko.luckperms.api.context.ContextSet;
@Getter
@@ -22,14 +22,16 @@
package me.lucko.luckperms.sponge.service.persisted;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.utils.ImmutableCollectors;
@@ -22,10 +22,11 @@
package me.lucko.luckperms.sponge.service.persisted;
import co.aikar.timings.Timing;
import com.google.common.collect.ImmutableSet;
import lombok.Getter;
import lombok.NonNull;
import com.google.common.collect.ImmutableSet;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.utils.BufferedRequest;
@@ -35,6 +36,7 @@ import me.lucko.luckperms.sponge.service.calculated.CalculatedSubjectData;
import me.lucko.luckperms.sponge.service.references.SubjectCollectionReference;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
import me.lucko.luckperms.sponge.timings.LPTiming;
import org.spongepowered.api.command.CommandSource;
import java.io.IOException;
@@ -42,6 +44,8 @@ import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import co.aikar.timings.Timing;
/**
* A simple persistable Subject implementation
*/
@@ -24,6 +24,7 @@ package me.lucko.luckperms.sponge.service.persisted;
import lombok.Getter;
import lombok.Setter;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import me.lucko.luckperms.sponge.service.calculated.CalculatedSubjectData;
@@ -23,6 +23,7 @@
package me.lucko.luckperms.sponge.service.persisted;
import lombok.ToString;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.sponge.service.calculated.CalculatedSubjectData;
import me.lucko.luckperms.sponge.service.references.SubjectReference;
@@ -26,6 +26,7 @@ import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import me.lucko.luckperms.sponge.service.base.LPSubjectCollection;
@@ -22,14 +22,17 @@
package me.lucko.luckperms.sponge.service.references;
import com.google.common.base.Splitter;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
import com.google.common.base.Splitter;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import me.lucko.luckperms.sponge.service.base.LPSubject;
import me.lucko.luckperms.sponge.service.base.LPSubjectCollection;
import org.spongepowered.api.service.permission.Subject;
import java.util.List;
@@ -22,14 +22,16 @@
package me.lucko.luckperms.sponge.service.simple;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableMap;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.common.utils.ImmutableCollectors;
@@ -22,13 +22,14 @@
package me.lucko.luckperms.sponge.service.simple;
import co.aikar.timings.Timing;
import lombok.Getter;
import lombok.NonNull;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.collect.ImmutableSet;
import lombok.Getter;
import lombok.NonNull;
import me.lucko.luckperms.api.Tristate;
import me.lucko.luckperms.api.context.ContextSet;
import me.lucko.luckperms.sponge.service.LuckPermsService;
@@ -44,6 +45,8 @@ import java.util.HashSet;
import java.util.Optional;
import java.util.Set;
import co.aikar.timings.Timing;
/**
* Super simple Subject implementation.
*/
@@ -55,15 +58,6 @@ public class SimpleSubject implements LPSubject {
private final SubjectCollectionReference parentCollection;
private final CalculatedSubjectData subjectData;
private final CalculatedSubjectData transientSubjectData;
private final LoadingCache<PermissionLookup, Tristate> permissionLookupCache = CacheBuilder.newBuilder()
.build(new CacheLoader<PermissionLookup, Tristate>() {
@Override
public Tristate load(PermissionLookup lookup) {
return lookupPermissionValue(lookup.getContexts(), lookup.getNode());
}
});
private final LoadingCache<ContextSet, Set<SubjectReference>> parentLookupCache = CacheBuilder.newBuilder()
.build(new CacheLoader<ContextSet, Set<SubjectReference>>() {
@Override
@@ -71,7 +65,13 @@ public class SimpleSubject implements LPSubject {
return lookupParents(contexts);
}
});
private final LoadingCache<PermissionLookup, Tristate> permissionLookupCache = CacheBuilder.newBuilder()
.build(new CacheLoader<PermissionLookup, Tristate>() {
@Override
public Tristate load(PermissionLookup lookup) {
return lookupPermissionValue(lookup.getContexts(), lookup.getNode());
}
});
private final LoadingCache<OptionLookup, Optional<String>> optionLookupCache = CacheBuilder.newBuilder()
.build(new CacheLoader<OptionLookup, Optional<String>>() {
@Override
@@ -124,7 +124,7 @@ public class SimpleSubject implements LPSubject {
Set<SubjectReference> s = new HashSet<>();
s.addAll(subjectData.getParents(contexts));
if (!getParentCollection().resolve(service).getIdentifier().equalsIgnoreCase("defaults")){
if (!getParentCollection().resolve(service).getIdentifier().equalsIgnoreCase("defaults")) {
s.addAll(getParentCollection().resolve(service).getDefaultSubject().resolve(service).getParents(contexts));
s.addAll(service.getDefaults().getParents(contexts));
}
@@ -22,14 +22,17 @@
package me.lucko.luckperms.sponge.timings;
import co.aikar.timings.Timing;
import co.aikar.timings.Timings;
import com.google.common.collect.ImmutableMap;
import lombok.NonNull;
import com.google.common.collect.ImmutableMap;
import me.lucko.luckperms.sponge.LPSpongePlugin;
import java.util.Map;
import co.aikar.timings.Timing;
import co.aikar.timings.Timings;
public class LPTimings {
private final Map<LPTiming, Timing> timings;