From fd954d8293cce7f7f1547b026b9f254e8e6b2e82 Mon Sep 17 00:00:00 2001 From: Luck Date: Sun, 6 Oct 2019 21:34:24 +0100 Subject: [PATCH] More work --- .../luckperms/api/actionlog/ActionLog.java | 4 +- .../luckperms/api/model/PermissionHolder.java | 16 +-- .../net/luckperms/api/model/group/Group.java | 6 +- .../luckperms/api/model/user/UserManager.java | 26 ++--- .../api/query/dataorder/DataQueryOrder.java | 6 +- .../luckperms/bukkit/BukkitSenderFactory.java | 2 +- .../luckperms/bukkit/LPBukkitBootstrap.java | 14 +-- .../luckperms/bukkit/LPBukkitPlugin.java | 6 +- .../permissible/LPPermissionAttachment.java | 2 +- .../migration/MigrationBPermissions.java | 12 +-- .../migration/MigrationGroupManager.java | 16 +-- .../migration/MigrationPermissionsBukkit.java | 8 +- .../migration/MigrationPermissionsEx.java | 14 +-- .../migration/MigrationPowerfulPerms.java | 20 ++-- .../migration/MigrationZPermissions.java | 14 +-- .../bukkit/vault/LuckPermsVaultChat.java | 4 +- .../vault/LuckPermsVaultPermission.java | 13 +-- .../luckperms/bungee/BungeeSenderFactory.java | 2 +- .../luckperms/bungee/LPBungeeBootstrap.java | 14 +-- .../luckperms/bungee/LPBungeePlugin.java | 2 +- .../migration/MigrationBungeePerms.java | 12 +-- .../lucko/luckperms/common/actionlog/Log.java | 4 +- .../common/actionlog/LogDispatcher.java | 2 +- .../common/actionlog/LoggedAction.java | 18 ++-- .../api/implementation/ApiActionLog.java | 6 +- .../common/api/implementation/ApiGroup.java | 6 +- .../implementation/ApiPermissionHolder.java | 34 +++--- .../common/api/implementation/ApiUser.java | 6 +- .../api/implementation/ApiUserManager.java | 39 ++++--- .../luckperms/common/backup/Exporter.java | 8 +- .../command/access/ArgumentPermissions.java | 8 +- .../common/command/utils/ArgumentParser.java | 2 +- .../command/utils/StorageAssistant.java | 2 +- .../generic/meta/MetaAddChatMeta.java | 2 +- .../generic/meta/MetaAddTempChatMeta.java | 2 +- .../generic/meta/MetaRemoveChatMeta.java | 2 +- .../generic/meta/MetaRemoveTempChatMeta.java | 2 +- .../common/commands/generic/meta/MetaSet.java | 4 +- .../generic/meta/MetaSetChatMeta.java | 2 +- .../commands/generic/meta/MetaSetTemp.java | 4 +- .../generic/meta/MetaSetTempChatMeta.java | 2 +- .../commands/generic/other/HolderClear.java | 4 +- .../generic/other/HolderShowTracks.java | 5 +- .../commands/generic/parent/ParentAdd.java | 2 +- .../generic/parent/ParentAddTemp.java | 2 +- .../commands/generic/parent/ParentRemove.java | 2 +- .../generic/parent/ParentRemoveTemp.java | 2 +- .../commands/generic/parent/ParentSet.java | 2 +- .../generic/parent/ParentSetTrack.java | 2 +- .../parent/UserSwitchPrimaryGroup.java | 4 +- .../generic/permission/PermissionCheck.java | 2 +- .../permission/PermissionCheckInherits.java | 17 +-- .../generic/permission/PermissionSet.java | 2 +- .../generic/permission/PermissionSetTemp.java | 2 +- .../generic/permission/PermissionUnset.java | 2 +- .../permission/PermissionUnsetTemp.java | 2 +- .../commands/group/GroupSetDisplayName.java | 14 ++- .../common/commands/group/GroupSetWeight.java | 2 +- .../common/commands/log/LogNotify.java | 4 +- .../commands/migration/MigrationUtils.java | 2 +- .../common/commands/misc/VerboseCommand.java | 2 +- .../common/commands/user/UserClone.java | 2 +- .../common/commands/user/UserInfo.java | 8 +- .../common/commands/user/UserMainCommand.java | 30 +++--- .../common/context/ContextManager.java | 12 +-- .../luckperms/common/event/EventFactory.java | 12 +-- .../event/model/SenderPlatformEntity.java | 2 +- .../common/inheritance/InheritanceGraph.java | 2 +- .../common/inheritance/ResolvedGroup.java | 61 ----------- .../messaging/LuckPermsMessagingService.java | 4 +- .../common/model/DisplayNameCache.java | 62 ----------- .../lucko/luckperms/common/model/Group.java | 54 +++++----- .../luckperms/common/model/Identifiable.java | 41 ------- .../lucko/luckperms/common/model/NodeMap.java | 59 +++++----- .../common/model/PermissionHolder.java | 68 ++++-------- .../lucko/luckperms/common/model/Track.java | 28 ++--- .../me/lucko/luckperms/common/model/User.java | 75 +++++-------- .../common/model/UserIdentifier.java | 31 +++--- .../common/model/manager/AbstractManager.java | 10 +- .../common/model/manager/Manager.java | 11 +- .../manager/user/AbstractUserManager.java | 54 +++------- .../manager/user/StandardUserManager.java | 8 +- .../model/manager/user/UserHousekeeper.java | 9 +- .../model/manager/user/UserManager.java | 5 +- .../common/node/utils/InheritanceInfo.java | 85 --------------- .../common/node/utils/NodeTools.java | 68 ------------ .../common/node/utils/ShorthandParser.java | 27 +++-- .../plugin/bootstrap/LuckPermsBootstrap.java | 14 +-- .../util/AbstractConnectionListener.java | 28 ++--- .../primarygroup/ParentsByWeightHolder.java | 2 +- .../common/sender/AbstractSender.java | 12 +-- .../luckperms/common/sender/DummySender.java | 10 +- .../lucko/luckperms/common/sender/Sender.java | 6 +- .../common/sender/SenderFactory.java | 2 +- .../luckperms/common/storage/Storage.java | 18 ++-- .../implementation/StorageImplementation.java | 8 +- .../file/AbstractConfigurateStorage.java | 41 ++++--- .../file/CombinedConfigurateStorage.java | 8 +- .../file/SeparatedConfigurateStorage.java | 8 +- .../implementation/mongodb/MongoStorage.java | 45 ++++---- .../implementation/split/SplitStorage.java | 16 +-- .../storage/implementation/sql/SqlNode.java | 23 +++- .../implementation/sql/SqlStorage.java | 102 ++++++++---------- .../common/tasks/ExpireTemporaryTask.java | 4 +- .../common/treeview/PermissionRegistry.java | 22 ++-- .../luckperms/common/treeview/TreeView.java | 4 +- .../common/verbose/VerboseHandler.java | 2 +- .../common/verbose/VerboseListener.java | 2 +- .../lucko/luckperms/common/web/WebEditor.java | 2 +- .../luckperms/nukkit/LPNukkitBootstrap.java | 12 +-- .../luckperms/nukkit/LPNukkitPlugin.java | 6 +- .../luckperms/nukkit/NukkitSenderFactory.java | 2 +- .../permissible/LPPermissionAttachment.java | 2 +- .../luckperms/sponge/LPSpongeBootstrap.java | 14 +-- .../luckperms/sponge/LPSpongePlugin.java | 2 +- .../luckperms/sponge/SpongeSenderFactory.java | 2 +- .../luckperms/sponge/model/SpongeUser.java | 10 +- .../model/manager/SpongeUserManager.java | 11 +- .../PermissionHolderSubjectData.java | 44 ++++---- .../model/permissionholder/UserSubject.java | 6 +- .../velocity/LPVelocityBootstrap.java | 12 +-- .../luckperms/velocity/LPVelocityPlugin.java | 2 +- .../velocity/VelocitySenderFactory.java | 2 +- 123 files changed, 680 insertions(+), 1098 deletions(-) delete mode 100644 common/src/main/java/me/lucko/luckperms/common/inheritance/ResolvedGroup.java delete mode 100644 common/src/main/java/me/lucko/luckperms/common/model/DisplayNameCache.java delete mode 100644 common/src/main/java/me/lucko/luckperms/common/model/Identifiable.java delete mode 100644 common/src/main/java/me/lucko/luckperms/common/node/utils/InheritanceInfo.java delete mode 100644 common/src/main/java/me/lucko/luckperms/common/node/utils/NodeTools.java diff --git a/api/src/main/java/net/luckperms/api/actionlog/ActionLog.java b/api/src/main/java/net/luckperms/api/actionlog/ActionLog.java index 4d01946ec..9002602a4 100644 --- a/api/src/main/java/net/luckperms/api/actionlog/ActionLog.java +++ b/api/src/main/java/net/luckperms/api/actionlog/ActionLog.java @@ -60,10 +60,10 @@ public interface ActionLog { /** * Gets the log content for a given user * - * @param uuid the uuid to filter by + * @param uniqueId the uuid to filter by * @return all content in this log where the user = uuid */ - @NonNull SortedSet getUserHistory(@NonNull UUID uuid); + @NonNull SortedSet getUserHistory(@NonNull UUID uniqueId); /** * Gets the log content for a given group diff --git a/api/src/main/java/net/luckperms/api/model/PermissionHolder.java b/api/src/main/java/net/luckperms/api/model/PermissionHolder.java index 6ef177f37..7520adf47 100644 --- a/api/src/main/java/net/luckperms/api/model/PermissionHolder.java +++ b/api/src/main/java/net/luckperms/api/model/PermissionHolder.java @@ -200,7 +200,7 @@ public interface PermissionHolder { * @return a Tristate for the holders permission status for the node * @throws NullPointerException if the node is null */ - @NonNull Tristate hasNode(@NonNull Node node, @NonNull NodeEqualityPredicate equalityPredicate); + @NonNull Tristate containsNode(@NonNull Node node, @NonNull NodeEqualityPredicate equalityPredicate); /** * Sets a permission node for the permission holder. @@ -462,18 +462,6 @@ public interface PermissionHolder { *

This method is called periodically by the platform, so it is only necessary to run * if you want to guarantee that the current data is totally up-to-date.

*/ - void auditTemporaryPermissions(); - - /** - * Checks to see if the object inherits a certain permission. - * - *

Although this method is named inheritsPermission, it can be used for all node types.

- * - * @param node the node to check for - * @param equalityPredicate how to determine if a node matches - * @return a Tristate for the holders inheritance status for the node - * @throws NullPointerException if the node is null - */ - @NonNull Tristate inheritsNode(@NonNull Node node, @NonNull NodeEqualityPredicate equalityPredicate); + void auditTemporaryNodes(); } diff --git a/api/src/main/java/net/luckperms/api/model/group/Group.java b/api/src/main/java/net/luckperms/api/model/group/Group.java index a502609c2..1e30d2ced 100644 --- a/api/src/main/java/net/luckperms/api/model/group/Group.java +++ b/api/src/main/java/net/luckperms/api/model/group/Group.java @@ -25,8 +25,8 @@ package net.luckperms.api.model.group; -import net.luckperms.api.context.ContextSet; import net.luckperms.api.model.PermissionHolder; +import net.luckperms.api.query.QueryOptions; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -63,10 +63,10 @@ public interface Group extends PermissionHolder { *

Will return null if the groups display name is equal to it's * {@link #getName() actual name}.

* - * @param contextSet the contexts to lookup in + * @param queryOptions the query options to lookup in * @return the display name */ - @Nullable String getDisplayName(@NonNull ContextSet contextSet); + @Nullable String getDisplayName(@NonNull QueryOptions queryOptions); /** * Gets the weight of this group, if present. diff --git a/api/src/main/java/net/luckperms/api/model/user/UserManager.java b/api/src/main/java/net/luckperms/api/model/user/UserManager.java index 604984105..5ec613859 100644 --- a/api/src/main/java/net/luckperms/api/model/user/UserManager.java +++ b/api/src/main/java/net/luckperms/api/model/user/UserManager.java @@ -59,22 +59,22 @@ public interface UserManager { /** * Loads a user from the plugin's storage provider into memory. * - * @param uuid the uuid of the user + * @param uniqueId the uuid of the user * @param username the username, if known * @return the resultant user * @throws NullPointerException if the uuid is null */ - @NonNull CompletableFuture loadUser(@NonNull UUID uuid, @Nullable String username); + @NonNull CompletableFuture loadUser(@NonNull UUID uniqueId, @Nullable String username); /** * Loads a user from the plugin's storage provider into memory. * - * @param uuid the uuid of the user + * @param uniqueId the uuid of the user * @return the resultant user * @throws NullPointerException if the uuid is null */ - default @NonNull CompletableFuture loadUser(@NonNull UUID uuid) { - return loadUser(uuid, null); + default @NonNull CompletableFuture loadUser(@NonNull UUID uniqueId) { + return loadUser(uniqueId, null); } /** @@ -92,12 +92,12 @@ public interface UserManager { /** * Uses the LuckPerms cache to find a username for the given uuid. * - * @param uuid the uuid + * @param uniqueId the uuid * @return a username, could be null * @throws NullPointerException if either parameters are null * @throws IllegalArgumentException if the username is invalid */ - @NonNull CompletableFuture lookupUsername(@NonNull UUID uuid); + @NonNull CompletableFuture lookupUsername(@NonNull UUID uniqueId); /** * Saves a user's data back to the plugin's storage provider. @@ -114,13 +114,13 @@ public interface UserManager { /** * Saves data about a player to the uuid caching system. * - * @param uuid the users mojang unique id + * @param uniqueId the users mojang unique id * @param username the users username * @return the result of the operation. * @throws NullPointerException if either parameters are null * @throws IllegalArgumentException if the username is invalid */ - @NonNull CompletableFuture savePlayerData(@NonNull UUID uuid, @NonNull String username); + @NonNull CompletableFuture savePlayerData(@NonNull UUID uniqueId, @NonNull String username); /** * Gets a set all "unique" user UUIDs. @@ -143,11 +143,11 @@ public interface UserManager { /** * Gets a loaded user. * - * @param uuid the uuid of the user to get + * @param uniqueId the uuid of the user to get * @return a {@link User} object, if one matching the uuid is loaded, or null if not * @throws NullPointerException if the uuid is null */ - @Nullable User getUser(@NonNull UUID uuid); + @Nullable User getUser(@NonNull UUID uniqueId); /** * Gets a loaded user. @@ -168,11 +168,11 @@ public interface UserManager { /** * Check if a user is loaded in memory * - * @param uuid the uuid to check for + * @param uniqueId the uuid to check for * @return true if the user is loaded * @throws NullPointerException if the uuid is null */ - boolean isLoaded(@NonNull UUID uuid); + boolean isLoaded(@NonNull UUID uniqueId); /** * Unload a user from the internal storage, if they're not currently online. diff --git a/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrder.java b/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrder.java index f3f078a08..4be8f7f90 100644 --- a/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrder.java +++ b/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrder.java @@ -87,9 +87,13 @@ public enum DataQueryOrder implements Comparator { private static final List TRANSIENT_LAST_LIST = Collections.unmodifiableList(Arrays.asList(DataType.NORMAL, DataType.TRANSIENT)); /** - * Gets a {@link List} of all {@link DataType}s, in the order defined by + * Gets a {@link List} of all {@link DataType}s, in order of greatest to least, as defined by * the {@code comparator}. * + *

Equivalent to calling {@link Arrays#sort(Object[], Comparator)} on + * {@link DataType#values()}, but with the comparator + * {@link Comparator#reversed() reversed}.

+ * * @param comparator the comparator * @return the ordered data types */ diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitSenderFactory.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitSenderFactory.java index d6c1ce800..b1b57ec95 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitSenderFactory.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/BukkitSenderFactory.java @@ -57,7 +57,7 @@ public class BukkitSenderFactory extends SenderFactory { } @Override - protected UUID getUuid(CommandSender sender) { + protected UUID getUniqueId(CommandSender sender) { if (sender instanceof Player) { return ((Player) sender).getUniqueId(); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitBootstrap.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitBootstrap.java index 98111b75c..9994d90f1 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitBootstrap.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitBootstrap.java @@ -224,19 +224,19 @@ public class LPBukkitBootstrap extends JavaPlugin implements LuckPermsBootstrap } @Override - public Optional getPlayer(UUID uuid) { - return Optional.ofNullable(getServer().getPlayer(uuid)); + public Optional getPlayer(UUID uniqueId) { + return Optional.ofNullable(getServer().getPlayer(uniqueId)); } @Override - public Optional lookupUuid(String username) { + public Optional lookupUniqueId(String username) { //noinspection deprecation return Optional.ofNullable(getServer().getOfflinePlayer(username)).map(OfflinePlayer::getUniqueId); } @Override - public Optional lookupUsername(UUID uuid) { - return Optional.ofNullable(getServer().getOfflinePlayer(uuid)).map(OfflinePlayer::getName); + public Optional lookupUsername(UUID uniqueId) { + return Optional.ofNullable(getServer().getOfflinePlayer(uniqueId)).map(OfflinePlayer::getName); } @Override @@ -255,8 +255,8 @@ public class LPBukkitBootstrap extends JavaPlugin implements LuckPermsBootstrap } @Override - public boolean isPlayerOnline(UUID uuid) { - Player player = getServer().getPlayer(uuid); + public boolean isPlayerOnline(UUID uniqueId) { + Player player = getServer().getPlayer(uniqueId); return player != null && player.isOnline(); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java index 746a2f54e..6529bcfdc 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -268,7 +268,7 @@ public class LPBukkitPlugin extends AbstractLuckPermsPlugin { if (getConfiguration().get(ConfigKeys.AUTO_OP)) { getApiProvider().getEventBus().subscribe(UserDataRecalculateEvent.class, event -> { User user = ApiUser.cast(event.getUser()); - Optional player = getBootstrap().getPlayer(user.getUuid()); + Optional player = getBootstrap().getPlayer(user.getUniqueId()); player.ifPresent(p -> refreshAutoOp(p, false)); }); } @@ -312,7 +312,7 @@ public class LPBukkitPlugin extends AbstractLuckPermsPlugin { final User user = getUserManager().getIfLoaded(player.getUniqueId()); if (user != null) { user.getCachedData().invalidate(); - getUserManager().unload(user); + getUserManager().unload(user.getUniqueId()); } } @@ -361,7 +361,7 @@ public class LPBukkitPlugin extends AbstractLuckPermsPlugin { @Override public Optional getQueryOptionsForUser(User user) { - return this.bootstrap.getPlayer(user.getUuid()).map(player -> this.contextManager.getQueryOptions(player)); + return this.bootstrap.getPlayer(user.getUniqueId()).map(player -> this.contextManager.getQueryOptions(player)); } @Override diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissionAttachment.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissionAttachment.java index f3bf219be..bd974b203 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissionAttachment.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissionAttachment.java @@ -191,7 +191,7 @@ public class LPPermissionAttachment extends PermissionAttachment { // set the transient node User user = this.permissible.getUser(); - user.setPermission(DataType.TRANSIENT, node, true); + user.setNode(DataType.TRANSIENT, node, true); } private void unsetPermissionInternal(String name) { diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationBPermissions.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationBPermissions.java index aa2c38381..04f26a175 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationBPermissions.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationBPermissions.java @@ -191,7 +191,7 @@ public class MigrationBPermissions extends SubCommand { if (p.name().isEmpty()) { continue; } - holder.setPermission(DataType.NORMAL, NodeBuilders.determineMostApplicable(p.name()).value(p.isTrue()).withContext(DefaultContextKeys.SERVER_KEY, "global").withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); + holder.setNode(DataType.NORMAL, NodeBuilders.determineMostApplicable(p.name()).value(p.isTrue()).withContext(DefaultContextKeys.SERVER_KEY, "global").withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); // Include any child permissions for (Map.Entry child : p.getChildren().entrySet()) { @@ -199,7 +199,7 @@ public class MigrationBPermissions extends SubCommand { continue; } - holder.setPermission(DataType.NORMAL, NodeBuilders.determineMostApplicable(child.getKey()).value((boolean) child.getValue()).withContext(DefaultContextKeys.SERVER_KEY, "global").withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); + holder.setNode(DataType.NORMAL, NodeBuilders.determineMostApplicable(child.getKey()).value((boolean) child.getValue()).withContext(DefaultContextKeys.SERVER_KEY, "global").withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); } } @@ -210,7 +210,7 @@ public class MigrationBPermissions extends SubCommand { parentName = GroupManager.DEFAULT_GROUP_NAME; } - holder.setPermission(DataType.NORMAL, Inheritance.builder(parentName).value(true).withContext(DefaultContextKeys.SERVER_KEY, "global").withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); + holder.setNode(DataType.NORMAL, Inheritance.builder(parentName).value(true).withContext(DefaultContextKeys.SERVER_KEY, "global").withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); }); // Migrate existing meta @@ -220,16 +220,16 @@ public class MigrationBPermissions extends SubCommand { } if (meta.getKey().equalsIgnoreCase("prefix")) { - holder.setPermission(DataType.NORMAL, Prefix.builder(c.getPriority(), meta.getValue()).withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); + holder.setNode(DataType.NORMAL, Prefix.builder(c.getPriority(), meta.getValue()).withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); continue; } if (meta.getKey().equalsIgnoreCase("suffix")) { - holder.setPermission(DataType.NORMAL, Suffix.builder(c.getPriority(), meta.getValue()).withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); + holder.setNode(DataType.NORMAL, Suffix.builder(c.getPriority(), meta.getValue()).withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); continue; } - holder.setPermission(DataType.NORMAL, Meta.builder(meta.getKey(), meta.getValue()).withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); + holder.setNode(DataType.NORMAL, Meta.builder(meta.getKey(), meta.getValue()).withContext(DefaultContextKeys.WORLD_KEY, world.getName()).build(), true); } } } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationGroupManager.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationGroupManager.java index 93776abc5..fcaefdd92 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationGroupManager.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationGroupManager.java @@ -107,11 +107,11 @@ public class MigrationGroupManager extends SubCommand { for (String node : g.getPermissionList()) { if (node.isEmpty()) continue; - group.setPermission(DataType.NORMAL, MigrationUtils.parseNode(node, true).build(), true); + group.setNode(DataType.NORMAL, MigrationUtils.parseNode(node, true).build(), true); } for (String s : g.getInherits()) { if (s.isEmpty()) continue; - group.setPermission(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(s)).build(), true); + group.setNode(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(s)).build(), true); } plugin.getStorage().saveGroup(group); @@ -231,7 +231,7 @@ public class MigrationGroupManager extends SubCommand { Group group = plugin.getStorage().createAndLoadGroup(e.getKey(), CreationCause.INTERNAL).join(); for (Node node : e.getValue()) { - group.setPermission(DataType.NORMAL, node, true); + group.setNode(DataType.NORMAL, node, true); } plugin.getStorage().saveGroup(group); @@ -242,17 +242,17 @@ public class MigrationGroupManager extends SubCommand { log.log("Starting user migration."); AtomicInteger userCount = new AtomicInteger(0); Iterators.tryIterate(users.entrySet(), e -> { - User user = plugin.getStorage().loadUser(e.getKey().getUuid(), e.getKey().getUsername().orElse(null)).join(); + User user = plugin.getStorage().loadUser(e.getKey().getUniqueId(), e.getKey().getUsername().orElse(null)).join(); for (Node node : e.getValue()) { - user.setPermission(DataType.NORMAL, node, true); + user.setNode(DataType.NORMAL, node, true); } - String primaryGroup = primaryGroups.get(e.getKey().getUuid()); + String primaryGroup = primaryGroups.get(e.getKey().getUniqueId()); if (primaryGroup != null && !primaryGroup.isEmpty()) { - user.setPermission(DataType.NORMAL, Inheritance.builder(primaryGroup).build(), true); + user.setNode(DataType.NORMAL, Inheritance.builder(primaryGroup).build(), true); user.getPrimaryGroup().setStoredValue(primaryGroup); - user.unsetPermission(DataType.NORMAL, Inheritance.builder(me.lucko.luckperms.common.model.manager.group.GroupManager.DEFAULT_GROUP_NAME).build()); + user.unsetNode(DataType.NORMAL, Inheritance.builder(me.lucko.luckperms.common.model.manager.group.GroupManager.DEFAULT_GROUP_NAME).build()); } plugin.getStorage().saveUser(user); diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsBukkit.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsBukkit.java index 02d5ef5ea..bee4f35bc 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsBukkit.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsBukkit.java @@ -132,7 +132,7 @@ public class MigrationPermissionsBukkit extends SubCommand { ConfigurationSection permsSection = data.getConfigurationSection("permissions"); for (String perm : permsSection.getKeys(false)) { boolean value = permsSection.getBoolean(perm); - holder.setPermission(DataType.NORMAL, MigrationUtils.parseNode(perm, value).build(), true); + holder.setNode(DataType.NORMAL, MigrationUtils.parseNode(perm, value).build(), true); } } @@ -143,7 +143,7 @@ public class MigrationPermissionsBukkit extends SubCommand { ConfigurationSection permsSection = worldSection.getConfigurationSection(world); for (String perm : permsSection.getKeys(false)) { boolean value = permsSection.getBoolean(perm); - holder.setPermission(DataType.NORMAL, MigrationUtils.parseNode(perm, value).withContext(DefaultContextKeys.WORLD_KEY, world).build(), true); + holder.setNode(DataType.NORMAL, MigrationUtils.parseNode(perm, value).withContext(DefaultContextKeys.WORLD_KEY, world).build(), true); } } } @@ -153,13 +153,13 @@ public class MigrationPermissionsBukkit extends SubCommand { if (data.isList("groups")) { List groups = data.getStringList("groups"); for (String group : groups) { - holder.setPermission(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(group)).build(), true); + holder.setNode(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(group)).build(), true); } } if (data.isList("inheritance")) { List groups = data.getStringList("inheritance"); for (String group : groups) { - holder.setPermission(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(group)).build(), true); + holder.setNode(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(group)).build(), true); } } } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsEx.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsEx.java index 9accba72b..d3d3eaf98 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsEx.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsEx.java @@ -205,7 +205,7 @@ public class MigrationPermissionsEx extends SubCommand { String world = standardizeWorld(worldData.getKey()); for (String node : worldData.getValue()) { if (node.isEmpty()) continue; - holder.setPermission(DataType.NORMAL, MigrationUtils.parseNode(node, true).withContext(DefaultContextKeys.WORLD_KEY, world).build(), true); + holder.setNode(DataType.NORMAL, MigrationUtils.parseNode(node, true).withContext(DefaultContextKeys.WORLD_KEY, world).build(), true); } } @@ -227,7 +227,7 @@ public class MigrationPermissionsEx extends SubCommand { for (String node : worldData.getValue()) { if (node.isEmpty()) continue; long expiry = timedPermissionsTime.getOrDefault(Strings.nullToEmpty(world) + ":" + node, 0L); - holder.setPermission(DataType.NORMAL, MigrationUtils.parseNode(node, true).withContext(DefaultContextKeys.WORLD_KEY, world).expiry(expiry).build(), true); + holder.setNode(DataType.NORMAL, MigrationUtils.parseNode(node, true).withContext(DefaultContextKeys.WORLD_KEY, world).expiry(expiry).build(), true); } } @@ -255,7 +255,7 @@ public class MigrationPermissionsEx extends SubCommand { } } - holder.setPermission(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(parentName)).withContext(DefaultContextKeys.WORLD_KEY, world).expiry(expiry).build(), true); + holder.setNode(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(parentName)).withContext(DefaultContextKeys.WORLD_KEY, world).expiry(expiry).build(), true); // migrate primary groups if (world == null && holder instanceof User && expiry == 0) { @@ -269,7 +269,7 @@ public class MigrationPermissionsEx extends SubCommand { if (primary != null && !primary.isEmpty() && !primary.equalsIgnoreCase(GroupManager.DEFAULT_GROUP_NAME)) { User user = ((User) holder); user.getPrimaryGroup().setStoredValue(primary); - holder.unsetPermission(DataType.NORMAL, Inheritance.builder(GroupManager.DEFAULT_GROUP_NAME).build()); + holder.unsetNode(DataType.NORMAL, Inheritance.builder(GroupManager.DEFAULT_GROUP_NAME).build()); } } @@ -278,11 +278,11 @@ public class MigrationPermissionsEx extends SubCommand { String suffix = entity.getOwnSuffix(); if (prefix != null && !prefix.isEmpty()) { - holder.setPermission(DataType.NORMAL, Prefix.builder(weight, prefix).build(), true); + holder.setNode(DataType.NORMAL, Prefix.builder(weight, prefix).build(), true); } if (suffix != null && !suffix.isEmpty()) { - holder.setPermission(DataType.NORMAL, Suffix.builder(weight, suffix).build(), true); + holder.setNode(DataType.NORMAL, Suffix.builder(weight, suffix).build(), true); } // migrate options @@ -307,7 +307,7 @@ public class MigrationPermissionsEx extends SubCommand { continue; } - holder.setPermission(DataType.NORMAL, Meta.builder(opt.getKey(), opt.getValue()).withContext(DefaultContextKeys.WORLD_KEY, world).build(), true); + holder.setNode(DataType.NORMAL, Meta.builder(opt.getKey(), opt.getValue()).withContext(DefaultContextKeys.WORLD_KEY, world).build(), true); } } } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPowerfulPerms.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPowerfulPerms.java index 8bb14068c..d69b21eb1 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPowerfulPerms.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPowerfulPerms.java @@ -177,7 +177,7 @@ public class MigrationPowerfulPerms extends SubCommand { } for (Group parent : g.getParents()) { - group.setPermission(DataType.NORMAL, Inheritance.builder(parent.getName().toLowerCase()).build(), true); + group.setNode(DataType.NORMAL, Inheritance.builder(parent.getName().toLowerCase()).build(), true); } // server --> prefix afaik @@ -190,9 +190,9 @@ public class MigrationPowerfulPerms extends SubCommand { } if (server != null) { - group.setPermission(DataType.NORMAL, Prefix.builder(g.getRank(), prefix.getValue()).withContext(DefaultContextKeys.SERVER_KEY, server).build(), true); + group.setNode(DataType.NORMAL, Prefix.builder(g.getRank(), prefix.getValue()).withContext(DefaultContextKeys.SERVER_KEY, server).build(), true); } else { - group.setPermission(DataType.NORMAL, Prefix.builder(g.getRank(), prefix.getValue()).build(), true); + group.setNode(DataType.NORMAL, Prefix.builder(g.getRank(), prefix.getValue()).build(), true); } } @@ -205,9 +205,9 @@ public class MigrationPowerfulPerms extends SubCommand { } if (server != null) { - group.setPermission(DataType.NORMAL, Suffix.builder(g.getRank(), suffix.getValue()).withContext(DefaultContextKeys.SERVER_KEY, server).build(), true); + group.setNode(DataType.NORMAL, Suffix.builder(g.getRank(), suffix.getValue()).withContext(DefaultContextKeys.SERVER_KEY, server).build(), true); } else { - group.setPermission(DataType.NORMAL, Suffix.builder(g.getRank(), suffix.getValue()).build(), true); + group.setNode(DataType.NORMAL, Suffix.builder(g.getRank(), suffix.getValue()).build(), true); } } @@ -252,18 +252,18 @@ public class MigrationPowerfulPerms extends SubCommand { String suffix = joinFuture(pm.getPlayerOwnSuffix(uuid)); if (prefix != null && !prefix.isEmpty()) { - user.setPermission(DataType.NORMAL, Prefix.builder(maxWeight.get(), prefix).build(), true); + user.setNode(DataType.NORMAL, Prefix.builder(maxWeight.get(), prefix).build(), true); } if (suffix != null && !suffix.isEmpty()) { - user.setPermission(DataType.NORMAL, Suffix.builder(maxWeight.get(), suffix).build(), true); + user.setNode(DataType.NORMAL, Suffix.builder(maxWeight.get(), suffix).build(), true); } Group primaryGroup = joinFuture(pm.getPlayerPrimaryGroup(uuid)); if (primaryGroup != null && primaryGroup.getName() != null) { String primary = primaryGroup.getName().toLowerCase(); if (!primary.equals(GroupManager.DEFAULT_GROUP_NAME)) { - user.setPermission(DataType.NORMAL, Inheritance.builder(primary).build(), true); + user.setNode(DataType.NORMAL, Inheritance.builder(primary).build(), true); user.getPrimaryGroup().setStoredValue(primary); } } @@ -314,7 +314,7 @@ public class MigrationPowerfulPerms extends SubCommand { if (server != null) nb.withContext(DefaultContextKeys.SERVER_KEY, server); if (world != null) nb.withContext(DefaultContextKeys.WORLD_KEY, world); - holder.setPermission(DataType.NORMAL, nb.build(), true); + holder.setNode(DataType.NORMAL, nb.build(), true); } private void applyGroup(PermissionManager pm, PermissionHolder holder, CachedGroup g, String server) { @@ -335,7 +335,7 @@ public class MigrationPowerfulPerms extends SubCommand { nb.withContext(DefaultContextKeys.SERVER_KEY, server); } - holder.setPermission(DataType.NORMAL, nb.build(), true); + holder.setNode(DataType.NORMAL, nb.build(), true); } private static T joinFuture(Future future) { diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationZPermissions.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationZPermissions.java index c7015a882..88591f3ba 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationZPermissions.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationZPermissions.java @@ -181,7 +181,7 @@ public class MigrationZPermissions extends SubCommand { // migrate groups Set parents = userParents.get(u); if (parents != null) { - parents.forEach(node -> user.setPermission(DataType.NORMAL, node, true)); + parents.forEach(node -> user.setNode(DataType.NORMAL, node, true)); } user.getPrimaryGroup().setStoredValue(MigrationUtils.standardizeName(service.getPlayerPrimaryGroup(u))); @@ -201,9 +201,9 @@ public class MigrationZPermissions extends SubCommand { if (e.getPermission().isEmpty()) continue; if (e.getWorld() != null && !e.getWorld().getName().equals("")) { - holder.setPermission(DataType.NORMAL, NodeBuilders.determineMostApplicable(e.getPermission()).value(e.isValue()).withContext(DefaultContextKeys.WORLD_KEY, e.getWorld().getName()).build(), true); + holder.setNode(DataType.NORMAL, NodeBuilders.determineMostApplicable(e.getPermission()).value(e.isValue()).withContext(DefaultContextKeys.WORLD_KEY, e.getWorld().getName()).build(), true); } else { - holder.setPermission(DataType.NORMAL, NodeBuilders.determineMostApplicable(e.getPermission()).value(e.isValue()).build(), true); + holder.setNode(DataType.NORMAL, NodeBuilders.determineMostApplicable(e.getPermission()).value(e.isValue()).build(), true); } } @@ -211,7 +211,7 @@ public class MigrationZPermissions extends SubCommand { if (entity.isGroup()) { for (PermissionEntity inheritance : entity.getParents()) { if (!inheritance.getDisplayName().equals(holder.getObjectName())) { - holder.setPermission(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(inheritance.getDisplayName())).build(), true); + holder.setNode(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(inheritance.getDisplayName())).build(), true); } } } @@ -226,11 +226,11 @@ public class MigrationZPermissions extends SubCommand { if (valueString.isEmpty()) continue; if (key.equals("prefix")) { - holder.setPermission(DataType.NORMAL, Prefix.builder(weight, valueString).build(), true); + holder.setNode(DataType.NORMAL, Prefix.builder(weight, valueString).build(), true); } else if (key.equals("suffix")) { - holder.setPermission(DataType.NORMAL, Suffix.builder(weight, valueString).build(), true); + holder.setNode(DataType.NORMAL, Suffix.builder(weight, valueString).build(), true); } else { - holder.setPermission(DataType.NORMAL, Meta.builder(key, valueString).build(), true); + holder.setNode(DataType.NORMAL, Meta.builder(key, valueString).build(), true); } } } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultChat.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultChat.java index b7cec4338..e895ccd87 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultChat.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultChat.java @@ -283,7 +283,7 @@ public class LuckPermsVaultChat extends AbstractVaultChat { chatMetaNode.withContext(DefaultContextKeys.WORLD_KEY, world); // assume success - holder.setPermission(DataType.NORMAL, chatMetaNode.build(), true); + holder.setNode(DataType.NORMAL, chatMetaNode.build(), true); this.vaultPermission.holderSave(holder); } @@ -312,7 +312,7 @@ public class LuckPermsVaultChat extends AbstractVaultChat { metaNode.withContext(DefaultContextKeys.WORLD_KEY, world); // assume success - holder.setPermission(DataType.NORMAL, metaNode.build(), true); + holder.setNode(DataType.NORMAL, metaNode.build(), true); this.vaultPermission.holderSave(holder); } diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java index ebe87e883..850e972ae 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java @@ -49,7 +49,6 @@ import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.DefaultContextKeys; import net.luckperms.api.context.MutableContextSet; import net.luckperms.api.model.DataType; -import net.luckperms.api.node.NodeType; import net.luckperms.api.node.Tristate; import net.luckperms.api.query.Flag; import net.luckperms.api.query.QueryOptions; @@ -127,9 +126,9 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission { } // lookup a username from the database - uuid = this.plugin.getStorage().getPlayerUuid(player.toLowerCase()).join(); + uuid = this.plugin.getStorage().getPlayerUniqueId(player.toLowerCase()).join(); if (uuid == null) { - uuid = this.plugin.getBootstrap().lookupUuid(player).orElse(null); + uuid = this.plugin.getBootstrap().lookupUniqueId(player).orElse(null); } // unable to find a user, throw an exception @@ -264,9 +263,7 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission { PermissionHolder user = lookupUser(uuid); ContextSet contexts = getQueryOptions(uuid, world).context(); - String[] ret = user.normalData().immutable().values().stream() - .filter(NodeType.INHERITANCE::matches) - .map(NodeType.INHERITANCE::cast) + String[] ret = user.normalData().immutableInheritance().values().stream() .filter(n -> n.shouldApplyWithContext(contexts)) .map(n -> { Group group = this.plugin.getGroupManager().getIfLoaded(n.getGroupName()); @@ -441,7 +438,7 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission { logMsg("#holderAddPermission: %s - %s - %s", holder.getPlainDisplayName(), permission, world); } - if (((Result) holder.setPermission(DataType.NORMAL, NodeBuilders.determineMostApplicable(permission).value(true).withContext(DefaultContextKeys.SERVER_KEY, getVaultServer()).withContext(DefaultContextKeys.WORLD_KEY, world).build(), true)).wasSuccessful()) { + if (((Result) holder.setNode(DataType.NORMAL, NodeBuilders.determineMostApplicable(permission).value(true).withContext(DefaultContextKeys.SERVER_KEY, getVaultServer()).withContext(DefaultContextKeys.WORLD_KEY, world).build(), true)).wasSuccessful()) { return holderSave(holder); } return false; @@ -455,7 +452,7 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission { logMsg("#holderRemovePermission: %s - %s - %s", holder.getPlainDisplayName(), permission, world); } - if (holder.unsetPermission(DataType.NORMAL, NodeBuilders.determineMostApplicable(permission).withContext(DefaultContextKeys.SERVER_KEY, getVaultServer()).withContext(DefaultContextKeys.WORLD_KEY, world).build()).wasSuccessful()) { + if (holder.unsetNode(DataType.NORMAL, NodeBuilders.determineMostApplicable(permission).withContext(DefaultContextKeys.SERVER_KEY, getVaultServer()).withContext(DefaultContextKeys.WORLD_KEY, world).build()).wasSuccessful()) { return holderSave(holder); } return false; diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeSenderFactory.java b/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeSenderFactory.java index 4fccd6b28..25ad54c2e 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeSenderFactory.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeSenderFactory.java @@ -53,7 +53,7 @@ public class BungeeSenderFactory extends SenderFactory { } @Override - protected UUID getUuid(CommandSender sender) { + protected UUID getUniqueId(CommandSender sender) { if (sender instanceof ProxiedPlayer) { return ((ProxiedPlayer) sender).getUniqueId(); } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeeBootstrap.java b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeeBootstrap.java index 981a9dd1a..d449cc17b 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeeBootstrap.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeeBootstrap.java @@ -182,12 +182,12 @@ public class LPBungeeBootstrap extends Plugin implements LuckPermsBootstrap { } @Override - public Optional getPlayer(UUID uuid) { - return Optional.ofNullable(getProxy().getPlayer(uuid)); + public Optional getPlayer(UUID uniqueId) { + return Optional.ofNullable(getProxy().getPlayer(uniqueId)); } @Override - public Optional lookupUuid(String username) { + public Optional lookupUniqueId(String username) { if (getProxy().getPluginManager().getPlugin("RedisBungee") != null) { try { return RedisBungeeUtil.lookupUuid(username); @@ -200,10 +200,10 @@ public class LPBungeeBootstrap extends Plugin implements LuckPermsBootstrap { } @Override - public Optional lookupUsername(UUID uuid) { + public Optional lookupUsername(UUID uniqueId) { if (getProxy().getPluginManager().getPlugin("RedisBungee") != null) { try { - return RedisBungeeUtil.lookupUsername(uuid); + return RedisBungeeUtil.lookupUsername(uniqueId); } catch (Throwable t) { t.printStackTrace(); } @@ -228,8 +228,8 @@ public class LPBungeeBootstrap extends Plugin implements LuckPermsBootstrap { } @Override - public boolean isPlayerOnline(UUID uuid) { - ProxiedPlayer player = getProxy().getPlayer(uuid); + public boolean isPlayerOnline(UUID uniqueId) { + ProxiedPlayer player = getProxy().getPlayer(uniqueId); return player != null && player.isConnected(); } } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java index 8da8a600e..2f1cae524 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java @@ -189,7 +189,7 @@ public class LPBungeePlugin extends AbstractLuckPermsPlugin { @Override public Optional getQueryOptionsForUser(User user) { - return this.bootstrap.getPlayer(user.getUuid()).map(player -> this.contextManager.getQueryOptions(player)); + return this.bootstrap.getPlayer(user.getUniqueId()).map(player -> this.contextManager.getQueryOptions(player)); } @Override diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/migration/MigrationBungeePerms.java b/bungee/src/main/java/me/lucko/luckperms/bungee/migration/MigrationBungeePerms.java index 3cf52b82f..adde1ed8a 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/migration/MigrationBungeePerms.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/migration/MigrationBungeePerms.java @@ -135,21 +135,21 @@ public class MigrationBungeePerms extends SubCommand { // Migrate global perms for (String perm : entity.getPerms()) { if (perm.isEmpty()) continue; - holder.setPermission(DataType.NORMAL, MigrationUtils.parseNode(perm, true).build(), true); + holder.setNode(DataType.NORMAL, MigrationUtils.parseNode(perm, true).build(), true); } // Migrate per-server perms for (Map.Entry e : entity.getServers().entrySet()) { for (String perm : e.getValue().getPerms()) { if (perm.isEmpty()) continue; - holder.setPermission(DataType.NORMAL, MigrationUtils.parseNode(perm, true).withContext(DefaultContextKeys.SERVER_KEY, e.getKey()).build(), true); + holder.setNode(DataType.NORMAL, MigrationUtils.parseNode(perm, true).withContext(DefaultContextKeys.SERVER_KEY, e.getKey()).build(), true); } // Migrate per-world perms for (Map.Entry we : e.getValue().getWorlds().entrySet()) { for (String perm : we.getValue().getPerms()) { if (perm.isEmpty()) continue; - holder.setPermission(DataType.NORMAL, MigrationUtils.parseNode(perm, true).withContext(DefaultContextKeys.SERVER_KEY, e.getKey()).withContext(DefaultContextKeys.WORLD_KEY, we.getKey()).build(), true); + holder.setNode(DataType.NORMAL, MigrationUtils.parseNode(perm, true).withContext(DefaultContextKeys.SERVER_KEY, e.getKey()).withContext(DefaultContextKeys.WORLD_KEY, we.getKey()).build(), true); } } } @@ -157,7 +157,7 @@ public class MigrationBungeePerms extends SubCommand { // Migrate any parent groups for (String inherit : parents) { if (inherit.isEmpty()) continue; - holder.setPermission(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(inherit)).build(), true); + holder.setNode(DataType.NORMAL, Inheritance.builder(MigrationUtils.standardizeName(inherit)).build(), true); } // Migrate prefix and suffix @@ -165,10 +165,10 @@ public class MigrationBungeePerms extends SubCommand { String suffix = entity.getSuffix(); if (prefix != null && !prefix.isEmpty()) { - holder.setPermission(DataType.NORMAL, Prefix.builder(weight, prefix).build(), true); + holder.setNode(DataType.NORMAL, Prefix.builder(weight, prefix).build(), true); } if (suffix != null && !suffix.isEmpty()) { - holder.setPermission(DataType.NORMAL, Suffix.builder(weight, suffix).build(), true); + holder.setNode(DataType.NORMAL, Suffix.builder(weight, suffix).build(), true); } } } diff --git a/common/src/main/java/me/lucko/luckperms/common/actionlog/Log.java b/common/src/main/java/me/lucko/luckperms/common/actionlog/Log.java index 67923aa93..c423a8e84 100644 --- a/common/src/main/java/me/lucko/luckperms/common/actionlog/Log.java +++ b/common/src/main/java/me/lucko/luckperms/common/actionlog/Log.java @@ -67,10 +67,10 @@ public class Log { .collect(Collectors.toCollection(TreeSet::new)); } - public SortedSet getUserHistory(UUID uuid) { + public SortedSet getUserHistory(UUID uniqueId) { return this.content.stream() .filter(e -> e.getTarget().getType() == Action.Target.Type.USER) - .filter(e -> e.getTarget().getUniqueId().isPresent() && e.getTarget().getUniqueId().get().equals(uuid)) + .filter(e -> e.getTarget().getUniqueId().isPresent() && e.getTarget().getUniqueId().get().equals(uniqueId)) .collect(ImmutableCollectors.toSortedSet(Comparator.naturalOrder())); } diff --git a/common/src/main/java/me/lucko/luckperms/common/actionlog/LogDispatcher.java b/common/src/main/java/me/lucko/luckperms/common/actionlog/LogDispatcher.java index 2c4460c44..9cb0c29b5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/actionlog/LogDispatcher.java +++ b/common/src/main/java/me/lucko/luckperms/common/actionlog/LogDispatcher.java @@ -49,7 +49,7 @@ public class LogDispatcher { this.plugin.getOnlineSenders() .filter(CommandPermission.LOG_NOTIFY::isAuthorized) .filter(s -> { - boolean shouldCancel = LogNotify.isIgnoring(this.plugin, s.getUuid()) || (sender != null && s.getUuid().equals(sender.getUuid())); + boolean shouldCancel = LogNotify.isIgnoring(this.plugin, s.getUniqueId()) || (sender != null && s.getUniqueId().equals(sender.getUniqueId())); return !this.plugin.getEventFactory().handleLogNotify(shouldCancel, entry, origin, s); }) .forEach(s -> Message.LOG.send(s, diff --git a/common/src/main/java/me/lucko/luckperms/common/actionlog/LoggedAction.java b/common/src/main/java/me/lucko/luckperms/common/actionlog/LoggedAction.java index 0e8da0a5e..11e85ecd9 100644 --- a/common/src/main/java/me/lucko/luckperms/common/actionlog/LoggedAction.java +++ b/common/src/main/java/me/lucko/luckperms/common/actionlog/LoggedAction.java @@ -78,13 +78,13 @@ public class LoggedAction implements Action { private final long timestamp; private final SourceImpl source; private final TargetImpl target; - private final String action; + private final String description; - private LoggedAction(long timestamp, UUID sourceUniqueId, String sourceName, Target.Type targetType, UUID targetUniqueId, String targetName, String description) { + private LoggedAction(long timestamp, UUID sourceUniqueId, String sourceName, UUID targetUniqueId, String targetName, Target.Type targetType, String description) { this.timestamp = timestamp; this.source = new SourceImpl(sourceUniqueId, sourceName); this.target = new TargetImpl(targetUniqueId, targetName, targetType); - this.action = description; + this.description = description; } @Override @@ -120,7 +120,7 @@ public class LoggedAction implements Action { @Override public @NonNull String getDescription() { - return this.action; + return this.description; } @Override @@ -133,7 +133,7 @@ public class LoggedAction implements Action { query = Objects.requireNonNull(query, "query").toLowerCase(); return this.source.name.toLowerCase().contains(query) || this.target.name.toLowerCase().contains(query) || - this.action.toLowerCase().contains(query); + this.description.toLowerCase().contains(query); } public void submit(LuckPermsPlugin plugin, Sender sender) { @@ -297,14 +297,14 @@ public class LoggedAction implements Action { public Builder source(Sender source) { sourceName(source.getNameWithLocation()); - source(source.getUuid()); + source(source.getUniqueId()); return this; } public Builder target(PermissionHolder target) { if (target.getType() == HolderType.USER) { - targetName(((User) target).getName().orElse("null")); - target(((User) target).getUuid()); + targetName(((User) target).getUsername().orElse("null")); + target(((User) target).getUniqueId()); targetType(Target.Type.USER); } else if (target.getType() == HolderType.GROUP) { targetName(((Group) target).getName()); @@ -362,7 +362,7 @@ public class LoggedAction implements Action { Objects.requireNonNull(this.targetName, "targetName"); Objects.requireNonNull(this.description, "description"); - return new LoggedAction(this.timestamp, this.sourceUniqueId, this.sourceName, this.targetType, this.targetUniqueId, this.targetName, this.description); + return new LoggedAction(this.timestamp, this.sourceUniqueId, this.sourceName, this.targetUniqueId, this.targetName, this.targetType, this.description); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiActionLog.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiActionLog.java index e2b3e0f5a..e365fe5b9 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiActionLog.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiActionLog.java @@ -57,9 +57,9 @@ public class ApiActionLog implements ActionLog { } @Override - public @NonNull SortedSet getUserHistory(@NonNull UUID uuid) { - Objects.requireNonNull(uuid, "uuid"); - return (SortedSet) this.handle.getUserHistory(uuid); + public @NonNull SortedSet getUserHistory(@NonNull UUID uniqueId) { + Objects.requireNonNull(uniqueId, "uuid"); + return (SortedSet) this.handle.getUserHistory(uniqueId); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiGroup.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiGroup.java index 61899184c..83e4f53f7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiGroup.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiGroup.java @@ -30,7 +30,7 @@ import com.google.common.base.Preconditions; import me.lucko.luckperms.common.cacheddata.GroupCachedDataManager; import me.lucko.luckperms.common.model.Group; -import net.luckperms.api.context.ContextSet; +import net.luckperms.api.query.QueryOptions; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -68,8 +68,8 @@ public class ApiGroup extends ApiPermissionHolder implements net.luckperms.api.m } @Override - public @Nullable String getDisplayName(@NonNull ContextSet contextSet) { - return this.handle.getDisplayName(contextSet).orElse(null); + public @Nullable String getDisplayName(@NonNull QueryOptions queryOptions) { + return this.handle.calculateDisplayName(queryOptions).orElse(null); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPermissionHolder.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPermissionHolder.java index 996a9c0fe..71bae8cad 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPermissionHolder.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPermissionHolder.java @@ -29,7 +29,6 @@ import com.google.common.collect.ImmutableSortedSet; import me.lucko.luckperms.common.model.PermissionHolder; import me.lucko.luckperms.common.node.comparator.NodeWithContextComparator; -import me.lucko.luckperms.common.node.utils.NodeTools; import net.luckperms.api.cacheddata.CachedDataManager; import net.luckperms.api.context.ContextSet; @@ -47,6 +46,8 @@ import net.luckperms.api.query.QueryOptions; import org.checkerframework.checker.nullness.qual.NonNull; import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; @@ -133,21 +134,26 @@ public class ApiPermissionHolder implements net.luckperms.api.model.PermissionHo public @NonNull SortedSet resolveDistinctInheritedNodes(@NonNull QueryOptions queryOptions) { List entries = this.handle.getAllEntries(queryOptions); - NodeTools.removeSamePermission(entries.iterator()); + removeSamePermission(entries.iterator()); SortedSet ret = new TreeSet<>(NodeWithContextComparator.reverse()); ret.addAll(entries); return ImmutableSortedSet.copyOfSorted(ret); } - @Override - public void auditTemporaryPermissions() { - this.handle.auditTemporaryPermissions(); + private static void removeSamePermission(Iterator it) { + Set alreadyIn = new HashSet<>(); + while (it.hasNext()) { + T next = it.next(); + if (!alreadyIn.add(next.getKey())) { + it.remove(); + } + } } @Override - public @NonNull Tristate inheritsNode(@NonNull Node node, @NonNull NodeEqualityPredicate equalityPredicate) { - return this.handle.inheritsPermission(node, equalityPredicate); + public void auditTemporaryNodes() { + this.handle.auditTemporaryNodes(); } private abstract class AbstractData implements Data { @@ -168,23 +174,23 @@ public class ApiPermissionHolder implements net.luckperms.api.model.PermissionHo } @Override - public @NonNull Tristate hasNode(@NonNull Node node, @NonNull NodeEqualityPredicate equalityPredicate) { - return ApiPermissionHolder.this.handle.hasPermission(this.dataType, node, equalityPredicate); + public @NonNull Tristate containsNode(@NonNull Node node, @NonNull NodeEqualityPredicate equalityPredicate) { + return ApiPermissionHolder.this.handle.hasNode(this.dataType, node, equalityPredicate); } @Override public @NonNull DataMutateResult addNode(@NonNull Node node) { - return ApiPermissionHolder.this.handle.setPermission(this.dataType, node, true); + return ApiPermissionHolder.this.handle.setNode(this.dataType, node, true); } @Override public @NonNull TemporaryDataMutateResult addNode(@NonNull Node node, @NonNull TemporaryMergeBehaviour temporaryMergeBehaviour) { - return ApiPermissionHolder.this.handle.setPermission(this.dataType, node, temporaryMergeBehaviour); + return ApiPermissionHolder.this.handle.setNode(this.dataType, node, temporaryMergeBehaviour); } @Override public @NonNull DataMutateResult removeNode(@NonNull Node node) { - return ApiPermissionHolder.this.handle.unsetPermission(this.dataType, node); + return ApiPermissionHolder.this.handle.unsetNode(this.dataType, node); } @Override @@ -194,12 +200,12 @@ public class ApiPermissionHolder implements net.luckperms.api.model.PermissionHo @Override public void clearNodes() { - ApiPermissionHolder.this.handle.clearNodes(this.dataType, null); + ApiPermissionHolder.this.handle.clearNodes(this.dataType, null, false); } @Override public void clearNodes(@NonNull ContextSet contextSet) { - ApiPermissionHolder.this.handle.clearNodes(this.dataType, contextSet); + ApiPermissionHolder.this.handle.clearNodes(this.dataType, contextSet, false); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUser.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUser.java index d9d8fd6d9..141332fc7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUser.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUser.java @@ -60,12 +60,12 @@ public class ApiUser extends ApiPermissionHolder implements net.luckperms.api.mo @Override public @NonNull UUID getUniqueId() { - return this.handle.getUuid(); + return this.handle.getUniqueId(); } @Override public String getUsername() { - return this.handle.getName().orElse(null); + return this.handle.getUsername().orElse(null); } @Override @@ -80,7 +80,7 @@ public class ApiUser extends ApiPermissionHolder implements net.luckperms.api.mo return DataMutateResult.ALREADY_HAS; } - if (!this.handle.hasPermission(DataType.NORMAL, Inheritance.builder(group.toLowerCase()).build(), NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) { + if (!this.handle.hasNode(DataType.NORMAL, Inheritance.builder(group.toLowerCase()).build(), NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) { return DataMutateResult.FAIL; } diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUserManager.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUserManager.java index d4223bf93..48683d35c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUserManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUserManager.java @@ -29,7 +29,6 @@ import me.lucko.luckperms.common.api.ApiUtils; import me.lucko.luckperms.common.bulkupdate.comparison.Constraint; import me.lucko.luckperms.common.bulkupdate.comparison.StandardComparison; import me.lucko.luckperms.common.model.User; -import me.lucko.luckperms.common.model.UserIdentifier; import me.lucko.luckperms.common.model.manager.user.UserManager; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.util.ImmutableCollectors; @@ -60,28 +59,28 @@ public class ApiUserManager extends ApiAbstractManager loadUser(@NonNull UUID uuid, @Nullable String username) { - Objects.requireNonNull(uuid, "uuid"); + public @NonNull CompletableFuture loadUser(@NonNull UUID uniqueId, @Nullable String username) { + Objects.requireNonNull(uniqueId, "uuid"); ApiUtils.checkUsername(username, this.plugin); - if (this.plugin.getUserManager().getIfLoaded(uuid) == null) { - this.plugin.getUserManager().getHouseKeeper().registerApiUsage(uuid); + if (this.plugin.getUserManager().getIfLoaded(uniqueId) == null) { + this.plugin.getUserManager().getHouseKeeper().registerApiUsage(uniqueId); } - return this.plugin.getStorage().loadUser(uuid, username) + return this.plugin.getStorage().loadUser(uniqueId, username) .thenApply(this::getDelegateFor); } @Override public @NonNull CompletableFuture lookupUniqueId(@NonNull String username) { Objects.requireNonNull(username, "username"); - return this.plugin.getStorage().getPlayerUuid(username); + return this.plugin.getStorage().getPlayerUniqueId(username); } @Override - public @NonNull CompletableFuture lookupUsername(@NonNull UUID uuid) { - Objects.requireNonNull(uuid, "uuid"); - return this.plugin.getStorage().getPlayerName(uuid); + public @NonNull CompletableFuture lookupUsername(@NonNull UUID uniqueId) { + Objects.requireNonNull(uniqueId, "uuid"); + return this.plugin.getStorage().getPlayerName(uniqueId); } @Override @@ -91,10 +90,10 @@ public class ApiUserManager extends ApiAbstractManager savePlayerData(@NonNull UUID uuid, @NonNull String username) { - Objects.requireNonNull(uuid, "uuid"); + public @NonNull CompletableFuture savePlayerData(@NonNull UUID uniqueId, @NonNull String username) { + Objects.requireNonNull(uniqueId, "uuid"); Objects.requireNonNull(username, "username"); - return this.plugin.getStorage().savePlayerData(uuid, username); + return this.plugin.getStorage().savePlayerData(uniqueId, username); } @Override @@ -109,9 +108,9 @@ public class ApiUserManager extends ApiAbstractManager output = new ArrayList<>(); User user = this.plugin.getStorage().loadUser(uuid, null).join(); - output.add("# Export user: " + user.getUuid().toString() + " - " + user.getName().orElse("unknown username")); + output.add("# Export user: " + user.getUniqueId().toString() + " - " + user.getUsername().orElse("unknown username")); boolean inDefault = false; for (Node node : user.normalData().immutable().values()) { @@ -228,15 +228,15 @@ public class Exporter implements Runnable { continue; } - output.add("/lp " + NodeCommandFactory.generateCommand(node, user.getUuid().toString(), HolderType.USER, true, false)); + output.add("/lp " + NodeCommandFactory.generateCommand(node, user.getUniqueId().toString(), HolderType.USER, true, false)); } if (!user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME).equalsIgnoreCase(GroupManager.DEFAULT_GROUP_NAME)) { - output.add("/lp user " + user.getUuid().toString() + " switchprimarygroup " + user.getPrimaryGroup().getStoredValue().get()); + output.add("/lp user " + user.getUniqueId().toString() + " switchprimarygroup " + user.getPrimaryGroup().getStoredValue().get()); } if (!inDefault) { - output.add("/lp user " + user.getUuid().toString() + " parent remove default"); + output.add("/lp user " + user.getUniqueId().toString() + " parent remove default"); } this.plugin.getUserManager().cleanup(user); diff --git a/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java b/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java index f6c92d500..91964d1d3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java +++ b/common/src/main/java/me/lucko/luckperms/common/command/access/ArgumentPermissions.java @@ -109,7 +109,7 @@ public final class ArgumentPermissions { if (target instanceof User) { User targetUser = ((User) target); - if (targetUser.getUuid().equals(sender.getUuid())) { + if (targetUser.getUniqueId().equals(sender.getUniqueId())) { // the sender is trying to edit themselves Tristate ret = sender.getPermissionValue(base.getPermission() + ".modify.self"); if (ret != Tristate.UNDEFINED) { @@ -174,7 +174,7 @@ public final class ArgumentPermissions { if (target instanceof User) { User targetUser = ((User) target); - if (targetUser.getUuid().equals(sender.getUuid())) { + if (targetUser.getUniqueId().equals(sender.getUniqueId())) { // the sender is trying to view themselves Tristate ret = sender.getPermissionValue(base.getPermission() + ".view.self"); if (ret != Tristate.UNDEFINED) { @@ -299,9 +299,9 @@ public final class ArgumentPermissions { return false; } - User user = plugin.getUserManager().getIfLoaded(sender.getUuid()); + User user = plugin.getUserManager().getIfLoaded(sender.getUniqueId()); if (user == null) { - throw new IllegalStateException("Unable to get a User for " + sender.getUuid() + " - " + sender.getName()); + throw new IllegalStateException("Unable to get a User for " + sender.getUniqueId() + " - " + sender.getName()); } PermissionCache permissionData = user.getCachedData().getPermissionData(QueryOptions.defaultContextualOptions().toBuilder().context(contextSet).build()); diff --git a/common/src/main/java/me/lucko/luckperms/common/command/utils/ArgumentParser.java b/common/src/main/java/me/lucko/luckperms/common/command/utils/ArgumentParser.java index 12abd78c8..21f1714c6 100644 --- a/common/src/main/java/me/lucko/luckperms/common/command/utils/ArgumentParser.java +++ b/common/src/main/java/me/lucko/luckperms/common/command/utils/ArgumentParser.java @@ -214,7 +214,7 @@ public class ArgumentParser { public static UUID parseUserTarget(int index, List args, LuckPermsPlugin plugin, Sender sender) { final String target = args.get(index); - return UserMainCommand.parseTargetUuid(target, plugin, sender); + return UserMainCommand.parseTargetUniqueId(target, plugin, sender); } public abstract static class ArgumentException extends CommandException {} diff --git a/common/src/main/java/me/lucko/luckperms/common/command/utils/StorageAssistant.java b/common/src/main/java/me/lucko/luckperms/common/command/utils/StorageAssistant.java index 4c41a8626..5c0d17000 100644 --- a/common/src/main/java/me/lucko/luckperms/common/command/utils/StorageAssistant.java +++ b/common/src/main/java/me/lucko/luckperms/common/command/utils/StorageAssistant.java @@ -70,7 +70,7 @@ public final class StorageAssistant { } if (auditTemporary) { - group.auditTemporaryPermissions(); + group.auditTemporaryNodes(); } return group; diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java index 322b22684..a004b73b2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java @@ -87,7 +87,7 @@ public class MetaAddChatMeta extends SharedSubCommand { return CommandResult.NO_PERMISSION; } - DataMutateResult result = holder.setPermission(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).withContext(context).build(), true); + DataMutateResult result = holder.setNode(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).withContext(context).build(), true); if (result.wasSuccessful()) { TextComponent.Builder builder = Message.ADD_CHATMETA_SUCCESS.asComponent(plugin.getLocaleManager(), holder.getFormattedDisplayName(), this.type.name().toLowerCase(), meta, priority, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)).toBuilder(); HoverEvent event = HoverEvent.showText(TextUtils.fromLegacy( diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java index fe49b8ca3..8a9a6c901 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java @@ -93,7 +93,7 @@ public class MetaAddTempChatMeta extends SharedSubCommand { return CommandResult.NO_PERMISSION; } - TemporaryDataMutateResult ret = holder.setPermission(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).expiry(duration).withContext(context).build(), modifier); + TemporaryDataMutateResult ret = holder.setNode(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).expiry(duration).withContext(context).build(), modifier); if (((Result) ret.getResult()).wasSuccessful()) { duration = ret.getMergedNode().getExpiry().getEpochSecond(); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java index a43dd7ca3..51341b928 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java @@ -103,7 +103,7 @@ public class MetaRemoveChatMeta extends SharedSubCommand { return CommandResult.SUCCESS; } - DataMutateResult result = holder.unsetPermission(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).withContext(context).build()); + DataMutateResult result = holder.unsetNode(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).withContext(context).build()); if (result.wasSuccessful()) { TextComponent.Builder builder = Message.REMOVE_CHATMETA_SUCCESS.asComponent(plugin.getLocaleManager(), holder.getFormattedDisplayName(), this.type.name().toLowerCase(), meta, priority, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)).toBuilder(); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java index e34c59ad2..592bc2c66 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java @@ -103,7 +103,7 @@ public class MetaRemoveTempChatMeta extends SharedSubCommand { return CommandResult.SUCCESS; } - DataMutateResult result = holder.unsetPermission(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).expiry(10L).withContext(context).build()); + DataMutateResult result = holder.unsetNode(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).expiry(10L).withContext(context).build()); if (result.wasSuccessful()) { TextComponent.Builder builder = Message.REMOVE_TEMP_CHATMETA_SUCCESS.asComponent(plugin.getLocaleManager(), holder.getFormattedDisplayName(), this.type.name().toLowerCase(), meta, priority, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)).toBuilder(); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java index 4300a9648..663006e21 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java @@ -81,13 +81,13 @@ public class MetaSet extends SharedSubCommand { Node node = Meta.builder(key, value).withContext(context).build(); - if (holder.hasPermission(DataType.NORMAL, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) { + if (holder.hasNode(DataType.NORMAL, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) { Message.ALREADY_HAS_META.send(sender, holder.getFormattedDisplayName(), key, value, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); return CommandResult.STATE_ERROR; } holder.removeIf(DataType.NORMAL, context, n -> n instanceof MetaNode && !n.hasExpiry() && ((MetaNode) n).getMetaKey().equalsIgnoreCase(key), null); - holder.setPermission(DataType.NORMAL, node, true); + holder.setNode(DataType.NORMAL, node, true); TextComponent.Builder builder = Message.SET_META_SUCCESS.asComponent(plugin.getLocaleManager(), key, value, holder.getFormattedDisplayName(), MessageUtils.contextSetToString(plugin.getLocaleManager(), context)).toBuilder(); HoverEvent event = HoverEvent.showText(TextUtils.fromLegacy( diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java index 150520474..8aaac2781 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java @@ -123,7 +123,7 @@ public class MetaSetChatMeta extends SharedSubCommand { } } - DataMutateResult result = holder.setPermission(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).withContext(context).build(), true); + DataMutateResult result = holder.setNode(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).withContext(context).build(), true); if (result.wasSuccessful()) { TextComponent.Builder builder = Message.ADD_CHATMETA_SUCCESS.asComponent(plugin.getLocaleManager(), holder.getFormattedDisplayName(), this.type.name().toLowerCase(), meta, priority, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)).toBuilder(); HoverEvent event = HoverEvent.showText(TextUtils.fromLegacy( diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java index 25983738e..720e3f238 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java @@ -86,13 +86,13 @@ public class MetaSetTemp extends SharedSubCommand { Node node = Meta.builder(key, value).withContext(context).expiry(duration).build(); - if (holder.hasPermission(DataType.NORMAL, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) { + if (holder.hasNode(DataType.NORMAL, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) { Message.ALREADY_HAS_TEMP_META.send(sender, holder.getFormattedDisplayName(), key, value, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); return CommandResult.STATE_ERROR; } holder.removeIf(DataType.NORMAL, context, n -> n instanceof MetaNode && n.hasExpiry() && ((MetaNode) n).getMetaKey().equalsIgnoreCase(key), null); - duration = holder.setPermission(DataType.NORMAL, node, modifier).getMergedNode().getExpiry().getEpochSecond(); + duration = holder.setNode(DataType.NORMAL, node, modifier).getMergedNode().getExpiry().getEpochSecond(); TextComponent.Builder builder = Message.SET_META_TEMP_SUCCESS.asComponent(plugin.getLocaleManager(), key, value, holder.getFormattedDisplayName(), DurationFormatter.LONG.formatDateDiff(duration), MessageUtils.contextSetToString(plugin.getLocaleManager(), context)).toBuilder(); HoverEvent event = HoverEvent.showText(TextUtils.fromLegacy( diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java index ed6125e90..e6ff0d15f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java @@ -133,7 +133,7 @@ public class MetaSetTempChatMeta extends SharedSubCommand { } } - TemporaryDataMutateResult ret = holder.setPermission(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).expiry(duration).withContext(context).build(), modifier); + TemporaryDataMutateResult ret = holder.setNode(DataType.NORMAL, ((this.type == ChatMetaType.PREFIX ? Prefix.builder(priority, meta) : Suffix.builder(priority, meta))).expiry(duration).withContext(context).build(), modifier); if (((Result) ret.getResult()).wasSuccessful()) { duration = ret.getMergedNode().getExpiry().getEpochSecond(); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java index 45ccc24de..f7d369303 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java @@ -72,9 +72,9 @@ public class HolderClear extends SubCommand { } if (context.isEmpty()) { - holder.clearNodes(DataType.NORMAL, null); + holder.clearNodes(DataType.NORMAL, null, false); } else { - holder.clearNodes(DataType.NORMAL, context); + holder.clearNodes(DataType.NORMAL, context, false); } int changed = before - holder.normalData().immutable().size(); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderShowTracks.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderShowTracks.java index 5d5ed1524..b1f3f57ab 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderShowTracks.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderShowTracks.java @@ -44,7 +44,6 @@ import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.util.Predicates; import net.luckperms.api.node.Node; -import net.luckperms.api.node.NodeType; import net.luckperms.api.node.types.InheritanceNode; import java.util.ArrayList; @@ -77,9 +76,7 @@ public class HolderShowTracks extends SubCommand if (holder.getType() == HolderType.USER) { // if the holder is a user, we want to query parent groups for tracks - Set nodes = holder.normalData().immutable().values().stream() - .filter(NodeType.INHERITANCE::matches) - .map(NodeType.INHERITANCE::cast) + Set nodes = holder.normalData().immutableInheritance().values().stream() .filter(Node::getValue) .filter(n -> !n.hasExpiry()) .collect(Collectors.toSet()); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java index a9dd2a95e..0137e1fc3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java @@ -80,7 +80,7 @@ public class ParentAdd extends SharedSubCommand { return CommandResult.NO_PERMISSION; } - DataMutateResult result = holder.setPermission(DataType.NORMAL, Inheritance.builder(group.getName()).withContext(context).build(), true); + DataMutateResult result = holder.setNode(DataType.NORMAL, Inheritance.builder(group.getName()).withContext(context).build(), true); if (result.wasSuccessful()) { Message.SET_INHERIT_SUCCESS.send(sender, holder.getFormattedDisplayName(), group.getFormattedDisplayName(), MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java index 5446553be..2297dad25 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAddTemp.java @@ -91,7 +91,7 @@ public class ParentAddTemp extends SharedSubCommand { return CommandResult.STATE_ERROR; } - TemporaryDataMutateResult ret = holder.setPermission(DataType.NORMAL, Inheritance.builder(group.getName()).expiry(duration).withContext(context).build(), modifier); + TemporaryDataMutateResult ret = holder.setNode(DataType.NORMAL, Inheritance.builder(group.getName()).expiry(duration).withContext(context).build(), modifier); if (((Result) ret.getResult()).wasSuccessful()) { duration = ret.getMergedNode().getExpiry().getEpochSecond(); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java index eb91cfbbb..64930536f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java @@ -92,7 +92,7 @@ public class ParentRemove extends SharedSubCommand { } } - DataMutateResult result = holder.unsetPermission(DataType.NORMAL, Inheritance.builder(groupName).withContext(context).build()); + DataMutateResult result = holder.unsetNode(DataType.NORMAL, Inheritance.builder(groupName).withContext(context).build()); if (result.wasSuccessful()) { Message.UNSET_INHERIT_SUCCESS.send(sender, holder.getFormattedDisplayName(), groupName, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java index 9d88eb0b7..1f94447ea 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java @@ -74,7 +74,7 @@ public class ParentRemoveTemp extends SharedSubCommand { return CommandResult.NO_PERMISSION; } - DataMutateResult result = holder.unsetPermission(DataType.NORMAL, Inheritance.builder(groupName).expiry(10L).withContext(context).build()); + DataMutateResult result = holder.unsetNode(DataType.NORMAL, Inheritance.builder(groupName).expiry(10L).withContext(context).build()); if (result.wasSuccessful()) { Message.UNSET_TEMP_INHERIT_SUCCESS.send(sender, holder.getFormattedDisplayName(), groupName, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java index 1b1657fb0..bcfe40912 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java @@ -82,7 +82,7 @@ public class ParentSet extends SharedSubCommand { } holder.clearNormalParents(context, false); - holder.setPermission(DataType.NORMAL, Inheritance.builder(group.getName()).withContext(context).build(), true); + holder.setNode(DataType.NORMAL, Inheritance.builder(group.getName()).withContext(context).build(), true); if (holder.getType() == HolderType.USER) { ((User) holder).getPrimaryGroup().setStoredValue(group.getName()); } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java index 2fc5ab72c..b8b0dc398 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java @@ -115,7 +115,7 @@ public class ParentSetTrack extends SharedSubCommand { } holder.removeIf(DataType.NORMAL, null, NodeType.INHERITANCE.predicate(n -> n.getContexts().equals(context) && track.containsGroup(n.getGroupName())), null); - holder.setPermission(DataType.NORMAL, Inheritance.builder(group.getName()).withContext(context).build(), true); + holder.setNode(DataType.NORMAL, Inheritance.builder(group.getName()).withContext(context).build(), true); Message.SET_TRACK_PARENT_SUCCESS.send(sender, holder.getFormattedDisplayName(), track.getName(), group.getFormattedDisplayName(), MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java index 44f226fe4..5addea578 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java @@ -95,9 +95,9 @@ public class UserSwitchPrimaryGroup extends SharedSubCommand { } Node node = Inheritance.builder(group.getName()).build(); - if (!user.hasPermission(DataType.NORMAL, node, NodeEqualityPredicate.IGNORE_VALUE).asBoolean()) { + if (!user.hasNode(DataType.NORMAL, node, NodeEqualityPredicate.IGNORE_VALUE).asBoolean()) { Message.USER_PRIMARYGROUP_ERROR_NOTMEMBER.send(sender, user.getFormattedDisplayName(), group.getName()); - holder.setPermission(DataType.NORMAL, node, true); + holder.setNode(DataType.NORMAL, node, true); } user.getPrimaryGroup().setStoredValue(group.getName()); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java index c4f77d1ad..1f8f3cfd4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java @@ -65,7 +65,7 @@ public class PermissionCheck extends SharedSubCommand { String node = ArgumentParser.parseString(0, args); MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - Tristate result = holder.hasPermission(DataType.NORMAL, NodeBuilders.determineMostApplicable(node).withContext(context).build(), NodeEqualityPredicate.IGNORE_VALUE_OR_IF_TEMPORARY); + Tristate result = holder.hasNode(DataType.NORMAL, NodeBuilders.determineMostApplicable(node).withContext(context).build(), NodeEqualityPredicate.IGNORE_VALUE_OR_IF_TEMPORARY); String s = MessageUtils.formatTristate(result); Message.CHECK_PERMISSION.send(sender, holder.getFormattedDisplayName(), node, s, MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheckInherits.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheckInherits.java index e95f97caf..6f6192b5a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheckInherits.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheckInherits.java @@ -38,16 +38,18 @@ import me.lucko.luckperms.common.locale.LocaleManager; import me.lucko.luckperms.common.locale.command.CommandSpec; import me.lucko.luckperms.common.locale.message.Message; import me.lucko.luckperms.common.model.PermissionHolder; -import me.lucko.luckperms.common.node.factory.NodeBuilders; -import me.lucko.luckperms.common.node.utils.InheritanceInfo; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.util.Predicates; import net.luckperms.api.context.MutableContextSet; -import net.luckperms.api.node.NodeEqualityPredicate; +import net.luckperms.api.node.Node; +import net.luckperms.api.node.Tristate; +import net.luckperms.api.node.metadata.types.InheritanceOriginMetadata; +import net.luckperms.api.query.QueryOptions; import java.util.List; +import java.util.Optional; public class PermissionCheckInherits extends SharedSubCommand { public PermissionCheckInherits(LocaleManager locale) { @@ -64,14 +66,17 @@ public class PermissionCheckInherits extends SharedSubCommand { String node = ArgumentParser.parseString(0, args); MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); - InheritanceInfo result = holder.searchForInheritedMatch(NodeBuilders.determineMostApplicable(node).withContext(context).build(), NodeEqualityPredicate.IGNORE_VALUE_OR_IF_TEMPORARY); + Optional match = holder.resolveInheritances(QueryOptions.nonContextual()).stream() + .filter(n -> n.getKey().equalsIgnoreCase(node) && n.getContexts().equals(context)) + .findFirst(); + + String location = match.map(n -> n.metadata(InheritanceOriginMetadata.KEY).getOrigin()).orElse(null); - String location = result.getLocation().orElse(null); if (location == null || location.equalsIgnoreCase(holder.getObjectName())) { location = "self"; } - String s = MessageUtils.formatTristate(result.getResult()); + String s = MessageUtils.formatTristate(match.map(n -> Tristate.of(n.getValue())).orElse(Tristate.UNDEFINED)); Message.CHECK_INHERITS_PERMISSION.send(sender, holder.getFormattedDisplayName(), node, s, MessageUtils.contextSetToString(plugin.getLocaleManager(), context), location); return CommandResult.SUCCESS; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java index 15df0f052..6997eb741 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java @@ -85,7 +85,7 @@ public class PermissionSet extends SharedSubCommand { } } - DataMutateResult result = holder.setPermission(DataType.NORMAL, builtNode, true); + DataMutateResult result = holder.setNode(DataType.NORMAL, builtNode, true); if (result.wasSuccessful()) { Message.SETPERMISSION_SUCCESS.send(sender, node, value, holder.getFormattedDisplayName(), MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java index 9cb1d362e..a10a264a2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java @@ -91,7 +91,7 @@ public class PermissionSetTemp extends SharedSubCommand { } } - TemporaryDataMutateResult result = holder.setPermission(DataType.NORMAL, builtNode, modifier); + TemporaryDataMutateResult result = holder.setNode(DataType.NORMAL, builtNode, modifier); if (((Result) result.getResult()).wasSuccessful()) { duration = result.getMergedNode().getExpiry().getEpochSecond(); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java index 4d13e1a58..4dc30bf3f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java @@ -84,7 +84,7 @@ public class PermissionUnset extends SharedSubCommand { } } - DataMutateResult result = holder.unsetPermission(DataType.NORMAL, builtNode); + DataMutateResult result = holder.unsetNode(DataType.NORMAL, builtNode); if (result.wasSuccessful()) { Message.UNSETPERMISSION_SUCCESS.send(sender, node, holder.getFormattedDisplayName(), MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java index 1bb667a11..e9b29cb1f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java @@ -84,7 +84,7 @@ public class PermissionUnsetTemp extends SharedSubCommand { } } - DataMutateResult result = holder.unsetPermission(DataType.NORMAL, builtNode); + DataMutateResult result = holder.unsetNode(DataType.NORMAL, builtNode); if (result.wasSuccessful()) { Message.UNSET_TEMP_PERMISSION_SUCCESS.send(sender, node, holder.getFormattedDisplayName(), MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java index 72b2a3525..7450f3359 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java @@ -45,8 +45,9 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.sender.Sender; import me.lucko.luckperms.common.util.Predicates; -import net.luckperms.api.context.MutableContextSet; +import net.luckperms.api.context.ImmutableContextSet; import net.luckperms.api.model.DataType; +import net.luckperms.api.node.NodeType; import net.luckperms.api.node.types.DisplayNameNode; import java.util.List; @@ -64,9 +65,14 @@ public class GroupSetDisplayName extends SubCommand { } String name = ArgumentParser.parseString(0, args); - MutableContextSet context = ArgumentParser.parseContext(1, args, plugin); + ImmutableContextSet context = ArgumentParser.parseContext(1, args, plugin).immutableCopy(); - String previousName = group.getDisplayName(context).orElse(null); + String previousName = group.normalData().immutable().get(context).stream() + .filter(NodeType.DISPLAY_NAME::matches) + .map(NodeType.DISPLAY_NAME::cast) + .findFirst() + .map(DisplayNameNode::getDisplayName) + .orElse(null); if (previousName == null && name.equals(group.getName())) { Message.GROUP_SET_DISPLAY_NAME_DOESNT_HAVE.send(sender, group.getName()); @@ -97,7 +103,7 @@ public class GroupSetDisplayName extends SubCommand { return CommandResult.SUCCESS; } - group.setPermission(DataType.NORMAL, DisplayName.builder(name).withContext(context).build(), true); + group.setNode(DataType.NORMAL, DisplayName.builder(name).withContext(context).build(), true); Message.GROUP_SET_DISPLAY_NAME.send(sender, name, group.getName(), MessageUtils.contextSetToString(plugin.getLocaleManager(), context)); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetWeight.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetWeight.java index 5a7b0c02e..c20ae5e46 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetWeight.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetWeight.java @@ -62,7 +62,7 @@ public class GroupSetWeight extends SubCommand { int weight = ArgumentParser.parsePriority(0, args); group.removeIf(DataType.NORMAL, null, n -> n instanceof WeightNode, null); - group.setPermission(DataType.NORMAL, Weight.builder(weight).build(), true); + group.setNode(DataType.NORMAL, Weight.builder(weight).build(), true); Message.GROUP_SET_WEIGHT.send(sender, weight, group.getFormattedDisplayName()); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/log/LogNotify.java b/common/src/main/java/me/lucko/luckperms/common/commands/log/LogNotify.java index 14bac6129..518b65924 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/log/LogNotify.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/log/LogNotify.java @@ -76,7 +76,7 @@ public class LogNotify extends SubCommand { if (state) { // add the perm - user.setPermission(DataType.NORMAL, NodeBuilders.determineMostApplicable(IGNORE_NODE).build(), true); + user.setNode(DataType.NORMAL, NodeBuilders.determineMostApplicable(IGNORE_NODE).build(), true); } else { // remove the perm user.removeIf(DataType.NORMAL, ImmutableContextSetImpl.EMPTY, n -> n.getKey().equalsIgnoreCase(IGNORE_NODE), null); @@ -92,7 +92,7 @@ public class LogNotify extends SubCommand { return CommandResult.SUCCESS; } - final UUID uuid = sender.getUuid(); + final UUID uuid = sender.getUniqueId(); if (args.isEmpty()) { if (isIgnoring(plugin, uuid)) { // toggle on diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/migration/MigrationUtils.java b/common/src/main/java/me/lucko/luckperms/common/commands/migration/MigrationUtils.java index 417c82b6f..51ec2a78b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/migration/MigrationUtils.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/migration/MigrationUtils.java @@ -58,7 +58,7 @@ public final class MigrationUtils { public static void setGroupWeight(Group group, int weight) { group.removeIf(DataType.NORMAL, null, NodeType.WEIGHT::matches, null); - group.setPermission(DataType.NORMAL, Weight.builder(weight).build(), true); + group.setNode(DataType.NORMAL, Weight.builder(weight).build(), true); } public static String standardizeName(String string) { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/misc/VerboseCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/misc/VerboseCommand.java index bb746e04d..f55d80421 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/misc/VerboseCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/misc/VerboseCommand.java @@ -105,7 +105,7 @@ public class VerboseCommand extends SingleCommand { } if (mode.equals("off") || mode.equals("false") || mode.equals("paste") || mode.equals("upload")) { - VerboseListener listener = plugin.getVerboseHandler().unregisterListener(sender.getUuid()); + VerboseListener listener = plugin.getVerboseHandler().unregisterListener(sender.getUniqueId()); if (mode.equals("paste") || mode.equals("upload")) { if (listener == null) { diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserClone.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserClone.java index a5df3de42..126a22e5b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserClone.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserClone.java @@ -78,7 +78,7 @@ public class UserClone extends SubCommand { Message.CLONE_SUCCESS.send(sender, user.getFormattedDisplayName(), otherUser.getFormattedDisplayName()); LoggedAction.build().source(sender).target(otherUser) - .description("clone", user.getName()) + .description("clone", user.getUsername()) .build().submit(plugin, sender); StorageAssistant.save(otherUser, sender, plugin); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserInfo.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserInfo.java index 6971b77c3..f073d013e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserInfo.java @@ -64,12 +64,12 @@ public class UserInfo extends SubCommand { return CommandResult.NO_PERMISSION; } - Message status = plugin.getBootstrap().isPlayerOnline(user.getUuid()) ? Message.PLAYER_ONLINE : Message.PLAYER_OFFLINE; + Message status = plugin.getBootstrap().isPlayerOnline(user.getUniqueId()) ? Message.PLAYER_ONLINE : Message.PLAYER_OFFLINE; Message.USER_INFO_GENERAL.send(sender, - user.getName().orElse("Unknown"), - user.getUuid(), - user.getUuid().version() == 4 ? "&2mojang" : "&8offline", + user.getUsername().orElse("Unknown"), + user.getUniqueId(), + user.getUniqueId().version() == 4 ? "&2mojang" : "&8offline", status.asString(plugin.getLocaleManager()), user.getPrimaryGroup().getValue() ); diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserMainCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserMainCommand.java index 2e7e55055..c7f1b698d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserMainCommand.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserMainCommand.java @@ -80,9 +80,9 @@ public class UserMainCommand extends MainCommand { ); } - public static UUID parseTargetUuid(String target, LuckPermsPlugin plugin, Sender sender) { - UUID uuid = Uuids.parse(target); - if (uuid == null) { + public static UUID parseTargetUniqueId(String target, LuckPermsPlugin plugin, Sender sender) { + UUID uniqueId = Uuids.parse(target); + if (uniqueId == null) { if (!plugin.getConfiguration().get(ConfigKeys.ALLOW_INVALID_USERNAMES)) { if (!DataConstraints.PLAYER_USERNAME_TEST.test(target)) { Message.USER_INVALID_ENTRY.send(sender, target); @@ -95,45 +95,45 @@ public class UserMainCommand extends MainCommand { } } - uuid = plugin.getStorage().getPlayerUuid(target.toLowerCase()).join(); - if (uuid == null) { + uniqueId = plugin.getStorage().getPlayerUniqueId(target.toLowerCase()).join(); + if (uniqueId == null) { if (!plugin.getConfiguration().get(ConfigKeys.USE_SERVER_UUID_CACHE)) { Message.USER_NOT_FOUND.send(sender, target); return null; } - uuid = plugin.getBootstrap().lookupUuid(target).orElse(null); - if (uuid == null) { + uniqueId = plugin.getBootstrap().lookupUniqueId(target).orElse(null); + if (uniqueId == null) { Message.USER_NOT_FOUND.send(sender, target); return null; } } } - return uuid; + return uniqueId; } @Override protected UserIdentifier parseTarget(String target, LuckPermsPlugin plugin, Sender sender) { - UUID uuid = parseTargetUuid(target, plugin, sender); - if (uuid == null) { + UUID uniqueId = parseTargetUniqueId(target, plugin, sender); + if (uniqueId == null) { return null; } - String name = plugin.getStorage().getPlayerName(uuid).join(); - return UserIdentifier.of(uuid, name); + String name = plugin.getStorage().getPlayerName(uniqueId).join(); + return UserIdentifier.of(uniqueId, name); } @Override protected User getTarget(UserIdentifier target, LuckPermsPlugin plugin, Sender sender) { - User user = plugin.getStorage().loadUser(target.getUuid(), target.getUsername().orElse(null)).join(); - user.auditTemporaryPermissions(); + User user = plugin.getStorage().loadUser(target.getUniqueId(), target.getUsername().orElse(null)).join(); + user.auditTemporaryNodes(); return user; } @Override protected ReentrantLock getLockForTarget(UserIdentifier target) { - return this.locks.get(target.getUuid()); + return this.locks.get(target.getUniqueId()); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java b/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java index 9d8c7fd7f..99097f106 100644 --- a/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/context/ContextManager.java @@ -25,8 +25,6 @@ package me.lucko.luckperms.common.context; -import com.google.common.collect.ImmutableList; - import me.lucko.luckperms.common.cache.ExpiringCache; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.context.contextset.ImmutableContextSetImpl; @@ -64,14 +62,6 @@ public abstract class ContextManager { this.subjectClass = subjectClass; } - public List> getCalculators() { - return ImmutableList.copyOf(this.calculators); - } - - public List getStaticCalculators() { - return ImmutableList.copyOf(this.staticCalculators); - } - public ImmutableContextSet getPotentialContexts() { ImmutableContextSet.Builder builder = ImmutableContextSet.builder(); for (ContextCalculator calculator : this.calculators) { @@ -142,7 +132,7 @@ public abstract class ContextManager { return formQueryOptions(subject, accumulator.build()); } - QueryOptions calculateStatic() { + private QueryOptions calculateStatic() { ImmutableContextSet.Builder accumulator = new ImmutableContextSetImpl.BuilderImpl(); for (StaticContextCalculator calculator : this.staticCalculators) { diff --git a/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java index f258f0321..a51ebb1fa 100644 --- a/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java @@ -285,20 +285,20 @@ public final class EventFactory { } } - public void handleUserFirstLogin(UUID uuid, String username) { - post(UserFirstLoginEvent.class, () -> generate(UserFirstLoginEvent.class, uuid, username)); + public void handleUserFirstLogin(UUID uniqueId, String username) { + post(UserFirstLoginEvent.class, () -> generate(UserFirstLoginEvent.class, uniqueId, username)); } - public void handlePlayerLoginProcess(UUID uuid, String username, User user) { + public void handlePlayerLoginProcess(UUID uniqueId, String username, User user) { if (!shouldPost(PlayerLoginProcessEvent.class)) { return; } - post(generate(PlayerLoginProcessEvent.class, uuid, username, new ApiUser(user))); + post(generate(PlayerLoginProcessEvent.class, uniqueId, username, new ApiUser(user))); } - public void handlePlayerDataSave(UUID uuid, String username, PlayerSaveResult result) { - post(PlayerDataSaveEvent.class, () -> generate(PlayerDataSaveEvent.class, uuid, username, result)); + public void handlePlayerDataSave(UUID uniqueId, String username, PlayerSaveResult result) { + post(PlayerDataSaveEvent.class, () -> generate(PlayerDataSaveEvent.class, uniqueId, username, result)); } public void handleUserLoad(User user) { diff --git a/common/src/main/java/me/lucko/luckperms/common/event/model/SenderPlatformEntity.java b/common/src/main/java/me/lucko/luckperms/common/event/model/SenderPlatformEntity.java index e9e3a38ee..bd2f48425 100644 --- a/common/src/main/java/me/lucko/luckperms/common/event/model/SenderPlatformEntity.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/model/SenderPlatformEntity.java @@ -46,7 +46,7 @@ public class SenderPlatformEntity implements PlatformEntity { if (this.sender.isConsole()) { return null; } - return this.sender.getUuid(); + return this.sender.getUniqueId(); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/inheritance/InheritanceGraph.java b/common/src/main/java/me/lucko/luckperms/common/inheritance/InheritanceGraph.java index 3fc7d8381..6fcfde2b9 100644 --- a/common/src/main/java/me/lucko/luckperms/common/inheritance/InheritanceGraph.java +++ b/common/src/main/java/me/lucko/luckperms/common/inheritance/InheritanceGraph.java @@ -61,7 +61,7 @@ public class InheritanceGraph implements Graph { @Override public Iterable successors(PermissionHolder holder) { Set successors = new LinkedHashSet<>(); - for (InheritanceNode n : holder.getOwnGroupNodes(this.queryOptions)) { + for (InheritanceNode n : holder.getOwnInheritanceNodes(this.queryOptions)) { // effectively: if not (we're applying global groups or it's specific anyways) if (!((this.queryOptions.flag(Flag.APPLY_INHERITANCE_NODES_WITHOUT_SERVER_CONTEXT) || n.getContexts().containsKey(DefaultContextKeys.SERVER_KEY)) && (this.queryOptions.flag(Flag.APPLY_INHERITANCE_NODES_WITHOUT_WORLD_CONTEXT) || n.getContexts().containsKey(DefaultContextKeys.WORLD_KEY)))) { diff --git a/common/src/main/java/me/lucko/luckperms/common/inheritance/ResolvedGroup.java b/common/src/main/java/me/lucko/luckperms/common/inheritance/ResolvedGroup.java deleted file mode 100644 index 1c3d0e32a..000000000 --- a/common/src/main/java/me/lucko/luckperms/common/inheritance/ResolvedGroup.java +++ /dev/null @@ -1,61 +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.inheritance; - -import me.lucko.luckperms.common.model.Group; - -import net.luckperms.api.node.Node; - -public final class ResolvedGroup { - private final Node node; - private final Group group; - - ResolvedGroup(Node node, Group group) { - this.node = node; - this.group = group; - } - - Node node() { - return this.node; - } - - Group group() { - return this.group; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ResolvedGroup that = (ResolvedGroup) o; - return this.group.equals(that.group); - } - - @Override - public int hashCode() { - return this.group.hashCode(); - } -} diff --git a/common/src/main/java/me/lucko/luckperms/common/messaging/LuckPermsMessagingService.java b/common/src/main/java/me/lucko/luckperms/common/messaging/LuckPermsMessagingService.java index 120700f42..dc7023d0a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/messaging/LuckPermsMessagingService.java +++ b/common/src/main/java/me/lucko/luckperms/common/messaging/LuckPermsMessagingService.java @@ -122,7 +122,7 @@ public class LuckPermsMessagingService implements InternalMessagingService, Inco this.plugin.getBootstrap().getScheduler().executeAsync(() -> { UUID requestId = generatePingId(); this.plugin.getLogger().info("[Messaging] Sending user ping for '" + user.getPlainDisplayName() + "' with id: " + requestId); - this.messenger.sendOutgoingMessage(new UserUpdateMessageImpl(requestId, user.getUuid())); + this.messenger.sendOutgoingMessage(new UserUpdateMessageImpl(requestId, user.getUniqueId())); }); } @@ -252,7 +252,7 @@ public class LuckPermsMessagingService implements InternalMessagingService, Inco return; } - this.plugin.getStorage().loadUser(user.getUuid(), null); + this.plugin.getStorage().loadUser(user.getUniqueId(), null); } else if (message instanceof ActionLogMessage) { ActionLogMessage msg = (ActionLogMessage) message; diff --git a/common/src/main/java/me/lucko/luckperms/common/model/DisplayNameCache.java b/common/src/main/java/me/lucko/luckperms/common/model/DisplayNameCache.java deleted file mode 100644 index 7b10a2fc4..000000000 --- a/common/src/main/java/me/lucko/luckperms/common/model/DisplayNameCache.java +++ /dev/null @@ -1,62 +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.model; - -import me.lucko.luckperms.common.cache.Cache; -import me.lucko.luckperms.common.config.ConfigKeys; - -import net.luckperms.api.node.Node; -import net.luckperms.api.node.types.DisplayNameNode; - -import org.checkerframework.checker.nullness.qual.NonNull; - -import java.util.Optional; - -/** - * Cache instance to supply the display name of a {@link Group}. - */ -public class DisplayNameCache extends Cache> { - private final Group group; - - public DisplayNameCache(Group group) { - this.group = group; - } - - @Override - protected @NonNull Optional supply() { - // query for a displayname node - for (Node n : this.group.getOwnNodes(this.group.getPlugin().getContextManager().getStaticQueryOptions())) { - if (n instanceof DisplayNameNode) { - DisplayNameNode displayNameNode = (DisplayNameNode) n; - return Optional.of(displayNameNode.getDisplayName()); - } - } - - // fallback to config - String name = this.group.getPlugin().getConfiguration().get(ConfigKeys.GROUP_NAME_REWRITES).get(this.group.getObjectName()); - return name == null || name.equals(this.group.getObjectName()) ? Optional.empty() : Optional.of(name); - } -} 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 e14b375f0..420852b89 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 @@ -28,16 +28,19 @@ package me.lucko.luckperms.common.model; import me.lucko.luckperms.common.api.implementation.ApiGroup; import me.lucko.luckperms.common.cache.Cache; import me.lucko.luckperms.common.cacheddata.GroupCachedDataManager; +import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import net.luckperms.api.context.ContextSet; import net.luckperms.api.node.Node; import net.luckperms.api.node.types.DisplayNameNode; +import net.luckperms.api.query.QueryOptions; + +import org.checkerframework.checker.nullness.qual.NonNull; import java.util.Optional; import java.util.OptionalInt; -public class Group extends PermissionHolder implements Identifiable { +public class Group extends PermissionHolder { private final ApiGroup apiDelegate = new ApiGroup(this); /** @@ -53,7 +56,7 @@ public class Group extends PermissionHolder implements Identifiable { /** * Caches the groups display name */ - private final Cache> displayNameCache = new DisplayNameCache(this); + private final Cache> displayNameCache = new DisplayNameCache(); /** * The groups data cache instance @@ -87,9 +90,13 @@ public class Group extends PermissionHolder implements Identifiable { return this.name; } + public ApiGroup getApiDelegate() { + return this.apiDelegate; + } + @Override - public String getId() { - return this.name; + public GroupCachedDataManager getCachedData() { + return this.cachedData; } @Override @@ -107,30 +114,18 @@ public class Group extends PermissionHolder implements Identifiable { return this.displayNameCache.get(); } - /** - * Gets a display name value exactly matching a specific context. - * - *

Note that the behaviour of {@link #getDisplayName()} is not the same as this.

- * - * @param contextSet the contexts to lookup in - * @return the display name - */ - public Optional getDisplayName(ContextSet contextSet) { - for (Node n : normalData().immutable().get(contextSet.immutableCopy())) { + public Optional calculateDisplayName(QueryOptions queryOptions) { + // query for a displayname node + for (Node n : getOwnNodes(queryOptions)) { if (n instanceof DisplayNameNode) { - return Optional.of(((DisplayNameNode) n).getDisplayName()); + DisplayNameNode displayNameNode = (DisplayNameNode) n; + return Optional.of(displayNameNode.getDisplayName()); } } - return Optional.empty(); - } - public ApiGroup getApiDelegate() { - return this.apiDelegate; - } - - @Override - public GroupCachedDataManager getCachedData() { - return this.cachedData; + // fallback to config + String name = getPlugin().getConfiguration().get(ConfigKeys.GROUP_NAME_REWRITES).get(this.name); + return name == null || name.equals(this.name) ? Optional.empty() : Optional.of(name); } @Override @@ -161,4 +156,13 @@ public class Group extends PermissionHolder implements Identifiable { return "Group(name=" + this.name + ")"; } + /** + * Cache instance to supply the display name of a {@link Group}. + */ + public class DisplayNameCache extends Cache> { + @Override + protected @NonNull Optional supply() { + return calculateDisplayName(getPlugin().getContextManager().getStaticQueryOptions()); + } + } } diff --git a/common/src/main/java/me/lucko/luckperms/common/model/Identifiable.java b/common/src/main/java/me/lucko/luckperms/common/model/Identifiable.java deleted file mode 100644 index b72dd54ca..000000000 --- a/common/src/main/java/me/lucko/luckperms/common/model/Identifiable.java +++ /dev/null @@ -1,41 +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.model; - -/** - * Interface to represent an identifiable object - */ -public interface Identifiable { - - /** - * Returns the objects identifier. - * If the type is a {@link String}, this method must return a {@link String#toLowerCase()} representation - * - * @return the identifier - */ - T getId(); - -} diff --git a/common/src/main/java/me/lucko/luckperms/common/model/NodeMap.java b/common/src/main/java/me/lucko/luckperms/common/model/NodeMap.java index 55e4d32fb..6923d6184 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/NodeMap.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/NodeMap.java @@ -76,6 +76,7 @@ import java.util.function.Predicate; public final class NodeMap { private static final Function> VALUE_SET_SUPPLIER = k -> new ConcurrentSkipListSet<>(NodeComparator.reverse()); private static final Function> INHERITANCE_VALUE_SET_SUPPLIER = k -> new ConcurrentSkipListSet<>(NodeComparator.reverse()); + /** * The holder which this map is for */ @@ -100,7 +101,8 @@ public final class NodeMap { /** * A cache which holds an immutable copy of the backing map */ - private final NodeMapCache cache = new NodeMapCache(this); + private final ImmutableSetMultimapCache mapCache = new ImmutableSetMultimapCache<>(this.map); + private final ImmutableSetMultimapCache inheritanceMapCache = new ImmutableSetMultimapCache<>(this.inheritanceMap); NodeMap(PermissionHolder holder) { this.holder = holder; @@ -152,14 +154,19 @@ public final class NodeMap { * @return an immutable copy */ public ImmutableSetMultimap immutable() { - return this.cache.get(); + return this.mapCache.get(); + } + + public ImmutableSetMultimap immutableInheritance() { + return this.inheritanceMapCache.get(); } /** * Invalidates the cache */ void invalidate() { - this.cache.invalidate(); + this.mapCache.invalidate(); + this.inheritanceMapCache.get(); } private Node localise(Node node) { @@ -180,10 +187,10 @@ public final class NodeMap { nodesInContext.add(n); if (n instanceof InheritanceNode) { - SortedSet groupNodesInContext = this.inheritanceMap.computeIfAbsent(context, INHERITANCE_VALUE_SET_SUPPLIER); - groupNodesInContext.removeIf(e -> e.equals(node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE)); + SortedSet inheritanceNodesInContext = this.inheritanceMap.computeIfAbsent(context, INHERITANCE_VALUE_SET_SUPPLIER); + inheritanceNodesInContext.removeIf(e -> e.equals(node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE)); if (n.getValue()) { - groupNodesInContext.add((InheritanceNode) n); + inheritanceNodesInContext.add((InheritanceNode) n); } } } @@ -196,9 +203,9 @@ public final class NodeMap { } if (node instanceof InheritanceNode) { - SortedSet groupNodesInContext = this.inheritanceMap.get(context); - if (groupNodesInContext != null) { - groupNodesInContext.removeIf(e -> e.equals(node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE)); + SortedSet inheritanceNodesInContext = this.inheritanceMap.get(context); + if (inheritanceNodesInContext != null) { + inheritanceNodesInContext.removeIf(e -> e.equals(node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE)); } } } @@ -211,9 +218,9 @@ public final class NodeMap { } if (node instanceof InheritanceNode && node.getValue()) { - SortedSet groupNodesInContext = this.inheritanceMap.get(context); - if (groupNodesInContext != null) { - groupNodesInContext.remove(node); + SortedSet inheritanceNodesInContext = this.inheritanceMap.get(context); + if (inheritanceNodesInContext != null) { + inheritanceNodesInContext.remove(node); } } } @@ -269,9 +276,9 @@ public final class NodeMap { ret = nodesInContext.removeIf(predicate); } - SortedSet groupNodesInContext = this.inheritanceMap.get(context); - if (groupNodesInContext != null) { - groupNodesInContext.removeIf(predicate); + SortedSet inheritanceNodesInContext = this.inheritanceMap.get(context); + if (inheritanceNodesInContext != null) { + inheritanceNodesInContext.removeIf(predicate); } return ret; @@ -293,9 +300,9 @@ public final class NodeMap { removed.add(entry); } if (entry instanceof InheritanceNode && entry.getValue()) { - SortedSet groupNodesInContext = this.inheritanceMap.get(entry.getContexts()); - if (groupNodesInContext != null) { - groupNodesInContext.remove(entry); + SortedSet inheritanceNodesInContext = this.inheritanceMap.get(entry.getContexts()); + if (inheritanceNodesInContext != null) { + inheritanceNodesInContext.remove(entry); } } it.remove(); @@ -306,7 +313,7 @@ public final class NodeMap { return work; } - private static final class NodeMapCache extends Cache> { + private static final class ImmutableSetMultimapCache extends Cache> { private static final Constructor IMMUTABLE_SET_MULTIMAP_CONSTRUCTOR; static { try { @@ -317,20 +324,20 @@ public final class NodeMap { } } - private final NodeMap handle; + private final Map> handle; - private NodeMapCache(NodeMap handle) { + private ImmutableSetMultimapCache(Map> handle) { this.handle = handle; } @Override - protected @NonNull ImmutableSetMultimap supply() { - ImmutableMap.Builder> builder = ImmutableMap.builder(); + protected @NonNull ImmutableSetMultimap supply() { + ImmutableMap.Builder> builder = ImmutableMap.builder(); int size = 0; - for (Map.Entry> entry : this.handle.map.entrySet()) { - ImmutableContextSet key = entry.getKey(); - ImmutableSet values = ImmutableSet.copyOf(entry.getValue()); + for (Map.Entry> entry : this.handle.entrySet()) { + K key = entry.getKey(); + ImmutableSet values = ImmutableSet.copyOf(entry.getValue()); if (!values.isEmpty()) { builder.put(key, values); size += values.size(); 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 e9e374ad1..96d3e1166 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 @@ -34,8 +34,6 @@ import me.lucko.luckperms.common.cacheddata.type.MetaAccumulator; import me.lucko.luckperms.common.inheritance.InheritanceComparator; import me.lucko.luckperms.common.inheritance.InheritanceGraph; import me.lucko.luckperms.common.node.comparator.NodeWithContextComparator; -import me.lucko.luckperms.common.node.utils.InheritanceInfo; -import me.lucko.luckperms.common.node.utils.NodeTools; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.luckperms.api.context.ContextSet; @@ -86,10 +84,9 @@ import java.util.function.Predicate; * These lookup methods initially use Lists of nodes populated with the * inheritance tree. Nodes at the start of this list have priority over nodes at * the end. Nodes higher up the tree appear at the end of these lists. In order - * to remove duplicate elements, the lists are flattened using the methods in - * {@link NodeTools}. This is significantly faster than trying to prevent - * duplicates throughout the process of accumulation, and reduces the need for - * too much caching.

+ * to remove duplicate elements, the lists are flattened. This is significantly + * faster than trying to prevent duplicates throughout the process of accumulation, + * and reduces the need for too much caching.

* *

Cached state is avoided in these instances to cut down on memory * footprint. The nodes are stored indexed to the contexts they apply in, so @@ -268,7 +265,7 @@ public abstract class PermissionHolder { return ret; } - public List getOwnGroupNodes(QueryOptions queryOptions) { + public List getOwnInheritanceNodes(QueryOptions queryOptions) { List ret = new ArrayList<>(); Comparator comparator = queryOptions.option(DataQueryOrderFunction.KEY) @@ -382,14 +379,14 @@ public abstract class PermissionHolder { * * @return true if permissions had expired and were removed */ - public boolean auditTemporaryPermissions() { - boolean transientWork = auditTemporaryPermissions(DataType.TRANSIENT); - boolean normalWork = auditTemporaryPermissions(DataType.NORMAL); + public boolean auditTemporaryNodes() { + boolean transientWork = auditTemporaryNodes(DataType.TRANSIENT); + boolean normalWork = auditTemporaryNodes(DataType.NORMAL); return transientWork || normalWork; } - private boolean auditTemporaryPermissions(DataType dataType) { + private boolean auditTemporaryNodes(DataType dataType) { ImmutableCollection before = getData(dataType).immutable().values(); Set removed = new HashSet<>(); @@ -407,15 +404,7 @@ public abstract class PermissionHolder { return work; } - /** - * Check if the holder has a permission node - * - * @param type which backing map to check - * @param node the Node to check - * @param equalityPredicate how to match - * @return a tristate, returns undefined if no match - */ - public Tristate hasPermission(DataType type, Node node, NodeEqualityPredicate equalityPredicate) { + public Tristate hasNode(DataType type, Node node, NodeEqualityPredicate equalityPredicate) { if (this.getType() == HolderType.GROUP && node instanceof InheritanceNode && ((InheritanceNode) node).getGroupName().equalsIgnoreCase(getObjectName())) { return Tristate.TRUE; } @@ -426,29 +415,8 @@ public abstract class PermissionHolder { .map(n -> Tristate.of(n.getValue())).orElse(Tristate.UNDEFINED); } - /** - * Check if the holder inherits a node - * - * @param node the Node to check - * @param equalityPredicate how to match - * @return the result of the lookup - */ - public InheritanceInfo searchForInheritedMatch(Node node, NodeEqualityPredicate equalityPredicate) { - for (Node n : resolveInheritances(QueryOptions.nonContextual())) { - if (n.equals(node, equalityPredicate)) { - return InheritanceInfo.of(n); - } - } - - return InheritanceInfo.empty(); - } - - public Tristate inheritsPermission(Node node, NodeEqualityPredicate equalityPredicate) { - return searchForInheritedMatch(node, equalityPredicate).getResult(); - } - - public DataMutateResult setPermission(DataType dataType, Node node, boolean callEvent) { - if (hasPermission(dataType, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME) != Tristate.UNDEFINED) { + public DataMutateResult setNode(DataType dataType, Node node, boolean callEvent) { + if (hasNode(dataType, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME) != Tristate.UNDEFINED) { return DataMutateResult.ALREADY_HAS; } @@ -467,7 +435,7 @@ public abstract class PermissionHolder { return DataMutateResult.SUCCESS; } - public TemporaryDataMutateResult setPermission(DataType dataType, Node node, TemporaryMergeBehaviour mergeBehaviour) { + public TemporaryDataMutateResult setNode(DataType dataType, Node node, TemporaryMergeBehaviour mergeBehaviour) { if (node.hasExpiry() && mergeBehaviour != TemporaryMergeBehaviour.FAIL_WITH_ALREADY_HAS) { Node otherMatch = getData(dataType).immutable().values().stream() .filter(NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE.equalTo(node)) @@ -507,11 +475,11 @@ public abstract class PermissionHolder { } // Fallback to the normal handling. - return new TemporaryResult(setPermission(dataType, node, true), node); + return new TemporaryResult(setNode(dataType, node, true), node); } - public DataMutateResult unsetPermission(DataType dataType, Node node) { - if (hasPermission(dataType, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE) == Tristate.UNDEFINED) { + public DataMutateResult unsetNode(DataType dataType, Node node) { + if (hasNode(dataType, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE) == Tristate.UNDEFINED) { return DataMutateResult.LACKS; } @@ -552,7 +520,7 @@ public abstract class PermissionHolder { return true; } - public boolean clearNodes(DataType dataType, ContextSet contextSet) { + public boolean clearNodes(DataType dataType, ContextSet contextSet, boolean giveDefault) { NodeMap data = getData(dataType); ImmutableCollection before = data.immutable().values(); @@ -562,6 +530,10 @@ public abstract class PermissionHolder { data.clear(contextSet); } + if (getType() == HolderType.USER && giveDefault) { + getPlugin().getUserManager().giveDefaultIfNeeded((User) this, false); + } + invalidateCache(); ImmutableCollection after = data.immutable().values(); diff --git a/common/src/main/java/me/lucko/luckperms/common/model/Track.java b/common/src/main/java/me/lucko/luckperms/common/model/Track.java index 25927778a..25b16d367 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/Track.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/Track.java @@ -37,7 +37,6 @@ import net.luckperms.api.context.ContextSet; import net.luckperms.api.model.DataMutateResult; import net.luckperms.api.model.DataType; import net.luckperms.api.node.Node; -import net.luckperms.api.node.NodeType; import net.luckperms.api.node.types.InheritanceNode; import net.luckperms.api.track.DemotionResult; import net.luckperms.api.track.PromotionResult; @@ -52,7 +51,7 @@ import java.util.concurrent.locks.ReentrantLock; import java.util.function.Predicate; import java.util.stream.Collectors; -public final class Track implements Identifiable { +public final class Track { /** * The name of the track @@ -87,11 +86,6 @@ public final class Track implements Identifiable { return this.apiDelegate; } - @Override - public String getId() { - return getName(); - } - /** * Gets an ordered list of the groups on this track * @@ -279,9 +273,7 @@ public final class Track implements Identifiable { } // find all groups that are inherited by the user in the exact contexts given and applicable to this track - List nodes = user.normalData().immutable().get(context.immutableCopy()).stream() - .filter(NodeType.INHERITANCE::matches) - .map(NodeType.INHERITANCE::cast) + List nodes = user.normalData().immutableInheritance().get(context.immutableCopy()).stream() .filter(Node::getValue) .filter(node -> containsGroup(node.getGroupName())) .distinct() @@ -303,7 +295,7 @@ public final class Track implements Identifiable { return PromotionResults.undefinedFailure(); } - user.setPermission(DataType.NORMAL, Inheritance.builder(nextGroup.getId()).withContext(context).build(), true); + user.setNode(DataType.NORMAL, Inheritance.builder(nextGroup.getName()).withContext(context).build(), true); this.plugin.getEventFactory().handleUserPromote(user, this, null, first, sender); return PromotionResults.addedToFirst(first); } @@ -329,8 +321,8 @@ public final class Track implements Identifiable { return PromotionResults.undefinedFailure(); } - user.unsetPermission(DataType.NORMAL, oldNode); - user.setPermission(DataType.NORMAL, Inheritance.builder(nextGroup.getName()).withContext(context).build(), true); + user.unsetNode(DataType.NORMAL, oldNode); + user.setNode(DataType.NORMAL, Inheritance.builder(nextGroup.getName()).withContext(context).build(), true); if (context.isEmpty() && user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME).equalsIgnoreCase(old)) { user.getPrimaryGroup().setStoredValue(nextGroup.getName()); @@ -346,9 +338,7 @@ public final class Track implements Identifiable { } // find all groups that are inherited by the user in the exact contexts given and applicable to this track - List nodes = user.normalData().immutable().get(context.immutableCopy()).stream() - .filter(NodeType.INHERITANCE::matches) - .map(NodeType.INHERITANCE::cast) + List nodes = user.normalData().immutableInheritance().get(context.immutableCopy()).stream() .filter(Node::getValue) .filter(node -> containsGroup(node.getGroupName())) .distinct() @@ -375,7 +365,7 @@ public final class Track implements Identifiable { return DemotionResults.removedFromFirst(null); } - user.unsetPermission(DataType.NORMAL, oldNode); + user.unsetNode(DataType.NORMAL, oldNode); this.plugin.getEventFactory().handleUserDemote(user, this, old, null, sender); return DemotionResults.removedFromFirst(old); } @@ -385,8 +375,8 @@ public final class Track implements Identifiable { return DemotionResults.malformedTrack(previous); } - user.unsetPermission(DataType.NORMAL, oldNode); - user.setPermission(DataType.NORMAL, Inheritance.builder(previousGroup.getName()).withContext(context).build(), true); + user.unsetNode(DataType.NORMAL, oldNode); + user.setNode(DataType.NORMAL, Inheritance.builder(previousGroup.getName()).withContext(context).build(), true); if (context.isEmpty() && user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME).equalsIgnoreCase(old)) { user.getPrimaryGroup().setStoredValue(previousGroup.getName()); 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 9b287367a..c71f7ec6e 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,25 +32,23 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.primarygroup.ContextualHolder; import me.lucko.luckperms.common.primarygroup.PrimaryGroupHolder; -import net.luckperms.api.model.DataType; - import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Optional; import java.util.UUID; -public class User extends PermissionHolder implements Identifiable { +public class User extends PermissionHolder { private final ApiUser apiDelegate = new ApiUser(this); /** * The users Mojang UUID */ - private final UUID uuid; + private final UUID uniqueId; /** * The last known username of a player */ - private @Nullable String name = null; + private @Nullable String username = null; /** * The users primary group @@ -62,21 +60,14 @@ public class User extends PermissionHolder implements Identifiable getName() { - return Optional.ofNullable(this.name); + public Optional getUsername() { + return Optional.ofNullable(this.username); } @Override public String getObjectName() { - return this.uuid.toString(); - } - - @Override - public UserIdentifier getId() { - return UserIdentifier.of(this.uuid, this.name); + return this.uniqueId.toString(); } @Override public String getFormattedDisplayName() { - return this.name != null ? this.name : this.uuid.toString(); + return this.username != null ? this.username : this.uniqueId.toString(); } @Override @@ -135,17 +121,17 @@ public class User extends PermissionHolder implements Identifiable 16) { return false; // nope } // if weak is true, only update the value in the User if it's null - if (weak && this.name != null) { + if (weak && this.username != null) { // try to update casing if they're equalIgnoreCase - if (this.name.equalsIgnoreCase(name)) { - this.name = name; + if (this.username.equalsIgnoreCase(name)) { + this.username = name; } return false; @@ -157,21 +143,21 @@ public class User extends PermissionHolder implements Identifiable { +public final class UserIdentifier { /** * Creates a {@link UserIdentifier}. * - * @param uuid the uuid of the user + * @param uniqueId the uuid of the user * @param username the username of the user, nullable * @return a new identifier */ - public static UserIdentifier of(@NonNull UUID uuid, @Nullable String username) { - Objects.requireNonNull(uuid, "uuid"); + public static UserIdentifier of(@NonNull UUID uniqueId, @Nullable String username) { + Objects.requireNonNull(uniqueId, "uuid"); if (username == null || username.equalsIgnoreCase("null") || username.isEmpty()) { username = null; } - return new UserIdentifier(uuid, username); + return new UserIdentifier(uniqueId, username); } - private final UUID uuid; + private final UUID uniqueId; private final String username; - private UserIdentifier(UUID uuid, String username) { - this.uuid = uuid; + private UserIdentifier(UUID uniqueId, String username) { + this.uniqueId = uniqueId; this.username = username; } - public UUID getUuid() { - return this.uuid; - } - - @Override - public UUID getId() { - return getUuid(); + public UUID getUniqueId() { + return this.uniqueId; } public Optional getUsername() { @@ -79,16 +74,16 @@ public final class UserIdentifier implements Identifiable { if (o == this) return true; if (!(o instanceof UserIdentifier)) return false; final UserIdentifier other = (UserIdentifier) o; - return this.uuid.equals(other.uuid); + return this.uniqueId.equals(other.uniqueId); } @Override public int hashCode() { - return this.uuid.hashCode(); + return this.uniqueId.hashCode(); } @Override public String toString() { - return "UserIdentifier(uuid=" + this.uuid + ", username=" + this.username + ")"; + return "UserIdentifier(uniqueId=" + this.uniqueId + ", username=" + this.username + ")"; } } diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/AbstractManager.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/AbstractManager.java index b1cd42584..19b8da411 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/manager/AbstractManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/AbstractManager.java @@ -28,7 +28,6 @@ package me.lucko.luckperms.common.model.manager; import com.google.common.collect.ImmutableMap; import me.lucko.luckperms.common.cache.LoadingMap; -import me.lucko.luckperms.common.model.Identifiable; import java.util.Map; @@ -39,7 +38,7 @@ import java.util.Map; * @param the super class being managed * @param the implementation class this manager is "managing" */ -public abstract class AbstractManager, T extends C> implements Manager { +public abstract class AbstractManager implements Manager { private final LoadingMap objects = LoadingMap.of(this); @@ -70,13 +69,6 @@ public abstract class AbstractManager, T extends C> } } - @Override - public void unload(C object) { - if (object != null) { - unload(object.getId()); - } - } - protected I sanitizeIdentifier(I i) { return i; } diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/Manager.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/Manager.java index 50a42f339..71da306a1 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/manager/Manager.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/Manager.java @@ -25,8 +25,6 @@ package me.lucko.luckperms.common.model.manager; -import me.lucko.luckperms.common.model.Identifiable; - import java.util.Map; import java.util.function.Function; @@ -37,7 +35,7 @@ import java.util.function.Function; * @param the super class being managed * @param the implementation class this manager is "managing" */ -public interface Manager, T extends C> extends Function { +public interface Manager extends Function { /** * Gets a map containing all cached instances held by this manager. @@ -79,11 +77,4 @@ public interface Manager, T extends C> extends Func */ void unload(I id); - /** - * Removes and unloads the object from the manager - * - * @param object The object to unload - */ - void unload(C object); - } diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java index 6c857b01a..3636119cf 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java @@ -30,7 +30,6 @@ import com.google.common.collect.ImmutableCollection; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.context.contextset.ImmutableContextSetImpl; import me.lucko.luckperms.common.model.User; -import me.lucko.luckperms.common.model.UserIdentifier; import me.lucko.luckperms.common.model.manager.AbstractManager; import me.lucko.luckperms.common.model.manager.group.GroupManager; import me.lucko.luckperms.common.node.types.Inheritance; @@ -38,7 +37,6 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import net.luckperms.api.model.DataType; import net.luckperms.api.node.Node; -import net.luckperms.api.node.NodeType; import net.luckperms.api.node.types.InheritanceNode; import java.util.Optional; @@ -47,7 +45,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.stream.Stream; -public abstract class AbstractUserManager extends AbstractManager implements UserManager { +public abstract class AbstractUserManager extends AbstractManager implements UserManager { private final LuckPermsPlugin plugin; private final UserHousekeeper housekeeper; @@ -59,18 +57,16 @@ public abstract class AbstractUserManager extends AbstractManage } @Override - public T getOrMake(UserIdentifier id) { - T ret = super.getOrMake(id); - if (id.getUsername().isPresent()) { - ret.setName(id.getUsername().get(), false); - } - return ret; + public T getOrMake(UUID id, String username) { + T user = getOrMake(id); + user.setUsername(username, false); + return user; } @Override public T getByUsername(String name) { for (T user : getAll().values()) { - Optional n = user.getName(); + Optional n = user.getUsername(); if (n.isPresent() && n.get().equalsIgnoreCase(name)) { return user; } @@ -78,32 +74,25 @@ public abstract class AbstractUserManager extends AbstractManage return null; } - @Override - public T getIfLoaded(UUID uuid) { - return getIfLoaded(UserIdentifier.of(uuid, null)); - } - @Override public boolean giveDefaultIfNeeded(User user, boolean save) { boolean work = false; // check that they are actually a member of their primary group, otherwise remove it if (this.plugin.getConfiguration().get(ConfigKeys.PRIMARY_GROUP_CALCULATION_METHOD).equals("stored")) { - String pg = user.getPrimaryGroup().getValue(); - boolean has = false; + String primaryGroup = user.getPrimaryGroup().getValue(); + boolean memberOfPrimaryGroup = false; - for (Node node : user.normalData().immutable().get(ImmutableContextSetImpl.EMPTY)) { - if (node instanceof InheritanceNode && ((InheritanceNode) node).getGroupName().equalsIgnoreCase(pg)) { - has = true; + for (InheritanceNode node : user.normalData().immutableInheritance().get(ImmutableContextSetImpl.EMPTY)) { + if (node.getGroupName().equalsIgnoreCase(primaryGroup)) { + memberOfPrimaryGroup = true; break; } } // need to find a new primary group for the user. - if (!has) { - String group = user.normalData().immutable().get(ImmutableContextSetImpl.EMPTY).stream() - .filter(NodeType.INHERITANCE::matches) - .map(NodeType.INHERITANCE::cast) + if (!memberOfPrimaryGroup) { + String group = user.normalData().immutableInheritance().get(ImmutableContextSetImpl.EMPTY).stream() .findFirst() .map(InheritanceNode::getGroupName) .orElse(null); @@ -119,21 +108,12 @@ public abstract class AbstractUserManager extends AbstractManage // check that all users are member of at least one group boolean hasGroup = false; if (user.getPrimaryGroup().getStoredValue().isPresent()) { - for (Node node : user.normalData().immutable().values()) { - if (!node.getContexts().isEmpty()) { - continue; - } - - if (node instanceof InheritanceNode) { - hasGroup = true; - break; - } - } + hasGroup = !user.normalData().immutableInheritance().get(ImmutableContextSetImpl.EMPTY).isEmpty(); } if (!hasGroup) { user.getPrimaryGroup().setStoredValue(GroupManager.DEFAULT_GROUP_NAME); - user.setPermission(DataType.NORMAL, Inheritance.builder(GroupManager.DEFAULT_GROUP_NAME).build(), false); + user.setNode(DataType.NORMAL, Inheritance.builder(GroupManager.DEFAULT_GROUP_NAME).build(), false); work = true; } @@ -151,7 +131,7 @@ public abstract class AbstractUserManager extends AbstractManage @Override public void cleanup(User user) { - this.housekeeper.cleanup(user.getId()); + this.housekeeper.cleanup(user.getUniqueId()); } @Override @@ -159,7 +139,7 @@ public abstract class AbstractUserManager extends AbstractManage return CompletableFuture.runAsync( () -> { Stream.concat( - getAll().keySet().stream().map(UserIdentifier::getUuid), + getAll().keySet().stream(), this.plugin.getBootstrap().getOnlinePlayers() ).forEach(u -> this.plugin.getStorage().loadUser(u, null).join()); }, diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/StandardUserManager.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/StandardUserManager.java index cf52b2fed..1b0f62550 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/StandardUserManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/StandardUserManager.java @@ -26,9 +26,9 @@ package me.lucko.luckperms.common.model.manager.user; import me.lucko.luckperms.common.model.User; -import me.lucko.luckperms.common.model.UserIdentifier; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; +import java.util.UUID; import java.util.concurrent.TimeUnit; public class StandardUserManager extends AbstractUserManager { @@ -40,9 +40,7 @@ public class StandardUserManager extends AbstractUserManager { } @Override - public User apply(UserIdentifier id) { - return !id.getUsername().isPresent() ? - new User(id.getUuid(), this.plugin) : - new User(id.getUuid(), id.getUsername().get(), this.plugin); + public User apply(UUID id) { + return new User(id, this.plugin); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserHousekeeper.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserHousekeeper.java index aeb2493b0..d2514d690 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserHousekeeper.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserHousekeeper.java @@ -25,7 +25,6 @@ package me.lucko.luckperms.common.model.manager.user; -import me.lucko.luckperms.common.model.UserIdentifier; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.util.ExpiringSet; @@ -67,21 +66,19 @@ public class UserHousekeeper implements Runnable { @Override public void run() { - for (UserIdentifier entry : this.userManager.getAll().keySet()) { + for (UUID entry : this.userManager.getAll().keySet()) { cleanup(entry); } } - public void cleanup(UserIdentifier identifier) { - UUID uuid = identifier.getUuid(); - + public void cleanup(UUID uuid) { // unload users which aren't online and who haven't been online (or tried to login) recently if (this.recentlyUsed.contains(uuid) || this.recentlyUsedApi.contains(uuid) || this.plugin.getBootstrap().isPlayerOnline(uuid)) { return; } // unload them - this.userManager.unload(identifier); + this.userManager.unload(uuid); } public static TimeoutSettings timeoutSettings(long duration, TimeUnit unit) { diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserManager.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserManager.java index 147dd1c2e..bda7e1f50 100644 --- a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/UserManager.java @@ -27,13 +27,14 @@ package me.lucko.luckperms.common.model.manager.user; import me.lucko.luckperms.common.calculator.PermissionCalculator; import me.lucko.luckperms.common.model.User; -import me.lucko.luckperms.common.model.UserIdentifier; import me.lucko.luckperms.common.model.manager.Manager; import java.util.UUID; import java.util.concurrent.CompletableFuture; -public interface UserManager extends Manager { +public interface UserManager extends Manager { + + T getOrMake(UUID id, String username); /** * Get a user object by name diff --git a/common/src/main/java/me/lucko/luckperms/common/node/utils/InheritanceInfo.java b/common/src/main/java/me/lucko/luckperms/common/node/utils/InheritanceInfo.java deleted file mode 100644 index 7e3b8d7ec..000000000 --- a/common/src/main/java/me/lucko/luckperms/common/node/utils/InheritanceInfo.java +++ /dev/null @@ -1,85 +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.node.utils; - -import net.luckperms.api.node.Node; -import net.luckperms.api.node.Tristate; -import net.luckperms.api.node.metadata.types.InheritanceOriginMetadata; - -import java.util.Objects; -import java.util.Optional; - -/** - * The result of an inheritance lookup - */ -public final class InheritanceInfo { - public static InheritanceInfo of(Node node) { - Objects.requireNonNull(node, "node"); - return new InheritanceInfo(Tristate.of(node.getValue()), node.metadata(InheritanceOriginMetadata.KEY).getOrigin()); - } - - public static InheritanceInfo empty() { - return new InheritanceInfo(Tristate.UNDEFINED, null); - } - - private final Tristate result; - private final String location; - - private InheritanceInfo(Tristate result, String location) { - this.result = result; - this.location = location; - } - - public Optional getLocation() { - return Optional.ofNullable(this.location); - } - - @Override - public boolean equals(Object o) { - if (o == this) return true; - if (!(o instanceof InheritanceInfo)) return false; - final InheritanceInfo other = (InheritanceInfo) o; - return this.result == other.result && this.getLocation().equals(other.getLocation()); - } - - @Override - public int hashCode() { - final int PRIME = 59; - int result = 1; - result = result * PRIME + this.result.hashCode(); - result = result * PRIME + this.getLocation().hashCode(); - return result; - } - - @Override - public String toString() { - return "InheritanceInfo(result=" + this.result + ", location=" + this.getLocation() + ")"; - } - - public Tristate getResult() { - return this.result; - } -} diff --git a/common/src/main/java/me/lucko/luckperms/common/node/utils/NodeTools.java b/common/src/main/java/me/lucko/luckperms/common/node/utils/NodeTools.java deleted file mode 100644 index b8da354c3..000000000 --- a/common/src/main/java/me/lucko/luckperms/common/node/utils/NodeTools.java +++ /dev/null @@ -1,68 +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.node.utils; - -import net.luckperms.api.node.Node; -import net.luckperms.api.node.NodeEqualityPredicate; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -public final class NodeTools { - private NodeTools() {} - - public static void removeEqual(Iterator it, NodeEqualityPredicate equalityPredicate) { - List alreadyIn = new ArrayList<>(); - - iterate: - while (it.hasNext()) { - T next = it.next(); - - for (T other : alreadyIn) { - if (next.equals(other, equalityPredicate)) { - it.remove(); - continue iterate; - } - } - - alreadyIn.add(next); - } - } - - public static void removeSamePermission(Iterator it) { - Set alreadyIn = new HashSet<>(); - while (it.hasNext()) { - T next = it.next(); - if (!alreadyIn.add(next.getKey())) { - it.remove(); - } - } - } - -} diff --git a/common/src/main/java/me/lucko/luckperms/common/node/utils/ShorthandParser.java b/common/src/main/java/me/lucko/luckperms/common/node/utils/ShorthandParser.java index 78b80ce2d..58172c7ff 100644 --- a/common/src/main/java/me/lucko/luckperms/common/node/utils/ShorthandParser.java +++ b/common/src/main/java/me/lucko/luckperms/common/node/utils/ShorthandParser.java @@ -78,8 +78,6 @@ public final class ShorthandParser { } private static Set captureResults(String s) { - s = s.replace('(', '{').replace(')', '}'); - int openingIndex = s.indexOf('{'); if (openingIndex == -1) { return null; @@ -113,7 +111,6 @@ public final class ShorthandParser { @Override public Iterable apply(String s) { - s = s.replace('|', ','); if (!s.contains(",")) { return Collections.singleton(s); } @@ -134,13 +131,19 @@ public final class ShorthandParser { @Override public Iterable apply(String s) { int index = s.indexOf("-"); - if (index == -1) return null; + if (index == -1) { + return null; + } Integer before = parseInt(s.substring(0, index)); - if (before == null) return null; + if (before == null) { + return null; + } Integer after = parseInt(s.substring(index + 1)); - if (after == null) return null; + if (after == null) { + return null; + } return IntStream.rangeClosed(before, after).mapToObj(Integer::toString).collect(Collectors.toList()); } @@ -159,13 +162,19 @@ public final class ShorthandParser { @Override public Iterable apply(String s) { int index = s.indexOf("-"); - if (index == -1) return null; + if (index == -1) { + return null; + } String before = s.substring(0, index); - if (before.length() != 1) return null; + if (before.length() != 1) { + return null; + } String after = s.substring(index + 1); - if (after.length() != 1) return null; + if (after.length() != 1) { + return null; + } return getCharRange(before.charAt(0), after.charAt(0)); } diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/bootstrap/LuckPermsBootstrap.java b/common/src/main/java/me/lucko/luckperms/common/plugin/bootstrap/LuckPermsBootstrap.java index 11e9f3b90..c2a6000fd 100644 --- a/common/src/main/java/me/lucko/luckperms/common/plugin/bootstrap/LuckPermsBootstrap.java +++ b/common/src/main/java/me/lucko/luckperms/common/plugin/bootstrap/LuckPermsBootstrap.java @@ -163,10 +163,10 @@ public interface LuckPermsBootstrap { * Gets a player object linked to this User. The returned object must be the same type * as the instance used in the platforms ContextManager * - * @param uuid the users unique id + * @param uniqueId the users unique id * @return a player object, or null, if one couldn't be found. */ - Optional getPlayer(UUID uuid); + Optional getPlayer(UUID uniqueId); /** * Lookup a uuid from a username, using the servers internal uuid cache. @@ -174,15 +174,15 @@ public interface LuckPermsBootstrap { * @param username the username to lookup * @return an optional uuid, if found */ - Optional lookupUuid(String username); + Optional lookupUniqueId(String username); /** * Lookup a username from a uuid, using the servers internal uuid cache. * - * @param uuid the uuid to lookup + * @param uniqueId the uuid to lookup * @return an optional username, if found */ - Optional lookupUsername(UUID uuid); + Optional lookupUsername(UUID uniqueId); /** * Gets the number of users online on the platform @@ -208,9 +208,9 @@ public interface LuckPermsBootstrap { /** * Checks if a user is online * - * @param uuid the users external uuid + * @param uniqueId the users external uuid * @return true if the user is online */ - boolean isPlayerOnline(UUID uuid); + boolean isPlayerOnline(UUID uniqueId); } diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/util/AbstractConnectionListener.java b/common/src/main/java/me/lucko/luckperms/common/plugin/util/AbstractConnectionListener.java index 2501bbf2b..13d311cb4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/plugin/util/AbstractConnectionListener.java +++ b/common/src/main/java/me/lucko/luckperms/common/plugin/util/AbstractConnectionListener.java @@ -56,22 +56,22 @@ public abstract class AbstractConnectionListener { return this.uniqueConnections; } - protected void recordConnection(UUID uuid) { - this.uniqueConnections.add(uuid); + protected void recordConnection(UUID uniqueId) { + this.uniqueConnections.add(uniqueId); } - public User loadUser(UUID uuid, String username) { + public User loadUser(UUID uniqueId, String username) { final long startTime = System.currentTimeMillis(); // register with the housekeeper to avoid accidental unloads - this.plugin.getUserManager().getHouseKeeper().registerUsage(uuid); + this.plugin.getUserManager().getHouseKeeper().registerUsage(uniqueId); // save uuid data. - PlayerSaveResult saveResult = this.plugin.getStorage().savePlayerData(uuid, username).join(); + PlayerSaveResult saveResult = this.plugin.getStorage().savePlayerData(uniqueId, username).join(); // fire UserFirstLogin event if (saveResult.includes(PlayerSaveResult.Outcome.CLEAN_INSERT)) { - this.plugin.getEventFactory().handleUserFirstLogin(uuid, username); + this.plugin.getEventFactory().handleUserFirstLogin(uniqueId, username); } // most likely because ip forwarding is not setup correctly @@ -80,9 +80,9 @@ public abstract class AbstractConnectionListener { Set otherUuids = saveResult.getOtherUniqueIds(); this.plugin.getLogger().warn("LuckPerms already has data for player '" + username + "' - but this data is stored under a different UUID."); - this.plugin.getLogger().warn("'" + username + "' has previously used the unique ids " + otherUuids + " but is now connecting with '" + uuid + "'"); + this.plugin.getLogger().warn("'" + username + "' has previously used the unique ids " + otherUuids + " but is now connecting with '" + uniqueId + "'"); - if (uuid.version() == 4) { + if (uniqueId.version() == 4) { if (this.plugin.getBootstrap().getType() == Platform.Type.BUNGEECORD) { this.plugin.getLogger().warn("The UUID the player is connecting with now is Mojang-assigned (type 4). This implies that BungeeCord's IP-Forwarding has not been setup correctly on one (or more) of the backend servers."); } if (this.plugin.getBootstrap().getType() == Platform.Type.VELOCITY) { @@ -92,14 +92,14 @@ public abstract class AbstractConnectionListener { this.plugin.getLogger().warn("If you're using BungeeCord/Velocity, please ensure that IP-Forwarding is setup correctly on all of your backend servers!"); } } else { - this.plugin.getLogger().warn("The UUID the player is connecting with now is NOT Mojang-assigned (type " + uuid.version() + "). This implies that THIS server is not authenticating correctly, but one (or more) of the other servers/proxies in the network are."); + this.plugin.getLogger().warn("The UUID the player is connecting with now is NOT Mojang-assigned (type " + uniqueId.version() + "). This implies that THIS server is not authenticating correctly, but one (or more) of the other servers/proxies in the network are."); this.plugin.getLogger().warn("If you're using BungeeCord/Velocity, please ensure that IP-Forwarding is setup correctly on all of your backend servers!"); } this.plugin.getLogger().warn("See here for more info: https://github.com/lucko/LuckPerms/wiki/Network-Installation#pre-setup"); } - User user = this.plugin.getStorage().loadUser(uuid, username).join(); + User user = this.plugin.getStorage().loadUser(uniqueId, username).join(); if (user == null) { throw new NullPointerException("User is null"); } @@ -112,16 +112,16 @@ public abstract class AbstractConnectionListener { return user; } - public void handleDisconnect(UUID uuid) { + public void handleDisconnect(UUID uniqueId) { // Register with the housekeeper, so the User's instance will stick // around for a bit after they disconnect - this.plugin.getUserManager().getHouseKeeper().registerUsage(uuid); + this.plugin.getUserManager().getHouseKeeper().registerUsage(uniqueId); // force a clear of transient nodes this.plugin.getBootstrap().getScheduler().executeAsync(() -> { - User user = this.plugin.getUserManager().getIfLoaded(uuid); + User user = this.plugin.getUserManager().getIfLoaded(uniqueId); if (user != null) { - user.clearNodes(DataType.TRANSIENT, null); + user.clearNodes(DataType.TRANSIENT, null, false); } }); } diff --git a/common/src/main/java/me/lucko/luckperms/common/primarygroup/ParentsByWeightHolder.java b/common/src/main/java/me/lucko/luckperms/common/primarygroup/ParentsByWeightHolder.java index 455edba86..e9f599d13 100644 --- a/common/src/main/java/me/lucko/luckperms/common/primarygroup/ParentsByWeightHolder.java +++ b/common/src/main/java/me/lucko/luckperms/common/primarygroup/ParentsByWeightHolder.java @@ -45,7 +45,7 @@ public class ParentsByWeightHolder extends ContextualHolder { @Override protected @NonNull Optional calculateValue(QueryOptions queryOptions) { Set groups = new LinkedHashSet<>(); - for (InheritanceNode node : this.user.getOwnGroupNodes(queryOptions)) { + for (InheritanceNode node : this.user.getOwnInheritanceNodes(queryOptions)) { Group group = this.user.getPlugin().getGroupManager().getIfLoaded(node.getGroupName()); if (group != null) { groups.add(group); diff --git a/common/src/main/java/me/lucko/luckperms/common/sender/AbstractSender.java b/common/src/main/java/me/lucko/luckperms/common/sender/AbstractSender.java index cddf98cbe..c2e6bd3b7 100644 --- a/common/src/main/java/me/lucko/luckperms/common/sender/AbstractSender.java +++ b/common/src/main/java/me/lucko/luckperms/common/sender/AbstractSender.java @@ -48,14 +48,14 @@ public final class AbstractSender implements Sender { private final SenderFactory factory; private final WeakReference sender; - private final UUID uuid; + private final UUID uniqueId; private final String name; AbstractSender(LuckPermsPlugin platform, SenderFactory factory, T t) { this.platform = platform; this.factory = factory; this.sender = new WeakReference<>(t); - this.uuid = factory.getUuid(t); + this.uniqueId = factory.getUniqueId(t); this.name = factory.getName(t); } @@ -65,8 +65,8 @@ public final class AbstractSender implements Sender { } @Override - public UUID getUuid() { - return this.uuid; + public UUID getUniqueId() { + return this.uniqueId; } @Override @@ -135,11 +135,11 @@ public final class AbstractSender implements Sender { if (o == this) return true; if (!(o instanceof AbstractSender)) return false; final AbstractSender that = (AbstractSender) o; - return this.getUuid().equals(that.getUuid()); + return this.getUniqueId().equals(that.getUniqueId()); } @Override public int hashCode() { - return this.uuid.hashCode(); + return this.uniqueId.hashCode(); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/sender/DummySender.java b/common/src/main/java/me/lucko/luckperms/common/sender/DummySender.java index fdcf645e6..6842c3199 100644 --- a/common/src/main/java/me/lucko/luckperms/common/sender/DummySender.java +++ b/common/src/main/java/me/lucko/luckperms/common/sender/DummySender.java @@ -36,12 +36,12 @@ import java.util.UUID; public abstract class DummySender implements Sender { private final LuckPermsPlugin platform; - private final UUID uuid; + private final UUID uniqueId; private final String name; - public DummySender(LuckPermsPlugin plugin, UUID uuid, String name) { + public DummySender(LuckPermsPlugin plugin, UUID uniqueId, String name) { this.platform = plugin; - this.uuid = uuid; + this.uniqueId = uniqueId; this.name = name; } @@ -77,8 +77,8 @@ public abstract class DummySender implements Sender { } @Override - public UUID getUuid() { - return this.uuid; + public UUID getUniqueId() { + return this.uniqueId; } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/sender/Sender.java b/common/src/main/java/me/lucko/luckperms/common/sender/Sender.java index 2788b4ce4..9da6fd634 100644 --- a/common/src/main/java/me/lucko/luckperms/common/sender/Sender.java +++ b/common/src/main/java/me/lucko/luckperms/common/sender/Sender.java @@ -107,7 +107,7 @@ public interface Sender { * * @return the sender's uuid */ - UUID getUuid(); + UUID getUniqueId(); /** * Send a message to the Sender. @@ -157,7 +157,7 @@ public interface Sender { * @return if the sender is the console */ default boolean isConsole() { - return CONSOLE_UUID.equals(getUuid()) || IMPORT_UUID.equals(getUuid()); + return CONSOLE_UUID.equals(getUniqueId()) || IMPORT_UUID.equals(getUniqueId()); } /** @@ -166,7 +166,7 @@ public interface Sender { * @return if the sender is an import process */ default boolean isImport() { - return IMPORT_UUID.equals(getUuid()); + return IMPORT_UUID.equals(getUniqueId()); } /** diff --git a/common/src/main/java/me/lucko/luckperms/common/sender/SenderFactory.java b/common/src/main/java/me/lucko/luckperms/common/sender/SenderFactory.java index 1b1ee50fe..6fea70c1a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/sender/SenderFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/sender/SenderFactory.java @@ -50,7 +50,7 @@ public abstract class SenderFactory { return this.plugin; } - protected abstract UUID getUuid(T t); + protected abstract UUID getUniqueId(T t); protected abstract String getName(T t); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/Storage.java b/common/src/main/java/me/lucko/luckperms/common/storage/Storage.java index d1c01e093..3bfc3032d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/Storage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/Storage.java @@ -132,9 +132,9 @@ public class Storage { return makeFuture(() -> this.implementation.applyBulkUpdate(bulkUpdate)); } - public CompletableFuture loadUser(UUID uuid, String username) { + public CompletableFuture loadUser(UUID uniqueId, String username) { return makeFuture(() -> { - User user = this.implementation.loadUser(uuid, username); + User user = this.implementation.loadUser(uniqueId, username); if (user != null) { this.plugin.getEventFactory().handleUserLoad(user); } @@ -242,21 +242,21 @@ public class Storage { }); } - public CompletableFuture savePlayerData(UUID uuid, String username) { + public CompletableFuture savePlayerData(UUID uniqueId, String username) { return makeFuture(() -> { - PlayerSaveResult result = this.implementation.savePlayerData(uuid, username); + PlayerSaveResult result = this.implementation.savePlayerData(uniqueId, username); if (result != null) { - this.plugin.getEventFactory().handlePlayerDataSave(uuid, username, result); + this.plugin.getEventFactory().handlePlayerDataSave(uniqueId, username, result); } return result; }); } - public CompletableFuture getPlayerUuid(String username) { - return makeFuture(() -> this.implementation.getPlayerUuid(username)); + public CompletableFuture getPlayerUniqueId(String username) { + return makeFuture(() -> this.implementation.getPlayerUniqueId(username)); } - public CompletableFuture getPlayerName(UUID uuid) { - return makeFuture(() -> this.implementation.getPlayerName(uuid)); + public CompletableFuture getPlayerName(UUID uniqueId) { + return makeFuture(() -> this.implementation.getPlayerName(uniqueId)); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/StorageImplementation.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/StorageImplementation.java index 4db75097a..d8c15b696 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/StorageImplementation.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/StorageImplementation.java @@ -65,7 +65,7 @@ public interface StorageImplementation { void applyBulkUpdate(BulkUpdate bulkUpdate) throws Exception; - User loadUser(UUID uuid, String username) throws Exception; + User loadUser(UUID uniqueId, String username) throws Exception; void saveUser(User user) throws Exception; @@ -95,9 +95,9 @@ public interface StorageImplementation { void deleteTrack(Track track) throws Exception; - PlayerSaveResult savePlayerData(UUID uuid, String username) throws Exception; + PlayerSaveResult savePlayerData(UUID uniqueId, String username) throws Exception; - @Nullable UUID getPlayerUuid(String username) throws Exception; + @Nullable UUID getPlayerUniqueId(String username) throws Exception; - @Nullable String getPlayerName(UUID uuid) throws Exception; + @Nullable String getPlayerName(UUID uniqueId) throws Exception; } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java index e5b5f020f..19c989cc2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java @@ -36,7 +36,6 @@ import me.lucko.luckperms.common.context.contextset.ImmutableContextSetImpl; 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.model.UserIdentifier; import me.lucko.luckperms.common.model.manager.group.GroupManager; import me.lucko.luckperms.common.node.factory.NodeBuilders; import me.lucko.luckperms.common.node.types.Inheritance; @@ -196,35 +195,35 @@ public abstract class AbstractConfigurateStorage implements StorageImplementatio } @Override - public User loadUser(UUID uuid, String username) { - User user = this.plugin.getUserManager().getOrMake(UserIdentifier.of(uuid, username)); + public User loadUser(UUID uniqueId, String username) { + User user = this.plugin.getUserManager().getOrMake(uniqueId, username); user.getIoLock().lock(); try { - ConfigurationNode object = readFile(StorageLocation.USER, uuid.toString()); + ConfigurationNode object = readFile(StorageLocation.USER, uniqueId.toString()); if (object != null) { String name = object.getNode("name").getString(); user.getPrimaryGroup().setStoredValue(object.getNode(this.loader instanceof JsonLoader ? "primaryGroup" : "primary-group").getString()); user.setNodes(DataType.NORMAL, readNodes(object)); - user.setName(name, true); + user.setUsername(name, true); boolean save = this.plugin.getUserManager().giveDefaultIfNeeded(user, false); - if (user.getName().isPresent() && (name == null || !user.getName().get().equalsIgnoreCase(name))) { + if (user.getUsername().isPresent() && (name == null || !user.getUsername().get().equalsIgnoreCase(name))) { save = true; } - if (save | user.auditTemporaryPermissions()) { + if (save | user.auditTemporaryNodes()) { saveUser(user); } } else { if (this.plugin.getUserManager().shouldSave(user)) { - user.clearEnduringNodes(); + user.clearNodes(DataType.NORMAL, null, true); user.getPrimaryGroup().setStoredValue(null); this.plugin.getUserManager().giveDefaultIfNeeded(user, false); } } } catch (Exception e) { - throw reportException(uuid.toString(), e); + throw reportException(uniqueId.toString(), e); } finally { user.getIoLock().unlock(); } @@ -236,20 +235,20 @@ public abstract class AbstractConfigurateStorage implements StorageImplementatio user.getIoLock().lock(); try { if (!this.plugin.getUserManager().shouldSave(user)) { - saveFile(StorageLocation.USER, user.getUuid().toString(), null); + saveFile(StorageLocation.USER, user.getUniqueId().toString(), null); } else { ConfigurationNode data = SimpleConfigurationNode.root(); if (this instanceof SeparatedConfigurateStorage) { - data.getNode("uuid").setValue(user.getUuid().toString()); + data.getNode("uuid").setValue(user.getUniqueId().toString()); } - data.getNode("name").setValue(user.getName().orElse("null")); + data.getNode("name").setValue(user.getUsername().orElse("null")); data.getNode(this.loader instanceof JsonLoader ? "primaryGroup" : "primary-group").setValue(user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME)); writeNodes(data, user.normalData().immutable().values()); - saveFile(StorageLocation.USER, user.getUuid().toString(), data); + saveFile(StorageLocation.USER, user.getUniqueId().toString(), data); } } catch (Exception e) { - throw reportException(user.getUuid().toString(), e); + throw reportException(user.getUniqueId().toString(), e); } finally { user.getIoLock().unlock(); } @@ -340,7 +339,7 @@ public abstract class AbstractConfigurateStorage implements StorageImplementatio } finally { group.getIoLock().unlock(); } - this.plugin.getGroupManager().unload(group); + this.plugin.getGroupManager().unload(group.getName()); } @Override @@ -435,22 +434,22 @@ public abstract class AbstractConfigurateStorage implements StorageImplementatio } finally { track.getIoLock().unlock(); } - this.plugin.getTrackManager().unload(track); + this.plugin.getTrackManager().unload(track.getName()); } @Override - public PlayerSaveResult savePlayerData(UUID uuid, String username) { - return this.uuidCache.addMapping(uuid, username); + public PlayerSaveResult savePlayerData(UUID uniqueId, String username) { + return this.uuidCache.addMapping(uniqueId, username); } @Override - public UUID getPlayerUuid(String username) { + public UUID getPlayerUniqueId(String username) { return this.uuidCache.lookupUuid(username); } @Override - public String getPlayerName(UUID uuid) { - return this.uuidCache.lookupUsername(uuid); + public String getPlayerName(UUID uniqueId) { + return this.uuidCache.lookupUsername(uniqueId); } private static ImmutableContextSet readContexts(ConfigurationNode attributes) { diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/CombinedConfigurateStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/CombinedConfigurateStorage.java index 3b790e251..13b3e4660 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/CombinedConfigurateStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/CombinedConfigurateStorage.java @@ -27,6 +27,8 @@ package me.lucko.luckperms.common.storage.implementation.file; import me.lucko.luckperms.common.bulkupdate.BulkUpdate; import me.lucko.luckperms.common.bulkupdate.comparison.Constraint; +import me.lucko.luckperms.common.model.Group; +import me.lucko.luckperms.common.model.Track; import me.lucko.luckperms.common.model.manager.group.GroupManager; import me.lucko.luckperms.common.model.manager.track.TrackManager; import me.lucko.luckperms.common.node.model.HeldNodeImpl; @@ -312,7 +314,8 @@ public class CombinedConfigurateStorage extends AbstractConfigurateStorage { GroupManager gm = this.plugin.getGroupManager(); gm.getAll().values().stream() - .filter(g -> !groups.contains(g.getName())) + .map(Group::getName) + .filter(g -> !groups.contains(g)) .forEach(gm::unload); } @@ -366,7 +369,8 @@ public class CombinedConfigurateStorage extends AbstractConfigurateStorage { TrackManager tm = this.plugin.getTrackManager(); tm.getAll().values().stream() - .filter(t -> !tracks.contains(t.getName())) + .map(Track::getName) + .filter(t -> !tracks.contains(t)) .forEach(tm::unload); } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/SeparatedConfigurateStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/SeparatedConfigurateStorage.java index 633946f25..c2bae9f7e 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/SeparatedConfigurateStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/SeparatedConfigurateStorage.java @@ -27,6 +27,8 @@ package me.lucko.luckperms.common.storage.implementation.file; import me.lucko.luckperms.common.bulkupdate.BulkUpdate; import me.lucko.luckperms.common.bulkupdate.comparison.Constraint; +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.model.manager.group.GroupManager; import me.lucko.luckperms.common.model.manager.track.TrackManager; @@ -305,7 +307,8 @@ public class SeparatedConfigurateStorage extends AbstractConfigurateStorage { GroupManager gm = this.plugin.getGroupManager(); gm.getAll().values().stream() - .filter(g -> !groups.contains(g.getName())) + .map(Group::getName) + .filter(g -> !groups.contains(g)) .forEach(gm::unload); } @@ -361,7 +364,8 @@ public class SeparatedConfigurateStorage extends AbstractConfigurateStorage { TrackManager tm = this.plugin.getTrackManager(); tm.getAll().values().stream() - .filter(t -> !tracks.contains(t.getName())) + .map(Track::getName) + .filter(t -> !tracks.contains(t)) .forEach(tm::unload); } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/mongodb/MongoStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/mongodb/MongoStorage.java index 78e7f5a5b..c0b70120c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/mongodb/MongoStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/mongodb/MongoStorage.java @@ -45,7 +45,6 @@ import me.lucko.luckperms.common.context.contextset.MutableContextSetImpl; 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.model.UserIdentifier; import me.lucko.luckperms.common.model.manager.group.GroupManager; import me.lucko.luckperms.common.model.manager.track.TrackManager; import me.lucko.luckperms.common.node.factory.NodeBuilders; @@ -297,12 +296,12 @@ public class MongoStorage implements StorageImplementation { } @Override - public User loadUser(UUID uuid, String username) { - User user = this.plugin.getUserManager().getOrMake(UserIdentifier.of(uuid, username)); + public User loadUser(UUID uniqueId, String username) { + User user = this.plugin.getUserManager().getOrMake(uniqueId, username); user.getIoLock().lock(); try { MongoCollection c = this.database.getCollection(this.prefix + "users"); - try (MongoCursor cursor = c.find(new Document("_id", user.getUuid())).iterator()) { + try (MongoCursor cursor = c.find(new Document("_id", user.getUniqueId())).iterator()) { if (cursor.hasNext()) { // User exists, let's load. Document d = cursor.next(); @@ -310,19 +309,19 @@ public class MongoStorage implements StorageImplementation { String name = d.getString("name"); user.getPrimaryGroup().setStoredValue(d.getString("primaryGroup")); user.setNodes(DataType.NORMAL, nodesFromDoc(d)); - user.setName(name, true); + user.setUsername(name, true); boolean save = this.plugin.getUserManager().giveDefaultIfNeeded(user, false); - if (user.getName().isPresent() && (name == null || !user.getName().get().equalsIgnoreCase(name))) { + if (user.getUsername().isPresent() && (name == null || !user.getUsername().get().equalsIgnoreCase(name))) { save = true; } - if (save | user.auditTemporaryPermissions()) { - c.replaceOne(new Document("_id", user.getUuid()), userToDoc(user)); + if (save | user.auditTemporaryNodes()) { + c.replaceOne(new Document("_id", user.getUniqueId()), userToDoc(user)); } } else { if (this.plugin.getUserManager().shouldSave(user)) { - user.clearEnduringNodes(); + user.clearNodes(DataType.NORMAL, null, true); user.getPrimaryGroup().setStoredValue(null); this.plugin.getUserManager().giveDefaultIfNeeded(user, false); } @@ -340,9 +339,9 @@ public class MongoStorage implements StorageImplementation { try { MongoCollection c = this.database.getCollection(this.prefix + "users"); if (!this.plugin.getUserManager().shouldSave(user)) { - c.deleteOne(new Document("_id", user.getUuid())); + c.deleteOne(new Document("_id", user.getUniqueId())); } else { - c.replaceOne(new Document("_id", user.getUuid()), userToDoc(user), new ReplaceOptions().upsert(true)); + c.replaceOne(new Document("_id", user.getUniqueId()), userToDoc(user), new ReplaceOptions().upsert(true)); } } finally { user.getIoLock().unlock(); @@ -459,7 +458,8 @@ public class MongoStorage implements StorageImplementation { GroupManager gm = this.plugin.getGroupManager(); gm.getAll().values().stream() - .filter(g -> !groups.contains(g.getName())) + .map(Group::getName) + .filter(g -> !groups.contains(g)) .forEach(gm::unload); } @@ -585,7 +585,8 @@ public class MongoStorage implements StorageImplementation { TrackManager tm = this.plugin.getTrackManager(); tm.getAll().values().stream() - .filter(t -> !tracks.contains(t.getName())) + .map(Track::getName) + .filter(t -> !tracks.contains(t)) .forEach(tm::unload); } @@ -612,16 +613,16 @@ public class MongoStorage implements StorageImplementation { } @Override - public PlayerSaveResult savePlayerData(UUID uuid, String username) { + public PlayerSaveResult savePlayerData(UUID uniqueId, String username) { username = username.toLowerCase(); MongoCollection c = this.database.getCollection(this.prefix + "uuid"); // find any existing mapping - String oldUsername = getPlayerName(uuid); + String oldUsername = getPlayerName(uniqueId); // do the insert if (!username.equalsIgnoreCase(oldUsername)) { - c.replaceOne(new Document("_id", uuid), new Document("_id", uuid).append("name", username), new ReplaceOptions().upsert(true)); + c.replaceOne(new Document("_id", uniqueId), new Document("_id", uniqueId).append("name", username), new ReplaceOptions().upsert(true)); } PlayerSaveResultImpl result = PlayerSaveResultImpl.determineBaseResult(username, oldUsername); @@ -632,7 +633,7 @@ public class MongoStorage implements StorageImplementation { conflicting.add(cursor.next().get("_id", UUID.class)); } } - conflicting.remove(uuid); + conflicting.remove(uniqueId); if (!conflicting.isEmpty()) { // remove the mappings for conflicting uuids @@ -644,7 +645,7 @@ public class MongoStorage implements StorageImplementation { } @Override - public UUID getPlayerUuid(String username) { + public UUID getPlayerUniqueId(String username) { MongoCollection c = this.database.getCollection(this.prefix + "uuid"); Document doc = c.find(new Document("name", username.toLowerCase())).first(); if (doc != null) { @@ -654,9 +655,9 @@ public class MongoStorage implements StorageImplementation { } @Override - public String getPlayerName(UUID uuid) { + public String getPlayerName(UUID uniqueId) { MongoCollection c = this.database.getCollection(this.prefix + "uuid"); - Document doc = c.find(new Document("_id", uuid)).first(); + Document doc = c.find(new Document("_id", uniqueId)).first(); if (doc != null) { return doc.get("name", String.class); } @@ -668,8 +669,8 @@ public class MongoStorage implements StorageImplementation { .map(MongoStorage::nodeToDoc) .collect(Collectors.toList()); - return new Document("_id", user.getUuid()) - .append("name", user.getName().orElse("null")) + return new Document("_id", user.getUniqueId()) + .append("name", user.getUsername().orElse("null")) .append("primaryGroup", user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME)) .append("permissions", nodes); } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/split/SplitStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/split/SplitStorage.java index 43e4662b1..b72997838 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/split/SplitStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/split/SplitStorage.java @@ -134,8 +134,8 @@ public class SplitStorage implements StorageImplementation { } @Override - public User loadUser(UUID uuid, String username) throws Exception { - return implFor(SplitStorageType.USER).loadUser(uuid, username); + public User loadUser(UUID uniqueId, String username) throws Exception { + return implFor(SplitStorageType.USER).loadUser(uniqueId, username); } @Override @@ -209,17 +209,17 @@ public class SplitStorage implements StorageImplementation { } @Override - public PlayerSaveResult savePlayerData(UUID uuid, String username) throws Exception { - return implFor(SplitStorageType.UUID).savePlayerData(uuid, username); + public PlayerSaveResult savePlayerData(UUID uniqueId, String username) throws Exception { + return implFor(SplitStorageType.UUID).savePlayerData(uniqueId, username); } @Override - public UUID getPlayerUuid(String username) throws Exception { - return implFor(SplitStorageType.UUID).getPlayerUuid(username); + public UUID getPlayerUniqueId(String username) throws Exception { + return implFor(SplitStorageType.UUID).getPlayerUniqueId(username); } @Override - public String getPlayerName(UUID uuid) throws Exception { - return implFor(SplitStorageType.UUID).getPlayerName(uuid); + public String getPlayerName(UUID uniqueId) throws Exception { + return implFor(SplitStorageType.UUID).getPlayerName(uniqueId); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlNode.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlNode.java index 8ae88b1c9..9d9f4fa7b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlNode.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlNode.java @@ -25,7 +25,9 @@ package me.lucko.luckperms.common.storage.implementation.sql; +import me.lucko.luckperms.common.context.ContextSetJsonSerializer; import me.lucko.luckperms.common.node.factory.NodeBuilders; +import me.lucko.luckperms.common.util.gson.GsonProvider; import net.luckperms.api.context.ContextSet; import net.luckperms.api.context.DefaultContextKeys; @@ -76,7 +78,15 @@ public final class SqlNode { long expiry = node.hasExpiry() ? node.getExpiry().getEpochSecond() : 0L; - return new SqlNode(node.getKey(), node.getValue(), server, world, expiry, contexts.immutableCopy()); + return new SqlNode(node.getKey(), node.getValue(), server, world, expiry, contexts.immutableCopy(), -1); + } + + public static SqlNode fromSqlFields(String permission, boolean value, String server, String world, long expiry, String contexts) { + return new SqlNode(permission, value, server, world, expiry, ContextSetJsonSerializer.deserializeContextSet(GsonProvider.normal(), contexts).immutableCopy(), -1); + } + + public static SqlNode fromSqlFields(long sqlId, String permission, boolean value, String server, String world, long expiry, String contexts) { + return new SqlNode(permission, value, server, world, expiry, ContextSetJsonSerializer.deserializeContextSet(GsonProvider.normal(), contexts).immutableCopy(), sqlId); } private final String permission; @@ -85,14 +95,16 @@ public final class SqlNode { private final String world; private final long expiry; private final ImmutableContextSet contexts; + private final long sqlId; - public SqlNode(String permission, boolean value, String server, String world, long expiry, ImmutableContextSet contexts) { + private SqlNode(String permission, boolean value, String server, String world, long expiry, ImmutableContextSet contexts, long sqlId) { this.permission = Objects.requireNonNull(permission, "permission"); this.value = value; this.server = Objects.requireNonNull(server, "server"); this.world = Objects.requireNonNull(world, "world"); this.expiry = expiry; this.contexts = Objects.requireNonNull(contexts, "contexts"); + this.sqlId = sqlId; } public Node toNode() { @@ -129,6 +141,13 @@ public final class SqlNode { return this.contexts; } + public long getSqlId() { + if (this.sqlId == -1) { + throw new IllegalStateException("sql id not set"); + } + return this.sqlId; + } + @Override public boolean equals(Object o) { if (o == this) return true; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java index 2f324f945..a5ef39e86 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java @@ -37,7 +37,6 @@ import me.lucko.luckperms.common.context.ContextSetJsonSerializer; 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.model.UserIdentifier; import me.lucko.luckperms.common.model.manager.group.GroupManager; import me.lucko.luckperms.common.model.manager.track.TrackManager; import me.lucko.luckperms.common.node.model.HeldNodeImpl; @@ -81,8 +80,8 @@ import java.util.stream.Collectors; public class SqlStorage implements StorageImplementation { private static final Type LIST_STRING_TYPE = new TypeToken>(){}.getType(); - private static final String USER_PERMISSIONS_SELECT = "SELECT permission, value, server, world, expiry, contexts FROM {prefix}user_permissions WHERE uuid=?"; - private static final String USER_PERMISSIONS_DELETE_SPECIFIC = "DELETE FROM {prefix}user_permissions WHERE uuid=? AND permission=? AND value=? AND server=? AND world=? AND expiry=? AND contexts=?"; + private static final String USER_PERMISSIONS_SELECT = "SELECT id, permission, value, server, world, expiry, contexts FROM {prefix}user_permissions WHERE uuid=?"; + private static final String USER_PERMISSIONS_DELETE_SPECIFIC = "DELETE FROM {prefix}user_permissions WHERE id=?"; private static final String USER_PERMISSIONS_DELETE = "DELETE FROM {prefix}user_permissions WHERE uuid=?"; private static final String USER_PERMISSIONS_INSERT = "INSERT INTO {prefix}user_permissions(uuid, permission, value, server, world, expiry, contexts) VALUES(?, ?, ?, ?, ?, ?, ?)"; private static final String USER_PERMISSIONS_SELECT_DISTINCT = "SELECT DISTINCT uuid FROM {prefix}user_permissions"; @@ -98,9 +97,9 @@ public class SqlStorage implements StorageImplementation { private static final String PLAYER_SELECT_PRIMARY_GROUP_BY_UUID = "SELECT primary_group FROM {prefix}players WHERE uuid=? LIMIT 1"; private static final String PLAYER_UPDATE_PRIMARY_GROUP_BY_UUID = "UPDATE {prefix}players SET primary_group=? WHERE uuid=?"; - private static final String GROUP_PERMISSIONS_SELECT = "SELECT permission, value, server, world, expiry, contexts FROM {prefix}group_permissions WHERE name=?"; + private static final String GROUP_PERMISSIONS_SELECT = "SELECT id, permission, value, server, world, expiry, contexts FROM {prefix}group_permissions WHERE name=?"; + private static final String GROUP_PERMISSIONS_DELETE_SPECIFIC = "DELETE FROM {prefix}group_permissions WHERE id=?"; private static final String GROUP_PERMISSIONS_DELETE = "DELETE FROM {prefix}group_permissions WHERE name=?"; - private static final String GROUP_PERMISSIONS_DELETE_SPECIFIC = "DELETE FROM {prefix}group_permissions WHERE name=? AND permission=? AND value=? AND server=? AND world=? AND expiry=? AND contexts=?"; private static final String GROUP_PERMISSIONS_INSERT = "INSERT INTO {prefix}group_permissions(name, permission, value, server, world, expiry, contexts) VALUES(?, ?, ?, ?, ?, ?, ?)"; private static final String GROUP_PERMISSIONS_SELECT_PERMISSION = "SELECT name, permission, value, server, world, expiry, contexts FROM {prefix}group_permissions WHERE "; @@ -324,8 +323,8 @@ public class SqlStorage implements StorageImplementation { } @Override - public User loadUser(UUID uuid, String username) throws SQLException { - User user = this.plugin.getUserManager().getOrMake(UserIdentifier.of(uuid, username)); + public User loadUser(UUID uniqueId, String username) throws SQLException { + User user = this.plugin.getUserManager().getOrMake(uniqueId, username); user.getIoLock().lock(); try { List data = new ArrayList<>(); @@ -335,7 +334,7 @@ public class SqlStorage implements StorageImplementation { // Collect user permissions try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(USER_PERMISSIONS_SELECT))) { - ps.setString(1, user.getUuid().toString()); + ps.setString(1, user.getUniqueId().toString()); try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { @@ -345,7 +344,7 @@ public class SqlStorage implements StorageImplementation { String world = rs.getString("world"); long expiry = rs.getLong("expiry"); String contexts = rs.getString("contexts"); - data.add(deserializeNode(permission, value, server, world, expiry, contexts)); + data.add(SqlNode.fromSqlFields(permission, value, server, world, expiry, contexts)); } } } @@ -354,7 +353,7 @@ public class SqlStorage implements StorageImplementation { // Collect user meta (username & primary group) try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_SELECT_BY_UUID))) { - ps.setString(1, user.getUuid().toString()); + ps.setString(1, user.getUniqueId().toString()); try (ResultSet rs = ps.executeQuery()) { if (rs.next()) { @@ -372,7 +371,7 @@ public class SqlStorage implements StorageImplementation { user.getPrimaryGroup().setStoredValue(primaryGroup); // Update their username to what was in the storage if the one in the local instance is null - user.setName(userName, true); + user.setUsername(userName, true); // If the user has any data in storage if (!data.isEmpty()) { @@ -380,7 +379,7 @@ public class SqlStorage implements StorageImplementation { user.setNodes(DataType.NORMAL, nodes); // Save back to the store if data they were given any defaults or had permissions expire - if (this.plugin.getUserManager().giveDefaultIfNeeded(user, false) | user.auditTemporaryPermissions()) { + if (this.plugin.getUserManager().giveDefaultIfNeeded(user, false) | user.auditTemporaryNodes()) { // This should be fine, as the lock will be acquired by the same thread. saveUser(user); } @@ -388,7 +387,7 @@ public class SqlStorage implements StorageImplementation { } else { // User has no data in storage. if (this.plugin.getUserManager().shouldSave(user)) { - user.clearEnduringNodes(); + user.clearNodes(DataType.NORMAL, null, true); user.getPrimaryGroup().setStoredValue(null); this.plugin.getUserManager().giveDefaultIfNeeded(user, false); } @@ -407,12 +406,12 @@ public class SqlStorage implements StorageImplementation { if (!this.plugin.getUserManager().shouldSave(user)) { try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(USER_PERMISSIONS_DELETE))) { - ps.setString(1, user.getUuid().toString()); + ps.setString(1, user.getUniqueId().toString()); ps.execute(); } try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_UPDATE_PRIMARY_GROUP_BY_UUID))) { ps.setString(1, GroupManager.DEFAULT_GROUP_NAME); - ps.setString(2, user.getUuid().toString()); + ps.setString(2, user.getUniqueId().toString()); ps.execute(); } } @@ -423,17 +422,18 @@ public class SqlStorage implements StorageImplementation { Set remote = new HashSet<>(); try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(USER_PERMISSIONS_SELECT))) { - ps.setString(1, user.getUuid().toString()); + ps.setString(1, user.getUniqueId().toString()); try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { + long id = rs.getLong("id"); String permission = rs.getString("permission"); boolean value = rs.getBoolean("value"); String server = rs.getString("server"); String world = rs.getString("world"); long expiry = rs.getLong("expiry"); String contexts = rs.getString("contexts"); - remote.add(deserializeNode(permission, value, server, world, expiry, contexts)); + remote.add(SqlNode.fromSqlFields(id, permission, value, server, world, expiry, contexts)); } } } @@ -450,13 +450,7 @@ public class SqlStorage implements StorageImplementation { try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(USER_PERMISSIONS_DELETE_SPECIFIC))) { for (SqlNode nd : toRemove) { - ps.setString(1, user.getUuid().toString()); - ps.setString(2, nd.getPermission()); - ps.setBoolean(3, nd.getValue()); - ps.setString(4, nd.getServer()); - ps.setString(5, nd.getWorld()); - ps.setLong(6, nd.getExpiry()); - ps.setString(7, GsonProvider.normal().toJson(ContextSetJsonSerializer.serializeContextSet(nd.getContexts()))); + ps.setLong(1, nd.getSqlId()); ps.addBatch(); } ps.executeBatch(); @@ -468,7 +462,7 @@ public class SqlStorage implements StorageImplementation { try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(USER_PERMISSIONS_INSERT))) { for (SqlNode nd : toAdd) { - ps.setString(1, user.getUuid().toString()); + ps.setString(1, user.getUniqueId().toString()); ps.setString(2, nd.getPermission()); ps.setBoolean(3, nd.getValue()); ps.setString(4, nd.getServer()); @@ -486,7 +480,7 @@ public class SqlStorage implements StorageImplementation { boolean hasPrimaryGroupSaved; try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_SELECT_PRIMARY_GROUP_BY_UUID))) { - ps.setString(1, user.getUuid().toString()); + ps.setString(1, user.getUniqueId().toString()); try (ResultSet rs = ps.executeQuery()) { hasPrimaryGroupSaved = rs.next(); } @@ -496,14 +490,14 @@ public class SqlStorage implements StorageImplementation { // update try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_UPDATE_PRIMARY_GROUP_BY_UUID))) { ps.setString(1, user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME)); - ps.setString(2, user.getUuid().toString()); + ps.setString(2, user.getUniqueId().toString()); ps.execute(); } } else { // insert try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_INSERT))) { - ps.setString(1, user.getUuid().toString()); - ps.setString(2, user.getName().orElse("null").toLowerCase()); + ps.setString(1, user.getUniqueId().toString()); + ps.setString(2, user.getUsername().orElse("null").toLowerCase()); ps.setString(3, user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME)); ps.execute(); } @@ -549,7 +543,7 @@ public class SqlStorage implements StorageImplementation { long expiry = rs.getLong("expiry"); String contexts = rs.getString("contexts"); - SqlNode data = deserializeNode(perm, value, server, world, expiry, contexts); + SqlNode data = SqlNode.fromSqlFields(perm, value, server, world, expiry, contexts); held.add(HeldNodeImpl.of(holder, data.toNode())); } } @@ -622,7 +616,7 @@ public class SqlStorage implements StorageImplementation { String world = rs.getString("world"); long expiry = rs.getLong("expiry"); String contexts = rs.getString("contexts"); - data.add(deserializeNode(permission, value, server, world, expiry, contexts)); + data.add(SqlNode.fromSqlFields(permission, value, server, world, expiry, contexts)); } } } @@ -632,7 +626,7 @@ public class SqlStorage implements StorageImplementation { Set nodes = data.stream().map(SqlNode::toNode).collect(Collectors.toSet()); group.setNodes(DataType.NORMAL, nodes); } else { - group.clearNodes(DataType.NORMAL, null); + group.clearNodes(DataType.NORMAL, null, false); } } finally { group.getIoLock().unlock(); @@ -669,7 +663,8 @@ public class SqlStorage implements StorageImplementation { GroupManager gm = this.plugin.getGroupManager(); gm.getAll().values().stream() - .filter(g -> !groups.contains(g.getName())) + .map(Group::getName) + .filter(g -> !groups.contains(g)) .forEach(gm::unload); } @@ -696,13 +691,14 @@ public class SqlStorage implements StorageImplementation { try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { + long id = rs.getLong("id"); String permission = rs.getString("permission"); boolean value = rs.getBoolean("value"); String server = rs.getString("server"); String world = rs.getString("world"); long expiry = rs.getLong("expiry"); String contexts = rs.getString("contexts"); - remote.add(deserializeNode(permission, value, server, world, expiry, contexts)); + remote.add(SqlNode.fromSqlFields(id, permission, value, server, world, expiry, contexts)); } } } @@ -719,13 +715,7 @@ public class SqlStorage implements StorageImplementation { try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(GROUP_PERMISSIONS_DELETE_SPECIFIC))) { for (SqlNode nd : toRemove) { - ps.setString(1, group.getName()); - ps.setString(2, nd.getPermission()); - ps.setBoolean(3, nd.getValue()); - ps.setString(4, nd.getServer()); - ps.setString(5, nd.getWorld()); - ps.setLong(6, nd.getExpiry()); - ps.setString(7, GsonProvider.normal().toJson(ContextSetJsonSerializer.serializeContextSet(nd.getContexts()))); + ps.setLong(1, nd.getSqlId()); ps.addBatch(); } ps.executeBatch(); @@ -774,7 +764,7 @@ public class SqlStorage implements StorageImplementation { group.getIoLock().unlock(); } - this.plugin.getGroupManager().unload(group); + this.plugin.getGroupManager().unload(group.getName()); } @Override @@ -795,7 +785,7 @@ public class SqlStorage implements StorageImplementation { long expiry = rs.getLong("expiry"); String contexts = rs.getString("contexts"); - SqlNode data = deserializeNode(perm, value, server, world, expiry, contexts); + SqlNode data = SqlNode.fromSqlFields(perm, value, server, world, expiry, contexts); held.add(HeldNodeImpl.of(holder, data.toNode())); } } @@ -907,7 +897,8 @@ public class SqlStorage implements StorageImplementation { TrackManager tm = this.plugin.getTrackManager(); tm.getAll().values().stream() - .filter(t -> !tracks.contains(t.getName())) + .map(Track::getName) + .filter(t -> !tracks.contains(t)) .forEach(tm::unload); } @@ -942,15 +933,15 @@ public class SqlStorage implements StorageImplementation { track.getIoLock().unlock(); } - this.plugin.getTrackManager().unload(track); + this.plugin.getTrackManager().unload(track.getName()); } @Override - public PlayerSaveResult savePlayerData(UUID uuid, String username) throws SQLException { + public PlayerSaveResult savePlayerData(UUID uniqueId, String username) throws SQLException { username = username.toLowerCase(); // find any existing mapping - String oldUsername = getPlayerName(uuid); + String oldUsername = getPlayerName(uniqueId); // do the insert if (!username.equals(oldUsername)) { @@ -958,12 +949,12 @@ public class SqlStorage implements StorageImplementation { if (oldUsername != null) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_UPDATE_USERNAME_FOR_UUID))) { ps.setString(1, username); - ps.setString(2, uuid.toString()); + ps.setString(2, uniqueId.toString()); ps.execute(); } } else { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_INSERT))) { - ps.setString(1, uuid.toString()); + ps.setString(1, uniqueId.toString()); ps.setString(2, username); ps.setString(3, GroupManager.DEFAULT_GROUP_NAME); ps.execute(); @@ -978,7 +969,7 @@ public class SqlStorage implements StorageImplementation { try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_SELECT_ALL_UUIDS_BY_USERNAME))) { ps.setString(1, username); - ps.setString(2, uuid.toString()); + ps.setString(2, uniqueId.toString()); try (ResultSet rs = ps.executeQuery()) { while (rs.next()) { conflicting.add(UUID.fromString(rs.getString("uuid"))); @@ -992,7 +983,7 @@ public class SqlStorage implements StorageImplementation { try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_DELETE_ALL_UUIDS_BY_USERNAME))) { ps.setString(1, username); - ps.setString(2, uuid.toString()); + ps.setString(2, uniqueId.toString()); ps.execute(); } } @@ -1003,7 +994,7 @@ public class SqlStorage implements StorageImplementation { } @Override - public UUID getPlayerUuid(String username) throws SQLException { + public UUID getPlayerUniqueId(String username) throws SQLException { username = username.toLowerCase(); try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_SELECT_UUID_BY_USERNAME))) { @@ -1019,10 +1010,10 @@ public class SqlStorage implements StorageImplementation { } @Override - public String getPlayerName(UUID uuid) throws SQLException { + public String getPlayerName(UUID uniqueId) throws SQLException { try (Connection c = this.connectionFactory.getConnection()) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_SELECT_USERNAME_BY_UUID))) { - ps.setString(1, uuid.toString()); + ps.setString(1, uniqueId.toString()); try (ResultSet rs = ps.executeQuery()) { if (rs.next()) { return rs.getString("username"); @@ -1052,7 +1043,4 @@ public class SqlStorage implements StorageImplementation { return Maps.immutableEntry(toAdd, toRemove); } - private SqlNode deserializeNode(String permission, boolean value, String server, String world, long expiry, String contexts) { - return new SqlNode(permission, value, server, world, expiry, ContextSetJsonSerializer.deserializeContextSet(GsonProvider.normal(), contexts).immutableCopy()); - } } diff --git a/common/src/main/java/me/lucko/luckperms/common/tasks/ExpireTemporaryTask.java b/common/src/main/java/me/lucko/luckperms/common/tasks/ExpireTemporaryTask.java index 995f277f3..ee9be4357 100644 --- a/common/src/main/java/me/lucko/luckperms/common/tasks/ExpireTemporaryTask.java +++ b/common/src/main/java/me/lucko/luckperms/common/tasks/ExpireTemporaryTask.java @@ -44,7 +44,7 @@ public class ExpireTemporaryTask implements Runnable { if (shouldSkip(group)) { continue; } - if (group.auditTemporaryPermissions()) { + if (group.auditTemporaryNodes()) { this.plugin.getStorage().saveGroup(group); groupChanges = true; } @@ -54,7 +54,7 @@ public class ExpireTemporaryTask implements Runnable { if (shouldSkip(user)) { continue; } - if (user.auditTemporaryPermissions()) { + if (user.auditTemporaryNodes()) { this.plugin.getStorage().saveUser(user); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/treeview/PermissionRegistry.java b/common/src/main/java/me/lucko/luckperms/common/treeview/PermissionRegistry.java index 4d9c0102b..f010354d4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/treeview/PermissionRegistry.java +++ b/common/src/main/java/me/lucko/luckperms/common/treeview/PermissionRegistry.java @@ -59,11 +59,8 @@ public class PermissionRegistry extends RepeatingTask { return this.rootNode; } - @Override - protected void tick() { - for (String e; (e = this.queue.poll()) != null; ) { - insert(e); - } + public List rootAsList() { + return this.rootNode.makeImmutableCopy().getNodeEndings().stream().map(Map.Entry::getValue).collect(ImmutableCollectors.toList()); } public void offer(String permission) { @@ -73,6 +70,13 @@ public class PermissionRegistry extends RepeatingTask { this.queue.offer(permission); } + @Override + protected void tick() { + for (String e; (e = this.queue.poll()) != null; ) { + insert(e); + } + } + public void insert(String permission) { try { doInsert(permission); @@ -81,14 +85,6 @@ public class PermissionRegistry extends RepeatingTask { } } - public List rootAsList() { - return this.rootNode.makeImmutableCopy().getNodeEndings().stream().map(Map.Entry::getValue).collect(ImmutableCollectors.toList()); - } - - public int getSize() { - return this.rootNode.getDeepSize(); - } - private void doInsert(String permission) { // split the permission up into parts List parts = DOT_SPLIT.splitToList(permission); 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 c7053bc26..ec06cef74 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 @@ -146,14 +146,14 @@ public class TreeView { .add("root", this.rootPosition) .add("uploader", new JObject() .add("name", sender.getNameWithLocation()) - .add("uuid", sender.getUuid().toString()) + .add("uuid", sender.getUniqueId().toString()) ); JObject checks; if (user != null && checker != null) { metadata.add("referenceUser", new JObject() .add("name", user.getPlainDisplayName()) - .add("uuid", user.getUuid().toString()) + .add("uuid", user.getUniqueId().toString()) ); checks = new JObject(); diff --git a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseHandler.java b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseHandler.java index 72c5172fc..7630b1ff5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseHandler.java +++ b/common/src/main/java/me/lucko/luckperms/common/verbose/VerboseHandler.java @@ -118,7 +118,7 @@ public class VerboseHandler extends RepeatingTask { * @param notify if the sender should be notified in chat on each check */ public void registerListener(Sender sender, VerboseFilter filter, boolean notify) { - this.listeners.put(sender.getUuid(), new VerboseListener(sender, filter, notify)); + this.listeners.put(sender.getUniqueId(), new VerboseListener(sender, filter, notify)); this.listening = 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 5e4dee736..9eb4b3a29 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 @@ -279,7 +279,7 @@ public class VerboseListener { ) .add("uploader", new JObject() .add("name", this.notifiedSender.getNameWithLocation()) - .add("uuid", this.notifiedSender.getUuid().toString()) + .add("uuid", this.notifiedSender.getUniqueId().toString()) ) .add("filter", filter) .add("truncated", truncated); diff --git a/common/src/main/java/me/lucko/luckperms/common/web/WebEditor.java b/common/src/main/java/me/lucko/luckperms/common/web/WebEditor.java index 6ffa6d26d..b74736498 100644 --- a/common/src/main/java/me/lucko/luckperms/common/web/WebEditor.java +++ b/common/src/main/java/me/lucko/luckperms/common/web/WebEditor.java @@ -88,7 +88,7 @@ public final class WebEditor { .add("commandAlias", cmdLabel) .add("uploader", new JObject() .add("name", sender.getNameWithLocation()) - .add("uuid", sender.getUuid().toString()) + .add("uuid", sender.getUniqueId().toString()) ) .add("time", System.currentTimeMillis()) .add("pluginVersion", plugin.getBootstrap().getVersion()) diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitBootstrap.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitBootstrap.java index 67682cd18..bceba535c 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitBootstrap.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitBootstrap.java @@ -180,17 +180,17 @@ public class LPNukkitBootstrap extends PluginBase implements LuckPermsBootstrap } @Override - public Optional getPlayer(UUID uuid) { - return Optional.ofNullable(getServer().getOnlinePlayers().get(uuid)); + public Optional getPlayer(UUID uniqueId) { + return Optional.ofNullable(getServer().getOnlinePlayers().get(uniqueId)); } @Override - public Optional lookupUuid(String username) { + public Optional lookupUniqueId(String username) { return Optional.empty(); } @Override - public Optional lookupUsername(UUID uuid) { + public Optional lookupUsername(UUID uniqueId) { return Optional.empty(); } @@ -210,8 +210,8 @@ public class LPNukkitBootstrap extends PluginBase implements LuckPermsBootstrap } @Override - public boolean isPlayerOnline(UUID uuid) { - Player player = getServer().getOnlinePlayers().get(uuid); + public boolean isPlayerOnline(UUID uniqueId) { + Player player = getServer().getOnlinePlayers().get(uniqueId); return player != null && player.isOnline(); } } diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitPlugin.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitPlugin.java index 69ca26021..955ccd603 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitPlugin.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitPlugin.java @@ -207,7 +207,7 @@ public class LPNukkitPlugin extends AbstractLuckPermsPlugin { if (getConfiguration().get(ConfigKeys.AUTO_OP)) { getApiProvider().getEventBus().subscribe(UserDataRecalculateEvent.class, event -> { User user = ApiUser.cast(event.getUser()); - Optional player = getBootstrap().getPlayer(user.getUuid()); + Optional player = getBootstrap().getPlayer(user.getUniqueId()); player.ifPresent(this::refreshAutoOp); }); } @@ -251,7 +251,7 @@ public class LPNukkitPlugin extends AbstractLuckPermsPlugin { final User user = getUserManager().getIfLoaded(player.getUniqueId()); if (user != null) { user.getCachedData().invalidate(); - getUserManager().unload(user); + getUserManager().unload(user.getUniqueId()); } } @@ -291,7 +291,7 @@ public class LPNukkitPlugin extends AbstractLuckPermsPlugin { @Override public Optional getQueryOptionsForUser(User user) { - return this.bootstrap.getPlayer(user.getUuid()).map(player -> this.contextManager.getQueryOptions(player)); + return this.bootstrap.getPlayer(user.getUniqueId()).map(player -> this.contextManager.getQueryOptions(player)); } @Override diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/NukkitSenderFactory.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/NukkitSenderFactory.java index d5d48de5c..d555af16d 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/NukkitSenderFactory.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/NukkitSenderFactory.java @@ -53,7 +53,7 @@ public class NukkitSenderFactory extends SenderFactory { } @Override - protected UUID getUuid(CommandSender sender) { + protected UUID getUniqueId(CommandSender sender) { if (sender instanceof Player) { return ((Player) sender).getUniqueId(); } diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissionAttachment.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissionAttachment.java index d31a09f0d..3e40f013b 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissionAttachment.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissionAttachment.java @@ -192,7 +192,7 @@ public class LPPermissionAttachment extends PermissionAttachment { // set the transient node User user = this.permissible.getUser(); - ((Result) user.setPermission(DataType.TRANSIENT, node, true)).wasSuccessful(); + ((Result) user.setNode(DataType.TRANSIENT, node, true)).wasSuccessful(); } private void unsetPermissionInternal(String name) { diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongeBootstrap.java b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongeBootstrap.java index c8098361f..7c869f12c 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongeBootstrap.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongeBootstrap.java @@ -263,16 +263,16 @@ public class LPSpongeBootstrap implements LuckPermsBootstrap { } @Override - public Optional getPlayer(UUID uuid) { + public Optional getPlayer(UUID uniqueId) { if (!getGame().isServerAvailable()) { return Optional.empty(); } - return getGame().getServer().getPlayer(uuid); + return getGame().getServer().getPlayer(uniqueId); } @Override - public Optional lookupUuid(String username) { + public Optional lookupUniqueId(String username) { if (!getGame().isServerAvailable()) { return Optional.empty(); } @@ -284,12 +284,12 @@ public class LPSpongeBootstrap implements LuckPermsBootstrap { } @Override - public Optional lookupUsername(UUID uuid) { + public Optional lookupUsername(UUID uniqueId) { if (!getGame().isServerAvailable()) { return Optional.empty(); } - return getGame().getServer().getGameProfileManager().get(uuid) + return getGame().getServer().getGameProfileManager().get(uniqueId) .thenApply(GameProfile::getName) .exceptionally(x -> Optional.empty()) .join(); @@ -311,8 +311,8 @@ public class LPSpongeBootstrap implements LuckPermsBootstrap { } @Override - public boolean isPlayerOnline(UUID uuid) { - return getGame().isServerAvailable() ? getGame().getServer().getPlayer(uuid).map(Player::isOnline).orElse(false) : false; + public boolean isPlayerOnline(UUID uniqueId) { + return getGame().isServerAvailable() ? getGame().getServer().getPlayer(uniqueId).map(Player::isOnline).orElse(false) : false; } } 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 0c7025c86..fc0d6886e 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java @@ -251,7 +251,7 @@ public class LPSpongePlugin extends AbstractLuckPermsPlugin { @Override public Optional getQueryOptionsForUser(User user) { - return this.bootstrap.getPlayer(user.getUuid()).map(player -> this.contextManager.getQueryOptions(player)); + return this.bootstrap.getPlayer(user.getUniqueId()).map(player -> this.contextManager.getQueryOptions(player)); } @Override diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeSenderFactory.java b/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeSenderFactory.java index 711db0bd6..a9ebe56f5 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeSenderFactory.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/SpongeSenderFactory.java @@ -54,7 +54,7 @@ public class SpongeSenderFactory extends SenderFactory { } @Override - protected UUID getUuid(CommandSource source) { + protected UUID getUniqueId(CommandSource source) { if (source instanceof Player) { return ((Player) source).getUniqueId(); } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/model/SpongeUser.java b/sponge/src/main/java/me/lucko/luckperms/sponge/model/SpongeUser.java index f99e709e0..0387be6d8 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/model/SpongeUser.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/model/SpongeUser.java @@ -38,20 +38,14 @@ import java.util.UUID; public class SpongeUser extends User implements SpongePermissionHolder { private final UserSubject spongeData; - public SpongeUser(UUID uuid, LPSpongePlugin plugin) { - super(uuid, plugin); - this.spongeData = new UserSubject(plugin, this); - } - - public SpongeUser(UUID uuid, String name, LPSpongePlugin plugin) { - super(uuid, name, plugin); + public SpongeUser(UUID uniqueId, LPSpongePlugin plugin) { + super(uniqueId, plugin); this.spongeData = new UserSubject(plugin, this); } @Override protected void invalidateCache() { super.invalidateCache(); - this.spongeData.fireUpdateEvent(); } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/model/manager/SpongeUserManager.java b/sponge/src/main/java/me/lucko/luckperms/sponge/model/manager/SpongeUserManager.java index 89a70c538..59d4acffd 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/model/manager/SpongeUserManager.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/model/manager/SpongeUserManager.java @@ -35,7 +35,6 @@ import com.google.common.collect.Maps; import me.lucko.luckperms.common.bulkupdate.comparison.Constraint; import me.lucko.luckperms.common.bulkupdate.comparison.StandardComparison; import me.lucko.luckperms.common.context.contextset.ImmutableContextSetImpl; -import me.lucko.luckperms.common.model.UserIdentifier; import me.lucko.luckperms.common.model.manager.user.AbstractUserManager; import me.lucko.luckperms.common.model.manager.user.UserHousekeeper; import me.lucko.luckperms.common.util.ImmutableCollectors; @@ -105,10 +104,8 @@ public class SpongeUserManager extends AbstractUserManager implement } @Override - public SpongeUser apply(UserIdentifier id) { - return !id.getUsername().isPresent() ? - new SpongeUser(id.getUuid(), this.plugin) : - new SpongeUser(id.getUuid(), id.getUsername().get(), this.plugin); + public SpongeUser apply(UUID id) { + return new SpongeUser(id, this.plugin); } @Override @@ -170,7 +167,7 @@ public class SpongeUserManager extends AbstractUserManager implement return CompletableFuture.completedFuture(false); } - if (isLoaded(UserIdentifier.of(uuid, null))) { + if (isLoaded(uuid)) { return CompletableFuture.completedFuture(true); } @@ -203,7 +200,7 @@ public class SpongeUserManager extends AbstractUserManager implement return CompletableFuture.supplyAsync(() -> { ImmutableSet.Builder ids = ImmutableSet.builder(); - getAll().keySet().forEach(uuid -> ids.add(uuid.getUuid().toString())); + getAll().keySet().forEach(uuid -> ids.add(uuid.toString())); this.plugin.getStorage().getUniqueUsers().join().forEach(uuid -> ids.add(uuid.toString())); return ids.build(); diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubjectData.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubjectData.java index f567d9b80..0740ab4dc 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubjectData.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubjectData.java @@ -131,20 +131,20 @@ public class PermissionHolderSubjectData implements LPSubjectData { if (tristate == Tristate.UNDEFINED) { // Unset Node node = NodeBuilders.determineMostApplicable(permission).withContext(contexts).build(); - this.holder.unsetPermission(this.type, node); + this.holder.unsetNode(this.type, node); return save(this.holder).thenApply(v -> true); } Node node = NodeBuilders.determineMostApplicable(permission).value(tristate.asBoolean()).withContext(contexts).build(); // unset the inverse, to allow false -> true, true -> false overrides. - this.holder.unsetPermission(this.type, node); - this.holder.setPermission(this.type, node, true); + this.holder.unsetNode(this.type, node); + this.holder.setNode(this.type, node, true); return save(this.holder).thenApply(v -> true); } @Override public CompletableFuture clearPermissions() { - if (!this.holder.clearNodes(this.type, null)) { + if (!this.holder.clearNodes(this.type, null, false)) { return CompletableFuture.completedFuture(false); } @@ -158,7 +158,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { @Override public CompletableFuture clearPermissions(ImmutableContextSet contexts) { Objects.requireNonNull(contexts, "contexts"); - if (!this.holder.clearNodes(this.type, contexts)) { + if (!this.holder.clearNodes(this.type, contexts, false)) { return CompletableFuture.completedFuture(false); } @@ -172,12 +172,10 @@ public class PermissionHolderSubjectData implements LPSubjectData { @Override public ImmutableMap> getAllParents() { ImmutableMap.Builder> ret = ImmutableMap.builder(); - for (Map.Entry> entry : this.holder.getData(this.type).immutable().asMap().entrySet()) { + for (Map.Entry> entry : this.holder.getData(this.type).immutableInheritance().asMap().entrySet()) { ImmutableList.Builder builder = ImmutableList.builder(); - for (Node n : entry.getValue()) { - if (n instanceof InheritanceNode) { - builder.add(this.service.getGroupSubjects().loadSubject(((InheritanceNode) n).getGroupName()).join().toReference()); - } + for (InheritanceNode n : entry.getValue()) { + builder.add(this.service.getGroupSubjects().loadSubject(n.getGroupName()).join().toReference()); } ret.put(entry.getKey(), builder.build()); } @@ -187,10 +185,8 @@ public class PermissionHolderSubjectData implements LPSubjectData { @Override public ImmutableList getParents(ImmutableContextSet contexts) { ImmutableList.Builder builder = ImmutableList.builder(); - for (Node n : this.holder.getData(this.type).immutable().get(contexts)) { - if (n instanceof InheritanceNode) { - builder.add(this.service.getGroupSubjects().loadSubject(((InheritanceNode) n).getGroupName()).join().toReference()); - } + for (InheritanceNode n : this.holder.getData(this.type).immutableInheritance().get(contexts)) { + builder.add(this.service.getGroupSubjects().loadSubject(n.getGroupName()).join().toReference()); } return builder.build(); } @@ -208,7 +204,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { .withContext(contexts) .build(); - if (!this.holder.setPermission(this.type, node, true).wasSuccessful()) { + if (!this.holder.setNode(this.type, node, true).wasSuccessful()) { return CompletableFuture.completedFuture(false); } @@ -228,7 +224,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { .withContext(contexts) .build(); - if (!this.holder.unsetPermission(this.type, node).wasSuccessful()) { + if (!this.holder.unsetNode(this.type, node).wasSuccessful()) { return CompletableFuture.completedFuture(false); } @@ -245,7 +241,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { case TRANSIENT: ret = streamNodes() .filter(n -> n instanceof InheritanceNode) - .peek(n -> this.holder.unsetPermission(DataType.TRANSIENT, n)) + .peek(n -> this.holder.unsetNode(DataType.TRANSIENT, n)) .findAny().isPresent(); break; default: @@ -271,7 +267,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { ret = streamNodes() .filter(n -> n instanceof InheritanceNode) .filter(n -> n.getContexts().equals(contexts)) - .peek(n -> this.holder.unsetPermission(DataType.TRANSIENT, n)) + .peek(n -> this.holder.unsetNode(DataType.TRANSIENT, n)) .findAny().isPresent(); break; default: @@ -350,7 +346,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { streamNodes() .filter(n -> type.nodeType().matches(n)) .filter(n -> n.getContexts().equals(contexts)) - .forEach(n -> this.holder.unsetPermission(this.type, n)); + .forEach(n -> this.holder.unsetNode(this.type, n)); MetaAccumulator metaAccumulator = this.holder.accumulateMeta(null, QueryOptions.defaultContextualOptions().toBuilder().context(contexts).build()); metaAccumulator.complete(); @@ -364,12 +360,12 @@ public class PermissionHolderSubjectData implements LPSubjectData { streamNodes() .filter(n -> n instanceof MetaNode && ((MetaNode) n).getMetaKey().equals(key)) .filter(n -> n.getContexts().equals(contexts)) - .forEach(n -> this.holder.unsetPermission(this.type, n)); + .forEach(n -> this.holder.unsetNode(this.type, n)); node = Meta.builder(key, value).withContext(contexts).build(); } - this.holder.setPermission(this.type, node, true); + this.holder.setNode(this.type, node, true); return save(this.holder).thenApply(v -> true); } @@ -389,7 +385,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { } }) .filter(n -> n.getContexts().equals(contexts)) - .forEach(n -> this.holder.unsetPermission(this.type, n)); + .forEach(n -> this.holder.unsetNode(this.type, n)); return save(this.holder).thenApply(v -> true); } @@ -401,7 +397,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { boolean success = streamNodes() .filter(NodeType.META_OR_CHAT_META::matches) .filter(n -> n.getContexts().equals(contexts)) - .peek(n -> this.holder.unsetPermission(this.type, n)) + .peek(n -> this.holder.unsetNode(this.type, n)) .findAny().isPresent(); if (!success) { @@ -415,7 +411,7 @@ public class PermissionHolderSubjectData implements LPSubjectData { public CompletableFuture clearOptions() { boolean success = streamNodes() .filter(NodeType.META_OR_CHAT_META::matches) - .peek(n -> this.holder.unsetPermission(this.type, n)) + .peek(n -> this.holder.unsetNode(this.type, n)) .findAny().isPresent(); if (!success) { diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/UserSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/UserSubject.java index c34b5d782..8648e0e12 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/UserSubject.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/UserSubject.java @@ -47,17 +47,17 @@ public final class UserSubject extends PermissionHolderSubject imple @Override public String getIdentifier() { - return this.parent.getUuid().toString(); + return this.parent.getUniqueId().toString(); } @Override public Optional getFriendlyIdentifier() { - return this.parent.getName(); + return this.parent.getUsername(); } @Override public Optional getCommandSource() { - final UUID uuid = this.parent.getUuid(); + final UUID uuid = this.parent.getUniqueId(); return Sponge.getServer().getPlayer(uuid).map(Function.identity()); } diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/LPVelocityBootstrap.java b/velocity/src/main/java/me/lucko/luckperms/velocity/LPVelocityBootstrap.java index c172c6b05..6573a1b3e 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/LPVelocityBootstrap.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/LPVelocityBootstrap.java @@ -205,17 +205,17 @@ public class LPVelocityBootstrap implements LuckPermsBootstrap { } @Override - public Optional getPlayer(UUID uuid) { - return this.proxy.getPlayer(uuid); + public Optional getPlayer(UUID uniqueId) { + return this.proxy.getPlayer(uniqueId); } @Override - public Optional lookupUuid(String username) { + public Optional lookupUniqueId(String username) { return Optional.empty(); } @Override - public Optional lookupUsername(UUID uuid) { + public Optional lookupUsername(UUID uniqueId) { return Optional.empty(); } @@ -235,8 +235,8 @@ public class LPVelocityBootstrap implements LuckPermsBootstrap { } @Override - public boolean isPlayerOnline(UUID uuid) { - Player player = this.proxy.getPlayer(uuid).orElse(null); + public boolean isPlayerOnline(UUID uniqueId) { + Player player = this.proxy.getPlayer(uniqueId).orElse(null); return player != null && player.isActive(); } } diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/LPVelocityPlugin.java b/velocity/src/main/java/me/lucko/luckperms/velocity/LPVelocityPlugin.java index 7152146a7..e9dcaac6d 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/LPVelocityPlugin.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/LPVelocityPlugin.java @@ -192,7 +192,7 @@ public class LPVelocityPlugin extends AbstractLuckPermsPlugin { @Override public Optional getQueryOptionsForUser(User user) { - return this.bootstrap.getPlayer(user.getUuid()).map(player -> this.contextManager.getQueryOptions(player)); + return this.bootstrap.getPlayer(user.getUniqueId()).map(player -> this.contextManager.getQueryOptions(player)); } @Override diff --git a/velocity/src/main/java/me/lucko/luckperms/velocity/VelocitySenderFactory.java b/velocity/src/main/java/me/lucko/luckperms/velocity/VelocitySenderFactory.java index b1002057d..f303f2bf6 100644 --- a/velocity/src/main/java/me/lucko/luckperms/velocity/VelocitySenderFactory.java +++ b/velocity/src/main/java/me/lucko/luckperms/velocity/VelocitySenderFactory.java @@ -53,7 +53,7 @@ public class VelocitySenderFactory extends SenderFactory { } @Override - protected UUID getUuid(CommandSource source) { + protected UUID getUniqueId(CommandSource source) { if (source instanceof Player) { return ((Player) source).getUniqueId(); }