Register Sponge PermDescriptions to the LP permission registry

This commit is contained in:
Luck 2018-04-03 21:56:15 +01:00
parent 7684ac5d3a
commit f33c540efb
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B
25 changed files with 62 additions and 62 deletions

View File

@ -72,7 +72,7 @@ public class MonitoredPermissibleBase extends PermissibleBase {
private void logCheck(CheckOrigin origin, String permission, boolean result) { private void logCheck(CheckOrigin origin, String permission, boolean result) {
this.plugin.getVerboseHandler().offerCheckData(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result)); this.plugin.getVerboseHandler().offerCheckData(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result));
this.plugin.getPermissionVault().offer(permission); this.plugin.getPermissionRegistry().offer(permission);
} }
PermissibleBase getDelegate() { PermissibleBase getDelegate() {

View File

@ -32,7 +32,7 @@ import com.google.common.collect.ForwardingMap;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.treeview.PermissionVault; import me.lucko.luckperms.common.treeview.PermissionRegistry;
import org.bukkit.permissions.Permission; import org.bukkit.permissions.Permission;
import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.PluginManager;
@ -52,7 +52,7 @@ import javax.annotation.Nullable;
* *
* This instance allows LuckPerms to intercept calls to * This instance allows LuckPerms to intercept calls to
* {@link PluginManager#addPermission(Permission)} and record permissions in the * {@link PluginManager#addPermission(Permission)} and record permissions in the
* {@link PermissionVault}. * {@link PermissionRegistry}.
* *
* It also allows us to pre-determine child permission relationships. * It also allows us to pre-determine child permission relationships.
* *
@ -99,7 +99,7 @@ public final class LPPermissionMap extends ForwardingMap<String, Permission> {
Objects.requireNonNull(key, "key"); Objects.requireNonNull(key, "key");
Objects.requireNonNull(value, "value"); Objects.requireNonNull(value, "value");
this.plugin.getPermissionVault().offer(key); this.plugin.getPermissionRegistry().offer(key);
Permission ret = super.put(key, value); Permission ret = super.put(key, value);
update(); update();
return ret; return ret;
@ -107,7 +107,7 @@ public final class LPPermissionMap extends ForwardingMap<String, Permission> {
@Override @Override
public void putAll(@Nonnull Map<? extends String, ? extends Permission> m) { public void putAll(@Nonnull Map<? extends String, ? extends Permission> m) {
this.plugin.getPermissionVault().offerAll(m.keySet()); this.plugin.getPermissionRegistry().offerAll(m.keySet());
super.putAll(m); super.putAll(m);
update(); update();
} }
@ -117,7 +117,7 @@ public final class LPPermissionMap extends ForwardingMap<String, Permission> {
Objects.requireNonNull(key, "key"); Objects.requireNonNull(key, "key");
Objects.requireNonNull(value, "value"); Objects.requireNonNull(value, "value");
this.plugin.getPermissionVault().offer(key); this.plugin.getPermissionRegistry().offer(key);
Permission ret = super.putIfAbsent(key, value); Permission ret = super.putIfAbsent(key, value);
update(); update();
return ret; return ret;

View File

@ -115,7 +115,7 @@ public class BungeePermissionCheckListener implements Listener {
String name = "internal/" + e.getSender().getName(); String name = "internal/" + e.getSender().getName();
this.plugin.getVerboseHandler().offerCheckData(CheckOrigin.PLATFORM_PERMISSION_CHECK, name, ContextSet.empty(), permission, result); this.plugin.getVerboseHandler().offerCheckData(CheckOrigin.PLATFORM_PERMISSION_CHECK, name, ContextSet.empty(), permission, result);
this.plugin.getPermissionVault().offer(permission); this.plugin.getPermissionRegistry().offer(permission);
} }
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
@ -132,6 +132,6 @@ public class BungeePermissionCheckListener implements Listener {
String name = "internal/" + e.getSender().getName(); String name = "internal/" + e.getSender().getName();
this.plugin.getVerboseHandler().offerCheckData(CheckOrigin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, result); this.plugin.getVerboseHandler().offerCheckData(CheckOrigin.PLATFORM_LOOKUP_CHECK, name, ContextSet.empty(), permission, result);
this.plugin.getPermissionVault().offer(permission); this.plugin.getPermissionRegistry().offer(permission);
} }
} }

View File

@ -100,7 +100,7 @@ public class PermissionCalculator implements CacheLoader<String, Tristate> {
// offer the permission to the permission vault // offer the permission to the permission vault
// we only need to do this once per permission, so it doesn't matter // we only need to do this once per permission, so it doesn't matter
// that this call is behind the cache. // that this call is behind the cache.
this.plugin.getPermissionVault().offer(permission); this.plugin.getPermissionRegistry().offer(permission);
for (PermissionProcessor processor : this.processors) { for (PermissionProcessor processor : this.processors) {
Tristate result = processor.hasPermission(permission); Tristate result = processor.hasPermission(permission);

View File

@ -28,7 +28,7 @@ package me.lucko.luckperms.common.command.utils;
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.treeview.PermissionVault; import me.lucko.luckperms.common.treeview.PermissionRegistry;
import me.lucko.luckperms.common.treeview.TreeNode; import me.lucko.luckperms.common.treeview.TreeNode;
import java.util.ArrayList; import java.util.ArrayList;
@ -59,7 +59,7 @@ public final class TabCompletions {
} }
} }
public static List<String> getPermissionTabComplete(List<String> args, PermissionVault cache) { public static List<String> getPermissionTabComplete(List<String> args, PermissionRegistry cache) {
if (args.size() <= 1) { if (args.size() <= 1) {
if (args.isEmpty() || args.get(0).equals("")) { if (args.isEmpty() || args.get(0).equals("")) {
return cache.getRootNode().getChildren() return cache.getRootNode().getChildren()

View File

@ -72,6 +72,6 @@ public class PermissionCheck extends SharedSubCommand {
@Override @Override
public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) { public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) {
return getPermissionTabComplete(args, plugin.getPermissionVault()); return getPermissionTabComplete(args, plugin.getPermissionRegistry());
} }
} }

View File

@ -77,6 +77,6 @@ public class PermissionCheckInherits extends SharedSubCommand {
@Override @Override
public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) { public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) {
return getPermissionTabComplete(args, plugin.getPermissionVault()); return getPermissionTabComplete(args, plugin.getPermissionRegistry());
} }
} }

View File

@ -99,6 +99,6 @@ public class PermissionSet extends SharedSubCommand {
if (!ret.isEmpty()) { if (!ret.isEmpty()) {
return ret; return ret;
} }
return getPermissionTabComplete(args, plugin.getPermissionVault()); return getPermissionTabComplete(args, plugin.getPermissionRegistry());
} }
} }

View File

@ -107,6 +107,6 @@ public class PermissionSetTemp extends SharedSubCommand {
if (!ret.isEmpty()) { if (!ret.isEmpty()) {
return ret; return ret;
} }
return getPermissionTabComplete(args, plugin.getPermissionVault()); return getPermissionTabComplete(args, plugin.getPermissionRegistry());
} }
} }

View File

@ -93,6 +93,6 @@ public class PermissionUnset extends SharedSubCommand {
@Override @Override
public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) { public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) {
return getPermissionTabComplete(args, plugin.getPermissionVault()); return getPermissionTabComplete(args, plugin.getPermissionRegistry());
} }
} }

View File

@ -93,6 +93,6 @@ public class PermissionUnsetTemp extends SharedSubCommand {
@Override @Override
public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) { public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) {
return getPermissionTabComplete(args, plugin.getPermissionVault()); return getPermissionTabComplete(args, plugin.getPermissionRegistry());
} }
} }

View File

@ -84,6 +84,6 @@ public class CheckCommand extends SingleCommand {
} }
args.remove(0); args.remove(0);
return TabCompletions.getPermissionTabComplete(args, plugin.getPermissionVault()); return TabCompletions.getPermissionTabComplete(args, plugin.getPermissionRegistry());
} }
} }

View File

@ -104,7 +104,7 @@ public class SearchCommand extends SingleCommand {
@Override @Override
public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) { public List<String> tabComplete(LuckPermsPlugin plugin, Sender sender, List<String> args) {
return TabCompletions.getPermissionTabComplete(args, plugin.getPermissionVault()); return TabCompletions.getPermissionTabComplete(args, plugin.getPermissionRegistry());
} }
private static <T> void sendResult(Sender sender, List<HeldPermission<T>> results, Function<T, String> lookupFunction, Message headerMessage, HolderType holderType, String label, int page) { private static <T> void sendResult(Sender sender, List<HeldPermission<T>> results, Function<T, String> lookupFunction, Message headerMessage, HolderType holderType, String label, int page) {

View File

@ -83,7 +83,7 @@ public class TreeCommand extends SingleCommand {
user = null; user = null;
} }
TreeView view = new TreeView(plugin.getPermissionVault(), selection); TreeView view = new TreeView(plugin.getPermissionRegistry(), selection);
if (!view.hasData()) { if (!view.hasData()) {
Message.TREE_EMPTY.send(sender); Message.TREE_EMPTY.send(sender);
return CommandResult.FAILURE; return CommandResult.FAILURE;

View File

@ -56,7 +56,7 @@ import me.lucko.luckperms.common.storage.StorageFactory;
import me.lucko.luckperms.common.storage.StorageType; import me.lucko.luckperms.common.storage.StorageType;
import me.lucko.luckperms.common.storage.dao.file.FileWatcher; import me.lucko.luckperms.common.storage.dao.file.FileWatcher;
import me.lucko.luckperms.common.tasks.UpdateTask; import me.lucko.luckperms.common.tasks.UpdateTask;
import me.lucko.luckperms.common.treeview.PermissionVault; import me.lucko.luckperms.common.treeview.PermissionRegistry;
import me.lucko.luckperms.common.verbose.VerboseHandler; import me.lucko.luckperms.common.verbose.VerboseHandler;
import java.io.File; import java.io.File;
@ -71,7 +71,7 @@ public abstract class AbstractLuckPermsPlugin implements LuckPermsPlugin {
// init during enable // init during enable
private VerboseHandler verboseHandler; private VerboseHandler verboseHandler;
private PermissionVault permissionVault; private PermissionRegistry permissionRegistry;
private LogDispatcher logDispatcher; private LogDispatcher logDispatcher;
private LuckPermsConfiguration configuration; private LuckPermsConfiguration configuration;
private LocaleManager localeManager; private LocaleManager localeManager;
@ -104,7 +104,7 @@ public abstract class AbstractLuckPermsPlugin implements LuckPermsPlugin {
// load some utilities early // load some utilities early
this.verboseHandler = new VerboseHandler(); this.verboseHandler = new VerboseHandler();
this.permissionVault = new PermissionVault(); this.permissionRegistry = new PermissionRegistry();
this.logDispatcher = new LogDispatcher(this); this.logDispatcher = new LogDispatcher(this);
// load configuration // load configuration
@ -195,7 +195,7 @@ public abstract class AbstractLuckPermsPlugin implements LuckPermsPlugin {
performEarlyDisableTasks(); performEarlyDisableTasks();
// shutdown permission vault and verbose handler tasks // shutdown permission vault and verbose handler tasks
this.permissionVault.stop(); this.permissionRegistry.stop();
this.verboseHandler.stop(); this.verboseHandler.stop();
// remove any hooks into the platform // remove any hooks into the platform
@ -266,8 +266,8 @@ public abstract class AbstractLuckPermsPlugin implements LuckPermsPlugin {
} }
@Override @Override
public PermissionVault getPermissionVault() { public PermissionRegistry getPermissionRegistry() {
return this.permissionVault; return this.permissionRegistry;
} }
@Override @Override

View File

@ -50,7 +50,7 @@ import me.lucko.luckperms.common.plugin.bootstrap.LuckPermsBootstrap;
import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.storage.Storage; import me.lucko.luckperms.common.storage.Storage;
import me.lucko.luckperms.common.storage.dao.file.FileWatcher; import me.lucko.luckperms.common.storage.dao.file.FileWatcher;
import me.lucko.luckperms.common.treeview.PermissionVault; import me.lucko.luckperms.common.treeview.PermissionRegistry;
import me.lucko.luckperms.common.verbose.VerboseHandler; import me.lucko.luckperms.common.verbose.VerboseHandler;
import java.util.Collections; import java.util.Collections;
@ -208,11 +208,11 @@ public interface LuckPermsPlugin {
VerboseHandler getVerboseHandler(); VerboseHandler getVerboseHandler();
/** /**
* Gets the permission caching instance for the platform. * Gets the permission registry for the platform.
* *
* @return the permission cache instance * @return the permission registry
*/ */
PermissionVault getPermissionVault(); PermissionRegistry getPermissionRegistry();
/** /**
* Gets the log dispatcher running on the platform * Gets the log dispatcher running on the platform

View File

@ -43,7 +43,7 @@ import java.util.stream.Collectors;
/** /**
* Stores a collection of all permissions known to the platform. * Stores a collection of all permissions known to the platform.
*/ */
public class PermissionVault extends RepeatingTask { public class PermissionRegistry extends RepeatingTask {
private static final Splitter DOT_SPLIT = Splitter.on('.').omitEmptyStrings(); private static final Splitter DOT_SPLIT = Splitter.on('.').omitEmptyStrings();
// the root node in the tree // the root node in the tree
@ -55,7 +55,7 @@ public class PermissionVault extends RepeatingTask {
// a queue of permission strings to be processed by the tree // a queue of permission strings to be processed by the tree
private final Queue<String> queue; private final Queue<String> queue;
public PermissionVault() { public PermissionRegistry() {
super(1000, TimeUnit.MILLISECONDS, "luckperms-permission-vault"); super(1000, TimeUnit.MILLISECONDS, "luckperms-permission-vault");
this.rootNode = new TreeNode(); this.rootNode = new TreeNode();
this.knownPermissions = ConcurrentHashMap.newKeySet(3000); this.knownPermissions = ConcurrentHashMap.newKeySet(3000);

View File

@ -52,7 +52,7 @@ public class TreeView {
// the actual tree object // the actual tree object
private final ImmutableTreeNode view; private final ImmutableTreeNode view;
public TreeView(PermissionVault source, String rootPosition) { public TreeView(PermissionRegistry source, String rootPosition) {
if (rootPosition.equals("") || rootPosition.equals("*")) { if (rootPosition.equals("") || rootPosition.equals("*")) {
rootPosition = "."; rootPosition = ".";
} else if (!rootPosition.equals(".") && rootPosition.endsWith(".")) { } else if (!rootPosition.equals(".") && rootPosition.endsWith(".")) {
@ -79,7 +79,7 @@ public class TreeView {
* @param source the node source * @param source the node source
* @return the root, if it exists * @return the root, if it exists
*/ */
private static Optional<TreeNode> findRoot(String rootPosition, PermissionVault source) { private static Optional<TreeNode> findRoot(String rootPosition, PermissionRegistry source) {
// get the root of the permission vault // get the root of the permission vault
TreeNode root = source.getRootNode(); TreeNode root = source.getRootNode();

View File

@ -103,7 +103,7 @@ public final class WebEditor {
) )
.add("knownPermissions", new JArray() .add("knownPermissions", new JArray()
.consume(arr -> { .consume(arr -> {
for (String perm : plugin.getPermissionVault().rootAsList()) { for (String perm : plugin.getPermissionRegistry().rootAsList()) {
arr.add(perm); arr.add(perm);
} }
}) })

View File

@ -72,7 +72,7 @@ public class MonitoredPermissibleBase extends PermissibleBase {
private void logCheck(CheckOrigin origin, String permission, boolean result) { private void logCheck(CheckOrigin origin, String permission, boolean result) {
this.plugin.getVerboseHandler().offerCheckData(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result)); this.plugin.getVerboseHandler().offerCheckData(origin, this.name, ContextSet.empty(), permission, Tristate.fromBoolean(result));
this.plugin.getPermissionVault().offer(permission); this.plugin.getPermissionRegistry().offer(permission);
} }
PermissibleBase getDelegate() { PermissibleBase getDelegate() {

View File

@ -32,7 +32,7 @@ import com.google.common.collect.ForwardingMap;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.treeview.PermissionVault; import me.lucko.luckperms.common.treeview.PermissionRegistry;
import cn.nukkit.permission.Permission; import cn.nukkit.permission.Permission;
import cn.nukkit.plugin.PluginManager; import cn.nukkit.plugin.PluginManager;
@ -50,7 +50,7 @@ import javax.annotation.Nonnull;
* *
* This instance allows LuckPerms to intercept calls to * This instance allows LuckPerms to intercept calls to
* {@link PluginManager#addPermission(Permission)} and record permissions in the * {@link PluginManager#addPermission(Permission)} and record permissions in the
* {@link PermissionVault}. * {@link PermissionRegistry}.
* *
* It also allows us to pre-determine child permission relationships. * It also allows us to pre-determine child permission relationships.
* *
@ -94,7 +94,7 @@ public final class LPPermissionMap extends ForwardingMap<String, Permission> {
@Override @Override
public Permission put(@Nonnull String key, @Nonnull Permission value) { public Permission put(@Nonnull String key, @Nonnull Permission value) {
this.plugin.getPermissionVault().offer(key); this.plugin.getPermissionRegistry().offer(key);
Permission ret = super.put(key, value); Permission ret = super.put(key, value);
update(); update();
return ret; return ret;
@ -102,14 +102,14 @@ public final class LPPermissionMap extends ForwardingMap<String, Permission> {
@Override @Override
public void putAll(@Nonnull Map<? extends String, ? extends Permission> m) { public void putAll(@Nonnull Map<? extends String, ? extends Permission> m) {
this.plugin.getPermissionVault().offerAll(m.keySet()); this.plugin.getPermissionRegistry().offerAll(m.keySet());
super.putAll(m); super.putAll(m);
update(); update();
} }
@Override @Override
public Permission putIfAbsent(String key, Permission value) { public Permission putIfAbsent(String key, Permission value) {
this.plugin.getPermissionVault().offer(key); this.plugin.getPermissionRegistry().offer(key);
Permission ret = super.putIfAbsent(key, value); Permission ret = super.putIfAbsent(key, value);
update(); update();
return ret; return ret;

View File

@ -94,7 +94,7 @@ public final class DescriptionBuilder implements PermissionDescription.Builder {
roleSubject.getTransientSubjectData().setPermission(ContextSet.empty(), this.id, assignment.getValue()); roleSubject.getTransientSubjectData().setPermission(ContextSet.empty(), this.id, assignment.getValue());
} }
this.service.getPlugin().getPermissionVault().offer(this.id); this.service.getPlugin().getPermissionRegistry().offer(this.id);
// null stuff so this instance can be reused // null stuff so this instance can be reused
this.roles.clear(); this.roles.clear();

View File

@ -94,7 +94,7 @@ public final class DescriptionBuilder implements PermissionDescription.Builder {
roleSubject.getTransientSubjectData().setPermission(ContextSet.empty(), this.id, assignment.getValue()); roleSubject.getTransientSubjectData().setPermission(ContextSet.empty(), this.id, assignment.getValue());
} }
this.service.getPlugin().getPermissionVault().offer(this.id); this.service.getPlugin().getPermissionRegistry().offer(this.id);
// null stuff so this instance can be reused // null stuff so this instance can be reused
this.roles.clear(); this.roles.clear();

View File

@ -43,6 +43,7 @@ import me.lucko.luckperms.common.sender.DummySender;
import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.tasks.CacheHousekeepingTask; import me.lucko.luckperms.common.tasks.CacheHousekeepingTask;
import me.lucko.luckperms.common.tasks.ExpireTemporaryTask; import me.lucko.luckperms.common.tasks.ExpireTemporaryTask;
import me.lucko.luckperms.common.treeview.PermissionRegistry;
import me.lucko.luckperms.sponge.calculators.SpongeCalculatorFactory; import me.lucko.luckperms.sponge.calculators.SpongeCalculatorFactory;
import me.lucko.luckperms.sponge.commands.SpongeMainCommand; import me.lucko.luckperms.sponge.commands.SpongeMainCommand;
import me.lucko.luckperms.sponge.contexts.SpongeContextManager; import me.lucko.luckperms.sponge.contexts.SpongeContextManager;
@ -60,6 +61,7 @@ import me.lucko.luckperms.sponge.service.persisted.PersistedCollection;
import me.lucko.luckperms.sponge.tasks.ServiceCacheHousekeepingTask; import me.lucko.luckperms.sponge.tasks.ServiceCacheHousekeepingTask;
import org.spongepowered.api.entity.living.player.Player; import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.service.permission.PermissionDescription;
import org.spongepowered.api.service.permission.PermissionService; import org.spongepowered.api.service.permission.PermissionService;
import org.spongepowered.api.service.permission.Subject; import org.spongepowered.api.service.permission.Subject;
@ -151,6 +153,11 @@ public class LPSpongePlugin extends AbstractLuckPermsPlugin {
this.updateEventHandler = UpdateEventHandler.obtain(this); this.updateEventHandler = UpdateEventHandler.obtain(this);
this.service = new LuckPermsService(this); this.service = new LuckPermsService(this);
// before registering our permission service, copy any existing permission descriptions
PermissionRegistry permissionRegistry = getPermissionRegistry();
this.bootstrap.getGame().getServiceManager().provide(PermissionService.class)
.ifPresent(ps -> ps.getDescriptions().stream().map(PermissionDescription::getId).forEach(permissionRegistry::offer));
if (this.bootstrap.getGame().getPluginManager().getPlugin("permissionsex").isPresent()) { if (this.bootstrap.getGame().getPluginManager().getPlugin("permissionsex").isPresent()) {
getLogger().warn("Detected PermissionsEx - assuming it's loaded for migration."); getLogger().warn("Detected PermissionsEx - assuming it's loaded for migration.");
getLogger().warn("Delaying LuckPerms PermissionService registration."); getLogger().warn("Delaying LuckPerms PermissionService registration.");

View File

@ -55,10 +55,10 @@ import org.spongepowered.api.service.permission.Subject;
import org.spongepowered.api.text.Text; import org.spongepowered.api.text.Text;
import java.io.File; import java.io.File;
import java.util.HashSet; import java.util.HashMap;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Predicate; import java.util.function.Predicate;
@ -95,7 +95,7 @@ public class LuckPermsService implements LPPermissionService {
/** /**
* A set of registered permission description instances * A set of registered permission description instances
*/ */
private final Set<LPPermissionDescription> permissionDescriptions; private final Map<String, LPPermissionDescription> permissionDescriptions;
/** /**
* The loaded collections in this service * The loaded collections in this service
@ -107,7 +107,7 @@ public class LuckPermsService implements LPPermissionService {
this.plugin = plugin; this.plugin = plugin;
this.referenceFactory = new SubjectReferenceFactory(this); this.referenceFactory = new SubjectReferenceFactory(this);
this.spongeProxy = ProxyFactory.toSponge(this); this.spongeProxy = ProxyFactory.toSponge(this);
this.permissionDescriptions = ConcurrentHashMap.newKeySet(); this.permissionDescriptions = new ConcurrentHashMap<>();
// init subject storage // init subject storage
this.storage = new SubjectStorage(this, new File(plugin.getBootstrap().getDataDirectory(), "sponge-data")); this.storage = new SubjectStorage(this, new File(plugin.getBootstrap().getDataDirectory(), "sponge-data"));
@ -199,37 +199,30 @@ public class LuckPermsService implements LPPermissionService {
@Override @Override
public LPPermissionDescription registerPermissionDescription(String id, Text description, PluginContainer owner) { public LPPermissionDescription registerPermissionDescription(String id, Text description, PluginContainer owner) {
SimplePermissionDescription desc = new SimplePermissionDescription(this, id, description, owner); SimplePermissionDescription desc = new SimplePermissionDescription(this, id, description, owner);
this.permissionDescriptions.add(desc); this.permissionDescriptions.put(id, desc);
this.plugin.getPermissionRegistry().offer(id);
return desc; return desc;
} }
@Override @Override
public Optional<LPPermissionDescription> getDescription(String s) { public Optional<LPPermissionDescription> getDescription(String s) {
Objects.requireNonNull(s); Objects.requireNonNull(s);
for (LPPermissionDescription d : this.permissionDescriptions) { return Optional.ofNullable(this.permissionDescriptions.get(s));
if (d.getId().equals(s)) {
return Optional.of(d);
}
}
return Optional.empty();
} }
@Override @Override
public ImmutableSet<LPPermissionDescription> getDescriptions() { public ImmutableSet<LPPermissionDescription> getDescriptions() {
Set<LPPermissionDescription> descriptions = new HashSet<>(this.permissionDescriptions); Map<String, LPPermissionDescription> descriptions = new HashMap<>(this.permissionDescriptions);
// collect known values from the permission vault // collect known values from the permission vault
for (String knownPermission : this.plugin.getPermissionVault().getKnownPermissions()) { for (String perm : this.plugin.getPermissionRegistry().getKnownPermissions()) {
LPPermissionDescription desc = new SimplePermissionDescription(this, knownPermission, null, null);
// don't override plugin defined values // don't override plugin defined values
if (!descriptions.contains(desc)) { if (!descriptions.containsKey(perm)) {
descriptions.add(desc); descriptions.put(perm, new SimplePermissionDescription(this, perm, null, null));
} }
} }
return ImmutableSet.copyOf(descriptions); return ImmutableSet.copyOf(descriptions.values());
} }
@Override @Override