From 6ca9eb13dd9c5d1396f283495b580cdd23a12c12 Mon Sep 17 00:00:00 2001 From: Luck Date: Sat, 18 Nov 2017 23:20:42 +0000 Subject: [PATCH] General tidy up --- .../luckperms/api/FullySatisfiedContexts.java | 8 +- .../bukkit/BukkitCommandExecutor.java | 5 +- .../migration/BukkitMigrationUtils.java | 4 +- .../luckperms/bukkit/vault/VaultChatHook.java | 107 ++++--------- .../luckperms/bukkit/vault/VaultExecutor.java | 23 +-- .../bungee/BungeeCommandExecutor.java | 5 +- .../BungeePermissionCheckListener.java | 4 +- .../common/actionlog/ExtendedLogEntry.java | 8 - .../assignments/AssignmentExpression.java | 151 ++++++++++++++++++ .../AssignmentRule.java} | 43 +++-- .../{ImporterSender.java => DummySender.java} | 6 +- .../luckperms/common/backup/Exporter.java | 4 +- .../luckperms/common/backup/Importer.java | 8 +- .../{GroupCache.java => GroupCachedData.java} | 4 +- ...HolderCache.java => HolderCachedData.java} | 5 +- .../{UserCache.java => UserCachedData.java} | 4 +- .../caching/{ => type}/MetaAccumulator.java | 2 +- .../common/caching/{ => type}/MetaCache.java | 2 +- .../caching/{ => type}/PermissionCache.java | 2 +- .../common/commands/CommandManager.java | 31 +++- .../commands/abstraction/MainCommand.java | 4 +- .../abstraction/SharedMainCommand.java | 6 +- .../abstraction/SharedSubCommand.java | 12 +- .../commands/abstraction/SingleCommand.java | 12 +- .../commands/abstraction/SubCommand.java | 12 +- .../impl/generic/meta/MetaAddChatMeta.java | 6 +- .../generic/meta/MetaAddTempChatMeta.java | 6 +- .../commands/impl/generic/meta/MetaClear.java | 6 +- .../commands/impl/generic/meta/MetaInfo.java | 6 +- .../impl/generic/meta/MetaRemoveChatMeta.java | 8 +- .../generic/meta/MetaRemoveTempChatMeta.java | 8 +- .../commands/impl/generic/meta/MetaSet.java | 6 +- .../impl/generic/meta/MetaSetTemp.java | 6 +- .../commands/impl/generic/meta/MetaUnset.java | 6 +- .../impl/generic/meta/MetaUnsetTemp.java | 6 +- .../impl/generic/other/HolderClear.java | 6 +- .../impl/generic/other/HolderShowTracks.java | 6 +- .../impl/generic/parent/ParentAdd.java | 6 +- .../impl/generic/parent/ParentAddTemp.java | 8 +- .../impl/generic/parent/ParentClear.java | 6 +- .../impl/generic/parent/ParentClearTrack.java | 6 +- .../impl/generic/parent/ParentInfo.java | 6 +- .../impl/generic/parent/ParentRemove.java | 6 +- .../impl/generic/parent/ParentRemoveTemp.java | 6 +- .../impl/generic/parent/ParentSet.java | 4 +- .../impl/generic/parent/ParentSetTrack.java | 4 +- .../generic/permission/PermissionCheck.java | 6 +- .../permission/PermissionCheckInherits.java | 6 +- .../generic/permission/PermissionInfo.java | 6 +- .../generic/permission/PermissionSet.java | 6 +- .../generic/permission/PermissionSetTemp.java | 6 +- .../generic/permission/PermissionUnset.java | 6 +- .../permission/PermissionUnsetTemp.java | 6 +- .../common/commands/impl/group/GroupInfo.java | 6 +- .../commands/impl/group/GroupListMembers.java | 10 +- .../commands/impl/group/ListGroups.java | 4 +- .../common/commands/impl/log/LogRecent.java | 4 +- .../commands/impl/log/LogUserHistory.java | 4 +- .../commands/impl/misc/ApplyEditsCommand.java | 4 +- .../commands/impl/misc/CheckCommand.java | 6 +- .../commands/impl/misc/InfoCommand.java | 4 +- .../commands/impl/misc/SearchCommand.java | 10 +- .../commands/impl/misc/TreeCommand.java | 6 +- .../commands/impl/track/ListTracks.java | 4 +- .../commands/impl/track/TrackAppend.java | 4 +- .../common/commands/impl/track/TrackInfo.java | 4 +- .../commands/impl/track/TrackInsert.java | 4 +- .../commands/impl/track/TrackRemove.java | 4 +- .../common/commands/impl/user/UserDemote.java | 6 +- .../common/commands/impl/user/UserInfo.java | 10 +- .../commands/impl/user/UserMainCommand.java | 4 +- .../commands/impl/user/UserPromote.java | 8 +- .../utils/{Util.java => CommandUtils.java} | 25 +-- .../common/commands/utils/MetaComparator.java | 12 +- .../luckperms/common/config/ConfigKeys.java | 6 +- .../contexts/AbstractContextManager.java | 62 ++++--- .../common/defaults/LogicParser.java | 78 --------- .../luckperms/common/locale/CommandSpec.java | 15 -- .../common/locale/CommandSpecData.java | 46 ++++++ .../common/locale/LocaleManager.java | 2 +- .../luckperms/common/locale/Message.java | 4 +- .../common/locale/NoopLocaleManager.java | 2 +- .../common/locale/SimpleLocaleManager.java | 8 +- .../common/logging/SenderLogger.java | 4 +- .../common/managers/AbstractManager.java | 17 +- .../common/managers/GenericGroupManager.java | 5 + .../common/managers/GenericTrackManager.java | 4 + .../lucko/luckperms/common/model/Group.java | 6 +- .../common/model/PermissionHolder.java | 6 +- .../me/lucko/luckperms/common/model/User.java | 8 +- .../common/node/LegacyNodeFactory.java | 143 +++++++++++++++++ .../luckperms/common/node/NodeBuilder.java | 38 +---- .../luckperms/common/node/NodeFactory.java | 106 +----------- .../common/plugin/LuckPermsPlugin.java | 16 +- .../storage/dao/file/ConfigurateDao.java | 4 +- .../dao/legacy/LegacyJsonMigration.java | 6 +- .../dao/legacy/LegacySqlMigration.java | 6 +- .../dao/legacy/LegacyYamlMigration.java | 6 +- .../common/storage/dao/mongodb/MongoDao.java | 15 +- .../luckperms/common/treeview/TreeView.java | 2 +- .../luckperms/common/utils/LoginHelper.java | 4 +- .../common/verbose/VerboseListener.java | 6 +- .../proxy/api7/SubjectCollectionProxy.java | 2 +- .../service/model/LPSubjectCollection.java | 2 - .../luckperms/sponge/LPSpongePlugin.java | 4 +- .../sponge/SpongeCommandExecutor.java | 5 +- .../sponge/commands/OptionClear.java | 6 +- .../luckperms/sponge/commands/OptionInfo.java | 12 +- .../luckperms/sponge/commands/OptionSet.java | 6 +- .../sponge/commands/OptionUnset.java | 6 +- .../luckperms/sponge/commands/ParentAdd.java | 10 +- .../sponge/commands/ParentClear.java | 6 +- .../luckperms/sponge/commands/ParentInfo.java | 12 +- .../sponge/commands/ParentRemove.java | 10 +- .../sponge/commands/PermissionClear.java | 6 +- .../sponge/commands/PermissionInfo.java | 12 +- .../sponge/commands/PermissionSet.java | 6 +- .../sponge/commands/SpongeMainCommand.java | 22 +-- .../sponge/commands/SpongeUtils.java | 4 +- ...ink.java => ProxiedContextCalculator.java} | 28 ++-- .../sponge/managers/SpongeGroupManager.java | 5 - .../sponge/managers/SpongeUserManager.java | 5 - .../migration/MigrationPermissionManager.java | 4 +- .../migration/MigrationPermissionsEx.java | 4 +- .../sponge/service/LuckPermsService.java | 4 +- .../sponge/service/LuckPermsSubjectData.java | 2 +- ...OptionLookup.java => OptionLookupKey.java} | 2 +- ...onLookup.java => PermissionLookupKey.java} | 2 +- .../persisted/PersistedCollection.java | 4 - .../service/persisted/PersistedSubject.java | 12 +- 130 files changed, 850 insertions(+), 763 deletions(-) create mode 100644 common/src/main/java/me/lucko/luckperms/common/assignments/AssignmentExpression.java rename common/src/main/java/me/lucko/luckperms/common/{defaults/Rule.java => assignments/AssignmentRule.java} (64%) rename common/src/main/java/me/lucko/luckperms/common/backup/{ImporterSender.java => DummySender.java} (92%) rename common/src/main/java/me/lucko/luckperms/common/caching/{GroupCache.java => GroupCachedData.java} (92%) rename common/src/main/java/me/lucko/luckperms/common/caching/{HolderCache.java => HolderCachedData.java} (97%) rename common/src/main/java/me/lucko/luckperms/common/caching/{UserCache.java => UserCachedData.java} (92%) rename common/src/main/java/me/lucko/luckperms/common/caching/{ => type}/MetaAccumulator.java (98%) rename common/src/main/java/me/lucko/luckperms/common/caching/{ => type}/MetaCache.java (98%) rename common/src/main/java/me/lucko/luckperms/common/caching/{ => type}/PermissionCache.java (98%) rename common/src/main/java/me/lucko/luckperms/common/commands/utils/{Util.java => CommandUtils.java} (91%) delete mode 100644 common/src/main/java/me/lucko/luckperms/common/defaults/LogicParser.java create mode 100644 common/src/main/java/me/lucko/luckperms/common/locale/CommandSpecData.java create mode 100644 common/src/main/java/me/lucko/luckperms/common/node/LegacyNodeFactory.java rename sponge/src/main/java/me/lucko/luckperms/sponge/contexts/{SpongeCalculatorLink.java => ProxiedContextCalculator.java} (84%) rename sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/{OptionLookup.java => OptionLookupKey.java} (97%) rename sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/{PermissionLookup.java => PermissionLookupKey.java} (97%) diff --git a/api/src/main/java/me/lucko/luckperms/api/FullySatisfiedContexts.java b/api/src/main/java/me/lucko/luckperms/api/FullySatisfiedContexts.java index d0146679a..b489bf579 100644 --- a/api/src/main/java/me/lucko/luckperms/api/FullySatisfiedContexts.java +++ b/api/src/main/java/me/lucko/luckperms/api/FullySatisfiedContexts.java @@ -25,8 +25,8 @@ package me.lucko.luckperms.api; +import me.lucko.luckperms.api.caching.CachedData; import me.lucko.luckperms.api.caching.MetaContexts; -import me.lucko.luckperms.api.caching.UserData; import me.lucko.luckperms.api.context.ContextSet; import javax.annotation.Nonnull; @@ -36,9 +36,9 @@ import javax.annotation.Nonnull; * *

* * *

... will always satisfy all contextual requirements.

diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitCommandExecutor.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitCommandExecutor.java index a77ba854a..6bc06cc55 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitCommandExecutor.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitCommandExecutor.java @@ -30,7 +30,6 @@ import com.google.common.base.Splitter; import me.lucko.luckperms.common.commands.CommandManager; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; @@ -54,7 +53,7 @@ public class BukkitCommandExecutor extends CommandManager implements CommandExec @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { Sender lpSender = plugin.getSenderFactory().wrap(sender); - List arguments = Util.stripQuotes(ARGUMENT_SPLITTER.splitToList(ARGUMENT_JOINER.join(args))); + List arguments = stripQuotes(ARGUMENT_SPLITTER.splitToList(ARGUMENT_JOINER.join(args))); onCommand(lpSender, label, arguments); return true; @@ -63,7 +62,7 @@ public class BukkitCommandExecutor extends CommandManager implements CommandExec @Override public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { Sender lpSender = plugin.getSenderFactory().wrap(sender); - List arguments = Util.stripQuotes(TAB_COMPLETE_ARGUMENT_SPLITTER.splitToList(ARGUMENT_JOINER.join(args))); + List arguments = stripQuotes(TAB_COMPLETE_ARGUMENT_SPLITTER.splitToList(ARGUMENT_JOINER.join(args))); return onTabComplete(lpSender, arguments); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/BukkitMigrationUtils.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/BukkitMigrationUtils.java index 6d9781b1f..96e6bb168 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/BukkitMigrationUtils.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/BukkitMigrationUtils.java @@ -27,7 +27,7 @@ package me.lucko.luckperms.bukkit.migration; import lombok.experimental.UtilityClass; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.logging.ProgressLogger; import org.bukkit.Bukkit; @@ -39,7 +39,7 @@ public class BukkitMigrationUtils { @SuppressWarnings("deprecation") public static UUID lookupUuid(ProgressLogger log, String s) { - UUID uuid = Util.parseUuid(s); + UUID uuid = CommandUtils.parseUuid(s); if (uuid == null) { try { uuid = Bukkit.getOfflinePlayer(s).getUniqueId(); diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultChatHook.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultChatHook.java index 17e39c968..aeb4bac73 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultChatHook.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultChatHook.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.api.ChatMetaType; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.caching.MetaData; -import me.lucko.luckperms.common.caching.MetaAccumulator; +import me.lucko.luckperms.common.caching.type.MetaAccumulator; import me.lucko.luckperms.common.model.Group; import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.model.User; @@ -42,8 +42,6 @@ import net.milkbowl.vault.chat.Chat; import org.bukkit.Bukkit; import org.bukkit.entity.Player; -import java.util.Map; - /** * An implementation of the Vault {@link Chat} API using LuckPerms. * @@ -85,7 +83,7 @@ public class VaultChatHook extends Chat { @Override public String getPlayerPrefix(String world, @NonNull String player) { final User user = getUser(player); - return getUserChatMeta(user, ChatMetaType.PREFIX, world); + return getHolderChatMeta(user, ChatMetaType.PREFIX, world); } @Override @@ -97,7 +95,7 @@ public class VaultChatHook extends Chat { @Override public String getPlayerSuffix(String world, @NonNull String player) { final User user = getUser(player); - return getUserChatMeta(user, ChatMetaType.SUFFIX, world); + return getHolderChatMeta(user, ChatMetaType.SUFFIX, world); } @Override @@ -109,7 +107,7 @@ public class VaultChatHook extends Chat { @Override public String getGroupPrefix(String world, @NonNull String group) { final Group g = perms.getPlugin().getGroupManager().getByDisplayName(group); - return getGroupChatMeta(g, ChatMetaType.PREFIX, world); + return getHolderChatMeta(g, ChatMetaType.PREFIX, world); } @Override @@ -121,7 +119,7 @@ public class VaultChatHook extends Chat { @Override public String getGroupSuffix(String world, @NonNull String group) { final Group g = perms.getPlugin().getGroupManager().getByDisplayName(group); - return getGroupChatMeta(g, ChatMetaType.SUFFIX, world); + return getHolderChatMeta(g, ChatMetaType.SUFFIX, world); } @Override @@ -134,7 +132,7 @@ public class VaultChatHook extends Chat { public int getPlayerInfoInteger(String world, @NonNull String player, @NonNull String node, int defaultValue) { final User user = getUser(player); try { - return Integer.parseInt(getUserMeta(user, node, world, String.valueOf(defaultValue))); + return Integer.parseInt(getHolderMeta(user, node, world, String.valueOf(defaultValue))); } catch (NumberFormatException e) { return defaultValue; } @@ -150,7 +148,7 @@ public class VaultChatHook extends Chat { public int getGroupInfoInteger(String world, @NonNull String group, @NonNull String node, int defaultValue) { final Group g = perms.getPlugin().getGroupManager().getByDisplayName(group); try { - return Integer.parseInt(getGroupMeta(g, node, world, String.valueOf(defaultValue))); + return Integer.parseInt(getHolderMeta(g, node, world, String.valueOf(defaultValue))); } catch (NumberFormatException e) { return defaultValue; } @@ -166,7 +164,7 @@ public class VaultChatHook extends Chat { public double getPlayerInfoDouble(String world, @NonNull String player, @NonNull String node, double defaultValue) { final User user = getUser(player); try { - return Double.parseDouble(getUserMeta(user, node, world, String.valueOf(defaultValue))); + return Double.parseDouble(getHolderMeta(user, node, world, String.valueOf(defaultValue))); } catch (NumberFormatException e) { return defaultValue; } @@ -182,7 +180,7 @@ public class VaultChatHook extends Chat { public double getGroupInfoDouble(String world, @NonNull String group, @NonNull String node, double defaultValue) { final Group g = perms.getPlugin().getGroupManager().getByDisplayName(group); try { - return Double.parseDouble(getGroupMeta(g, node, world, String.valueOf(defaultValue))); + return Double.parseDouble(getHolderMeta(g, node, world, String.valueOf(defaultValue))); } catch (NumberFormatException e) { return defaultValue; } @@ -197,7 +195,7 @@ public class VaultChatHook extends Chat { @Override public boolean getPlayerInfoBoolean(String world, @NonNull String player, @NonNull String node, boolean defaultValue) { final User user = getUser(player); - String s = getUserMeta(user, node, world, String.valueOf(defaultValue)); + String s = getHolderMeta(user, node, world, String.valueOf(defaultValue)); if (!s.equalsIgnoreCase("true") && !s.equalsIgnoreCase("false")) { return defaultValue; } @@ -213,7 +211,7 @@ public class VaultChatHook extends Chat { @Override public boolean getGroupInfoBoolean(String world, @NonNull String group, @NonNull String node, boolean defaultValue) { final Group g = perms.getPlugin().getGroupManager().getByDisplayName(group); - String s = getGroupMeta(g, node, world, String.valueOf(defaultValue)); + String s = getHolderMeta(g, node, world, String.valueOf(defaultValue)); if (!s.equalsIgnoreCase("true") && !s.equalsIgnoreCase("false")) { return defaultValue; } @@ -229,7 +227,7 @@ public class VaultChatHook extends Chat { @Override public String getPlayerInfoString(String world, @NonNull String player, @NonNull String node, String defaultValue) { final User user = getUser(player); - return getUserMeta(user, node, world, defaultValue); + return getHolderMeta(user, node, world, defaultValue); } @Override @@ -241,7 +239,7 @@ public class VaultChatHook extends Chat { @Override public String getGroupInfoString(String world, @NonNull String group, @NonNull String node, String defaultValue) { final Group g = perms.getPlugin().getGroupManager().getByDisplayName(group); - return getGroupMeta(g, node, world, defaultValue); + return getHolderMeta(g, node, world, defaultValue); } @Override @@ -296,78 +294,43 @@ public class VaultChatHook extends Chat { }); } - private String getUserMeta(User user, String node, String world, String defaultValue) { - if (user == null) { + private String getHolderMeta(PermissionHolder holder, String node, String world, String defaultValue) { + if (holder == null) { return defaultValue; } world = perms.correctWorld(world); - perms.log("Getting meta: '" + node + "' for user " + user.getFriendlyName() + " on world " + world + ", server " + perms.getServer()); + perms.log("Getting meta: '" + node + "' for holder " + holder.getFriendlyName() + " on world " + world + ", server " + perms.getServer()); - String ret = user.getCachedData().getMetaData(perms.createContextForWorldLookup(perms.getPlugin().getPlayer(user), world)).getMeta().get(node); + Contexts contexts; + if (holder instanceof User) { + contexts = perms.createContextForWorldLookup(perms.getPlugin().getPlayer((User) holder), world); + } else { + contexts = perms.createContextForWorldLookup(world); + } + + String ret = holder.getCachedData().getMetaData(contexts).getMeta().get(node); return ret != null ? ret : defaultValue; } - private String getUserChatMeta(User user, ChatMetaType type, String world) { - if (user == null) { + private String getHolderChatMeta(PermissionHolder holder, ChatMetaType type, String world) { + if (holder == null) { return ""; } world = perms.correctWorld(world); - perms.log("Getting " + type.name().toLowerCase() + " for user " + user.getFriendlyName() + " on world " + world + ", server " + perms.getServer()); + perms.log("Getting " + type.name().toLowerCase() + " for holder " + holder.getFriendlyName() + " on world " + world + ", server " + perms.getServer()); - MetaData data = user.getCachedData().getMetaData(perms.createContextForWorldLookup(perms.getPlugin().getPlayer(user), world)); + Contexts contexts; + if (holder instanceof User) { + contexts = perms.createContextForWorldLookup(perms.getPlugin().getPlayer((User) holder), world); + } else { + contexts = perms.createContextForWorldLookup(world); + } + + MetaData data = holder.getCachedData().getMetaData(contexts); String ret = type == ChatMetaType.PREFIX ? data.getPrefix() : data.getSuffix(); return ret != null ? ret : ""; } - private String getGroupMeta(Group group, String node, String world, String defaultValue) { - if (group == null || node.equals("")) { - return defaultValue; - } - - world = perms.correctWorld(world); - perms.log("Getting meta: '" + node + "' for group " + group.getName() + " on world " + world + ", server " + perms.getServer()); - - for (Node n : group.getOwnNodes()) { - if (!n.getValuePrimitive()) continue; - if (!n.isMeta()) continue; - if (!n.shouldApplyWithContext(perms.createContextForWorldLookup(world).getContexts())) continue; - - Map.Entry meta = n.getMeta(); - if (meta.getKey().equalsIgnoreCase(node)) { - return meta.getValue(); - } - } - - return defaultValue; - } - - private String getGroupChatMeta(Group group, ChatMetaType type, String world) { - if (group == null) { - return ""; - } - - world = perms.correctWorld(world); - perms.log("Getting " + type.name().toLowerCase() + " for group " + group + " on world " + world + ", server " + perms.getServer()); - - int priority = Integer.MIN_VALUE; - String meta = null; - - Contexts contexts = Contexts.of(perms.createContextForWorldLookup(world).getContexts(), perms.isIncludeGlobal(), true, true, true, true, false); - for (Node n : group.getAllNodes(contexts)) { - if (!n.getValuePrimitive()) continue; - if (type.shouldIgnore(n)) continue; - if (!n.shouldApplyWithContext(perms.createContextForWorldLookup(world).getContexts())) continue; - - Map.Entry value = type.getEntry(n); - if (value.getKey() > priority) { - meta = value.getValue(); - priority = value.getKey(); - } - } - - return meta != null ? meta : ""; - } - } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultExecutor.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultExecutor.java index 3e0ce41d6..d49436cb6 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultExecutor.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/VaultExecutor.java @@ -29,8 +29,8 @@ import me.lucko.luckperms.bukkit.LPBukkitPlugin; import org.bukkit.scheduler.BukkitTask; -import java.util.ArrayList; -import java.util.List; +import java.util.Queue; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.Executor; /** @@ -39,7 +39,7 @@ import java.util.concurrent.Executor; public class VaultExecutor implements Runnable, Executor { private BukkitTask task = null; - private final List tasks = new ArrayList<>(); + private final Queue tasks = new ConcurrentLinkedQueue<>(); public VaultExecutor(LPBukkitPlugin plugin) { task = plugin.getServer().getScheduler().runTaskTimerAsynchronously(plugin, this, 1L, 1L); @@ -47,25 +47,12 @@ public class VaultExecutor implements Runnable, Executor { @Override public void execute(Runnable r) { - synchronized (tasks) { - tasks.add(r); - } + tasks.offer(r); } @Override public void run() { - List toRun; - synchronized (tasks) { - if (tasks.isEmpty()) { - return; - } - - toRun = new ArrayList<>(tasks.size()); - toRun.addAll(tasks); - tasks.clear(); - } - - for (Runnable runnable : toRun) { + for (Runnable runnable; (runnable = tasks.poll()) != null; ) { try { runnable.run(); } catch (Exception e) { diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeCommandExecutor.java b/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeCommandExecutor.java index 08322efa8..95bf6f5c6 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeCommandExecutor.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeCommandExecutor.java @@ -30,7 +30,6 @@ import com.google.common.base.Splitter; import me.lucko.luckperms.common.commands.CommandManager; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.plugin.Command; @@ -55,7 +54,7 @@ public class BungeeCommandExecutor extends Command implements TabExecutor { @Override public void execute(CommandSender sender, String[] args) { Sender lpSender = plugin.getSenderFactory().wrap(sender); - List arguments = Util.stripQuotes(ARGUMENT_SPLITTER.splitToList(ARGUMENT_JOINER.join(args))); + List arguments = CommandManager.stripQuotes(ARGUMENT_SPLITTER.splitToList(ARGUMENT_JOINER.join(args))); manager.onCommand(lpSender, "lpb", arguments); } @@ -63,7 +62,7 @@ public class BungeeCommandExecutor extends Command implements TabExecutor { @Override public Iterable onTabComplete(CommandSender sender, String[] args) { Sender lpSender = plugin.getSenderFactory().wrap(sender); - List arguments = Util.stripQuotes(TAB_COMPLETE_ARGUMENT_SPLITTER.splitToList(ARGUMENT_JOINER.join(args))); + List arguments = CommandManager.stripQuotes(TAB_COMPLETE_ARGUMENT_SPLITTER.splitToList(ARGUMENT_JOINER.join(args))); return manager.onTabComplete(lpSender, arguments); } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeePermissionCheckListener.java b/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeePermissionCheckListener.java index 9a8253288..f5996ae1f 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeePermissionCheckListener.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/listeners/BungeePermissionCheckListener.java @@ -51,7 +51,7 @@ public class BungeePermissionCheckListener implements Listener { return; } - final ProxiedPlayer player = ((ProxiedPlayer) e.getSender()); + ProxiedPlayer player = ((ProxiedPlayer) e.getSender()); User user = plugin.getUserManager().getIfLoaded(plugin.getUuidCache().getUUID(player.getUniqueId())); if (user == null) { @@ -74,7 +74,7 @@ public class BungeePermissionCheckListener implements Listener { return; } - final ProxiedPlayer player = ((ProxiedPlayer) e.getSender()); + ProxiedPlayer player = ((ProxiedPlayer) e.getSender()); User user = plugin.getUserManager().getIfLoaded(plugin.getUuidCache().getUUID(player.getUniqueId())); if (user == null) { diff --git a/common/src/main/java/me/lucko/luckperms/common/actionlog/ExtendedLogEntry.java b/common/src/main/java/me/lucko/luckperms/common/actionlog/ExtendedLogEntry.java index 6d650c7ba..3fa5bebe7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/actionlog/ExtendedLogEntry.java +++ b/common/src/main/java/me/lucko/luckperms/common/actionlog/ExtendedLogEntry.java @@ -76,14 +76,6 @@ public class ExtendedLogEntry implements LogEntry { .thenComparing(LogEntry::getActedName, String.CASE_INSENSITIVE_ORDER) .thenComparing(LogEntry::getAction); - /** - * Compares two LogEntries in reverse order - * - * @since 3.3 - * @see #COMPARATOR - */ - public static final Comparator REVERSE_ORDER = COMPARATOR.reversed(); - /** * Creates a new log entry builder * diff --git a/common/src/main/java/me/lucko/luckperms/common/assignments/AssignmentExpression.java b/common/src/main/java/me/lucko/luckperms/common/assignments/AssignmentExpression.java new file mode 100644 index 000000000..7bdc10c5a --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/assignments/AssignmentExpression.java @@ -0,0 +1,151 @@ +/* + * This file is part of LuckPerms, licensed under the MIT License. + * + * Copyright (c) lucko (Luck) + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.assignments; + +import com.google.common.collect.ImmutableList; + +import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.api.Tristate; +import me.lucko.luckperms.common.model.PermissionHolder; +import me.lucko.luckperms.common.node.LegacyNodeFactory; +import me.lucko.luckperms.common.utils.Scripting; + +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import javax.script.ScriptEngine; + +public class AssignmentExpression { + + public static AssignmentExpression compile(String expression) { + return new AssignmentExpression(expression); + } + + private final List expression; + + private AssignmentExpression(String expression) { + this.expression = generateExpression(expression); + } + + public boolean parse(PermissionHolder holder, Tristate tristate) throws IllegalArgumentException { + ScriptEngine engine = Scripting.getScriptEngine(); + if (engine == null) { + throw new NullPointerException("script engine"); + } + + Predicate checker = node -> holder.hasPermission(node) == tristate; + + String exp = expression.stream().map(t -> t.forExpression(checker)).collect(Collectors.joining()) + .replace("&", "&&").replace("|", "||"); + + try { + String result = engine.eval(exp).toString(); + + if (!result.equals("true") && !result.equals("false")) { + throw new IllegalArgumentException(); + } + + return Boolean.parseBoolean(result); + + } catch (Throwable t) { + throw new IllegalArgumentException(exp, t); + } + } + + private static List generateExpression(String input) { + ImmutableList.Builder exp = ImmutableList.builder(); + + while (true) { + int start = input.indexOf("<"); + int end = input.indexOf(">"); + if (start == -1 || end == -1) { + break; + } + + if (start != 0) { + Token before = new StringToken(input.substring(0, start)); + exp.add(before); + } + + String match = input.substring(start, end + 1); + String matchContent = match.substring(1, match.length() - 1); + + Token permission = new PermissionToken(matchContent); + exp.add(permission); + + input = input.substring(end + 1); + } + + if (!input.isEmpty()) { + exp.add(new StringToken(input)); + } + + return exp.build(); + } + + private interface Token { + String forExpression(Predicate checker); + } + + private static final class StringToken implements Token { + private final String string; + + private StringToken(String string) { + this.string = string; + } + + @Override + public String forExpression(Predicate checker) { + return string; + } + + @Override + public String toString() { + return string; + } + } + + private static final class PermissionToken implements Token { + private final String permission; + private final Node node; + + private PermissionToken(String permission) { + this.permission = permission; + this.node = LegacyNodeFactory.fromSerializedNode(permission, true); + } + + @Override + public String forExpression(Predicate checker) { + return Boolean.toString(checker.test(node)); + } + + @Override + public String toString() { + return "<" + permission + ">"; + } + } +} diff --git a/common/src/main/java/me/lucko/luckperms/common/defaults/Rule.java b/common/src/main/java/me/lucko/luckperms/common/assignments/AssignmentRule.java similarity index 64% rename from common/src/main/java/me/lucko/luckperms/common/defaults/Rule.java rename to common/src/main/java/me/lucko/luckperms/common/assignments/AssignmentRule.java index e2f9ec21b..7202002b0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/defaults/Rule.java +++ b/common/src/main/java/me/lucko/luckperms/common/assignments/AssignmentRule.java @@ -23,34 +23,43 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.defaults; +package me.lucko.luckperms.common.assignments; -import lombok.AllArgsConstructor; import lombok.Getter; import lombok.ToString; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.model.User; -import me.lucko.luckperms.common.node.NodeFactory; +import me.lucko.luckperms.common.node.LegacyNodeFactory; +import me.lucko.luckperms.common.utils.ImmutableCollectors; import java.util.List; @Getter @ToString -@AllArgsConstructor -public class Rule { - private final String hasTrueExpression; - private final String hasFalseExpression; - private final String lacksExpression; +public class AssignmentRule { + private final AssignmentExpression hasTrueExpression; + private final AssignmentExpression hasFalseExpression; + private final AssignmentExpression lacksExpression; - private final List toGive; - private final List toTake; + private final List toGive; + private final List toTake; private final String setPrimaryGroup; + public AssignmentRule(String hasTrueExpression, String hasFalseExpression, String lacksExpression, List toGive, List toTake, String setPrimaryGroup) { + this.hasTrueExpression = AssignmentExpression.compile(hasTrueExpression); + this.hasFalseExpression = AssignmentExpression.compile(hasFalseExpression); + this.lacksExpression = AssignmentExpression.compile(lacksExpression); + this.toGive = toGive.stream().map(s -> LegacyNodeFactory.fromSerializedNode(s, true)).collect(ImmutableCollectors.toImmutableList());; + this.toTake = toTake.stream().map(s -> LegacyNodeFactory.fromSerializedNode(s, true)).collect(ImmutableCollectors.toImmutableList()); + this.setPrimaryGroup = setPrimaryGroup; + } + public boolean apply(User user) { if (hasTrueExpression != null) { try { - boolean b = LogicParser.parse(hasTrueExpression, user, Tristate.TRUE); + boolean b = hasTrueExpression.parse(user, Tristate.TRUE); if (!b) { // The holder does not meet this requirement return false; @@ -64,7 +73,7 @@ public class Rule { if (hasFalseExpression != null) { try { - boolean b = LogicParser.parse(hasFalseExpression, user, Tristate.FALSE); + boolean b = hasFalseExpression.parse(user, Tristate.FALSE); if (!b) { // The holder does not meet this requirement return false; @@ -78,7 +87,7 @@ public class Rule { if (lacksExpression != null) { try { - boolean b = LogicParser.parse(lacksExpression, user, Tristate.UNDEFINED); + boolean b = lacksExpression.parse(user, Tristate.UNDEFINED); if (!b) { // The holder does not meet this requirement return false; @@ -91,12 +100,12 @@ public class Rule { } // The holder meets all of the requirements of this rule. - for (String s : toTake) { - user.unsetPermission(NodeFactory.fromSerializedNode(s, true)); + for (Node n : toTake) { + user.unsetPermission(n); } - for (String s : toGive) { - user.setPermission(NodeFactory.fromSerializedNode(s, true)); + for (Node n : toGive) { + user.setPermission(n); } if (setPrimaryGroup != null) { diff --git a/common/src/main/java/me/lucko/luckperms/common/backup/ImporterSender.java b/common/src/main/java/me/lucko/luckperms/common/backup/DummySender.java similarity index 92% rename from common/src/main/java/me/lucko/luckperms/common/backup/ImporterSender.java rename to common/src/main/java/me/lucko/luckperms/common/backup/DummySender.java index e877c21d1..054cb64fc 100644 --- a/common/src/main/java/me/lucko/luckperms/common/backup/ImporterSender.java +++ b/common/src/main/java/me/lucko/luckperms/common/backup/DummySender.java @@ -38,19 +38,19 @@ import net.kyori.text.Component; import java.util.UUID; @Getter -public abstract class ImporterSender implements Sender { +public abstract class DummySender implements Sender { private final LuckPermsPlugin platform; private final UUID uuid; private final String name; - public ImporterSender(LuckPermsPlugin plugin, UUID uuid, String name) { + public DummySender(LuckPermsPlugin plugin, UUID uuid, String name) { this.platform = plugin; this.uuid = uuid; this.name = name; } - public ImporterSender(LuckPermsPlugin plugin) { + public DummySender(LuckPermsPlugin plugin) { this(plugin, Constants.IMPORT_UUID, Constants.IMPORT_NAME); } diff --git a/common/src/main/java/me/lucko/luckperms/common/backup/Exporter.java b/common/src/main/java/me/lucko/luckperms/common/backup/Exporter.java index e3fe24541..b76056e97 100644 --- a/common/src/main/java/me/lucko/luckperms/common/backup/Exporter.java +++ b/common/src/main/java/me/lucko/luckperms/common/backup/Exporter.java @@ -27,7 +27,7 @@ package me.lucko.luckperms.common.backup; import me.lucko.luckperms.api.Node; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.locale.Message; import me.lucko.luckperms.common.logging.ProgressLogger; import me.lucko.luckperms.common.model.Group; @@ -180,7 +180,7 @@ public class Exporter implements Runnable { write(writer, "# Export users"); // divide into 16 pools. - Cycle> userPools = new Cycle<>(Util.nInstances(32, ArrayList::new)); + Cycle> userPools = new Cycle<>(CommandUtils.nInstances(32, ArrayList::new)); for (UUID uuid : users) { userPools.next().add(uuid); } diff --git a/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java b/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java index 9b2a59767..c9f1db1b4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java +++ b/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java @@ -34,7 +34,7 @@ import com.google.common.collect.ImmutableSet; 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.commands.utils.CommandUtils; import me.lucko.luckperms.common.locale.Message; import me.lucko.luckperms.common.utils.Cycle; @@ -97,7 +97,7 @@ public class Importer implements Runnable { } // divide commands up into pools - Cycle> commandPools = new Cycle<>(Util.nInstances(128, ArrayList::new)); + Cycle> commandPools = new Cycle<>(CommandUtils.nInstances(128, ArrayList::new)); String lastTarget = null; for (ImportCommand cmd : toExecute) { @@ -191,7 +191,7 @@ public class Importer implements Runnable { } @Getter - private static class ImportCommand extends ImporterSender { + private static class ImportCommand extends DummySender { private static final Splitter SPACE_SPLIT = Splitter.on(" "); private final CommandManager commandManager; @@ -230,7 +230,7 @@ public class Importer implements Runnable { CommandResult result = commandManager.onCommand( this, "lp", - Util.stripQuotes(Splitter.on(CommandManager.COMMAND_SEPARATOR_PATTERN).omitEmptyStrings().splitToList(getCommand())) + CommandManager.stripQuotes(Splitter.on(CommandManager.COMMAND_SEPARATOR_PATTERN).omitEmptyStrings().splitToList(getCommand())) ).get(); setResult(result); diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/GroupCache.java b/common/src/main/java/me/lucko/luckperms/common/caching/GroupCachedData.java similarity index 92% rename from common/src/main/java/me/lucko/luckperms/common/caching/GroupCache.java rename to common/src/main/java/me/lucko/luckperms/common/caching/GroupCachedData.java index 48d796ab7..491f920fb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/GroupCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/GroupCachedData.java @@ -31,9 +31,9 @@ import me.lucko.luckperms.common.model.Group; /** * Holds an easily accessible cache of a groups's data in a number of contexts */ -public class GroupCache extends HolderCache implements GroupData { +public class GroupCachedData extends HolderCachedData implements GroupData { - public GroupCache(Group holder) { + public GroupCachedData(Group holder) { super(holder); } diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/HolderCache.java b/common/src/main/java/me/lucko/luckperms/common/caching/HolderCachedData.java similarity index 97% rename from common/src/main/java/me/lucko/luckperms/common/caching/HolderCache.java rename to common/src/main/java/me/lucko/luckperms/common/caching/HolderCachedData.java index 333314bf5..6303c77ae 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/HolderCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/HolderCachedData.java @@ -36,6 +36,9 @@ import me.lucko.luckperms.api.ChatMetaType; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.caching.CachedData; 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.config.ConfigKeys; import me.lucko.luckperms.common.metastacking.SimpleMetaStack; import me.lucko.luckperms.common.model.PermissionHolder; @@ -50,7 +53,7 @@ import java.util.concurrent.TimeUnit; * Holds an easily accessible cache of a holders data in a number of contexts */ @RequiredArgsConstructor -public abstract class HolderCache implements CachedData { +public abstract class HolderCachedData implements CachedData { /** * The holder whom this data instance is representing diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/UserCache.java b/common/src/main/java/me/lucko/luckperms/common/caching/UserCachedData.java similarity index 92% rename from common/src/main/java/me/lucko/luckperms/common/caching/UserCache.java rename to common/src/main/java/me/lucko/luckperms/common/caching/UserCachedData.java index ef36f9b3b..2992fb1e8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/UserCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/UserCachedData.java @@ -31,9 +31,9 @@ import me.lucko.luckperms.common.model.User; /** * Holds an easily accessible cache of a user's data in a number of contexts */ -public class UserCache extends HolderCache implements UserData { +public class UserCachedData extends HolderCachedData implements UserData { - public UserCache(User holder) { + public UserCachedData(User holder) { super(holder); } diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/MetaAccumulator.java b/common/src/main/java/me/lucko/luckperms/common/caching/type/MetaAccumulator.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/caching/MetaAccumulator.java rename to common/src/main/java/me/lucko/luckperms/common/caching/type/MetaAccumulator.java index a4f6363a8..1f7614237 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/MetaAccumulator.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/type/MetaAccumulator.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.caching; +package me.lucko.luckperms.common.caching.type; import lombok.AccessLevel; import lombok.Getter; diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/MetaCache.java b/common/src/main/java/me/lucko/luckperms/common/caching/type/MetaCache.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/caching/MetaCache.java rename to common/src/main/java/me/lucko/luckperms/common/caching/type/MetaCache.java index ac70b0120..6ad3d7372 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/MetaCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/type/MetaCache.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.caching; +package me.lucko.luckperms.common.caching.type; import lombok.AccessLevel; import lombok.Getter; diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/PermissionCache.java b/common/src/main/java/me/lucko/luckperms/common/caching/type/PermissionCache.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/caching/PermissionCache.java rename to common/src/main/java/me/lucko/luckperms/common/caching/type/PermissionCache.java index 55899d518..493dd35ca 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/PermissionCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/type/PermissionCache.java @@ -23,7 +23,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.caching; +package me.lucko.luckperms.common.caching.type; import lombok.NonNull; diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java b/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java index 268728145..d63f1924d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/CommandManager.java @@ -55,7 +55,7 @@ import me.lucko.luckperms.common.commands.impl.track.TrackMainCommand; import me.lucko.luckperms.common.commands.impl.user.UserMainCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.LocaleManager; @@ -70,6 +70,7 @@ import net.kyori.text.event.HoverEvent; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.ListIterator; import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.regex.Pattern; @@ -240,7 +241,7 @@ public class CommandManager { } private void sendCommandUsage(Sender sender, String label) { - Util.sendPluginMessage(sender, "&2Running &bLuckPerms v" + plugin.getVersion() + "&2."); + CommandUtils.sendPluginMessage(sender, "&2Running &bLuckPerms v" + plugin.getVersion() + "&2."); mainCommands.stream() .filter(Command::shouldDisplay) .filter(c -> c.isAuthorized(sender)) @@ -358,6 +359,9 @@ public class CommandManager { args.remove(2); args.add(2, "parent"); break; + case "e": + args.remove(2); + args.add(2, "editor"); // Provide backwards compatibility case "setprimarygroup": @@ -465,4 +469,27 @@ public class CommandManager { } } } + + /** + * Strips outer quote marks from a list of parsed arguments. + * + * @param input the list of arguments to strip quotes from + * @return an ArrayList containing the contents of input without quotes + */ + public static List stripQuotes(List input) { + input = new ArrayList<>(input); + ListIterator iterator = input.listIterator(); + while (iterator.hasNext()) { + String value = iterator.next(); + if (value.length() < 3) { + continue; + } + + if (value.charAt(0) == '"' && value.charAt(value.length() - 1) == '"') { + iterator.set(value.substring(1, value.length() - 1)); + } + } + return input; + } + } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/MainCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/MainCommand.java index 0be321ff2..7fef1d7e4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/MainCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/MainCommand.java @@ -29,7 +29,7 @@ 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.commands.utils.CommandUtils; import me.lucko.luckperms.common.locale.LocalizedSpec; import me.lucko.luckperms.common.locale.Message; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -173,7 +173,7 @@ public abstract class MainCommand extends Command { .collect(Collectors.toList()); if (subs.size() > 0) { - Util.sendPluginMessage(sender, "&b" + getName() + " Sub Commands: &7(" + String.format(getUsage(), label) + " ...)"); + CommandUtils.sendPluginMessage(sender, "&b" + getName() + " Sub Commands: &7(" + String.format(getUsage(), label) + " ...)"); for (Command s : subs) { s.sendUsage(sender, label); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SharedMainCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SharedMainCommand.java index 5a8bc2083..fa4bc3fd8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SharedMainCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SharedMainCommand.java @@ -29,7 +29,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.locale.LocalizedSpec; import me.lucko.luckperms.common.locale.Message; import me.lucko.luckperms.common.model.PermissionHolder; @@ -147,9 +147,9 @@ public class SharedMainCommand extends SubCommand if (subs.size() > 0) { if (user) { - Util.sendPluginMessage(sender, "&b" + getName() + " Sub Commands: &7(" + String.format("/%s user " + getName().toLowerCase() + " ...)", label)); + CommandUtils.sendPluginMessage(sender, "&b" + getName() + " Sub Commands: &7(" + String.format("/%s user " + getName().toLowerCase() + " ...)", label)); } else { - Util.sendPluginMessage(sender, "&b" + getName() + " Sub Commands: &7(" + String.format("/%s group " + getName().toLowerCase() + " ...)", label)); + CommandUtils.sendPluginMessage(sender, "&b" + getName() + " Sub Commands: &7(" + String.format("/%s group " + getName().toLowerCase() + " ...)", label)); } for (SharedSubCommand s : subs) { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SharedSubCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SharedSubCommand.java index 314c44c46..7a165669e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SharedSubCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SharedSubCommand.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; 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.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.LocalizedSpec; import me.lucko.luckperms.common.model.Group; @@ -91,16 +91,16 @@ public abstract class SharedSubCommand { } } - Util.sendPluginMessage(sender, "&3> &a" + getName() + sb.toString()); + CommandUtils.sendPluginMessage(sender, "&3> &a" + getName() + sb.toString()); } public void sendDetailedUsage(Sender sender) { - Util.sendPluginMessage(sender, "&3&lCommand Usage &3- &b" + getName()); - Util.sendPluginMessage(sender, "&b> &7" + getDescription()); + CommandUtils.sendPluginMessage(sender, "&3&lCommand Usage &3- &b" + getName()); + CommandUtils.sendPluginMessage(sender, "&b> &7" + getDescription()); if (getArgs() != null) { - Util.sendPluginMessage(sender, "&3Arguments:"); + CommandUtils.sendPluginMessage(sender, "&3Arguments:"); for (Arg arg : getArgs()) { - Util.sendPluginMessage(sender, "&b- " + arg.asPrettyString() + "&3 -> &7" + arg.getDescription()); + CommandUtils.sendPluginMessage(sender, "&b- " + arg.asPrettyString() + "&3 -> &7" + arg.getDescription()); } } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SingleCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SingleCommand.java index ff58473a8..4888b2721 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SingleCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SingleCommand.java @@ -29,7 +29,7 @@ import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; 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.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.LocalizedSpec; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -63,17 +63,17 @@ public abstract class SingleCommand extends Command { } } - Util.sendPluginMessage(sender, "&3> &a" + getName().toLowerCase() + sb.toString()); + CommandUtils.sendPluginMessage(sender, "&3> &a" + getName().toLowerCase() + sb.toString()); } @Override public void sendDetailedUsage(Sender sender, String label) { - Util.sendPluginMessage(sender, "&3&lCommand Usage &3- &b" + getName()); - Util.sendPluginMessage(sender, "&b> &7" + getDescription()); + CommandUtils.sendPluginMessage(sender, "&3&lCommand Usage &3- &b" + getName()); + CommandUtils.sendPluginMessage(sender, "&b> &7" + getDescription()); if (getArgs().isPresent()) { - Util.sendPluginMessage(sender, "&3Arguments:"); + CommandUtils.sendPluginMessage(sender, "&3Arguments:"); for (Arg arg : getArgs().get()) { - Util.sendPluginMessage(sender, "&b- " + arg.asPrettyString() + "&3 -> &7" + arg.getDescription()); + CommandUtils.sendPluginMessage(sender, "&b- " + arg.asPrettyString() + "&3 -> &7" + arg.getDescription()); } } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SubCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SubCommand.java index b8e7b5013..089fb4f80 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SubCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/abstraction/SubCommand.java @@ -31,7 +31,7 @@ import com.google.common.base.Splitter; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.LocalizedSpec; @@ -78,17 +78,17 @@ public abstract class SubCommand extends Command { } } - Util.sendPluginMessage(sender, "&3> &a" + getName().toLowerCase() + sb.toString()); + CommandUtils.sendPluginMessage(sender, "&3> &a" + getName().toLowerCase() + sb.toString()); } @Override public void sendDetailedUsage(Sender sender, String label) { - Util.sendPluginMessage(sender, "&3&lCommand Usage &3- &b" + getName()); - Util.sendPluginMessage(sender, "&b> &7" + getDescription()); + CommandUtils.sendPluginMessage(sender, "&3&lCommand Usage &3- &b" + getName()); + CommandUtils.sendPluginMessage(sender, "&b> &7" + getDescription()); if (getArgs().isPresent()) { - Util.sendPluginMessage(sender, "&3Arguments:"); + CommandUtils.sendPluginMessage(sender, "&3Arguments:"); for (Arg arg : getArgs().get()) { - Util.sendPluginMessage(sender, "&b- " + arg.asPrettyString() + "&3 -> &7" + arg.getDescription()); + CommandUtils.sendPluginMessage(sender, "&b- " + arg.asPrettyString() + "&3 -> &7" + arg.getDescription()); } } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddChatMeta.java index 7261b50d5..de4a3d642 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddChatMeta.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -84,7 +84,7 @@ public class MetaAddChatMeta extends SharedSubCommand { DataMutateResult result = holder.setPermission(NodeFactory.makeChatMetaNode(type, priority, meta).withExtraContext(context).build()); if (result.asBoolean()) { - TextComponent.Builder builder = TextUtils.fromLegacy(Message.ADD_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); + TextComponent.Builder builder = TextUtils.fromLegacy(Message.ADD_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy( "¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta, '¥' @@ -99,7 +99,7 @@ public class MetaAddChatMeta extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.ALREADY_HAS_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context)); + Message.ALREADY_HAS_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddTempChatMeta.java index 1a399fc58..621774938 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaAddTempChatMeta.java @@ -36,7 +36,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; @@ -94,7 +94,7 @@ public class MetaAddTempChatMeta extends SharedSubCommand { if (ret.getKey().asBoolean()) { duration = ret.getValue().getExpiryUnixTime(); - TextComponent.Builder builder = TextUtils.fromLegacy(Message.ADD_TEMP_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, DateUtil.formatDateDiff(duration), Util.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); + TextComponent.Builder builder = TextUtils.fromLegacy(Message.ADD_TEMP_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, DateUtil.formatDateDiff(duration), CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy( "¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta, '¥' @@ -109,7 +109,7 @@ public class MetaAddTempChatMeta extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.ALREADY_HAS_TEMP_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context)); + Message.ALREADY_HAS_TEMP_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaClear.java index a434b3ff6..12cb34626 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaClear.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -102,9 +102,9 @@ public class MetaClear extends SharedSubCommand { int changed = before - holder.getEnduringNodes().size(); if (changed == 1) { - Message.META_CLEAR_SUCCESS_SINGULAR.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), Util.contextSetToString(context), changed); + Message.META_CLEAR_SUCCESS_SINGULAR.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), CommandUtils.contextSetToString(context), changed); } else { - Message.META_CLEAR_SUCCESS.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), Util.contextSetToString(context), changed); + Message.META_CLEAR_SUCCESS.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), CommandUtils.contextSetToString(context), changed); } ExtendedLogEntry.build().actor(sender).acted(holder) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaInfo.java index 9f2aa014a..1513dcede 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaInfo.java @@ -34,8 +34,8 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.commands.utils.MetaComparator; -import me.lucko.luckperms.common.commands.utils.Util; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -125,7 +125,7 @@ public class MetaInfo extends SharedSubCommand { for (LocalizedNode m : meta) { String location = processLocation(m, holder); if (m.hasSpecificContext()) { - String context = Util.getAppendableNodeContextString(m); + String context = CommandUtils.getAppendableNodeContextString(m); TextComponent.Builder builder = TextUtils.fromLegacy(Message.META_ENTRY_WITH_CONTEXT.asString(sender.getPlatform().getLocaleManager(), m.getMeta().getKey(), m.getMeta().getValue(), location, context), Constants.COLOR_CHAR).toBuilder(); builder.applyDeep(makeFancy(holder, label, m)); sender.sendMessage(builder.build()); @@ -141,7 +141,7 @@ public class MetaInfo extends SharedSubCommand { for (Map.Entry e : meta) { String location = processLocation(e.getValue(), holder); if (e.getValue().hasSpecificContext()) { - String context = Util.getAppendableNodeContextString(e.getValue()); + String context = CommandUtils.getAppendableNodeContextString(e.getValue()); TextComponent.Builder builder = TextUtils.fromLegacy(Message.CHAT_META_ENTRY_WITH_CONTEXT.asString(sender.getPlatform().getLocaleManager(), e.getKey(), type.getEntry(e.getValue()).getValue(), location, context), Constants.COLOR_CHAR).toBuilder(); builder.applyDeep(makeFancy(type, holder, label, e.getValue())); sender.sendMessage(builder.build()); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveChatMeta.java index 8a73432d9..9ffbddbd5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveChatMeta.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -90,7 +90,7 @@ public class MetaRemoveChatMeta extends SharedSubCommand { !n.isTemporary() && n.getFullContexts().makeImmutable().equals(context.makeImmutable()) ); - Message.BULK_REMOVE_CHATMETA_SUCCESS.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), priority, Util.contextSetToString(context)); + Message.BULK_REMOVE_CHATMETA_SUCCESS.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), priority, CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("meta" , "remove" + type.name().toLowerCase(), priority, "*", context) @@ -103,7 +103,7 @@ public class MetaRemoveChatMeta extends SharedSubCommand { DataMutateResult result = holder.unsetPermission(NodeFactory.makeChatMetaNode(type, priority, meta).withExtraContext(context).build()); if (result.asBoolean()) { - TextComponent.Builder builder = TextUtils.fromLegacy(Message.REMOVE_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); + TextComponent.Builder builder = TextUtils.fromLegacy(Message.REMOVE_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy( "¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta, '¥' @@ -118,7 +118,7 @@ public class MetaRemoveChatMeta extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.DOES_NOT_HAVE_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context)); + Message.DOES_NOT_HAVE_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveTempChatMeta.java index a6f8468c1..5b61086bb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaRemoveTempChatMeta.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -90,7 +90,7 @@ public class MetaRemoveTempChatMeta extends SharedSubCommand { !n.isPermanent() && n.getFullContexts().makeImmutable().equals(context.makeImmutable()) ); - Message.BULK_REMOVE_TEMP_CHATMETA_SUCCESS.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), priority, Util.contextSetToString(context)); + Message.BULK_REMOVE_TEMP_CHATMETA_SUCCESS.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), priority, CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("meta" , "removetemp" + type.name().toLowerCase(), priority, "*", context) @@ -103,7 +103,7 @@ public class MetaRemoveTempChatMeta extends SharedSubCommand { DataMutateResult result = holder.unsetPermission(NodeFactory.makeChatMetaNode(type, priority, meta).setExpiry(10L).withExtraContext(context).build()); if (result.asBoolean()) { - TextComponent.Builder builder = TextUtils.fromLegacy(Message.REMOVE_TEMP_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); + TextComponent.Builder builder = TextUtils.fromLegacy(Message.REMOVE_TEMP_CHATMETA_SUCCESS.asString(plugin.getLocaleManager(), holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy( "¥3Raw " + type.name().toLowerCase() + ": ¥r" + meta, '¥' @@ -118,7 +118,7 @@ public class MetaRemoveTempChatMeta extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.DOES_NOT_HAVE_TEMP_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, Util.contextSetToString(context)); + Message.DOES_NOT_HAVE_TEMP_CHAT_META.send(sender, holder.getFriendlyName(), type.name().toLowerCase(), meta, priority, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSet.java index 8b30a00da..85768a5c9 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSet.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -79,14 +79,14 @@ public class MetaSet extends SharedSubCommand { Node n = NodeFactory.makeMetaNode(key, value).withExtraContext(context).build(); if (holder.hasPermission(n).asBoolean()) { - Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName(), key, value, Util.contextSetToString(context)); + Message.ALREADY_HAS_META.send(sender, holder.getFriendlyName(), key, value, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } holder.clearMetaKeys(key, context, false); holder.setPermission(n); - TextComponent.Builder builder = TextUtils.fromLegacy(Message.SET_META_SUCCESS.asString(plugin.getLocaleManager(), key, value, holder.getFriendlyName(), Util.contextSetToString(context))).toBuilder(); + TextComponent.Builder builder = TextUtils.fromLegacy(Message.SET_META_SUCCESS.asString(plugin.getLocaleManager(), key, value, holder.getFriendlyName(), CommandUtils.contextSetToString(context))).toBuilder(); HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy( TextUtils.joinNewline("¥3Raw key: ¥r" + key, "¥3Raw value: ¥r" + value), '¥' diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSetTemp.java index 8ea929d50..97fe54839 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaSetTemp.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; @@ -85,14 +85,14 @@ public class MetaSetTemp extends SharedSubCommand { Node n = NodeFactory.makeMetaNode(key, value).withExtraContext(context).setExpiry(duration).build(); if (holder.hasPermission(n).asBoolean()) { - Message.ALREADY_HAS_TEMP_META.send(sender, holder.getFriendlyName(), key, value, Util.contextSetToString(context)); + Message.ALREADY_HAS_TEMP_META.send(sender, holder.getFriendlyName(), key, value, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } holder.clearMetaKeys(key, context, true); duration = holder.setPermission(n, modifier).getValue().getExpiryUnixTime(); - TextComponent.Builder builder = TextUtils.fromLegacy(Message.SET_META_TEMP_SUCCESS.asString(plugin.getLocaleManager(), key, value, holder.getFriendlyName(), DateUtil.formatDateDiff(duration), Util.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); + TextComponent.Builder builder = TextUtils.fromLegacy(Message.SET_META_TEMP_SUCCESS.asString(plugin.getLocaleManager(), key, value, holder.getFriendlyName(), DateUtil.formatDateDiff(duration), CommandUtils.contextSetToString(context)), Constants.COLOR_CHAR).toBuilder(); HoverEvent event = new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextUtils.fromLegacy( TextUtils.joinNewline("¥3Raw key: ¥r" + key, "¥3Raw value: ¥r" + value), '¥' diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnset.java index 9b8a21056..0866f7c4d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnset.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -70,7 +70,7 @@ public class MetaUnset extends SharedSubCommand { } if (holder.clearMetaKeys(key, context, false)) { - Message.UNSET_META_SUCCESS.send(sender, key, holder.getFriendlyName(), Util.contextSetToString(context)); + Message.UNSET_META_SUCCESS.send(sender, key, holder.getFriendlyName(), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("meta", "unset", key, context) @@ -79,7 +79,7 @@ public class MetaUnset extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.DOESNT_HAVE_META.send(sender, holder.getFriendlyName(), key, Util.contextSetToString(context)); + Message.DOESNT_HAVE_META.send(sender, holder.getFriendlyName(), key, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnsetTemp.java index 9679f1686..556d4ea15 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/meta/MetaUnsetTemp.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -70,7 +70,7 @@ public class MetaUnsetTemp extends SharedSubCommand { } if (holder.clearMetaKeys(key, context, true)) { - Message.UNSET_META_TEMP_SUCCESS.send(sender, key, holder.getFriendlyName(), Util.contextSetToString(context)); + Message.UNSET_META_TEMP_SUCCESS.send(sender, key, holder.getFriendlyName(), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("meta", "unsettemp", key, context) @@ -79,7 +79,7 @@ public class MetaUnsetTemp extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.DOESNT_HAVE_TEMP_META.send(sender, holder.getFriendlyName(), key, Util.contextSetToString(context)); + Message.DOESNT_HAVE_TEMP_META.send(sender, holder.getFriendlyName(), key, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/other/HolderClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/other/HolderClear.java index e562e1a06..7c236cf41 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/other/HolderClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/other/HolderClear.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -74,9 +74,9 @@ public class HolderClear extends SubCommand { int changed = before - holder.getEnduringNodes().size(); if (changed == 1) { - Message.CLEAR_SUCCESS_SINGULAR.send(sender, holder.getFriendlyName(), Util.contextSetToString(context), changed); + Message.CLEAR_SUCCESS_SINGULAR.send(sender, holder.getFriendlyName(), CommandUtils.contextSetToString(context), changed); } else { - Message.CLEAR_SUCCESS.send(sender, holder.getFriendlyName(), Util.contextSetToString(context), changed); + Message.CLEAR_SUCCESS.send(sender, holder.getFriendlyName(), CommandUtils.contextSetToString(context), changed); } ExtendedLogEntry.build().actor(sender).acted(holder) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/other/HolderShowTracks.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/other/HolderShowTracks.java index e1128c9d2..a61d36fcc 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/other/HolderShowTracks.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/other/HolderShowTracks.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -76,8 +76,8 @@ public class HolderShowTracks extends SubCommand .forEach(t -> sb.append("&a") .append(t.getName()) .append(": ") - .append(Util.listToArrowSep(t.getGroups(), name)) - .append(Util.getAppendableNodeContextString(node)) + .append(CommandUtils.listToArrowSep(t.getGroups(), name)) + .append(CommandUtils.getAppendableNodeContextString(node)) .append("\n") ); } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAdd.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAdd.java index 04735aff2..5a6c06a77 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAdd.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAdd.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -87,7 +87,7 @@ public class ParentAdd extends SharedSubCommand { DataMutateResult result = holder.setInheritGroup(group, context); if (result.asBoolean()) { - Message.SET_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), Util.contextSetToString(context)); + Message.SET_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("parent", "add", group.getName(), context) @@ -96,7 +96,7 @@ public class ParentAdd extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.ALREADY_INHERITS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), Util.contextSetToString(context)); + Message.ALREADY_INHERITS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAddTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAddTemp.java index 865a6a70e..0f0e0c796 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAddTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentAddTemp.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; @@ -93,7 +93,7 @@ public class ParentAddTemp extends SharedSubCommand { } if (group.getName().equalsIgnoreCase(holder.getObjectName())) { - Message.ALREADY_TEMP_INHERITS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), Util.contextSetToString(context)); + Message.ALREADY_TEMP_INHERITS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } @@ -101,7 +101,7 @@ public class ParentAddTemp extends SharedSubCommand { if (ret.getKey().asBoolean()) { duration = ret.getValue().getExpiryUnixTime(); - Message.SET_TEMP_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), DateUtil.formatDateDiff(duration), Util.contextSetToString(context)); + Message.SET_TEMP_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), DateUtil.formatDateDiff(duration), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("parent", "addtemp", group.getName(), duration, context) @@ -110,7 +110,7 @@ public class ParentAddTemp extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.ALREADY_TEMP_INHERITS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), Util.contextSetToString(context)); + Message.ALREADY_TEMP_INHERITS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClear.java index 0db1194f9..63a1ba950 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClear.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -73,9 +73,9 @@ public class ParentClear extends SharedSubCommand { int changed = before - holder.getEnduringNodes().size(); if (changed == 1) { - Message.PARENT_CLEAR_SUCCESS_SINGULAR.send(sender, holder.getFriendlyName(), Util.contextSetToString(context), changed); + Message.PARENT_CLEAR_SUCCESS_SINGULAR.send(sender, holder.getFriendlyName(), CommandUtils.contextSetToString(context), changed); } else { - Message.PARENT_CLEAR_SUCCESS.send(sender, holder.getFriendlyName(), Util.contextSetToString(context), changed); + Message.PARENT_CLEAR_SUCCESS.send(sender, holder.getFriendlyName(), CommandUtils.contextSetToString(context), changed); } ExtendedLogEntry.build().actor(sender).acted(holder) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClearTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClearTrack.java index c55e04a3e..9d892acb2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClearTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentClearTrack.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; import me.lucko.luckperms.common.locale.CommandSpec; @@ -110,9 +110,9 @@ public class ParentClearTrack extends SharedSubCommand { int changed = before - holder.getEnduringNodes().size(); if (changed == 1) { - Message.PARENT_CLEAR_TRACK_SUCCESS_SINGULAR.send(sender, holder.getFriendlyName(), track.getName(), Util.contextSetToString(context), changed); + Message.PARENT_CLEAR_TRACK_SUCCESS_SINGULAR.send(sender, holder.getFriendlyName(), track.getName(), CommandUtils.contextSetToString(context), changed); } else { - Message.PARENT_CLEAR_TRACK_SUCCESS.send(sender, holder.getFriendlyName(), track.getName(), Util.contextSetToString(context), changed); + Message.PARENT_CLEAR_TRACK_SUCCESS.send(sender, holder.getFriendlyName(), track.getName(), CommandUtils.contextSetToString(context), changed); } ExtendedLogEntry.build().actor(sender).acted(holder) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentInfo.java index 0fbb6970d..fd358847f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentInfo.java @@ -32,7 +32,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -95,7 +95,7 @@ public class ParentInfo extends SharedSubCommand { TextComponent.Builder message = TextComponent.builder(""); for (Node node : page) { - String s = "&3> &a" + node.getGroupName() + Util.getAppendableNodeContextString(node) + "\n"; + String s = "&3> &a" + node.getGroupName() + CommandUtils.getAppendableNodeContextString(node) + "\n"; message.append(TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(holder, label, node)).build()); } return message.build(); @@ -115,7 +115,7 @@ public class ParentInfo extends SharedSubCommand { TextComponent.Builder message = TextComponent.builder(""); for (Node node : page) { - String s = "&3> &a" + node.getGroupName() + Util.getAppendableNodeContextString(node) + "\n&2- expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime()) + "\n"; + String s = "&3> &a" + node.getGroupName() + CommandUtils.getAppendableNodeContextString(node) + "\n&2- expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime()) + "\n"; message.append(TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(holder, label, node)).build()); } return message.build(); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemove.java index 547705a57..5c555ef64 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemove.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemove.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; @@ -91,7 +91,7 @@ public class ParentRemove extends SharedSubCommand { DataMutateResult result = holder.unsetPermission(NodeFactory.newBuilder("group." + groupName).withExtraContext(context).build()); if (result.asBoolean()) { - Message.UNSET_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), groupName, Util.contextSetToString(context)); + Message.UNSET_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), groupName, CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("parent", "remove", groupName, context) @@ -104,7 +104,7 @@ public class ParentRemove extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.DOES_NOT_INHERIT.send(sender, holder.getFriendlyName(), groupName, Util.contextSetToString(context)); + Message.DOES_NOT_INHERIT.send(sender, holder.getFriendlyName(), groupName, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemoveTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemoveTemp.java index 7e4068f12..45731feaf 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemoveTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentRemoveTemp.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -76,7 +76,7 @@ public class ParentRemoveTemp extends SharedSubCommand { DataMutateResult result = holder.unsetPermission(NodeFactory.newBuilder("group." + groupName).setExpiry(10L).withExtraContext(context).build()); if (result.asBoolean()) { - Message.UNSET_TEMP_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), groupName, Util.contextSetToString(context)); + Message.UNSET_TEMP_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), groupName, CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("parent", "removetemp", groupName, context) @@ -85,7 +85,7 @@ public class ParentRemoveTemp extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.DOES_NOT_TEMP_INHERIT.send(sender, holder.getFriendlyName(), groupName, Util.contextSetToString(context)); + Message.DOES_NOT_TEMP_INHERIT.send(sender, holder.getFriendlyName(), groupName, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSet.java index 67c6977ae..d6159b791 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSet.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -90,7 +90,7 @@ public class ParentSet extends SharedSubCommand { ((User) holder).getPrimaryGroup().setStoredValue(group.getName()); } - Message.SET_PARENT_SUCCESS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), Util.contextSetToString(context)); + Message.SET_PARENT_SUCCESS.send(sender, holder.getFriendlyName(), group.getFriendlyName(), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("parent", "set", group.getName(), context) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSetTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSetTrack.java index 8c3db23de..26539fdf2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSetTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/parent/ParentSetTrack.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; import me.lucko.luckperms.common.locale.CommandSpec; @@ -127,7 +127,7 @@ public class ParentSetTrack extends SharedSubCommand { holder.removeIf(node -> node.isGroupNode() && node.getFullContexts().equals(context) && track.containsGroup(node.getGroupName())); holder.setInheritGroup(group, context); - Message.SET_TRACK_PARENT_SUCCESS.send(sender, holder.getFriendlyName(), track.getName(), group.getFriendlyName(), Util.contextSetToString(context)); + Message.SET_TRACK_PARENT_SUCCESS.send(sender, holder.getFriendlyName(), track.getName(), group.getFriendlyName(), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("parent", "settrack", track.getName(), groupName, context) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionCheck.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionCheck.java index 591662d1c..16dea33c9 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionCheck.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionCheck.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -63,9 +63,9 @@ public class PermissionCheck extends SharedSubCommand { MutableContextSet context = ArgumentUtils.handleContext(1, args, plugin); Tristate result = holder.hasPermission(NodeFactory.newBuilder(node).withExtraContext(context).build()); - String s = Util.formatTristate(result); + String s = CommandUtils.formatTristate(result); - Message.CHECK_PERMISSION.send(sender, holder.getFriendlyName(), node, s, Util.contextSetToString(context)); + Message.CHECK_PERMISSION.send(sender, holder.getFriendlyName(), node, s, CommandUtils.contextSetToString(context)); return CommandResult.SUCCESS; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionCheckInherits.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionCheckInherits.java index 773edf75b..9ba41d873 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionCheckInherits.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionCheckInherits.java @@ -32,7 +32,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -69,8 +69,8 @@ public class PermissionCheckInherits extends SharedSubCommand { location = "self"; } - String s = Util.formatTristate(result.getResult()); - Message.CHECK_INHERITS_PERMISSION.send(sender, holder.getFriendlyName(), node, s, Util.contextSetToString(context), String.valueOf(location)); + String s = CommandUtils.formatTristate(result.getResult()); + Message.CHECK_INHERITS_PERMISSION.send(sender, holder.getFriendlyName(), node, s, CommandUtils.contextSetToString(context), String.valueOf(location)); return CommandResult.SUCCESS; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionInfo.java index 384be3c37..b181076c4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionInfo.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -153,7 +153,7 @@ public class PermissionInfo extends SharedSubCommand { } int index = pageNumber - 1; - List> pages = Util.divideList(l, 15); + List> pages = CommandUtils.divideList(l, 15); if (index < 0 || index >= pages.size()) { pageNumber = 1; @@ -171,7 +171,7 @@ public class PermissionInfo extends SharedSubCommand { } for (Node node : page) { - String s = "&3> " + (node.getValuePrimitive() ? "&a" : "&c") + node.getPermission() + (console ? " &7(" + node.getValuePrimitive() + "&7)" : "") + Util.getAppendableNodeContextString(node) + "\n"; + String s = "&3> " + (node.getValuePrimitive() ? "&a" : "&c") + node.getPermission() + (console ? " &7(" + node.getValuePrimitive() + "&7)" : "") + CommandUtils.getAppendableNodeContextString(node) + "\n"; if (temp) { s += "&2- expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime()) + "\n"; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSet.java index e37b3be8a..0fbab3854 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSet.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -78,7 +78,7 @@ public class PermissionSet extends SharedSubCommand { DataMutateResult result = holder.setPermission(NodeFactory.newBuilder(node).setValue(b).withExtraContext(context).build()); if (result.asBoolean()) { - Message.SETPERMISSION_SUCCESS.send(sender, node, b, holder.getFriendlyName(), Util.contextSetToString(context)); + Message.SETPERMISSION_SUCCESS.send(sender, node, b, holder.getFriendlyName(), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("permission", "set", node, b, context) @@ -87,7 +87,7 @@ public class PermissionSet extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.ALREADY_HASPERMISSION.send(sender, holder.getFriendlyName(), node, Util.contextSetToString(context)); + Message.ALREADY_HASPERMISSION.send(sender, holder.getFriendlyName(), node, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSetTemp.java index 2d7170c9a..764431ee2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionSetTemp.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; @@ -86,7 +86,7 @@ public class PermissionSetTemp extends SharedSubCommand { if (result.getKey().asBoolean()) { duration = result.getValue().getExpiryUnixTime(); - Message.SETPERMISSION_TEMP_SUCCESS.send(sender, node, b, holder.getFriendlyName(), DateUtil.formatDateDiff(duration), Util.contextSetToString(context)); + Message.SETPERMISSION_TEMP_SUCCESS.send(sender, node, b, holder.getFriendlyName(), DateUtil.formatDateDiff(duration), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("permission", "settemp", node, b, duration, context) @@ -95,7 +95,7 @@ public class PermissionSetTemp extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.ALREADY_HAS_TEMP_PERMISSION.send(sender, holder.getFriendlyName(), node, Util.contextSetToString(context)); + Message.ALREADY_HAS_TEMP_PERMISSION.send(sender, holder.getFriendlyName(), node, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnset.java index 28ced4a56..1b6d51c18 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnset.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -76,7 +76,7 @@ public class PermissionUnset extends SharedSubCommand { DataMutateResult result = holder.unsetPermission(NodeFactory.newBuilder(node).withExtraContext(context).build()); if (result.asBoolean()) { - Message.UNSETPERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName(), Util.contextSetToString(context)); + Message.UNSETPERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName(), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("permission", "unset", node, context) @@ -85,7 +85,7 @@ public class PermissionUnset extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.DOES_NOT_HAVE_PERMISSION.send(sender, holder.getFriendlyName(), node, Util.contextSetToString(context)); + Message.DOES_NOT_HAVE_PERMISSION.send(sender, holder.getFriendlyName(), node, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnsetTemp.java index b0f0e875a..baa423d8e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/generic/permission/PermissionUnsetTemp.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -76,7 +76,7 @@ public class PermissionUnsetTemp extends SharedSubCommand { DataMutateResult result = holder.unsetPermission(NodeFactory.newBuilder(node).setExpiry(10L).withExtraContext(context).build()); if (result.asBoolean()) { - Message.UNSET_TEMP_PERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName(), Util.contextSetToString(context)); + Message.UNSET_TEMP_PERMISSION_SUCCESS.send(sender, node, holder.getFriendlyName(), CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(holder) .action("permission", "unsettemp", node, context) @@ -85,7 +85,7 @@ public class PermissionUnsetTemp extends SharedSubCommand { save(holder, sender, plugin); return CommandResult.SUCCESS; } else { - Message.DOES_NOT_HAVE_TEMP_PERMISSION.send(sender, holder.getFriendlyName(), node, Util.contextSetToString(context)); + Message.DOES_NOT_HAVE_TEMP_PERMISSION.send(sender, holder.getFriendlyName(), node, CommandUtils.contextSetToString(context)); return CommandResult.STATE_ERROR; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupInfo.java index fc83c563e..9c191adbd 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupInfo.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -81,14 +81,14 @@ public class GroupInfo extends SubCommand { if (!parents.isEmpty()) { Message.INFO_PARENT_HEADER.send(sender); for (Node node : parents) { - Message.EMPTY.send(sender, "&f- &3> &f" + node.getGroupName() + Util.getAppendableNodeContextString(node)); + Message.EMPTY.send(sender, "&f- &3> &f" + node.getGroupName() + CommandUtils.getAppendableNodeContextString(node)); } } if (!tempParents.isEmpty()) { Message.INFO_TEMP_PARENT_HEADER.send(sender); for (Node node : tempParents) { - Message.EMPTY.send(sender, "&f- &3> &f" + node.getGroupName() + Util.getAppendableNodeContextString(node)); + Message.EMPTY.send(sender, "&f- &3> &f" + node.getGroupName() + CommandUtils.getAppendableNodeContextString(node)); Message.EMPTY.send(sender, "&f- &2- expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime())); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupListMembers.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupListMembers.java index 4b2e41bc6..96b16cd3a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupListMembers.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/GroupListMembers.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -130,7 +130,7 @@ public class GroupListMembers extends SubCommand { sorted.sort(Comparator.comparing(HeldPermission::getHolder)); int index = pageNumber - 1; - List>> pages = Util.divideList(sorted, 15); + List>> pages = CommandUtils.divideList(sorted, 15); if (index < 0 || index >= pages.size()) { pageNumber = 1; @@ -146,7 +146,7 @@ public class GroupListMembers extends SubCommand { String title = "&7(page &f" + pageNumber + "&7 of &f" + pages.size() + "&7 - &f" + sorted.size() + "&7 entries)"; for (Map.Entry> ent : uuidMappedPage) { - String s = "&3> &b" + ent.getKey() + " " + getNodeExpiryString(ent.getValue().asNode()) + Util.getAppendableNodeContextString(ent.getValue().asNode()) + "\n"; + String s = "&3> &b" + ent.getKey() + " " + getNodeExpiryString(ent.getValue().asNode()) + CommandUtils.getAppendableNodeContextString(ent.getValue().asNode()) + "\n"; message.append(TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(ent.getKey(), false, label, ent.getValue())).build()); } @@ -162,7 +162,7 @@ public class GroupListMembers extends SubCommand { sorted.sort(Comparator.comparing(HeldPermission::getHolder)); int index = pageNumber - 1; - List>> pages = Util.divideList(sorted, 15); + List>> pages = CommandUtils.divideList(sorted, 15); if (index < 0 || index >= pages.size()) { pageNumber = 1; @@ -175,7 +175,7 @@ public class GroupListMembers extends SubCommand { String title = "&7(page &f" + pageNumber + "&7 of &f" + pages.size() + "&7 - &f" + sorted.size() + "&7 entries)"; for (HeldPermission ent : page) { - String s = "&3> &b" + ent.getHolder() + " " + getNodeExpiryString(ent.asNode()) + Util.getAppendableNodeContextString(ent.asNode()) + "\n"; + String s = "&3> &b" + ent.getHolder() + " " + getNodeExpiryString(ent.asNode()) + CommandUtils.getAppendableNodeContextString(ent.asNode()) + "\n"; message.append(TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(ent.getHolder(), true, label, ent)).build()); } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/ListGroups.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/ListGroups.java index 7af080457..7ee25f799 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/ListGroups.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/group/ListGroups.java @@ -28,7 +28,7 @@ package me.lucko.luckperms.common.commands.impl.group; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SingleCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -78,7 +78,7 @@ public class ListGroups extends SingleCommand { component = TextUtils.fromLegacy(Message.GROUPS_LIST_ENTRY_WITH_TRACKS.asString(plugin.getLocaleManager(), group.getFriendlyName(), group.getWeight().orElse(0), - Util.toCommaSep(tracks) + CommandUtils.toCommaSep(tracks) ), Constants.COLOR_CHAR); } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogRecent.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogRecent.java index b6154dabe..0db5e4046 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogRecent.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogRecent.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; @@ -71,7 +71,7 @@ public class LogRecent extends SubCommand { // User and possibly page final String target = args.get(0); - UUID uuid = Util.parseUuid(target.toLowerCase()); + UUID uuid = CommandUtils.parseUuid(target.toLowerCase()); if (uuid == null) { if (!plugin.getConfiguration().get(ConfigKeys.ALLOW_INVALID_USERNAMES)) { if (!DataConstraints.PLAYER_USERNAME_TEST.test(target)) { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogUserHistory.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogUserHistory.java index a11fca528..c4c8a76f1 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogUserHistory.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/log/LogUserHistory.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; @@ -66,7 +66,7 @@ public class LogUserHistory extends SubCommand { } } - UUID uuid = Util.parseUuid(target.toLowerCase()); + UUID uuid = CommandUtils.parseUuid(target.toLowerCase()); if (uuid == null) { if (!plugin.getConfiguration().get(ConfigKeys.ALLOW_INVALID_USERNAMES)) { if (!DataConstraints.PLAYER_USERNAME_TEST.test(target)) { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/ApplyEditsCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/ApplyEditsCommand.java index 34896c67a..c55195be7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/ApplyEditsCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/ApplyEditsCommand.java @@ -39,7 +39,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SharedSubCommand; import me.lucko.luckperms.common.commands.abstraction.SingleCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.contexts.ContextSetJsonSerializer; import me.lucko.luckperms.common.locale.CommandSpec; @@ -118,7 +118,7 @@ public class ApplyEditsCommand extends SingleCommand { } } else if (who.startsWith("user/")) { String user = who.substring("user/".length()); - UUID uuid = Util.parseUuid(user); + UUID uuid = CommandUtils.parseUuid(user); if (uuid == null) { Message.APPLY_EDITS_TARGET_USER_NOT_UUID.send(sender, user); return CommandResult.STATE_ERROR; diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/CheckCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/CheckCommand.java index 107d88f6e..d38ed1ac4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/CheckCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/CheckCommand.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SingleCommand; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -56,7 +56,7 @@ public class CheckCommand extends SingleCommand { String permission = args.get(1); User user; - UUID u = Util.parseUuid(target); + UUID u = CommandUtils.parseUuid(target); if (u != null) { user = plugin.getUserManager().getIfLoaded(u); } else { @@ -69,7 +69,7 @@ public class CheckCommand extends SingleCommand { } Tristate tristate = user.getCachedData().getPermissionData(plugin.getContextForUser(user)).getPermissionValue(permission, CheckOrigin.INTERNAL); - Message.CHECK_RESULT.send(sender, user.getFriendlyName(), permission, Util.formatTristate(tristate)); + Message.CHECK_RESULT.send(sender, user.getFriendlyName(), permission, CommandUtils.formatTristate(tristate)); return CommandResult.SUCCESS; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/InfoCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/InfoCommand.java index cefcbf406..e5fc8c1fe 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/InfoCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/InfoCommand.java @@ -28,7 +28,7 @@ package me.lucko.luckperms.common.commands.impl.misc; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SingleCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.LuckPermsConfiguration; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; @@ -94,7 +94,7 @@ public class InfoCommand extends SingleCommand { private static String formatValue(String value) { if (value.equalsIgnoreCase("true") || value.equalsIgnoreCase("false")) { - return Util.formatBoolean(Boolean.parseBoolean(value)); + return CommandUtils.formatBoolean(Boolean.parseBoolean(value)); } try { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/SearchCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/SearchCommand.java index 40bbe80d9..9cc712d5c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/SearchCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/SearchCommand.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.commands.abstraction.SingleCommand; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.CommandSpec; @@ -129,7 +129,7 @@ public class SearchCommand extends SingleCommand { sorted.sort(Comparator.comparing(HeldPermission::getHolder)); int index = pageNumber - 1; - List>> pages = Util.divideList(sorted, 15); + List>> pages = CommandUtils.divideList(sorted, 15); if (index < 0 || index >= pages.size()) { pageNumber = 1; @@ -145,7 +145,7 @@ public class SearchCommand extends SingleCommand { String title = "&7(page &f" + pageNumber + "&7 of &f" + pages.size() + "&7 - &f" + sorted.size() + "&7 entries)"; for (Map.Entry> ent : uuidMappedPage) { - String s = "&3> &b" + ent.getKey() + " &7- " + (ent.getValue().getValue() ? "&a" : "&c") + ent.getValue().getValue() + getNodeExpiryString(ent.getValue().asNode()) + Util.getAppendableNodeContextString(ent.getValue().asNode()) + "\n"; + String s = "&3> &b" + ent.getKey() + " &7- " + (ent.getValue().getValue() ? "&a" : "&c") + ent.getValue().getValue() + getNodeExpiryString(ent.getValue().asNode()) + CommandUtils.getAppendableNodeContextString(ent.getValue().asNode()) + "\n"; message.append(TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(ent.getKey(), false, label, ent.getValue())).build()); } @@ -161,7 +161,7 @@ public class SearchCommand extends SingleCommand { sorted.sort(Comparator.comparing(HeldPermission::getHolder)); int index = pageNumber - 1; - List>> pages = Util.divideList(sorted, 15); + List>> pages = CommandUtils.divideList(sorted, 15); if (index < 0 || index >= pages.size()) { pageNumber = 1; @@ -174,7 +174,7 @@ public class SearchCommand extends SingleCommand { String title = "&7(page &f" + pageNumber + "&7 of &f" + pages.size() + "&7 - &f" + sorted.size() + "&7 entries)"; for (HeldPermission ent : page) { - String s = "&3> &b" + ent.getHolder() + " &7- " + (ent.getValue() ? "&a" : "&c") + ent.getValue() + getNodeExpiryString(ent.asNode()) + Util.getAppendableNodeContextString(ent.asNode()) + "\n"; + String s = "&3> &b" + ent.getHolder() + " &7- " + (ent.getValue() ? "&a" : "&c") + ent.getValue() + getNodeExpiryString(ent.asNode()) + CommandUtils.getAppendableNodeContextString(ent.asNode()) + "\n"; message.append(TextUtils.fromLegacy(s, Constants.FORMAT_CHAR).toBuilder().applyDeep(makeFancy(ent.getHolder(), true, label, ent)).build()); } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/TreeCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/TreeCommand.java index b07a36a83..36dbe8c9a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/TreeCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/misc/TreeCommand.java @@ -25,13 +25,13 @@ package me.lucko.luckperms.common.commands.impl.misc; -import me.lucko.luckperms.common.caching.PermissionCache; +import me.lucko.luckperms.common.caching.type.PermissionCache; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SingleCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -74,7 +74,7 @@ public class TreeCommand extends SingleCommand { if (player != null) { User user; - UUID u = Util.parseUuid(player); + UUID u = CommandUtils.parseUuid(player); if (u != null) { user = plugin.getUserManager().getIfLoaded(u); } else { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/ListTracks.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/ListTracks.java index 9c1990750..66a4a0ec9 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/ListTracks.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/ListTracks.java @@ -28,7 +28,7 @@ package me.lucko.luckperms.common.commands.impl.track; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SingleCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -51,7 +51,7 @@ public class ListTracks extends SingleCommand { return CommandResult.LOADING_ERROR; } - Message.TRACKS_LIST.send(sender, Util.toCommaSep(plugin.getTrackManager().getAll().keySet().stream().sorted().collect(Collectors.toList()))); + Message.TRACKS_LIST.send(sender, CommandUtils.toCommaSep(plugin.getTrackManager().getAll().keySet().stream().sorted().collect(Collectors.toList()))); return CommandResult.SUCCESS; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackAppend.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackAppend.java index 2ca1cdc06..7641700eb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackAppend.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackAppend.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; import me.lucko.luckperms.common.locale.CommandSpec; @@ -73,7 +73,7 @@ public class TrackAppend extends SubCommand { if (result.asBoolean()) { Message.TRACK_APPEND_SUCCESS.send(sender, group.getName(), track.getName()); if (track.getGroups().size() > 1) { - Message.EMPTY.send(sender, Util.listToArrowSep(track.getGroups(), group.getName())); + Message.EMPTY.send(sender, CommandUtils.listToArrowSep(track.getGroups(), group.getName())); } ExtendedLogEntry.build().actor(sender).acted(track) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackInfo.java index d2bb211f0..75ea4313b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackInfo.java @@ -29,7 +29,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -47,7 +47,7 @@ public class TrackInfo extends SubCommand { @Override public CommandResult execute(LuckPermsPlugin plugin, Sender sender, Track track, List args, String label) throws CommandException { - Message.TRACK_INFO.send(sender, track.getName(), Util.listToArrowSep(track.getGroups())); + Message.TRACK_INFO.send(sender, track.getName(), CommandUtils.listToArrowSep(track.getGroups())); return CommandResult.SUCCESS; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackInsert.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackInsert.java index bd2b682a7..f04606fe3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackInsert.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackInsert.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; import me.lucko.luckperms.common.locale.CommandSpec; @@ -82,7 +82,7 @@ public class TrackInsert extends SubCommand { if (result.asBoolean()) { Message.TRACK_INSERT_SUCCESS.send(sender, group.getName(), track.getName(), pos); if (track.getGroups().size() > 1) { - Message.EMPTY.send(sender, Util.listToArrowSep(track.getGroups(), group.getName())); + Message.EMPTY.send(sender, CommandUtils.listToArrowSep(track.getGroups(), group.getName())); } ExtendedLogEntry.build().actor(sender).acted(track) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackRemove.java index 24c489e63..468c79b31 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackRemove.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/track/TrackRemove.java @@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; import me.lucko.luckperms.common.locale.CommandSpec; @@ -61,7 +61,7 @@ public class TrackRemove extends SubCommand { if (result.asBoolean()) { Message.TRACK_REMOVE_SUCCESS.send(sender, groupName, track.getName()); if (track.getGroups().size() > 1) { - Message.EMPTY.send(sender, Util.listToArrowSep(track.getGroups())); + Message.EMPTY.send(sender, CommandUtils.listToArrowSep(track.getGroups())); } ExtendedLogEntry.build().actor(sender).acted(track) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserDemote.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserDemote.java index fbe27e774..2b9ed8472 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserDemote.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserDemote.java @@ -36,7 +36,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; import me.lucko.luckperms.common.locale.CommandSpec; @@ -160,9 +160,9 @@ public class UserDemote extends SubCommand { user.getPrimaryGroup().setStoredValue(previousGroup.getName()); } - Message.USER_DEMOTE_SUCCESS.send(sender, track.getName(), old, previousGroup.getFriendlyName(), Util.contextSetToString(context)); + Message.USER_DEMOTE_SUCCESS.send(sender, track.getName(), old, previousGroup.getFriendlyName(), CommandUtils.contextSetToString(context)); if (!silent) { - Message.EMPTY.send(sender, Util.listToArrowSep(track.getGroups(), previousGroup.getFriendlyName(), old, true)); + Message.EMPTY.send(sender, CommandUtils.listToArrowSep(track.getGroups(), previousGroup.getFriendlyName(), old, true)); } ExtendedLogEntry.build().actor(sender).acted(user) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserInfo.java index fc2c1dcb7..f29396dba 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserInfo.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.locale.CommandSpec; import me.lucko.luckperms.common.locale.LocaleManager; @@ -85,14 +85,14 @@ public class UserInfo extends SubCommand { if (!parents.isEmpty()) { Message.INFO_PARENT_HEADER.send(sender); for (Node node : parents) { - Message.EMPTY.send(sender, "&f- &3> &f" + node.getGroupName() + Util.getAppendableNodeContextString(node)); + Message.EMPTY.send(sender, "&f- &3> &f" + node.getGroupName() + CommandUtils.getAppendableNodeContextString(node)); } } if (!tempParents.isEmpty()) { Message.INFO_TEMP_PARENT_HEADER.send(sender); for (Node node : tempParents) { - Message.EMPTY.send(sender, "&f- &3> &f" + node.getGroupName() + Util.getAppendableNodeContextString(node)); + Message.EMPTY.send(sender, "&f- &3> &f" + node.getGroupName() + CommandUtils.getAppendableNodeContextString(node)); Message.EMPTY.send(sender, "&f- &2- expires in " + DateUtil.formatDateDiff(node.getExpiryUnixTime())); } } @@ -103,7 +103,7 @@ public class UserInfo extends SubCommand { Contexts contexts = plugin.getContextForUser(user); if (contexts != null) { context = contexts.getContexts().toSet().stream() - .map(e -> Util.contextToString(e.getKey(), e.getValue())) + .map(e -> CommandUtils.contextToString(e.getKey(), e.getValue())) .collect(Collectors.joining(" ")); MetaData meta = user.getCachedData().getMetaData(contexts); @@ -115,7 +115,7 @@ public class UserInfo extends SubCommand { } } - Message.USER_INFO_DATA.send(sender, Util.formatBoolean(contexts != null), context, prefix, suffix); + Message.USER_INFO_DATA.send(sender, CommandUtils.formatBoolean(contexts != null), context, prefix, suffix); return CommandResult.SUCCESS; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserMainCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserMainCommand.java index 51cc71646..96f4ddfb3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserMainCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserMainCommand.java @@ -38,7 +38,7 @@ import me.lucko.luckperms.common.commands.impl.generic.other.HolderShowTracks; import me.lucko.luckperms.common.commands.impl.generic.parent.CommandParent; import me.lucko.luckperms.common.commands.impl.generic.permission.CommandPermission; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.DataConstraints; import me.lucko.luckperms.common.locale.CommandSpec; @@ -82,7 +82,7 @@ public class UserMainCommand extends MainCommand { @Override protected UserIdentifier parseTarget(String target, LuckPermsPlugin plugin, Sender sender) { - UUID uuid = Util.parseUuid(target.toLowerCase()); + UUID uuid = CommandUtils.parseUuid(target.toLowerCase()); if (uuid == null) { if (!plugin.getConfiguration().get(ConfigKeys.ALLOW_INVALID_USERNAMES)) { if (!DataConstraints.PLAYER_USERNAME_TEST.test(target)) { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserPromote.java b/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserPromote.java index b05feaa13..b7e1d05d3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserPromote.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/impl/user/UserPromote.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.abstraction.SubCommand; import me.lucko.luckperms.common.commands.sender.Sender; import me.lucko.luckperms.common.commands.utils.ArgumentUtils; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.CommandPermission; import me.lucko.luckperms.common.constants.DataConstraints; import me.lucko.luckperms.common.locale.CommandSpec; @@ -118,7 +118,7 @@ public class UserPromote extends SubCommand { user.setPermission(NodeFactory.newBuilder("group." + first).withExtraContext(context).build()); - Message.USER_TRACK_ADDED_TO_FIRST.send(sender, user.getFriendlyName(), first, Util.contextSetToString(context)); + Message.USER_TRACK_ADDED_TO_FIRST.send(sender, user.getFriendlyName(), first, CommandUtils.contextSetToString(context)); ExtendedLogEntry.build().actor(sender).acted(user) .action("promote", track.getName(), context) @@ -172,9 +172,9 @@ public class UserPromote extends SubCommand { user.getPrimaryGroup().setStoredValue(nextGroup.getName()); } - Message.USER_PROMOTE_SUCCESS.send(sender, user.getFriendlyName(), track.getName(), old, nextGroup.getFriendlyName(), Util.contextSetToString(context)); + Message.USER_PROMOTE_SUCCESS.send(sender, user.getFriendlyName(), track.getName(), old, nextGroup.getFriendlyName(), CommandUtils.contextSetToString(context)); if (!silent) { - Message.EMPTY.send(sender, Util.listToArrowSep(track.getGroups(), old, nextGroup.getFriendlyName(), false)); + Message.EMPTY.send(sender, CommandUtils.listToArrowSep(track.getGroups(), old, nextGroup.getFriendlyName(), false)); } ExtendedLogEntry.build().actor(sender).acted(user) diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/utils/Util.java b/common/src/main/java/me/lucko/luckperms/common/commands/utils/CommandUtils.java similarity index 91% rename from common/src/main/java/me/lucko/luckperms/common/commands/utils/Util.java rename to common/src/main/java/me/lucko/luckperms/common/commands/utils/CommandUtils.java index f8dd45a22..05f03935d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/utils/Util.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/utils/CommandUtils.java @@ -37,14 +37,13 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; -import java.util.ListIterator; import java.util.Map; import java.util.UUID; import java.util.function.Supplier; import java.util.regex.Pattern; @UtilityClass -public class Util { +public class CommandUtils { private static final Pattern STRIP_COLOR_PATTERN = Pattern.compile("(?i)" + String.valueOf('§') + "[0-9A-FK-OR]"); /** @@ -61,28 +60,6 @@ public class Util { sender.sendMessage(color(prefix + message)); } - /** - * Strips outer quote marks from a list of parsed arguments. - * - * @param input the list of arguments to strip quotes from - * @return an ArrayList containing the contents of input without quotes - */ - public static List stripQuotes(List input) { - input = new ArrayList<>(input); - ListIterator iterator = input.listIterator(); - while (iterator.hasNext()) { - String value = iterator.next(); - if (value.length() < 3) { - continue; - } - - if (value.charAt(0) == '"' && value.charAt(value.length() - 1) == '"') { - iterator.set(value.substring(1, value.length() - 1)); - } - } - return input; - } - /** * Colorizes a message. * diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/utils/MetaComparator.java b/common/src/main/java/me/lucko/luckperms/common/commands/utils/MetaComparator.java index 45dd2194c..cc122bb99 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/utils/MetaComparator.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/utils/MetaComparator.java @@ -25,16 +25,22 @@ package me.lucko.luckperms.common.commands.utils; +import me.lucko.luckperms.api.LocalizedNode; +import me.lucko.luckperms.common.node.NodeWithContextComparator; + import java.util.Comparator; import java.util.Map; -public class MetaComparator implements Comparator> { +public class MetaComparator implements Comparator> { public static final MetaComparator INSTANCE = new MetaComparator(); @Override - public int compare(Map.Entry o1, Map.Entry o2) { + public int compare(Map.Entry o1, Map.Entry o2) { int result = Integer.compare(o1.getKey(), o2.getKey()); - return result != 0 ? result : 1; + if (result != 0) { + return result; + } + return NodeWithContextComparator.get().compare(o1.getValue(), o2.getValue()); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java b/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java index 9f29a6365..e4671383f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java +++ b/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java @@ -31,6 +31,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import me.lucko.luckperms.api.metastacking.MetaStackDefinition; +import me.lucko.luckperms.common.assignments.AssignmentRule; import me.lucko.luckperms.common.config.keys.AbstractKey; import me.lucko.luckperms.common.config.keys.BooleanKey; import me.lucko.luckperms.common.config.keys.EnduringKey; @@ -39,7 +40,6 @@ import me.lucko.luckperms.common.config.keys.LowercaseStringKey; import me.lucko.luckperms.common.config.keys.MapKey; import me.lucko.luckperms.common.config.keys.StaticKey; import me.lucko.luckperms.common.config.keys.StringKey; -import me.lucko.luckperms.common.defaults.Rule; import me.lucko.luckperms.common.metastacking.SimpleMetaStackDefinition; import me.lucko.luckperms.common.metastacking.StandardStackElements; import me.lucko.luckperms.common.model.TemporaryModifier; @@ -343,7 +343,7 @@ public class ConfigKeys { /** * The default assignments being applied by the plugin */ - public static final ConfigKey> DEFAULT_ASSIGNMENTS = AbstractKey.of(c -> { + public static final ConfigKey> DEFAULT_ASSIGNMENTS = AbstractKey.of(c -> { return c.getObjectList("default-assignments", ImmutableList.of()).stream().map(name -> { String hasTrue = c.getString("default-assignments." + name + ".if.has-true", null); String hasFalse = c.getString("default-assignments." + name + ".if.has-false", null); @@ -351,7 +351,7 @@ public class ConfigKeys { List give = ImmutableList.copyOf(c.getList("default-assignments." + name + ".give", ImmutableList.of())); List take = ImmutableList.copyOf(c.getList("default-assignments." + name + ".take", ImmutableList.of())); String pg = c.getString("default-assignments." + name + ".set-primary-group", null); - return new Rule(hasTrue, hasFalse, lacks, give, take, pg); + return new AssignmentRule(hasTrue, hasFalse, lacks, give, take, pg); }).collect(ImmutableCollectors.toImmutableList()); }); diff --git a/common/src/main/java/me/lucko/luckperms/common/contexts/AbstractContextManager.java b/common/src/main/java/me/lucko/luckperms/common/contexts/AbstractContextManager.java index 6e2012c0f..9e491f10c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/contexts/AbstractContextManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/contexts/AbstractContextManager.java @@ -66,6 +66,15 @@ public abstract class AbstractContextManager implements ContextManager { .expireAfterWrite(50L, TimeUnit.MILLISECONDS) // expire roughly every tick .build(new Loader()); + // caches static context lookups + private final LoadingCache staticLookupCache = Caffeine.newBuilder() + .initialCapacity(1) + .expireAfterWrite(50L, TimeUnit.MILLISECONDS) // expire roughly every tick + .build(new StaticLoader()); + + // the single key used in the static lookup cache + private final Object staticCacheKey = new Object(); + protected AbstractContextManager(LuckPermsPlugin plugin, Class subjectClass) { this.plugin = plugin; this.subjectClass = subjectClass; @@ -90,16 +99,14 @@ public abstract class AbstractContextManager implements ContextManager { @Override public ImmutableContextSet getStaticContext() { - MutableContextSet accumulator = MutableContextSet.create(); - for (ContextCalculator calculator : staticCalculators) { - calculator.giveApplicableContext(null, accumulator); - } - return accumulator.makeImmutable(); + // this is actually already immutable, but the Contexts method signature returns the interface. + // using the makeImmutable method is faster than casting + return getStaticContexts().getContexts().makeImmutable(); } @Override public Contexts getStaticContexts() { - return formContexts(getStaticContext()); + return staticLookupCache.get(staticCacheKey); } @Override @@ -156,26 +163,39 @@ public abstract class AbstractContextManager implements ContextManager { return calculators.size(); } - // iterates the calculators in this manager and accumulates contexts from them all. - private void calculateApplicableContext(T subject, MutableContextSet accumulator) { - for (ContextCalculator calculator : calculators) { - try { - calculator.giveApplicableContext(subject, accumulator); - } catch (Exception e) { - new RuntimeException("Exception thrown by ContextCalculator: " + calculator.getClass().getName(), e).printStackTrace(); - } - } - } - private final class Loader implements CacheLoader { - @Override public Contexts load(T subject) { MutableContextSet accumulator = MutableContextSet.create(); - calculateApplicableContext(subject, accumulator); - ImmutableContextSet ret = accumulator.makeImmutable(); - return formContexts(subject, ret); + for (ContextCalculator calculator : calculators) { + try { + calculator.giveApplicableContext(subject, accumulator); + } catch (Exception e) { + plugin.getLog().warn("An exception was thrown whilst calculating the context of subject " + subject); + e.printStackTrace(); + } + } + + return formContexts(subject, accumulator.makeImmutable()); + } + } + + private final class StaticLoader implements CacheLoader { + @Override + public Contexts load(Object o) { + MutableContextSet accumulator = MutableContextSet.create(); + + for (StaticContextCalculator calculator : staticCalculators) { + try { + calculator.giveApplicableContext(accumulator); + } catch (Exception e) { + plugin.getLog().warn("An exception was thrown whilst calculating static contexts"); + e.printStackTrace(); + } + } + + return formContexts(accumulator.makeImmutable()); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/defaults/LogicParser.java b/common/src/main/java/me/lucko/luckperms/common/defaults/LogicParser.java deleted file mode 100644 index fad4dae4e..000000000 --- a/common/src/main/java/me/lucko/luckperms/common/defaults/LogicParser.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * This file is part of LuckPerms, licensed under the MIT License. - * - * Copyright (c) lucko (Luck) - * Copyright (c) contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package me.lucko.luckperms.common.defaults; - -import me.lucko.luckperms.api.Tristate; -import me.lucko.luckperms.common.model.PermissionHolder; -import me.lucko.luckperms.common.node.NodeFactory; -import me.lucko.luckperms.common.utils.Scripting; - -import java.util.function.Function; -import java.util.regex.Pattern; - -import javax.script.ScriptEngine; - -public class LogicParser { - public static boolean parse(String s, PermissionHolder holder, Tristate tristate) throws IllegalArgumentException { - try { - ScriptEngine engine = Scripting.getScriptEngine(); - if (engine == null) { - throw new NullPointerException("script engine"); - } - - String expression = generateExpression(s, s1 -> holder.hasPermission(NodeFactory.fromSerializedNode(s1, true)) == tristate); - String result = engine.eval(expression).toString(); - - if (!result.equals("true") && !result.equals("false")) { - throw new IllegalArgumentException(); - } - - return Boolean.parseBoolean(result); - - } catch (Throwable t) { - throw new IllegalArgumentException(s, t); - } - } - - private static String generateExpression(String input, Function checker) { - while (true) { - int i = input.indexOf("<"); - int i2 = input.indexOf(">"); - if (i == -1 || i2 == -1) { - break; - } - - String match = input.substring(i, i2 + 1); - String matchContent = match.substring(1, match.length() - 1); - - String matchReplacement = (Boolean.toString(checker.apply(matchContent))).toLowerCase(); - - input = input.replaceFirst(Pattern.quote(match), matchReplacement); - } - - return input.replace("&", "&&").replace("|", "||"); - } -} diff --git a/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpec.java b/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpec.java index 838f80f17..a4e488bd8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpec.java +++ b/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpec.java @@ -25,9 +25,7 @@ package me.lucko.luckperms.common.locale; -import lombok.AllArgsConstructor; import lombok.Getter; -import lombok.ToString; import com.google.common.collect.ImmutableList; @@ -36,7 +34,6 @@ import me.lucko.luckperms.common.commands.Arg; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; -import java.util.Map; /** * An enumeration of the command defintion/usage messages used in the plugin. @@ -565,18 +562,6 @@ public enum CommandSpec { return new SimpleLocalizedSpec(this, localeManager); } - /** - * The localized data for a {@link CommandSpec}. - */ - @Getter - @ToString - @AllArgsConstructor - public static final class CommandSpecData { - private final String description; - private final String usage; - private final Map args; - } - private static final class SimpleLocalizedSpec implements LocalizedSpec { @Getter diff --git a/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpecData.java b/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpecData.java new file mode 100644 index 000000000..1ee80ff00 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpecData.java @@ -0,0 +1,46 @@ +/* + * This file is part of LuckPerms, licensed under the MIT License. + * + * Copyright (c) lucko (Luck) + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.locale; + +import lombok.AllArgsConstructor; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import java.util.Map; + +/** + * The localized data for a {@link CommandSpec}. + */ +@Getter +@ToString +@EqualsAndHashCode +@AllArgsConstructor +public final class CommandSpecData { + private final String description; + private final String usage; + private final Map args; +} diff --git a/common/src/main/java/me/lucko/luckperms/common/locale/LocaleManager.java b/common/src/main/java/me/lucko/luckperms/common/locale/LocaleManager.java index dc19a3759..f201b91cb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/locale/LocaleManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/locale/LocaleManager.java @@ -71,6 +71,6 @@ public interface LocaleManager { * @param key the key * @return the translation data, or null if there isn't any translation available. */ - CommandSpec.CommandSpecData getTranslation(CommandSpec key); + CommandSpecData getTranslation(CommandSpec key); } diff --git a/common/src/main/java/me/lucko/luckperms/common/locale/Message.java b/common/src/main/java/me/lucko/luckperms/common/locale/Message.java index d81e02bf7..239f6b2d1 100644 --- a/common/src/main/java/me/lucko/luckperms/common/locale/Message.java +++ b/common/src/main/java/me/lucko/luckperms/common/locale/Message.java @@ -28,7 +28,7 @@ package me.lucko.luckperms.common.locale; import lombok.Getter; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.utils.TextUtils; /** @@ -474,7 +474,7 @@ public enum Message { } s = format(s.replace("{PREFIX}", prefix).replace("\\n", "\n"), objects); - return Util.color(showPrefix ? prefix + s : s); + return CommandUtils.color(showPrefix ? prefix + s : s); } public void send(Sender sender, Object... objects) { diff --git a/common/src/main/java/me/lucko/luckperms/common/locale/NoopLocaleManager.java b/common/src/main/java/me/lucko/luckperms/common/locale/NoopLocaleManager.java index c669be3e8..2fe6c0e0d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/locale/NoopLocaleManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/locale/NoopLocaleManager.java @@ -52,7 +52,7 @@ public class NoopLocaleManager implements LocaleManager { } @Override - public CommandSpec.CommandSpecData getTranslation(CommandSpec key) { + public CommandSpecData getTranslation(CommandSpec key) { return null; } diff --git a/common/src/main/java/me/lucko/luckperms/common/locale/SimpleLocaleManager.java b/common/src/main/java/me/lucko/luckperms/common/locale/SimpleLocaleManager.java index 4bc209e5e..d79dc9cab 100644 --- a/common/src/main/java/me/lucko/luckperms/common/locale/SimpleLocaleManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/locale/SimpleLocaleManager.java @@ -40,7 +40,7 @@ import java.util.Map; public class SimpleLocaleManager implements LocaleManager { private Map messages = ImmutableMap.of(); - private Map commands = ImmutableMap.of(); + private Map commands = ImmutableMap.of(); public void tryLoad(LuckPermsPlugin plugin, File file) { if (file.exists()) { @@ -57,7 +57,7 @@ public class SimpleLocaleManager implements LocaleManager { public void loadFromFile(File file) throws Exception { try (BufferedReader reader = Files.newBufferedReader(file.toPath(), StandardCharsets.UTF_8)) { ImmutableMap.Builder messages = ImmutableMap.builder(); - ImmutableMap.Builder commands = ImmutableMap.builder(); + ImmutableMap.Builder commands = ImmutableMap.builder(); Map data = (Map) new Yaml().load(reader); for (Map.Entry entry : data.entrySet()) { @@ -97,7 +97,7 @@ public class SimpleLocaleManager implements LocaleManager { args = null; } - CommandSpec.CommandSpecData specData = new CommandSpec.CommandSpecData(description, usage, args == null ? null : ImmutableMap.copyOf(args)); + CommandSpecData specData = new CommandSpecData(description, usage, args == null ? null : ImmutableMap.copyOf(args)); commands.put(spec, specData); } catch (IllegalArgumentException e) { @@ -125,7 +125,7 @@ public class SimpleLocaleManager implements LocaleManager { } @Override - public CommandSpec.CommandSpecData getTranslation(CommandSpec key) { + public CommandSpecData getTranslation(CommandSpec key) { return commands.get(key); } diff --git a/common/src/main/java/me/lucko/luckperms/common/logging/SenderLogger.java b/common/src/main/java/me/lucko/luckperms/common/logging/SenderLogger.java index 82651bd00..a32581da4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/logging/SenderLogger.java +++ b/common/src/main/java/me/lucko/luckperms/common/logging/SenderLogger.java @@ -29,7 +29,7 @@ import lombok.AllArgsConstructor; import lombok.NonNull; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.locale.Message; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -57,7 +57,7 @@ public class SenderLogger implements Logger { private void msg(Message message, String s) { String msg = message.asString(plugin.getLocaleManager(), s); if (plugin.getConfiguration() != null && !plugin.getConfiguration().get(ConfigKeys.USE_COLORED_LOGGER)) { - msg = Util.stripColor(msg); + msg = CommandUtils.stripColor(msg); } console.sendMessage(msg); } diff --git a/common/src/main/java/me/lucko/luckperms/common/managers/AbstractManager.java b/common/src/main/java/me/lucko/luckperms/common/managers/AbstractManager.java index a01ec045e..630a3a162 100644 --- a/common/src/main/java/me/lucko/luckperms/common/managers/AbstractManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/managers/AbstractManager.java @@ -62,23 +62,23 @@ public abstract class AbstractManager> implements M @Override public T getOrMake(I id) { - return objects.get(lowerCase(id)); + return objects.get(sanitizeIdentifier(id)); } @Override public T getIfLoaded(I id) { - return objects.getIfPresent(lowerCase(id)); + return objects.getIfPresent(sanitizeIdentifier(id)); } @Override public boolean isLoaded(I id) { - return objects.asMap().containsKey(lowerCase(id)); + return objects.asMap().containsKey(sanitizeIdentifier(id)); } @Override public void unload(I id) { if (id != null) { - objects.invalidate(lowerCase(id)); + objects.invalidate(sanitizeIdentifier(id)); } } @@ -94,13 +94,8 @@ public abstract class AbstractManager> implements M objects.invalidateAll(); } - @SuppressWarnings("unchecked") - private static I lowerCase(I i) { - if (i instanceof String) { - return (I) ((String) i).toLowerCase(); - } else { - return i; - } + protected I sanitizeIdentifier(I i) { + return i; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/managers/GenericGroupManager.java b/common/src/main/java/me/lucko/luckperms/common/managers/GenericGroupManager.java index 2cea28018..c142e9ff7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/managers/GenericGroupManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/managers/GenericGroupManager.java @@ -63,4 +63,9 @@ public class GenericGroupManager extends AbstractManager implemen return null; } + + @Override + protected String sanitizeIdentifier(String s) { + return s.toLowerCase(); + } } \ No newline at end of file diff --git a/common/src/main/java/me/lucko/luckperms/common/managers/GenericTrackManager.java b/common/src/main/java/me/lucko/luckperms/common/managers/GenericTrackManager.java index 11bebf137..d1feb30a3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/managers/GenericTrackManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/managers/GenericTrackManager.java @@ -39,4 +39,8 @@ public class GenericTrackManager extends AbstractManager implemen return new Track(name, plugin); } + @Override + protected String sanitizeIdentifier(String s) { + return s.toLowerCase(); + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/model/Group.java b/common/src/main/java/me/lucko/luckperms/common/model/Group.java index eb93ede01..7eecca03b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/Group.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/Group.java @@ -33,7 +33,7 @@ import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.context.ImmutableContextSet; import me.lucko.luckperms.common.api.delegates.model.ApiGroup; import me.lucko.luckperms.common.buffers.BufferedRequest; -import me.lucko.luckperms.common.caching.GroupCache; +import me.lucko.luckperms.common.caching.GroupCachedData; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.references.GroupReference; @@ -59,7 +59,7 @@ public class Group extends PermissionHolder implements Identifiable { * The groups data cache instance */ @Getter - private final GroupCache cachedData; + private final GroupCachedData cachedData; @Getter private BufferedRequest refreshBuffer; @@ -69,7 +69,7 @@ public class Group extends PermissionHolder implements Identifiable { this.name = name.toLowerCase(); this.refreshBuffer = new GroupRefreshBuffer(plugin, this); - this.cachedData = new GroupCache(this); + this.cachedData = new GroupCachedData(this); getPlugin().getApiProvider().getEventFactory().handleGroupCacheLoad(this, cachedData); // invalidate out caches when data is updated diff --git a/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java b/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java index afe90801e..eb10e8605 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java @@ -48,9 +48,9 @@ import me.lucko.luckperms.api.context.ImmutableContextSet; import me.lucko.luckperms.common.api.delegates.model.ApiPermissionHolder; import me.lucko.luckperms.common.buffers.BufferedRequest; import me.lucko.luckperms.common.buffers.Cache; -import me.lucko.luckperms.common.caching.HolderCache; -import me.lucko.luckperms.common.caching.MetaAccumulator; +import me.lucko.luckperms.common.caching.HolderCachedData; import me.lucko.luckperms.common.caching.handlers.StateListener; +import me.lucko.luckperms.common.caching.type.MetaAccumulator; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.contexts.ContextSetComparator; import me.lucko.luckperms.common.node.ImmutableLocalizedNode; @@ -257,7 +257,7 @@ public abstract class PermissionHolder { * * @return the holders cached data */ - public abstract HolderCache getCachedData(); + public abstract HolderCachedData getCachedData(); public abstract BufferedRequest getRefreshBuffer(); diff --git a/common/src/main/java/me/lucko/luckperms/common/model/User.java b/common/src/main/java/me/lucko/luckperms/common/model/User.java index 21e7b6362..cc139cf66 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/User.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/User.java @@ -32,7 +32,7 @@ import lombok.ToString; import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.common.api.delegates.model.ApiUser; import me.lucko.luckperms.common.buffers.BufferedRequest; -import me.lucko.luckperms.common.caching.UserCache; +import me.lucko.luckperms.common.caching.UserCachedData; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.primarygroup.PrimaryGroupHolder; @@ -69,7 +69,7 @@ public class User extends PermissionHolder implements Identifiable refreshBuffer; @@ -84,7 +84,7 @@ public class User extends PermissionHolder implements Identifiable + * Copyright (c) contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package me.lucko.luckperms.common.node; + +import lombok.experimental.UtilityClass; + +import com.google.common.base.Splitter; + +import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.common.utils.PatternCache; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +@UtilityClass +public class LegacyNodeFactory { + + // legacy node format delimiters + private static final Pattern LEGACY_SERVER_DELIM = PatternCache.compileDelimitedMatcher("/", "\\"); + private static final Splitter LEGACY_SERVER_SPLITTER = Splitter.on(LEGACY_SERVER_DELIM).limit(2); + private static final Pattern LEGACY_WORLD_DELIM = PatternCache.compileDelimitedMatcher("-", "\\"); + private static final Splitter LEGACY_WORLD_SPLITTER = Splitter.on(LEGACY_WORLD_DELIM).limit(2); + private static final Pattern LEGACY_EXPIRY_DELIM = PatternCache.compileDelimitedMatcher("$", "\\"); + private static final Splitter LEGACY_EXPIRY_SPLITTER = Splitter.on(LEGACY_EXPIRY_DELIM).limit(2); + + public static Node fromSerializedNode(String s, boolean b) { + if (b) { + return builderFromLegacyString(s, true).build(); + } else { + return builderFromLegacyString(s, false).build(); + } + } + + private static Node.Builder builderFromLegacyString(String s, boolean b) { + // if contains / + if (LEGACY_SERVER_DELIM.matcher(s).find()) { + // 0=server(+world) 1=node + Iterator parts = LEGACY_SERVER_SPLITTER.split(s).iterator(); + String parts0 = parts.next(); + String parts1 = parts.next(); + + // WORLD SPECIFIC + // if parts[0] contains - + if (LEGACY_WORLD_DELIM.matcher(parts0).find()) { + // 0=server 1=world + Iterator serverParts = LEGACY_WORLD_SPLITTER.split(parts0).iterator(); + String serverParts0 = serverParts.next(); + String serverParts1 = serverParts.next(); + + // if parts[1] contains $ + if (LEGACY_EXPIRY_DELIM.matcher(parts1).find()) { + // 0=node 1=expiry + Iterator tempParts = LEGACY_EXPIRY_SPLITTER.split(parts1).iterator(); + String tempParts0 = tempParts.next(); + String tempParts1 = tempParts.next(); + + return new LegacyNodeBuilder(tempParts0).setServer(serverParts0).setWorld(serverParts1).setExpiry(Long.parseLong(tempParts1)).setValue(b); + } else { + return new LegacyNodeBuilder(parts1).setServer(serverParts0).setWorld(serverParts1).setValue(b); + } + } else { + // SERVER BUT NOT WORLD SPECIFIC + + // if parts[1] contains $ + if (LEGACY_EXPIRY_DELIM.matcher(parts1).find()) { + // 0=node 1=expiry + Iterator tempParts = LEGACY_EXPIRY_SPLITTER.split(parts1).iterator(); + String tempParts0 = tempParts.next(); + String tempParts1 = tempParts.next(); + + return new LegacyNodeBuilder(tempParts0).setServer(parts0).setExpiry(Long.parseLong(tempParts1)).setValue(b); + } else { + return new LegacyNodeBuilder(parts1).setServer(parts0).setValue(b); + } + } + } else { + // NOT SERVER SPECIFIC + + // if s contains $ + if (LEGACY_EXPIRY_DELIM.matcher(s).find()) { + // 0=node 1=expiry + Iterator tempParts = LEGACY_EXPIRY_SPLITTER.split(s).iterator(); + String tempParts0 = tempParts.next(); + String tempParts1 = tempParts.next(); + + return new LegacyNodeBuilder(tempParts0).setExpiry(Long.parseLong(tempParts1)).setValue(b); + } else { + return new LegacyNodeBuilder(s).setValue(b); + } + } + } + + private static final class LegacyNodeBuilder extends NodeBuilder { + private static final Pattern NODE_CONTEXTS_PATTERN = Pattern.compile("\\(.+\\).*"); + + LegacyNodeBuilder(String permission) { + if (!NODE_CONTEXTS_PATTERN.matcher(permission).matches()) { + this.permission = permission; + } else { + List contextParts = Splitter.on(PatternCache.compileDelimitedMatcher(")", "\\")).limit(2).splitToList(permission.substring(1)); + // 0 = context, 1 = node + + this.permission = contextParts.get(1); + try { + Map map = Splitter.on(PatternCache.compileDelimitedMatcher(",", "\\")).withKeyValueSeparator(Splitter.on(PatternCache.compileDelimitedMatcher("=", "\\"))).split(contextParts.get(0)); + for (Map.Entry e : map.entrySet()) { + this.withExtraContext(NodeFactory.unescapeDelimiters(e.getKey(), "=", "(", ")", ","), NodeFactory.unescapeDelimiters(e.getValue(), "=", "(", ")", ",")); + } + + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } + + } + } + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/node/NodeBuilder.java b/common/src/main/java/me/lucko/luckperms/common/node/NodeBuilder.java index fc2359d3e..0664e6a94 100644 --- a/common/src/main/java/me/lucko/luckperms/common/node/NodeBuilder.java +++ b/common/src/main/java/me/lucko/luckperms/common/node/NodeBuilder.java @@ -25,30 +25,20 @@ package me.lucko.luckperms.common.node; -import lombok.AccessLevel; import lombok.NonNull; -import lombok.RequiredArgsConstructor; - -import com.google.common.base.Splitter; import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.api.context.MutableContextSet; -import me.lucko.luckperms.common.utils.PatternCache; -import java.util.List; import java.util.Map; import java.util.Set; -import java.util.regex.Pattern; /** - * Builds Nodes + * Builds node instances */ -@RequiredArgsConstructor(access = AccessLevel.PACKAGE) class NodeBuilder implements Node.Builder { - private static final Pattern NODE_CONTEXTS_PATTERN = Pattern.compile("\\(.+\\).*"); - - private final String permission; + protected String permission; private final MutableContextSet extraContexts = MutableContextSet.create(); private Boolean value = true; private boolean override = false; @@ -56,28 +46,12 @@ class NodeBuilder implements Node.Builder { private String world = null; private long expireAt = 0L; - NodeBuilder(String permission, boolean shouldConvertContexts) { - if (!shouldConvertContexts) { - this.permission = permission; - } else { - if (!NODE_CONTEXTS_PATTERN.matcher(permission).matches()) { - this.permission = permission; - } else { - List contextParts = Splitter.on(PatternCache.compileDelimitedMatcher(")", "\\")).limit(2).splitToList(permission.substring(1)); - // 0 = context, 1 = node + protected NodeBuilder() { - this.permission = contextParts.get(1); - try { - Map map = Splitter.on(PatternCache.compileDelimitedMatcher(",", "\\")).withKeyValueSeparator(Splitter.on(PatternCache.compileDelimitedMatcher("=", "\\"))).split(contextParts.get(0)); - for (Map.Entry e : map.entrySet()) { - this.withExtraContext(NodeFactory.unescapeDelimiters(e.getKey(), "=", "(", ")", ","), NodeFactory.unescapeDelimiters(e.getValue(), "=", "(", ")", ",")); - } + } - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } - } + NodeBuilder(String permission) { + this.permission = permission; } NodeBuilder(Node other) { diff --git a/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java b/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java index 890c80d65..ba505616d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java @@ -27,8 +27,6 @@ package me.lucko.luckperms.common.node; import lombok.experimental.UtilityClass; -import com.github.benmanes.caffeine.cache.Caffeine; -import com.github.benmanes.caffeine.cache.LoadingCache; import com.google.common.base.Splitter; import com.google.common.collect.Maps; @@ -40,107 +38,19 @@ import me.lucko.luckperms.common.utils.PatternCache; import java.util.Iterator; import java.util.Map; -import java.util.concurrent.TimeUnit; -import java.util.regex.Pattern; /** * Utility class to make Node(Builder) instances from serialised strings or existing Nodes */ -@SuppressWarnings("deprecation") @UtilityClass public class NodeFactory { // used to split prefix/suffix/meta nodes private static final Splitter META_SPLITTER = Splitter.on(PatternCache.compileDelimitedMatcher(".", "\\")).limit(2); - - // legacy node format delimiters - private static final Pattern LEGACY_SERVER_DELIM = PatternCache.compileDelimitedMatcher("/", "\\"); - private static final Splitter LEGACY_SERVER_SPLITTER = Splitter.on(LEGACY_SERVER_DELIM).limit(2); - private static final Pattern LEGACY_WORLD_DELIM = PatternCache.compileDelimitedMatcher("-", "\\"); - private static final Splitter LEGACY_WORLD_SPLITTER = Splitter.on(LEGACY_WORLD_DELIM).limit(2); - private static final Pattern LEGACY_EXPIRY_DELIM = PatternCache.compileDelimitedMatcher("$", "\\"); - private static final Splitter LEGACY_EXPIRY_SPLITTER = Splitter.on(LEGACY_EXPIRY_DELIM).limit(2); - private static final String[] DELIMS = new String[]{".", "/", "-", "$"}; - // caches the conversion between legacy node strings --> node instances - private static final LoadingCache LEGACY_SERIALIZATION_CACHE = Caffeine.newBuilder() - .expireAfterAccess(10, TimeUnit.MINUTES) - .build(s -> builderFromLegacyString(s, true).build()); - - private static final LoadingCache LEGACY_SERIALIZATION_CACHE_NEGATED = Caffeine.newBuilder() - .expireAfterAccess(10, TimeUnit.MINUTES) - .build(s -> builderFromLegacyString(s, false).build()); - - public static Node fromSerializedNode(String s, Boolean b) { - try { - return b ? LEGACY_SERIALIZATION_CACHE.get(s) : LEGACY_SERIALIZATION_CACHE_NEGATED.get(s); - } catch (Exception e) { - throw new IllegalArgumentException(e); - } - } - public static Node.Builder newBuilder(String s) { - return new NodeBuilder(s, false); - } - - public static Node.Builder builderFromLegacyString(String s, Boolean b) { - // if contains / - if (LEGACY_SERVER_DELIM.matcher(s).find()) { - // 0=server(+world) 1=node - Iterator parts = LEGACY_SERVER_SPLITTER.split(s).iterator(); - String parts0 = parts.next(); - String parts1 = parts.next(); - - // WORLD SPECIFIC - // if parts[0] contains - - if (LEGACY_WORLD_DELIM.matcher(parts0).find()) { - // 0=server 1=world - Iterator serverParts = LEGACY_WORLD_SPLITTER.split(parts0).iterator(); - String serverParts0 = serverParts.next(); - String serverParts1 = serverParts.next(); - - // if parts[1] contains $ - if (LEGACY_EXPIRY_DELIM.matcher(parts1).find()) { - // 0=node 1=expiry - Iterator tempParts = LEGACY_EXPIRY_SPLITTER.split(parts1).iterator(); - String tempParts0 = tempParts.next(); - String tempParts1 = tempParts.next(); - - return new NodeBuilder(tempParts0, true).setServer(serverParts0).setWorld(serverParts1).setExpiry(Long.parseLong(tempParts1)).setValue(b); - } else { - return new NodeBuilder(parts1, true).setServer(serverParts0).setWorld(serverParts1).setValue(b); - } - } else { - // SERVER BUT NOT WORLD SPECIFIC - - // if parts[1] contains $ - if (LEGACY_EXPIRY_DELIM.matcher(parts1).find()) { - // 0=node 1=expiry - Iterator tempParts = LEGACY_EXPIRY_SPLITTER.split(parts1).iterator(); - String tempParts0 = tempParts.next(); - String tempParts1 = tempParts.next(); - - return new NodeBuilder(tempParts0, true).setServer(parts0).setExpiry(Long.parseLong(tempParts1)).setValue(b); - } else { - return new NodeBuilder(parts1, true).setServer(parts0).setValue(b); - } - } - } else { - // NOT SERVER SPECIFIC - - // if s contains $ - if (LEGACY_EXPIRY_DELIM.matcher(s).find()) { - // 0=node 1=expiry - Iterator tempParts = LEGACY_EXPIRY_SPLITTER.split(s).iterator(); - String tempParts0 = tempParts.next(); - String tempParts1 = tempParts.next(); - - return new NodeBuilder(tempParts0, true).setExpiry(Long.parseLong(tempParts1)).setValue(b); - } else { - return new NodeBuilder(s, true).setValue(b); - } - } + return new NodeBuilder(s); } public static Node.Builder builderFromExisting(Node other) { @@ -263,13 +173,6 @@ public class NodeFactory { return sb; } - /** - * Escapes special characters used within LuckPerms, so the string can be saved without issues - * - * @param s the string to escape - * @return an escaped string - * @throws NullPointerException if the string is null - */ public static String escapeCharacters(String s) { if (s == null) { throw new NullPointerException(); @@ -278,13 +181,6 @@ public class NodeFactory { return escapeDelimiters(s, DELIMS); } - /** - * Unescapes special characters used within LuckPerms, the inverse of {@link #escapeCharacters(String)} - * - * @param s the string to unescape - * @return an unescaped string - * @throws NullPointerException if the string is null - */ public static String unescapeCharacters(String s) { if (s == null) { throw new NullPointerException(); diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/LuckPermsPlugin.java b/common/src/main/java/me/lucko/luckperms/common/plugin/LuckPermsPlugin.java index add5a29e6..f981085cb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/plugin/LuckPermsPlugin.java +++ b/common/src/main/java/me/lucko/luckperms/common/plugin/LuckPermsPlugin.java @@ -35,7 +35,7 @@ import me.lucko.luckperms.common.calculators.CalculatorFactory; import me.lucko.luckperms.common.commands.CommandManager; import me.lucko.luckperms.common.commands.abstraction.Command; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.config.LuckPermsConfiguration; import me.lucko.luckperms.common.contexts.ContextManager; import me.lucko.luckperms.common.locale.LocaleManager; @@ -382,13 +382,13 @@ public interface LuckPermsPlugin { } static void sendStartupBanner(Sender sender, LuckPermsPlugin plugin) { - sender.sendMessage(Util.color("&b __ &3 __ ___ __ __ ")); - sender.sendMessage(Util.color("&b | | | / ` |__/ &3|__) |__ |__) |\\/| /__` ")); - sender.sendMessage(Util.color("&b |___ \\__/ \\__, | \\ &3| |___ | \\ | | .__/ ")); - sender.sendMessage(Util.color(" ")); - sender.sendMessage(Util.color("&2 Loading version &bv" + plugin.getVersion() + "&2 on " + plugin.getServerType().getFriendlyName() + " - " + plugin.getServerName())); - sender.sendMessage(Util.color("&8 Running on server version " + plugin.getServerVersion())); - sender.sendMessage(Util.color(" ")); + sender.sendMessage(CommandUtils.color("&b __ &3 __ ___ __ __ ")); + sender.sendMessage(CommandUtils.color("&b | | | / ` |__/ &3|__) |__ |__) |\\/| /__` ")); + sender.sendMessage(CommandUtils.color("&b |___ \\__/ \\__, | \\ &3| |___ | \\ | | .__/ ")); + sender.sendMessage(CommandUtils.color(" ")); + sender.sendMessage(CommandUtils.color("&2 Loading version &bv" + plugin.getVersion() + "&2 on " + plugin.getServerType().getFriendlyName() + " - " + plugin.getServerName())); + sender.sendMessage(CommandUtils.color("&8 Running on server version " + plugin.getServerVersion())); + sender.sendMessage(CommandUtils.color(" ")); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/ConfigurateDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/ConfigurateDao.java index fa4166084..535a22d56 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/ConfigurateDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/ConfigurateDao.java @@ -37,7 +37,7 @@ import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.context.ImmutableContextSet; import me.lucko.luckperms.common.actionlog.Log; import me.lucko.luckperms.common.bulkupdate.BulkUpdate; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.contexts.ContextSetConfigurateSerializer; import me.lucko.luckperms.common.managers.GenericUserManager; @@ -248,7 +248,7 @@ public abstract class ConfigurateDao extends AbstractDao { } String user = s.substring(0, s.length() - fileExtension.length()); - UUID uuid = Util.parseUuid(user); + UUID uuid = CommandUtils.parseUuid(user); if (uuid == null) { return; } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyJsonMigration.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyJsonMigration.java index 17f3e1d0b..8b7cbc14c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyJsonMigration.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyJsonMigration.java @@ -35,7 +35,7 @@ import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import me.lucko.luckperms.common.contexts.ContextSetJsonSerializer; -import me.lucko.luckperms.common.node.NodeFactory; +import me.lucko.luckperms.common.node.LegacyNodeFactory; import me.lucko.luckperms.common.node.NodeModel; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.storage.dao.file.JsonDao; @@ -112,7 +112,7 @@ public class LegacyJsonMigration implements Runnable { Set nodes = perms.entrySet().stream() - .map(e -> NodeFactory.fromSerializedNode(e.getKey(), e.getValue())) + .map(e -> LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue())) .map(NodeModel::fromNode) .collect(Collectors.toCollection(LinkedHashSet::new)); @@ -162,7 +162,7 @@ public class LegacyJsonMigration implements Runnable { } Set nodes = perms.entrySet().stream() - .map(e -> NodeFactory.fromSerializedNode(e.getKey(), e.getValue())) + .map(e -> LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue())) .map(NodeModel::fromNode) .collect(Collectors.toCollection(LinkedHashSet::new)); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacySqlMigration.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacySqlMigration.java index 43a42b405..9494be36b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacySqlMigration.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacySqlMigration.java @@ -31,7 +31,7 @@ import com.google.common.collect.Lists; import com.google.gson.reflect.TypeToken; import me.lucko.luckperms.common.contexts.ContextSetJsonSerializer; -import me.lucko.luckperms.common.node.NodeFactory; +import me.lucko.luckperms.common.node.LegacyNodeFactory; import me.lucko.luckperms.common.node.NodeModel; import me.lucko.luckperms.common.storage.dao.sql.SqlDao; @@ -154,7 +154,7 @@ public class LegacySqlMigration implements Runnable { } Set nodes = convertedPerms.entrySet().stream() - .map(e -> NodeFactory.fromSerializedNode(e.getKey(), e.getValue())) + .map(e -> LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue())) .map(NodeModel::fromNode) .collect(Collectors.toSet()); @@ -233,7 +233,7 @@ public class LegacySqlMigration implements Runnable { } Set nodes = convertedPerms.entrySet().stream() - .map(ent -> NodeFactory.fromSerializedNode(ent.getKey(), ent.getValue())) + .map(ent -> LegacyNodeFactory.fromSerializedNode(ent.getKey(), ent.getValue())) .map(NodeModel::fromNode) .collect(Collectors.toSet()); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyYamlMigration.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyYamlMigration.java index f85cb34a6..8575fe90d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyYamlMigration.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/legacy/LegacyYamlMigration.java @@ -27,7 +27,7 @@ package me.lucko.luckperms.common.storage.dao.legacy; import lombok.RequiredArgsConstructor; -import me.lucko.luckperms.common.node.NodeFactory; +import me.lucko.luckperms.common.node.LegacyNodeFactory; import me.lucko.luckperms.common.node.NodeModel; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.storage.dao.file.YamlDao; @@ -114,7 +114,7 @@ public class LegacyYamlMigration implements Runnable { perms.putAll((Map) data.get("perms")); Set nodes = perms.entrySet().stream() - .map(e -> NodeFactory.fromSerializedNode(e.getKey(), e.getValue())) + .map(e -> LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue())) .map(NodeModel::fromNode) .collect(Collectors.toCollection(LinkedHashSet::new)); @@ -161,7 +161,7 @@ public class LegacyYamlMigration implements Runnable { perms.putAll((Map) data.get("perms")); Set nodes = perms.entrySet().stream() - .map(e -> NodeFactory.fromSerializedNode(e.getKey(), e.getValue())) + .map(e -> LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue())) .map(NodeModel::fromNode) .collect(Collectors.toCollection(LinkedHashSet::new)); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java index 234ee334a..9ea7247e0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java @@ -48,6 +48,7 @@ import me.lucko.luckperms.common.managers.TrackManager; import me.lucko.luckperms.common.model.Group; import me.lucko.luckperms.common.model.Track; import me.lucko.luckperms.common.model.User; +import me.lucko.luckperms.common.node.LegacyNodeFactory; import me.lucko.luckperms.common.node.NodeFactory; import me.lucko.luckperms.common.node.NodeHeldPermission; import me.lucko.luckperms.common.node.NodeModel; @@ -231,7 +232,7 @@ public class MongoDao extends AbstractDao { Set nodes = new HashSet<>(); for (Map.Entry e : perms.entrySet()) { - Node node = NodeFactory.fromSerializedNode(e.getKey(), e.getValue()); + Node node = LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue()); nodes.add(NodeModel.fromNode(node)); } @@ -265,7 +266,7 @@ public class MongoDao extends AbstractDao { Set nodes = new HashSet<>(); for (Map.Entry e : perms.entrySet()) { - Node node = NodeFactory.fromSerializedNode(e.getKey(), e.getValue()); + Node node = LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue()); nodes.add(NodeModel.fromNode(node)); } @@ -305,7 +306,7 @@ public class MongoDao extends AbstractDao { // User exists, let's load. Document d = cursor.next(); user.setEnduringNodes(revert((Map) d.get("perms")).entrySet().stream() - .map(e -> NodeFactory.fromSerializedNode(e.getKey(), e.getValue())) + .map(e -> LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue())) .collect(Collectors.toSet()) ); user.getPrimaryGroup().setStoredValue(d.getString("primaryGroup")); @@ -393,7 +394,7 @@ public class MongoDao extends AbstractDao { Map perms = revert((Map) d.get("perms")); for (Map.Entry e : perms.entrySet()) { - Node node = NodeFactory.fromSerializedNode(e.getKey(), e.getValue()); + Node node = LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue()); if (!node.getPermission().equalsIgnoreCase(permission)) { continue; } @@ -421,7 +422,7 @@ public class MongoDao extends AbstractDao { // Group exists, let's load. Document d = cursor.next(); group.setEnduringNodes(revert((Map) d.get("perms")).entrySet().stream() - .map(e -> NodeFactory.fromSerializedNode(e.getKey(), e.getValue())) + .map(e -> LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue())) .collect(Collectors.toSet()) ); } else { @@ -451,7 +452,7 @@ public class MongoDao extends AbstractDao { Document d = cursor.next(); group.setEnduringNodes(revert((Map) d.get("perms")).entrySet().stream() - .map(e -> NodeFactory.fromSerializedNode(e.getKey(), e.getValue())) + .map(e -> LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue())) .collect(Collectors.toSet()) ); } @@ -534,7 +535,7 @@ public class MongoDao extends AbstractDao { Map perms = revert((Map) d.get("perms")); for (Map.Entry e : perms.entrySet()) { - Node node = NodeFactory.fromSerializedNode(e.getKey(), e.getValue()); + Node node = LegacyNodeFactory.fromSerializedNode(e.getKey(), e.getValue()); if (!node.getPermission().equalsIgnoreCase(permission)) { continue; } diff --git a/common/src/main/java/me/lucko/luckperms/common/treeview/TreeView.java b/common/src/main/java/me/lucko/luckperms/common/treeview/TreeView.java index 76f0a30d2..ad629f39b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/treeview/TreeView.java +++ b/common/src/main/java/me/lucko/luckperms/common/treeview/TreeView.java @@ -31,7 +31,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.Maps; import me.lucko.luckperms.api.Tristate; -import me.lucko.luckperms.common.caching.PermissionCache; +import me.lucko.luckperms.common.caching.type.PermissionCache; import me.lucko.luckperms.common.utils.PasteUtils; import me.lucko.luckperms.common.verbose.CheckOrigin; diff --git a/common/src/main/java/me/lucko/luckperms/common/utils/LoginHelper.java b/common/src/main/java/me/lucko/luckperms/common/utils/LoginHelper.java index 7c7d7c314..76cafcf07 100644 --- a/common/src/main/java/me/lucko/luckperms/common/utils/LoginHelper.java +++ b/common/src/main/java/me/lucko/luckperms/common/utils/LoginHelper.java @@ -27,8 +27,8 @@ package me.lucko.luckperms.common.utils; import lombok.experimental.UtilityClass; +import me.lucko.luckperms.common.assignments.AssignmentRule; import me.lucko.luckperms.common.config.ConfigKeys; -import me.lucko.luckperms.common.defaults.Rule; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -79,7 +79,7 @@ public class LoginHelper { } else { // Setup defaults for the user boolean save = false; - for (Rule rule : plugin.getConfiguration().get(ConfigKeys.DEFAULT_ASSIGNMENTS)) { + for (AssignmentRule rule : plugin.getConfiguration().get(ConfigKeys.DEFAULT_ASSIGNMENTS)) { if (rule.apply(user)) { save = true; } diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java index 9431e8989..2621555f7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseListener.java @@ -33,7 +33,7 @@ import com.google.common.collect.Maps; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.common.commands.sender.Sender; -import me.lucko.luckperms.common.commands.utils.Util; +import me.lucko.luckperms.common.commands.utils.CommandUtils; import me.lucko.luckperms.common.constants.Constants; import me.lucko.luckperms.common.locale.Message; import me.lucko.luckperms.common.utils.DateUtil; @@ -142,7 +142,7 @@ public class VerboseListener { // build the text List hover = new ArrayList<>(); hover.add("&bOrigin: &2" + data.getCheckOrigin().name()); - hover.add("&bContext: &r" + Util.contextSetToString(data.getCheckContext())); + hover.add("&bContext: &r" + CommandUtils.contextSetToString(data.getCheckContext())); hover.add("&bTrace: &r"); int overflow = readStack(data, 15, e -> hover.add("&7" + e.getClassName() + "." + e.getMethodName() + (e.getLineNumber() >= 0 ? ":" + e.getLineNumber() : ""))); @@ -245,7 +245,7 @@ public class VerboseListener { // append the spoiler text prettyOutput.add("
Origin: " + c.getCheckOrigin().name() + ""); - prettyOutput.add("
Context: " + Util.stripColor(Util.contextSetToString(c.getCheckContext())) + ""); + prettyOutput.add("
Context: " + CommandUtils.stripColor(CommandUtils.contextSetToString(c.getCheckContext())) + ""); prettyOutput.add("
Trace:
");
 
                 int overflow = readStack(c, 30, e -> prettyOutput.add(e.getClassName() + "." + e.getMethodName() + (e.getLineNumber() >= 0 ? ":" + e.getLineNumber() : "")));
diff --git a/sponge/sponge-service-api7/src/main/java/me/lucko/luckperms/sponge/service/proxy/api7/SubjectCollectionProxy.java b/sponge/sponge-service-api7/src/main/java/me/lucko/luckperms/sponge/service/proxy/api7/SubjectCollectionProxy.java
index 8aa3d67f2..c01cb7d70 100644
--- a/sponge/sponge-service-api7/src/main/java/me/lucko/luckperms/sponge/service/proxy/api7/SubjectCollectionProxy.java
+++ b/sponge/sponge-service-api7/src/main/java/me/lucko/luckperms/sponge/service/proxy/api7/SubjectCollectionProxy.java
@@ -129,7 +129,7 @@ public class SubjectCollectionProxy implements SubjectCollection {
 
     @Override
     public void suggestUnload(String s) {
-        handle.suggestUnload(s);
+        // unused by lp
     }
 
 }
diff --git a/sponge/sponge-service/src/main/java/me/lucko/luckperms/sponge/service/model/LPSubjectCollection.java b/sponge/sponge-service/src/main/java/me/lucko/luckperms/sponge/service/model/LPSubjectCollection.java
index 3a53c2079..251d3a68a 100644
--- a/sponge/sponge-service/src/main/java/me/lucko/luckperms/sponge/service/model/LPSubjectCollection.java
+++ b/sponge/sponge-service/src/main/java/me/lucko/luckperms/sponge/service/model/LPSubjectCollection.java
@@ -77,6 +77,4 @@ public interface LPSubjectCollection {
 
     LPSubject getDefaults();
 
-    void suggestUnload(String identifier);
-
 }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java
index 793eba4b5..7c94a62df 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java
@@ -35,7 +35,7 @@ import me.lucko.luckperms.api.platform.PlatformType;
 import me.lucko.luckperms.common.actionlog.LogDispatcher;
 import me.lucko.luckperms.common.api.ApiProvider;
 import me.lucko.luckperms.common.api.ApiSingletonUtils;
-import me.lucko.luckperms.common.backup.ImporterSender;
+import me.lucko.luckperms.common.backup.DummySender;
 import me.lucko.luckperms.common.buffers.BufferedRequest;
 import me.lucko.luckperms.common.buffers.UpdateTaskBuffer;
 import me.lucko.luckperms.common.caching.handlers.CachedStateManager;
@@ -456,7 +456,7 @@ public class LPSpongePlugin implements LuckPermsPlugin {
     @Override
     public Sender getConsoleSender() {
         if (!game.isServerAvailable()) {
-            return new ImporterSender(this, Constants.CONSOLE_UUID, Constants.CONSOLE_NAME) {
+            return new DummySender(this, Constants.CONSOLE_UUID, Constants.CONSOLE_NAME) {
                 @Override
                 protected void consumeMessage(String s) {
                     logger.info(s);
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeCommandExecutor.java b/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeCommandExecutor.java
index 830453a9e..ce4d3e13c 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeCommandExecutor.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeCommandExecutor.java
@@ -29,7 +29,6 @@ import com.google.common.base.Splitter;
 
 import me.lucko.luckperms.common.commands.CommandManager;
 import me.lucko.luckperms.common.commands.sender.Sender;
-import me.lucko.luckperms.common.commands.utils.Util;
 
 import org.spongepowered.api.command.CommandCallable;
 import org.spongepowered.api.command.CommandResult;
@@ -60,7 +59,7 @@ public class SpongeCommandExecutor extends CommandManager implements CommandCall
     @Override
     public CommandResult process(CommandSource source, String s) {
         Sender lpSender = plugin.getSenderFactory().wrap(source);
-        List arguments = processSelectors(source, Util.stripQuotes(ARGUMENT_SPLITTER.splitToList(s)));
+        List arguments = processSelectors(source, CommandManager.stripQuotes(ARGUMENT_SPLITTER.splitToList(s)));
 
         onCommand(lpSender, "lp", arguments);
         return CommandResult.success();
@@ -69,7 +68,7 @@ public class SpongeCommandExecutor extends CommandManager implements CommandCall
     @Override
     public List getSuggestions(CommandSource source, String s, @Nullable Location location) {
         Sender lpSender = plugin.getSenderFactory().wrap(source);
-        List arguments = processSelectors(source, Util.stripQuotes(TAB_COMPLETE_ARGUMENT_SPLITTER.splitToList(s)));
+        List arguments = processSelectors(source, CommandManager.stripQuotes(TAB_COMPLETE_ARGUMENT_SPLITTER.splitToList(s)));
 
         return onTabComplete(lpSender, arguments);
     }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionClear.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionClear.java
index 86fe70537..61eb5fe7f 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionClear.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionClear.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -51,10 +51,10 @@ public class OptionClear extends SubCommand {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(0, args);
         if (contextSet.isEmpty()) {
             subjectData.clearOptions();
-            Util.sendPluginMessage(sender, "&aCleared options matching contexts &bANY&a.");
+            CommandUtils.sendPluginMessage(sender, "&aCleared options matching contexts &bANY&a.");
         } else {
             subjectData.clearOptions(contextSet);
-            Util.sendPluginMessage(sender, "&aCleared options matching contexts &b" + SpongeUtils.contextToString(contextSet));
+            CommandUtils.sendPluginMessage(sender, "&aCleared options matching contexts &b" + SpongeUtils.contextToString(contextSet));
         }
         return CommandResult.SUCCESS;
     }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionInfo.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionInfo.java
index 9d0c718c0..5e79d830a 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionInfo.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionInfo.java
@@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -53,25 +53,25 @@ public class OptionInfo extends SubCommand {
     public CommandResult execute(LuckPermsPlugin plugin, Sender sender, LPSubjectData subjectData, List args, String label) throws CommandException {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(0, args);
         if (contextSet.isEmpty()) {
-            Util.sendPluginMessage(sender, "&aShowing options matching contexts &bANY&a.");
+            CommandUtils.sendPluginMessage(sender, "&aShowing options matching contexts &bANY&a.");
             Map> options = subjectData.getAllOptions();
             if (options.isEmpty()) {
-                Util.sendPluginMessage(sender, "That subject does not have any options defined.");
+                CommandUtils.sendPluginMessage(sender, "That subject does not have any options defined.");
                 return CommandResult.SUCCESS;
             }
 
             for (Map.Entry> e : options.entrySet()) {
-                Util.sendPluginMessage(sender, "&3>> &bContext: " + SpongeUtils.contextToString(e.getKey()) + "\n" + SpongeUtils.optionsToString(e.getValue()));
+                CommandUtils.sendPluginMessage(sender, "&3>> &bContext: " + SpongeUtils.contextToString(e.getKey()) + "\n" + SpongeUtils.optionsToString(e.getValue()));
             }
 
         } else {
             Map options = subjectData.getOptions(contextSet);
             if (options.isEmpty()) {
-                Util.sendPluginMessage(sender, "That subject does not have any options defined in those contexts.");
+                CommandUtils.sendPluginMessage(sender, "That subject does not have any options defined in those contexts.");
                 return CommandResult.SUCCESS;
             }
 
-            Util.sendPluginMessage(sender, "&aShowing options matching contexts &b" +
+            CommandUtils.sendPluginMessage(sender, "&aShowing options matching contexts &b" +
                     SpongeUtils.contextToString(contextSet) + "&a.\n" + SpongeUtils.optionsToString(options));
 
         }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionSet.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionSet.java
index 975cf6881..64392421e 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionSet.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionSet.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -53,9 +53,9 @@ public class OptionSet extends SubCommand {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(2, args);
 
         if (subjectData.setOption(contextSet, key, value).join()) {
-            Util.sendPluginMessage(sender, "&aSet &f\"" + key + "&f\"&a to &f\"" + value + "&f\"&a in context " + SpongeUtils.contextToString(contextSet));
+            CommandUtils.sendPluginMessage(sender, "&aSet &f\"" + key + "&f\"&a to &f\"" + value + "&f\"&a in context " + SpongeUtils.contextToString(contextSet));
         } else {
-            Util.sendPluginMessage(sender, "Unable to set option. Does the Subject already have it set?");
+            CommandUtils.sendPluginMessage(sender, "Unable to set option. Does the Subject already have it set?");
         }
 
         return CommandResult.SUCCESS;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionUnset.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionUnset.java
index c1bf844f5..bca0978e0 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionUnset.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/OptionUnset.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -52,9 +52,9 @@ public class OptionUnset extends SubCommand {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(1, args);
 
         if (subjectData.unsetOption(contextSet, key).join()) {
-            Util.sendPluginMessage(sender, "&aUnset &f\"" + key + "&f\"&a in context " + SpongeUtils.contextToString(contextSet));
+            CommandUtils.sendPluginMessage(sender, "&aUnset &f\"" + key + "&f\"&a in context " + SpongeUtils.contextToString(contextSet));
         } else {
-            Util.sendPluginMessage(sender, "Unable to unset option. Are you sure the Subject has it set?");
+            CommandUtils.sendPluginMessage(sender, "Unable to unset option. Are you sure the Subject has it set?");
         }
         return CommandResult.SUCCESS;
     }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentAdd.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentAdd.java
index 738e3f7eb..82988a4c8 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentAdd.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentAdd.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -59,21 +59,21 @@ public class ParentAdd extends SubCommand {
 
         LuckPermsService service = Sponge.getServiceManager().provideUnchecked(LuckPermsService.class);
         if (service.getLoadedCollections().keySet().stream().map(String::toLowerCase).noneMatch(s -> s.equalsIgnoreCase(collection))) {
-            Util.sendPluginMessage(sender, "Warning: SubjectCollection '&4" + collection + "&c' doesn't already exist.");
+            CommandUtils.sendPluginMessage(sender, "Warning: SubjectCollection '&4" + collection + "&c' doesn't already exist.");
         }
 
         LPSubjectCollection c = service.getCollection(collection);
         if (!c.hasRegistered(name).join()) {
-            Util.sendPluginMessage(sender, "Warning: Subject '&4" + name + "&c' doesn't already exist.");
+            CommandUtils.sendPluginMessage(sender, "Warning: Subject '&4" + name + "&c' doesn't already exist.");
         }
 
         LPSubject subject = c.loadSubject(name).join();
 
         if (subjectData.addParent(contextSet, subject.toReference()).join()) {
-            Util.sendPluginMessage(sender, "&aAdded parent &b" + subject.getParentCollection().getIdentifier() +
+            CommandUtils.sendPluginMessage(sender, "&aAdded parent &b" + subject.getParentCollection().getIdentifier() +
                     "&a/&b" + subject.getIdentifier() + "&a in context " + SpongeUtils.contextToString(contextSet));
         } else {
-            Util.sendPluginMessage(sender, "Unable to add parent. Does the Subject already have it added?");
+            CommandUtils.sendPluginMessage(sender, "Unable to add parent. Does the Subject already have it added?");
         }
         return CommandResult.SUCCESS;
     }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentClear.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentClear.java
index bed819872..95838f3c9 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentClear.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentClear.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -51,10 +51,10 @@ public class ParentClear extends SubCommand {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(0, args);
         if (contextSet.isEmpty()) {
             subjectData.clearParents();
-            Util.sendPluginMessage(sender, "&aCleared parents matching contexts &bANY&a.");
+            CommandUtils.sendPluginMessage(sender, "&aCleared parents matching contexts &bANY&a.");
         } else {
             subjectData.clearParents(contextSet);
-            Util.sendPluginMessage(sender, "&aCleared parents matching contexts &b" + SpongeUtils.contextToString(contextSet));
+            CommandUtils.sendPluginMessage(sender, "&aCleared parents matching contexts &b" + SpongeUtils.contextToString(contextSet));
         }
         return CommandResult.SUCCESS;
     }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentInfo.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentInfo.java
index fc7248509..1601a7f55 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentInfo.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentInfo.java
@@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -54,25 +54,25 @@ public class ParentInfo extends SubCommand {
     public CommandResult execute(LuckPermsPlugin plugin, Sender sender, LPSubjectData subjectData, List args, String label) throws CommandException {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(0, args);
         if (contextSet.isEmpty()) {
-            Util.sendPluginMessage(sender, "&aShowing parents matching contexts &bANY&a.");
+            CommandUtils.sendPluginMessage(sender, "&aShowing parents matching contexts &bANY&a.");
             Map> parents = subjectData.getAllParents();
             if (parents.isEmpty()) {
-                Util.sendPluginMessage(sender, "That subject does not have any parents defined.");
+                CommandUtils.sendPluginMessage(sender, "That subject does not have any parents defined.");
                 return CommandResult.SUCCESS;
             }
 
             for (Map.Entry> e : parents.entrySet()) {
-                Util.sendPluginMessage(sender, "&3>> &bContext: " + SpongeUtils.contextToString(e.getKey()) + "\n" + SpongeUtils.parentsToString(e.getValue()));
+                CommandUtils.sendPluginMessage(sender, "&3>> &bContext: " + SpongeUtils.contextToString(e.getKey()) + "\n" + SpongeUtils.parentsToString(e.getValue()));
             }
 
         } else {
             List parents = subjectData.getParents(contextSet);
             if (parents.isEmpty()) {
-                Util.sendPluginMessage(sender, "That subject does not have any parents defined in those contexts.");
+                CommandUtils.sendPluginMessage(sender, "That subject does not have any parents defined in those contexts.");
                 return CommandResult.SUCCESS;
             }
 
-            Util.sendPluginMessage(sender, "&aShowing parents matching contexts &b" +
+            CommandUtils.sendPluginMessage(sender, "&aShowing parents matching contexts &b" +
                     SpongeUtils.contextToString(contextSet) + "&a.\n" + SpongeUtils.parentsToString(parents));
 
         }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentRemove.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentRemove.java
index db9e8ed4b..4f1cc2ce3 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentRemove.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/ParentRemove.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -59,21 +59,21 @@ public class ParentRemove extends SubCommand {
 
         LuckPermsService service = Sponge.getServiceManager().provideUnchecked(LuckPermsService.class);
         if (service.getLoadedCollections().keySet().stream().map(String::toLowerCase).noneMatch(s -> s.equalsIgnoreCase(collection))) {
-            Util.sendPluginMessage(sender, "Warning: SubjectCollection '&4" + collection + "&c' doesn't exist.");
+            CommandUtils.sendPluginMessage(sender, "Warning: SubjectCollection '&4" + collection + "&c' doesn't exist.");
         }
 
         LPSubjectCollection c = service.getCollection(collection);
         if (!c.hasRegistered(name).join()) {
-            Util.sendPluginMessage(sender, "Warning: Subject '&4" + name + "&c' doesn't exist.");
+            CommandUtils.sendPluginMessage(sender, "Warning: Subject '&4" + name + "&c' doesn't exist.");
         }
 
         LPSubject subject = c.loadSubject(name).join();
 
         if (subjectData.removeParent(contextSet, subject.toReference()).join()) {
-            Util.sendPluginMessage(sender, "&aRemoved parent &b" + subject.getParentCollection().getIdentifier() +
+            CommandUtils.sendPluginMessage(sender, "&aRemoved parent &b" + subject.getParentCollection().getIdentifier() +
                     "&a/&b" + subject.getIdentifier() + "&a in context " + SpongeUtils.contextToString(contextSet));
         } else {
-            Util.sendPluginMessage(sender, "Unable to remove parent. Are you sure the Subject has it added?");
+            CommandUtils.sendPluginMessage(sender, "Unable to remove parent. Are you sure the Subject has it added?");
         }
         return CommandResult.SUCCESS;
     }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionClear.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionClear.java
index c569e6883..64d77a27c 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionClear.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionClear.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -51,10 +51,10 @@ public class PermissionClear extends SubCommand {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(0, args);
         if (contextSet.isEmpty()) {
             subjectData.clearPermissions();
-            Util.sendPluginMessage(sender, "&aCleared permissions matching contexts &bANY&a.");
+            CommandUtils.sendPluginMessage(sender, "&aCleared permissions matching contexts &bANY&a.");
         } else {
             subjectData.clearPermissions(contextSet);
-            Util.sendPluginMessage(sender, "&aCleared permissions matching contexts &b" + SpongeUtils.contextToString(contextSet));
+            CommandUtils.sendPluginMessage(sender, "&aCleared permissions matching contexts &b" + SpongeUtils.contextToString(contextSet));
         }
         return CommandResult.SUCCESS;
     }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionInfo.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionInfo.java
index 75bfb9558..69db8be5e 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionInfo.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionInfo.java
@@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -53,25 +53,25 @@ public class PermissionInfo extends SubCommand {
     public CommandResult execute(LuckPermsPlugin plugin, Sender sender, LPSubjectData subjectData, List args, String label) throws CommandException {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(0, args);
         if (contextSet.isEmpty()) {
-            Util.sendPluginMessage(sender, "&aShowing permissions matching contexts &bANY&a.");
+            CommandUtils.sendPluginMessage(sender, "&aShowing permissions matching contexts &bANY&a.");
             Map> permissions = subjectData.getAllPermissions();
             if (permissions.isEmpty()) {
-                Util.sendPluginMessage(sender, "That subject does not have any permissions defined.");
+                CommandUtils.sendPluginMessage(sender, "That subject does not have any permissions defined.");
                 return CommandResult.SUCCESS;
             }
 
             for (Map.Entry> e : permissions.entrySet()) {
-                Util.sendPluginMessage(sender, "&3>> &bContext: " + SpongeUtils.contextToString(e.getKey()) + "\n" + SpongeUtils.nodesToString(e.getValue()));
+                CommandUtils.sendPluginMessage(sender, "&3>> &bContext: " + SpongeUtils.contextToString(e.getKey()) + "\n" + SpongeUtils.nodesToString(e.getValue()));
             }
 
         } else {
             Map permissions = subjectData.getPermissions(contextSet);
             if (permissions.isEmpty()) {
-                Util.sendPluginMessage(sender, "That subject does not have any permissions defined in those contexts.");
+                CommandUtils.sendPluginMessage(sender, "That subject does not have any permissions defined in those contexts.");
                 return CommandResult.SUCCESS;
             }
 
-            Util.sendPluginMessage(sender, "&aShowing permissions matching contexts &b" +
+            CommandUtils.sendPluginMessage(sender, "&aShowing permissions matching contexts &b" +
                     SpongeUtils.contextToString(contextSet) + "&a.\n" + SpongeUtils.nodesToString(permissions));
 
         }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionSet.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionSet.java
index 9e0252fcc..0be9356e5 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionSet.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/PermissionSet.java
@@ -32,7 +32,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.sender.Sender;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -54,9 +54,9 @@ public class PermissionSet extends SubCommand {
         ImmutableContextSet contextSet = ArgumentUtils.handleContextSponge(2, args);
 
         if (subjectData.setPermission(contextSet, node, tristate).join()) {
-            Util.sendPluginMessage(sender, "&aSet &b" + node + "&a to &b" + tristate.toString().toLowerCase() + "&a in context " + SpongeUtils.contextToString(contextSet));
+            CommandUtils.sendPluginMessage(sender, "&aSet &b" + node + "&a to &b" + tristate.toString().toLowerCase() + "&a in context " + SpongeUtils.contextToString(contextSet));
         } else {
-            Util.sendPluginMessage(sender, "Unable to set permission. Does the Subject already have it set?");
+            CommandUtils.sendPluginMessage(sender, "Unable to set permission. Does the Subject already have it set?");
         }
 
         return CommandResult.SUCCESS;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeMainCommand.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeMainCommand.java
index 1e02ae3d8..212ce222b 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeMainCommand.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeMainCommand.java
@@ -33,7 +33,7 @@ import me.lucko.luckperms.common.commands.CommandManager;
 import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.Command;
 import me.lucko.luckperms.common.commands.sender.Sender;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
 import me.lucko.luckperms.common.locale.Message;
@@ -94,8 +94,8 @@ public class SpongeMainCommand extends Command {
         LuckPermsService service = this.plugin.getService();
 
         if (args.size() < 1) {
-            Util.sendPluginMessage(sender, "&aCurrent Subject Collections:\n" +
-                    Util.toCommaSep(service.getLoadedCollections().keySet().stream()
+            CommandUtils.sendPluginMessage(sender, "&aCurrent Subject Collections:\n" +
+                    CommandUtils.toCommaSep(service.getLoadedCollections().keySet().stream()
                             .filter(s -> !s.equalsIgnoreCase("user") && !s.equalsIgnoreCase("group"))
                             .sorted()
                             .collect(Collectors.toList())
@@ -107,12 +107,12 @@ public class SpongeMainCommand extends Command {
         String subjectCollection = args.get(0);
 
         if (subjectCollection.equalsIgnoreCase("user") || subjectCollection.equalsIgnoreCase("group")) {
-            Util.sendPluginMessage(sender, "Please use the main LuckPerms commands to edit users and groups.");
+            CommandUtils.sendPluginMessage(sender, "Please use the main LuckPerms commands to edit users and groups.");
             return CommandResult.STATE_ERROR;
         }
 
         if (service.getLoadedCollections().keySet().stream().map(String::toLowerCase).noneMatch(s -> s.equalsIgnoreCase(subjectCollection))) {
-            Util.sendPluginMessage(sender, "Warning: SubjectCollection '&4" + subjectCollection + "&c' doesn't already exist. Creating it now.");
+            CommandUtils.sendPluginMessage(sender, "Warning: SubjectCollection '&4" + subjectCollection + "&c' doesn't already exist. Creating it now.");
         }
 
         LPSubjectCollection collection = service.getCollection(subjectCollection);
@@ -126,9 +126,9 @@ public class SpongeMainCommand extends Command {
                 List extra = subjects.subList(50, subjects.size());
                 int overflow = extra.size();
                 extra.clear();
-                Util.sendPluginMessage(sender, "&aCurrent Subjects:\n" + Util.toCommaSep(subjects) + "&b ... and &a" + overflow + " &bmore.");
+                CommandUtils.sendPluginMessage(sender, "&aCurrent Subjects:\n" + CommandUtils.toCommaSep(subjects) + "&b ... and &a" + overflow + " &bmore.");
             } else {
-                Util.sendPluginMessage(sender, "&aCurrent Subjects:\n" + Util.toCommaSep(subjects));
+                CommandUtils.sendPluginMessage(sender, "&aCurrent Subjects:\n" + CommandUtils.toCommaSep(subjects));
             }
 
             return CommandResult.SUCCESS;
@@ -179,7 +179,7 @@ public class SpongeMainCommand extends Command {
 
         String subjectId = args.get(1);
         if (!collection.hasRegistered(subjectId).join()) {
-            Util.sendPluginMessage(sender, "Warning: Subject '&4" + subjectId + "&c' doesn't already exist. Creating it now.");
+            CommandUtils.sendPluginMessage(sender, "Warning: Subject '&4" + subjectId + "&c' doesn't already exist. Creating it now.");
         }
 
         LPSubject subject = collection.loadSubject(subjectId).join();
@@ -196,19 +196,19 @@ public class SpongeMainCommand extends Command {
 
     @Override
     public void sendUsage(Sender sender, String label) {
-        Util.sendPluginMessage(sender, "&3> &a" + String.format(getUsage(), label));
+        CommandUtils.sendPluginMessage(sender, "&3> &a" + String.format(getUsage(), label));
     }
 
     @Override
     public void sendDetailedUsage(Sender sender, String label) {
-        Util.sendPluginMessage(sender, "&b" + getName() + " Sub Commands: &7(" + String.format("/%s sponge   [-transient]", label) + " ...)");
+        CommandUtils.sendPluginMessage(sender, "&b" + getName() + " Sub Commands: &7(" + String.format("/%s sponge   [-transient]", label) + " ...)");
         for (String s : Arrays.asList("Permission", "Parent", "Option")) {
             List subs = subCommands.get(s.toLowerCase()).stream()
                     .filter(sub -> sub.isAuthorized(sender))
                     .collect(Collectors.toList());
 
             if (!subs.isEmpty()) {
-                Util.sendPluginMessage(sender, "&3>>  &b" + s);
+                CommandUtils.sendPluginMessage(sender, "&3>>  &b" + s);
                 for (Command sub : subs) {
                     sub.sendUsage(sender, label);
                 }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeUtils.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeUtils.java
index 35c9f9392..adb9832e7 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeUtils.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeUtils.java
@@ -30,7 +30,7 @@ import lombok.experimental.UtilityClass;
 import me.lucko.luckperms.api.Tristate;
 import me.lucko.luckperms.api.context.ContextSet;
 import me.lucko.luckperms.common.commands.utils.ArgumentUtils;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.sponge.service.model.SubjectReference;
 
 import java.util.List;
@@ -89,7 +89,7 @@ public class SpongeUtils {
     }
 
     public static String contextToString(ContextSet set) {
-        return Util.contextSetToString(set);
+        return CommandUtils.contextSetToString(set);
     }
 
 }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/SpongeCalculatorLink.java b/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/ProxiedContextCalculator.java
similarity index 84%
rename from sponge/src/main/java/me/lucko/luckperms/sponge/contexts/SpongeCalculatorLink.java
rename to sponge/src/main/java/me/lucko/luckperms/sponge/contexts/ProxiedContextCalculator.java
index 2f59a4280..1ce3ca305 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/SpongeCalculatorLink.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/ProxiedContextCalculator.java
@@ -38,24 +38,12 @@ import java.util.HashSet;
 import java.util.Set;
 
 @AllArgsConstructor
-public class SpongeCalculatorLink implements ContextCalculator {
+public class ProxiedContextCalculator implements ContextCalculator {
     private final org.spongepowered.api.service.context.ContextCalculator delegate;
 
     @Override
     public MutableContextSet giveApplicableContext(Subject subject, MutableContextSet accumulator) {
-        Set contexts = new HashSet() {
-
-            // don't allow null elements
-            @Override
-            public boolean add(Context context) {
-                if (context == null) {
-                    throw new NullPointerException("context");
-                }
-
-                return super.add(context);
-            }
-        };
-
+        Set contexts = new NonNullContextHashSet();
         try {
             delegate.accumulateContexts(subject, contexts);
             accumulator.addAll(CompatibilityUtil.convertContexts(contexts));
@@ -65,4 +53,16 @@ public class SpongeCalculatorLink implements ContextCalculator {
 
         return accumulator;
     }
+
+    private final class NonNullContextHashSet extends HashSet {
+        @Override
+        public boolean add(Context context) {
+            if (context == null) {
+                throw new NullPointerException("context");
+            }
+
+            return super.add(context);
+        }
+    }
+
 }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeGroupManager.java b/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeGroupManager.java
index 5a7685bdb..762e9550d 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeGroupManager.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeGroupManager.java
@@ -284,11 +284,6 @@ public class SpongeGroupManager implements GroupManager, LPSubjectCollection {
         return getService().getDefaultSubjects().loadSubject(getIdentifier()).join();
     }
 
-    @Override
-    public void suggestUnload(String identifier) {
-        // noop
-    }
-
     @Override
     public Group getByDisplayName(String name) {
         // try to get an exact match first
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeUserManager.java b/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeUserManager.java
index d143387da..c69fb89f3 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeUserManager.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeUserManager.java
@@ -381,9 +381,4 @@ public class SpongeUserManager implements UserManager, LPSubjectCollection {
         return getService().getDefaultSubjects().loadSubject(getIdentifier()).join();
     }
 
-    @Override
-    public void suggestUnload(String identifier) {
-        // noop
-    }
-
 }
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionManager.java b/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionManager.java
index 155245a72..eafab7cec 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionManager.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionManager.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.impl.migration.MigrationUtils;
 import me.lucko.luckperms.common.commands.sender.Sender;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -121,7 +121,7 @@ public class MigrationPermissionManager extends SubCommand {
         log.log("Starting user migration.");
         AtomicInteger userCount = new AtomicInteger(0);
         for (Subject pmUser : pmService.getUserSubjects().getAllSubjects()) {
-            UUID uuid = Util.parseUuid(pmUser.getIdentifier());
+            UUID uuid = CommandUtils.parseUuid(pmUser.getIdentifier());
             if (uuid == null) {
                 log.logErr("Could not parse UUID for user: " + pmUser.getIdentifier());
                 continue;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionsEx.java b/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionsEx.java
index 2dd57e561..a22cf0e09 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionsEx.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionsEx.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.commands.CommandResult;
 import me.lucko.luckperms.common.commands.abstraction.SubCommand;
 import me.lucko.luckperms.common.commands.impl.migration.MigrationUtils;
 import me.lucko.luckperms.common.commands.sender.Sender;
-import me.lucko.luckperms.common.commands.utils.Util;
+import me.lucko.luckperms.common.commands.utils.CommandUtils;
 import me.lucko.luckperms.common.constants.CommandPermission;
 import me.lucko.luckperms.common.locale.CommandSpec;
 import me.lucko.luckperms.common.locale.LocaleManager;
@@ -174,7 +174,7 @@ public class MigrationPermissionsEx extends SubCommand {
         maxWeight += 5;
 
         for (Subject pexUser : pexService.getUserSubjects().getAllSubjects()) {
-            UUID uuid = Util.parseUuid(pexUser.getIdentifier());
+            UUID uuid = CommandUtils.parseUuid(pexUser.getIdentifier());
             if (uuid == null) {
                 log.logErr("Could not parse UUID for user: " + pexUser.getIdentifier());
                 continue;
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 ba5471e86..797bbffff 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
@@ -38,7 +38,7 @@ import com.google.common.collect.ImmutableSet;
 import me.lucko.luckperms.common.model.Group;
 import me.lucko.luckperms.common.utils.Predicates;
 import me.lucko.luckperms.sponge.LPSpongePlugin;
-import me.lucko.luckperms.sponge.contexts.SpongeCalculatorLink;
+import me.lucko.luckperms.sponge.contexts.ProxiedContextCalculator;
 import me.lucko.luckperms.sponge.managers.SpongeGroupManager;
 import me.lucko.luckperms.sponge.managers.SpongeUserManager;
 import me.lucko.luckperms.sponge.service.legacy.LegacyDataMigrator;
@@ -185,7 +185,7 @@ public class LuckPermsService implements LPPermissionService {
 
     @Override
     public void registerContextCalculator(org.spongepowered.api.service.context.ContextCalculator calculator) {
-        plugin.getContextManager().registerCalculator(new SpongeCalculatorLink(calculator));
+        plugin.getContextManager().registerCalculator(new ProxiedContextCalculator(calculator));
     }
 
     @Override
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/LuckPermsSubjectData.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/LuckPermsSubjectData.java
index 4339d85c6..2a5890e9f 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/LuckPermsSubjectData.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/LuckPermsSubjectData.java
@@ -37,7 +37,7 @@ import me.lucko.luckperms.api.DataMutateResult;
 import me.lucko.luckperms.api.Node;
 import me.lucko.luckperms.api.Tristate;
 import me.lucko.luckperms.api.context.ImmutableContextSet;
-import me.lucko.luckperms.common.caching.MetaAccumulator;
+import me.lucko.luckperms.common.caching.type.MetaAccumulator;
 import me.lucko.luckperms.common.model.Group;
 import me.lucko.luckperms.common.model.PermissionHolder;
 import me.lucko.luckperms.common.model.User;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/OptionLookup.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/OptionLookupKey.java
similarity index 97%
rename from sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/OptionLookup.java
rename to sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/OptionLookupKey.java
index f3acb3336..7b5d8d1b7 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/OptionLookup.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/OptionLookupKey.java
@@ -36,7 +36,7 @@ import me.lucko.luckperms.api.context.ImmutableContextSet;
 @ToString
 @EqualsAndHashCode
 @AllArgsConstructor(staticName = "of")
-public final class OptionLookup {
+public final class OptionLookupKey {
 
     private final String key;
     private final ImmutableContextSet contexts;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/PermissionLookup.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/PermissionLookupKey.java
similarity index 97%
rename from sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/PermissionLookup.java
rename to sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/PermissionLookupKey.java
index 113793a0e..3a38dbc22 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/PermissionLookup.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/PermissionLookupKey.java
@@ -36,7 +36,7 @@ import me.lucko.luckperms.api.context.ImmutableContextSet;
 @ToString
 @EqualsAndHashCode
 @AllArgsConstructor(staticName = "of")
-public final class PermissionLookup {
+public final class PermissionLookupKey {
 
     private final String node;
     private final ImmutableContextSet contexts;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/persisted/PersistedCollection.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/persisted/PersistedCollection.java
index 0dd0ac9f5..009a16afc 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/persisted/PersistedCollection.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/persisted/PersistedCollection.java
@@ -170,8 +170,4 @@ public class PersistedCollection implements LPSubjectCollection {
         return service.getDefaultSubjects().loadSubject(getIdentifier()).join();
     }
 
-    @Override
-    public void suggestUnload(String identifier) {
-        // ignore
-    }
 }
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 5e59a73db..3a1222213 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
@@ -39,8 +39,8 @@ import me.lucko.luckperms.common.verbose.CheckOrigin;
 import me.lucko.luckperms.sponge.service.LuckPermsService;
 import me.lucko.luckperms.sponge.service.ProxyFactory;
 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.calculated.OptionLookupKey;
+import me.lucko.luckperms.sponge.service.calculated.PermissionLookupKey;
 import me.lucko.luckperms.sponge.service.model.LPSubject;
 import me.lucko.luckperms.sponge.service.model.SubjectReference;
 import me.lucko.luckperms.sponge.service.storage.SubjectStorageModel;
@@ -67,7 +67,7 @@ public class PersistedSubject implements LPSubject {
     private final PersistedSubjectData subjectData;
     private final CalculatedSubjectData transientSubjectData;
 
-    private final LoadingCache permissionLookupCache = Caffeine.newBuilder()
+    private final LoadingCache permissionLookupCache = Caffeine.newBuilder()
             .expireAfterAccess(20, TimeUnit.MINUTES)
             .build(lookup -> lookupPermissionValue(lookup.getContexts(), lookup.getNode()));
 
@@ -75,7 +75,7 @@ public class PersistedSubject implements LPSubject {
             .expireAfterAccess(20, TimeUnit.MINUTES)
             .build(this::lookupParents);
 
-    private final LoadingCache> optionLookupCache = Caffeine.newBuilder()
+    private final LoadingCache> optionLookupCache = Caffeine.newBuilder()
             .expireAfterAccess(20, TimeUnit.MINUTES)
             .build(lookup -> lookupOptionValue(lookup.getContexts(), lookup.getKey()));
 
@@ -254,7 +254,7 @@ public class PersistedSubject implements LPSubject {
 
     @Override
     public Tristate getPermissionValue(@NonNull ImmutableContextSet contexts, @NonNull String node) {
-        Tristate t = permissionLookupCache.get(PermissionLookup.of(node, contexts));
+        Tristate t = permissionLookupCache.get(PermissionLookupKey.of(node, contexts));
         service.getPlugin().getVerboseHandler().offerCheckData(CheckOrigin.INTERNAL, getParentCollection().getIdentifier() + "/" + identifier, contexts, node, t);
         return t;
     }
@@ -279,7 +279,7 @@ public class PersistedSubject implements LPSubject {
 
     @Override
     public Optional getOption(ImmutableContextSet contexts, String key) {
-        return optionLookupCache.get(OptionLookup.of(key, contexts));
+        return optionLookupCache.get(OptionLookupKey.of(key, contexts));
     }
 
     @Override