From 64838708abc8133569f6b24df8b6fbac3506eaf0 Mon Sep 17 00:00:00 2001 From: Luck Date: Sun, 6 May 2018 17:16:36 +0100 Subject: [PATCH] Release version 4.2.0 blaze it --- api/pom.xml | 2 +- .../me/lucko/luckperms/api/ActionLogger.java | 2 - .../luckperms/api}/PlayerSaveResult.java | 99 +------- .../java/me/lucko/luckperms/api/Storage.java | 227 +++++++++--------- .../luckperms/api/caching/CachedData.java | 14 ++ .../luckperms/api/manager/GroupManager.java | 25 ++ .../luckperms/api/manager/TrackManager.java | 12 + .../luckperms/api/manager/UserManager.java | 76 ++++++ bukkit/pom.xml | 2 +- .../luckperms/bukkit/LPBukkitPlugin.java | 2 +- bungee/pom.xml | 2 +- common/pom.xml | 2 +- .../delegates/manager/ApiGroupManager.java | 11 + .../api/delegates/manager/ApiUserManager.java | 40 +++ .../api/delegates/misc/ApiPlatformInfo.java | 2 +- .../delegates/model/ApiPermissionHolder.java | 2 +- .../common/caching/AbstractCachedData.java | 16 +- .../caching/handlers/StateListener.java | 37 --- .../listener/AbstractConnectionListener.java | 7 +- .../common/model/PermissionHolder.java | 2 +- .../common/storage/AbstractStorage.java | 6 +- .../common/storage/PlayerSaveResultImpl.java | 135 +++++++++++ .../luckperms/common/storage/Storage.java | 3 +- .../common/storage/dao/AbstractDao.java | 2 +- .../common/storage/dao/SplitStorageDao.java | 2 +- .../dao/file/AbstractConfigurateDao.java | 2 +- .../storage/dao/file/FileUuidCache.java | 5 +- .../common/storage/dao/mongodb/MongoDao.java | 5 +- .../common/storage/dao/sql/SqlDao.java | 5 +- nukkit/pom.xml | 2 +- .../luckperms/nukkit/LPNukkitPlugin.java | 2 +- pom.xml | 4 +- sponge/pom.xml | 2 +- sponge/sponge-service-api6/pom.xml | 2 +- sponge/sponge-service-api7/pom.xml | 2 +- sponge/sponge-service/pom.xml | 2 +- .../service/calculated/CalculatedSubject.java | 2 +- .../service/internal/HolderSubject.java | 2 +- 38 files changed, 487 insertions(+), 280 deletions(-) rename {common/src/main/java/me/lucko/luckperms/common/storage => api/src/main/java/me/lucko/luckperms/api}/PlayerSaveResult.java (51%) delete mode 100644 common/src/main/java/me/lucko/luckperms/common/caching/handlers/StateListener.java create mode 100644 common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResultImpl.java diff --git a/api/pom.xml b/api/pom.xml index 4ad4fcb9b..03fe46297 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT 4.0.0 diff --git a/api/src/main/java/me/lucko/luckperms/api/ActionLogger.java b/api/src/main/java/me/lucko/luckperms/api/ActionLogger.java index 2fd0b239f..15a7015be 100644 --- a/api/src/main/java/me/lucko/luckperms/api/ActionLogger.java +++ b/api/src/main/java/me/lucko/luckperms/api/ActionLogger.java @@ -47,8 +47,6 @@ public interface ActionLogger { /** * Gets a {@link Log} instance from the plugin storage. * - *

Returns the same result as {@link Storage#getLog()}.

- * * @return a log instance * @see Storage#getLog() */ diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResult.java b/api/src/main/java/me/lucko/luckperms/api/PlayerSaveResult.java similarity index 51% rename from common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResult.java rename to api/src/main/java/me/lucko/luckperms/api/PlayerSaveResult.java index deee2e975..e070820a3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResult.java +++ b/api/src/main/java/me/lucko/luckperms/api/PlayerSaveResult.java @@ -23,12 +23,8 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.storage; +package me.lucko.luckperms.api; -import com.google.common.collect.ImmutableSet; - -import java.util.EnumSet; -import java.util.Objects; import java.util.Set; import java.util.UUID; @@ -36,71 +32,19 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; /** - * Represents the result to a player history save operation + * Encapsulates the result of an operation to save uuid data about a player. + * + * @since 4.2 */ -public final class PlayerSaveResult { - private static final PlayerSaveResult CLEAN_INSERT = new PlayerSaveResult(Status.CLEAN_INSERT); - private static final PlayerSaveResult NO_CHANGE = new PlayerSaveResult(Status.NO_CHANGE); - - public static PlayerSaveResult cleanInsert() { - return CLEAN_INSERT; - } - - public static PlayerSaveResult noChange() { - return NO_CHANGE; - } - - public static PlayerSaveResult usernameUpdated(String oldUsername) { - return new PlayerSaveResult(EnumSet.of(Status.USERNAME_UPDATED), oldUsername, null); - } - - public static PlayerSaveResult determineBaseResult(String username, String oldUsername) { - PlayerSaveResult result; - if (oldUsername == null) { - result = PlayerSaveResult.cleanInsert(); - } else if (oldUsername.equalsIgnoreCase(username)) { - result = PlayerSaveResult.noChange(); - } else { - result = PlayerSaveResult.usernameUpdated(oldUsername); - } - return result; - } - - private final Set status; - @Nullable private final String oldUsername; - @Nullable private final Set otherUuids; - - private PlayerSaveResult(EnumSet status, @Nullable String oldUsername, @Nullable Set otherUuids) { - this.status = ImmutableSet.copyOf(status); - this.oldUsername = oldUsername; - this.otherUuids = otherUuids; - } - - private PlayerSaveResult(Status status) { - this(EnumSet.of(status), null, null); - } - - /** - * Returns a new {@link PlayerSaveResult} with the {@link Status#OTHER_UUIDS_PRESENT_FOR_USERNAME} - * status attached to the state of this result. - * - * @param otherUuids the other uuids - * @return a new result - */ - public PlayerSaveResult withOtherUuidsPresent(@Nonnull Set otherUuids) { - EnumSet status = EnumSet.copyOf(this.status); - status.add(Status.OTHER_UUIDS_PRESENT_FOR_USERNAME); - return new PlayerSaveResult(status, this.oldUsername, ImmutableSet.copyOf(otherUuids)); - } +public interface PlayerSaveResult { /** * Gets the status returned by the operation * * @return the status */ - public Set getStatus() { - return this.status; - } + @Nonnull + Set getStatus(); /** * Gets if the result includes a certain status code. @@ -108,9 +52,7 @@ public final class PlayerSaveResult { * @param status the status to check for * @return if the result includes the status */ - public boolean includes(Status status) { - return this.status.contains(status); - } + boolean includes(@Nonnull Status status); /** * Gets the old username involved in the result @@ -119,9 +61,7 @@ public final class PlayerSaveResult { * @see Status#USERNAME_UPDATED */ @Nullable - public String getOldUsername() { - return this.oldUsername; - } + String getOldUsername(); /** * Gets the other uuids involved in the result @@ -130,29 +70,12 @@ public final class PlayerSaveResult { * @see Status#OTHER_UUIDS_PRESENT_FOR_USERNAME */ @Nullable - public Set getOtherUuids() { - return this.otherUuids; - } - - @Override - public boolean equals(Object that) { - if (this == that) return true; - if (that == null || getClass() != that.getClass()) return false; - PlayerSaveResult result = (PlayerSaveResult) that; - return Objects.equals(this.status, result.status) && - Objects.equals(this.oldUsername, result.oldUsername) && - Objects.equals(this.otherUuids, result.otherUuids); - } - - @Override - public int hashCode() { - return Objects.hash(this.status, this.oldUsername, this.otherUuids); - } + Set getOtherUuids(); /** * The various states the result can take */ - public enum Status { + enum Status { /** * There was no existing data saved for either the uuid or username diff --git a/api/src/main/java/me/lucko/luckperms/api/Storage.java b/api/src/main/java/me/lucko/luckperms/api/Storage.java index e05140a0d..8ae72eec5 100644 --- a/api/src/main/java/me/lucko/luckperms/api/Storage.java +++ b/api/src/main/java/me/lucko/luckperms/api/Storage.java @@ -34,7 +34,6 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import java.util.function.Consumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -42,16 +41,6 @@ import javax.annotation.Nullable; /** * A means of loading and saving permission data to/from the backend. * - *

All blocking methods return {@link CompletableFuture}s, which will be - * populated with the result once the data has been loaded/saved asynchronously. - * Care should be taken when using such methods to ensure that the main server - * thread is not blocked.

- * - *

Methods such as {@link CompletableFuture#get()} and equivalent should - * not be called on the main server thread. If you need to use - * the result of these operations on the main server thread, register a - * callback using {@link CompletableFuture#thenAcceptAsync(Consumer, Executor)}.

- * * @since 2.14 */ public interface Storage { @@ -64,80 +53,6 @@ public interface Storage { @Nonnull String getName(); - /** - * Loads and returns the entire log from storage - * - * @return a log instance, could be null if loading failed - */ - @Nonnull - CompletableFuture getLog(); - - /** - * Gets a set all "unique" user UUIDs. - * - *

"Unique" meaning the user isn't just a member of the "default" group.

- * - * @return a set of uuids, or null if the operation failed. - */ - @Nonnull - CompletableFuture> getUniqueUsers(); - - /** - * Searches for a list of users with a given permission. - * - * @param permission the permission to search for - * @return a list of held permissions, or null if the operation failed - * @throws NullPointerException if the permission is null - * @since 2.17 - */ - @Nonnull - CompletableFuture>> getUsersWithPermission(@Nonnull String permission); - - /** - * Searches for a list of groups with a given permission. - * - * @param permission the permission to search for - * @return a list of held permissions, or null if the operation failed - * @throws NullPointerException if the permission is null - * @since 2.17 - */ - @Nonnull - CompletableFuture>> getGroupsWithPermission(@Nonnull String permission); - - /** - * Saves UUID caching data to the global cache - * - * @param username the users username - * @param uuid the users mojang unique id - * @return true if the operation completed successfully. - * @throws NullPointerException if either parameters are null - * @throws IllegalArgumentException if the username is invalid - */ - @Nonnull - CompletableFuture saveUUIDData(@Nonnull String username, @Nonnull UUID uuid); - - /** - * Gets a UUID from a username - * - * @param username the corresponding username - * @return a uuid object, could be null - * @throws NullPointerException if either parameters are null - * @throws IllegalArgumentException if the username is invalid - */ - @Nonnull - CompletableFuture getUUID(@Nonnull String username); - - /** - * Gets a username from a UUID - * - * @param uuid the corresponding uuid - * @return a name string, could be null - * @throws NullPointerException if either parameters are null - * @since 2.17 - */ - @Nonnull - CompletableFuture getName(@Nonnull UUID uuid); - /** * Gets whether the storage instance is allowing logins on the platform. * @@ -147,34 +62,6 @@ public interface Storage { @Deprecated boolean isAcceptingLogins(); - /** - * Returns an executor which will run all passed runnables on the - * main server thread. - * - *

This method is deprecated as plugins should create and use their own - * executor instances.

- * - * @return an executor instance - * @deprecated as plugins should create their own executors - */ - @Nonnull - @Deprecated - Executor getSyncExecutor(); - - /** - * Returns an executor which will run all passed runnables asynchronously - * using the platforms scheduler and thread pools. - * - *

This method is deprecated as plugins should create and use their own - * executor instances.

- * - * @return an executor instance - * @deprecated as plugins should create their own executors - */ - @Nonnull - @Deprecated - Executor getAsyncExecutor(); - /** * Saves an action to storage * @@ -187,6 +74,16 @@ public interface Storage { @Deprecated CompletableFuture logAction(@Nonnull LogEntry entry); + /** + * Loads and returns the entire log from storage + * + * @return a log instance, could be null if loading failed + * @deprecated in favour of {@link ActionLogger#getLog()} + */ + @Nonnull + @Deprecated + CompletableFuture getLog(); + /** * Loads a user's data from the main storage into the plugins local storage. * @@ -229,6 +126,31 @@ public interface Storage { @Deprecated CompletableFuture saveUser(@Nonnull User user); + /** + * Gets a set all "unique" user UUIDs. + * + *

"Unique" meaning the user isn't just a member of the "default" group.

+ * + * @return a set of uuids, or null if the operation failed. + * @deprecated in favour of {@link UserManager#getUniqueUsers()} + */ + @Nonnull + @Deprecated + CompletableFuture> getUniqueUsers(); + + /** + * Searches for a list of users with a given permission. + * + * @param permission the permission to search for + * @return a list of held permissions, or null if the operation failed + * @throws NullPointerException if the permission is null + * @since 2.17 + * @deprecated in favour of {@link UserManager#getWithPermission(String)} + */ + @Nonnull + @Deprecated + CompletableFuture>> getUsersWithPermission(@Nonnull String permission); + /** * Creates and loads a group into the plugins local storage * @@ -293,6 +215,19 @@ public interface Storage { @Deprecated CompletableFuture deleteGroup(@Nonnull Group group); + /** + * Searches for a list of groups with a given permission. + * + * @param permission the permission to search for + * @return a list of held permissions, or null if the operation failed + * @throws NullPointerException if the permission is null + * @since 2.17 + * @deprecated in favour of {@link GroupManager#getWithPermission(String)} + */ + @Nonnull + @Deprecated + CompletableFuture>> getGroupsWithPermission(@Nonnull String permission); + /** * Creates and loads a track into the plugins local storage * @@ -355,4 +290,70 @@ public interface Storage { @Deprecated CompletableFuture deleteTrack(@Nonnull Track track); + /** + * Saves UUID caching data to the global cache + * + * @param username the users username + * @param uuid the users mojang unique id + * @return true if the operation completed successfully. + * @throws NullPointerException if either parameters are null + * @throws IllegalArgumentException if the username is invalid + * @deprecated in favour of {@link UserManager#savePlayerData(UUID, String)} + */ + @Nonnull + CompletableFuture saveUUIDData(@Nonnull String username, @Nonnull UUID uuid); + + /** + * Gets a UUID from a username + * + * @param username the corresponding username + * @return a uuid object, could be null + * @throws NullPointerException if either parameters are null + * @throws IllegalArgumentException if the username is invalid + * @deprecated in favour of {@link UserManager#lookupUuid(String)} + */ + @Nonnull + CompletableFuture getUUID(@Nonnull String username); + + /** + * Gets a username from a UUID + * + * @param uuid the corresponding uuid + * @return a name string, could be null + * @throws NullPointerException if either parameters are null + * @since 2.17 + * @deprecated in favour of {@link UserManager#lookupUsername(UUID)} + */ + @Nonnull + @Deprecated + CompletableFuture getName(@Nonnull UUID uuid); + + /** + * Returns an executor which will run all passed runnables on the + * main server thread. + * + *

This method is deprecated as plugins should create and use their own + * executor instances.

+ * + * @return an executor instance + * @deprecated as plugins should create their own executors + */ + @Nonnull + @Deprecated + Executor getSyncExecutor(); + + /** + * Returns an executor which will run all passed runnables asynchronously + * using the platforms scheduler and thread pools. + * + *

This method is deprecated as plugins should create and use their own + * executor instances.

+ * + * @return an executor instance + * @deprecated as plugins should create their own executors + */ + @Nonnull + @Deprecated + Executor getAsyncExecutor(); + } diff --git a/api/src/main/java/me/lucko/luckperms/api/caching/CachedData.java b/api/src/main/java/me/lucko/luckperms/api/caching/CachedData.java index 06485189d..04a8d9704 100644 --- a/api/src/main/java/me/lucko/luckperms/api/caching/CachedData.java +++ b/api/src/main/java/me/lucko/luckperms/api/caching/CachedData.java @@ -401,6 +401,20 @@ public interface CachedData { */ void invalidateMeta(@Nonnull Contexts contexts); + /** + * Invalidates all cached {@link PermissionData} instances. + * + * @since 4.2 + */ + void invalidatePermissions(); + + /** + * Invalidates all cached {@link MetaData} instances. + * + * @since 4.2 + */ + void invalidateMeta(); + /** * Invalidates all of the underlying Permission calculators. * diff --git a/api/src/main/java/me/lucko/luckperms/api/manager/GroupManager.java b/api/src/main/java/me/lucko/luckperms/api/manager/GroupManager.java index 2f6f0e372..6537082a6 100644 --- a/api/src/main/java/me/lucko/luckperms/api/manager/GroupManager.java +++ b/api/src/main/java/me/lucko/luckperms/api/manager/GroupManager.java @@ -26,11 +26,15 @@ package me.lucko.luckperms.api.manager; import me.lucko.luckperms.api.Group; +import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.Storage; +import java.util.List; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.Consumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -38,6 +42,16 @@ import javax.annotation.Nullable; /** * Represents the object responsible for managing {@link Group} instances. * + *

All blocking methods return {@link CompletableFuture}s, which will be + * populated with the result once the data has been loaded/saved asynchronously. + * Care should be taken when using such methods to ensure that the main server + * thread is not blocked.

+ * + *

Methods such as {@link CompletableFuture#get()} and equivalent should + * not be called on the main server thread. If you need to use + * the result of these operations on the main server thread, register a + * callback using {@link CompletableFuture#thenAcceptAsync(Consumer, Executor)}.

+ * * @since 4.0 */ public interface GroupManager { @@ -138,6 +152,17 @@ public interface GroupManager { @Nonnull CompletableFuture loadAllGroups(); + /** + * Searches for a list of groups with a given permission. + * + * @param permission the permission to search for + * @return a list of held permissions, or null if the operation failed + * @throws NullPointerException if the permission is null + * @since 4.2 + */ + @Nonnull + CompletableFuture>> getWithPermission(@Nonnull String permission); + /** * Gets a loaded group. * diff --git a/api/src/main/java/me/lucko/luckperms/api/manager/TrackManager.java b/api/src/main/java/me/lucko/luckperms/api/manager/TrackManager.java index 3a6491aaf..c76828950 100644 --- a/api/src/main/java/me/lucko/luckperms/api/manager/TrackManager.java +++ b/api/src/main/java/me/lucko/luckperms/api/manager/TrackManager.java @@ -31,6 +31,8 @@ import me.lucko.luckperms.api.Track; import java.util.Optional; import java.util.Set; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.Consumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -38,6 +40,16 @@ import javax.annotation.Nullable; /** * Represents the object responsible for managing {@link Track} instances. * + *

All blocking methods return {@link CompletableFuture}s, which will be + * populated with the result once the data has been loaded/saved asynchronously. + * Care should be taken when using such methods to ensure that the main server + * thread is not blocked.

+ * + *

Methods such as {@link CompletableFuture#get()} and equivalent should + * not be called on the main server thread. If you need to use + * the result of these operations on the main server thread, register a + * callback using {@link CompletableFuture#thenAcceptAsync(Consumer, Executor)}.

+ * * @since 4.0 */ public interface TrackManager { diff --git a/api/src/main/java/me/lucko/luckperms/api/manager/UserManager.java b/api/src/main/java/me/lucko/luckperms/api/manager/UserManager.java index 188add7a4..3d96dd849 100644 --- a/api/src/main/java/me/lucko/luckperms/api/manager/UserManager.java +++ b/api/src/main/java/me/lucko/luckperms/api/manager/UserManager.java @@ -25,13 +25,18 @@ package me.lucko.luckperms.api.manager; +import me.lucko.luckperms.api.HeldPermission; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.api.Storage; import me.lucko.luckperms.api.User; +import java.util.List; import java.util.Optional; import java.util.Set; import java.util.UUID; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; +import java.util.function.Consumer; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -42,6 +47,16 @@ import javax.annotation.Nullable; *

Note that User instances are automatically loaded for online players. * It's likely that offline players will not have an instance pre-loaded.

* + *

All blocking methods return {@link CompletableFuture}s, which will be + * populated with the result once the data has been loaded/saved asynchronously. + * Care should be taken when using such methods to ensure that the main server + * thread is not blocked.

+ * + *

Methods such as {@link CompletableFuture#get()} and equivalent should + * not be called on the main server thread. If you need to use + * the result of these operations on the main server thread, register a + * callback using {@link CompletableFuture#thenAcceptAsync(Consumer, Executor)}.

+ * * @since 4.0 */ public interface UserManager { @@ -85,6 +100,32 @@ public interface UserManager { return loadUser(uuid, null); } + /** + * Uses the LuckPerms cache to find a uuid for the given username. + * + *

This lookup is case insensitive.

+ * + * @param username the username + * @return a uuid, could be null + * @throws NullPointerException if either parameters are null + * @throws IllegalArgumentException if the username is invalid + * @since 4.2 + */ + @Nonnull + CompletableFuture lookupUuid(@Nonnull String username); + + /** + * Uses the LuckPerms cache to find a username for the given uuid. + * + * @param uuid the uuid + * @return a username, could be null + * @throws NullPointerException if either parameters are null + * @throws IllegalArgumentException if the username is invalid + * @since 4.2 + */ + @Nonnull + CompletableFuture lookupUsername(@Nonnull UUID uuid); + /** * Saves a user's data back to the plugin's storage provider. * @@ -105,6 +146,41 @@ public interface UserManager { @Nonnull CompletableFuture saveUser(@Nonnull User user); + /** + * Saves data about a player to the uuid caching system. + * + * @param uuid 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 + * @since 4.2 + */ + @Nonnull + CompletableFuture savePlayerData(@Nonnull UUID uuid, @Nonnull String username); + + /** + * Gets a set all "unique" user UUIDs. + * + *

"Unique" meaning the user isn't just a member of the "default" group.

+ * + * @return a set of uuids + * @since 4.2 + */ + @Nonnull + CompletableFuture> getUniqueUsers(); + + /** + * Searches for a list of users with a given permission. + * + * @param permission the permission to search for + * @return a list of held permissions + * @throws NullPointerException if the permission is null + * @since 4.2 + */ + @Nonnull + CompletableFuture>> getWithPermission(@Nonnull String permission); + /** * Gets a loaded user. * diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 381c444ba..bad31f8eb 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT 4.0.0 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 acf5c915e..7016ccb82 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -297,7 +297,7 @@ public class LPBukkitPlugin extends AbstractLuckPermsPlugin { final User user = getUserManager().getIfLoaded(player.getUniqueId()); if (user != null) { - user.getCachedData().invalidateCaches(); + user.getCachedData().invalidate(); getUserManager().unload(user); } } diff --git a/bungee/pom.xml b/bungee/pom.xml index 85b77f896..4def97861 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index b9b463c52..326e0c8a8 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT 4.0.0 diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegates/manager/ApiGroupManager.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/manager/ApiGroupManager.java index 8282bf707..c8b8e16ba 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegates/manager/ApiGroupManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/manager/ApiGroupManager.java @@ -25,16 +25,20 @@ package me.lucko.luckperms.common.api.delegates.manager; +import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.api.event.cause.DeletionCause; import me.lucko.luckperms.common.api.ApiUtils; import me.lucko.luckperms.common.api.delegates.model.ApiGroup; +import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint; +import me.lucko.luckperms.common.bulkupdate.comparisons.StandardComparison; import me.lucko.luckperms.common.managers.group.GroupManager; import me.lucko.luckperms.common.model.Group; import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.utils.ImmutableCollectors; +import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -94,6 +98,13 @@ public class ApiGroupManager extends ApiAbstractManager>> getWithPermission(@Nonnull String permission) { + Objects.requireNonNull(permission, "permission"); + return this.plugin.getStorage().getGroupsWithPermission(Constraint.of(StandardComparison.EQUAL, permission)); + } + @Override public me.lucko.luckperms.api.Group getGroup(@Nonnull String name) { Objects.requireNonNull(name, "name"); diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegates/manager/ApiUserManager.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/manager/ApiUserManager.java index 0224baa59..de66e873d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegates/manager/ApiUserManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/manager/ApiUserManager.java @@ -25,14 +25,19 @@ package me.lucko.luckperms.common.api.delegates.manager; +import me.lucko.luckperms.api.HeldPermission; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.common.api.ApiUtils; import me.lucko.luckperms.common.api.delegates.model.ApiUser; +import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint; +import me.lucko.luckperms.common.bulkupdate.comparisons.StandardComparison; import me.lucko.luckperms.common.managers.user.UserManager; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.model.UserIdentifier; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.utils.ImmutableCollectors; +import java.util.List; import java.util.Objects; import java.util.Set; import java.util.UUID; @@ -68,6 +73,20 @@ public class ApiUserManager extends ApiAbstractManager lookupUuid(@Nonnull String username) { + Objects.requireNonNull(username, "username"); + return this.plugin.getStorage().getPlayerUuid(username); + } + + @Nonnull + @Override + public CompletableFuture lookupUsername(@Nonnull UUID uuid) { + Objects.requireNonNull(uuid, "uuid"); + return this.plugin.getStorage().getPlayerName(uuid); + } + @Nonnull @Override public CompletableFuture saveUser(@Nonnull me.lucko.luckperms.api.User user) { @@ -75,6 +94,27 @@ public class ApiUserManager extends ApiAbstractManager savePlayerData(@Nonnull UUID uuid, @Nonnull String username) { + Objects.requireNonNull(uuid, "uuid"); + Objects.requireNonNull(username, "username"); + return this.plugin.getStorage().savePlayerData(uuid, username); + } + + @Nonnull + @Override + public CompletableFuture> getUniqueUsers() { + return this.plugin.getStorage().getUniqueUsers(); + } + + @Nonnull + @Override + public CompletableFuture>> getWithPermission(@Nonnull String permission) { + Objects.requireNonNull(permission, "permission"); + return this.plugin.getStorage().getUsersWithPermission(Constraint.of(StandardComparison.EQUAL, permission)); + } + @Override public me.lucko.luckperms.api.User getUser(@Nonnull UUID uuid) { Objects.requireNonNull(uuid, "uuid"); diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiPlatformInfo.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiPlatformInfo.java index 138b06cb4..1fc552241 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiPlatformInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiPlatformInfo.java @@ -50,7 +50,7 @@ public class ApiPlatformInfo implements PlatformInfo { @Override public double getApiVersion() { - return 4.1; + return 4.2; } @Nonnull diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegates/model/ApiPermissionHolder.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/model/ApiPermissionHolder.java index ead7cc132..d2267ed95 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegates/model/ApiPermissionHolder.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/model/ApiPermissionHolder.java @@ -99,7 +99,7 @@ public class ApiPermissionHolder implements me.lucko.luckperms.api.PermissionHol @Nonnull @Override public CompletableFuture refreshCachedData() { - return CompletableFuture.runAsync(() -> this.handle.getCachedData().invalidateCaches()); + return CompletableFuture.runAsync(() -> this.handle.getCachedData().invalidate()); } @Nonnull diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/AbstractCachedData.java b/common/src/main/java/me/lucko/luckperms/common/caching/AbstractCachedData.java index 27eb9ae77..41966bc47 100644 --- a/common/src/main/java/me/lucko/luckperms/common/caching/AbstractCachedData.java +++ b/common/src/main/java/me/lucko/luckperms/common/caching/AbstractCachedData.java @@ -355,14 +355,24 @@ public abstract class AbstractCachedData implements CachedData { this.meta.synchronous().invalidate(getDefaultMetaContexts(contexts)); } + @Override + public void invalidatePermissions() { + this.permission.synchronous().invalidateAll(); + } + + @Override + public void invalidateMeta() { + this.meta.synchronous().invalidateAll(); + } + @Override public void invalidatePermissionCalculators() { this.permission.synchronous().asMap().values().forEach(PermissionCache::invalidateCache); } - public void invalidateCaches() { - this.permission.synchronous().invalidateAll(); - this.meta.synchronous().invalidateAll(); + public void invalidate() { + invalidatePermissions(); + invalidateMeta(); } public void doCacheCleanup() { diff --git a/common/src/main/java/me/lucko/luckperms/common/caching/handlers/StateListener.java b/common/src/main/java/me/lucko/luckperms/common/caching/handlers/StateListener.java deleted file mode 100644 index bf233dc4f..000000000 --- a/common/src/main/java/me/lucko/luckperms/common/caching/handlers/StateListener.java +++ /dev/null @@ -1,37 +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.caching.handlers; - -import me.lucko.luckperms.common.model.PermissionHolder; - -/** - * Represents an object which is notified when the state of a {@link PermissionHolder} changes. - */ -public interface StateListener { - - void onStateChange(); - -} diff --git a/common/src/main/java/me/lucko/luckperms/common/listener/AbstractConnectionListener.java b/common/src/main/java/me/lucko/luckperms/common/listener/AbstractConnectionListener.java index 1d598cbd2..d3765a160 100644 --- a/common/src/main/java/me/lucko/luckperms/common/listener/AbstractConnectionListener.java +++ b/common/src/main/java/me/lucko/luckperms/common/listener/AbstractConnectionListener.java @@ -25,11 +25,12 @@ package me.lucko.luckperms.common.listener; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.common.assignments.AssignmentRule; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.model.User; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.PlayerSaveResult; +import me.lucko.luckperms.common.storage.PlayerSaveResultImpl; import java.util.Set; import java.util.UUID; @@ -63,11 +64,11 @@ public abstract class AbstractConnectionListener implements ConnectionListener { // save uuid data. PlayerSaveResult saveResult = this.plugin.getStorage().savePlayerData(u, username).join(); - if (saveResult.includes(PlayerSaveResult.Status.CLEAN_INSERT)) { + if (saveResult.includes(PlayerSaveResultImpl.Status.CLEAN_INSERT)) { this.plugin.getEventFactory().handleUserFirstLogin(u, username); } - if (saveResult.includes(PlayerSaveResult.Status.OTHER_UUIDS_PRESENT_FOR_USERNAME)) { + if (saveResult.includes(PlayerSaveResultImpl.Status.OTHER_UUIDS_PRESENT_FOR_USERNAME)) { 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 " + saveResult.getOtherUuids() + " but is now connecting with '" + u + "'"); this.plugin.getLogger().warn("This is usually because the server is not authenticating correctly. If you're using BungeeCord, please ensure that IP-Forwarding is setup correctly!"); 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 51a0c9725..1beea55e6 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 @@ -205,7 +205,7 @@ public abstract class PermissionHolder { * Invalidates the holder's cached data. */ public void invalidateCachedData() { - getCachedData().invalidateCaches(); + getCachedData().invalidate(); } protected void invalidateCache() { diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java index 250d7fddd..26437d5aa 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/AbstractStorage.java @@ -30,6 +30,7 @@ import com.google.common.collect.ImmutableList; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.api.event.cause.DeletionCause; import me.lucko.luckperms.common.actionlog.Log; @@ -115,11 +116,6 @@ public class AbstractStorage implements Storage { return this.dao.getName(); } - @Override - public Storage noBuffer() { - return this; - } - @Override public void init() { try { diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResultImpl.java b/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResultImpl.java new file mode 100644 index 000000000..b3c7f2616 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/storage/PlayerSaveResultImpl.java @@ -0,0 +1,135 @@ +/* + * 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.storage; + +import com.google.common.collect.ImmutableSet; + +import me.lucko.luckperms.api.PlayerSaveResult; + +import java.util.EnumSet; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +/** + * Represents the result to a player history save operation + */ +public final class PlayerSaveResultImpl implements PlayerSaveResult { + private static final PlayerSaveResultImpl CLEAN_INSERT = new PlayerSaveResultImpl(Status.CLEAN_INSERT); + private static final PlayerSaveResultImpl NO_CHANGE = new PlayerSaveResultImpl(Status.NO_CHANGE); + + public static PlayerSaveResultImpl cleanInsert() { + return CLEAN_INSERT; + } + + public static PlayerSaveResultImpl noChange() { + return NO_CHANGE; + } + + public static PlayerSaveResultImpl usernameUpdated(String oldUsername) { + return new PlayerSaveResultImpl(EnumSet.of(Status.USERNAME_UPDATED), oldUsername, null); + } + + public static PlayerSaveResultImpl determineBaseResult(String username, String oldUsername) { + PlayerSaveResultImpl result; + if (oldUsername == null) { + result = PlayerSaveResultImpl.cleanInsert(); + } else if (oldUsername.equalsIgnoreCase(username)) { + result = PlayerSaveResultImpl.noChange(); + } else { + result = PlayerSaveResultImpl.usernameUpdated(oldUsername); + } + return result; + } + + private final Set status; + @Nullable private final String oldUsername; + @Nullable private final Set otherUuids; + + private PlayerSaveResultImpl(EnumSet status, @Nullable String oldUsername, @Nullable Set otherUuids) { + this.status = ImmutableSet.copyOf(status); + this.oldUsername = oldUsername; + this.otherUuids = otherUuids; + } + + private PlayerSaveResultImpl(Status status) { + this(EnumSet.of(status), null, null); + } + + /** + * Returns a new {@link PlayerSaveResultImpl} with the {@link Status#OTHER_UUIDS_PRESENT_FOR_USERNAME} + * status attached to the state of this result. + * + * @param otherUuids the other uuids + * @return a new result + */ + public PlayerSaveResultImpl withOtherUuidsPresent(@Nonnull Set otherUuids) { + EnumSet status = EnumSet.copyOf(this.status); + status.add(Status.OTHER_UUIDS_PRESENT_FOR_USERNAME); + return new PlayerSaveResultImpl(status, this.oldUsername, ImmutableSet.copyOf(otherUuids)); + } + + @Nonnull + @Override + public Set getStatus() { + return this.status; + } + + @Override + public boolean includes(@Nonnull Status status) { + return this.status.contains(status); + } + + @Nullable + @Override + public String getOldUsername() { + return this.oldUsername; + } + + @Nullable + @Override + public Set getOtherUuids() { + return this.otherUuids; + } + + @Override + public boolean equals(Object that) { + if (this == that) return true; + if (that == null || getClass() != that.getClass()) return false; + PlayerSaveResultImpl result = (PlayerSaveResultImpl) that; + return Objects.equals(this.status, result.status) && + Objects.equals(this.oldUsername, result.oldUsername) && + Objects.equals(this.otherUuids, result.otherUuids); + } + + @Override + public int hashCode() { + return Objects.hash(this.status, this.oldUsername, this.otherUuids); + } +} 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 89ac09e5b..66e3f71ca 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 @@ -27,6 +27,7 @@ package me.lucko.luckperms.common.storage; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.api.event.cause.DeletionCause; import me.lucko.luckperms.common.actionlog.Log; @@ -56,8 +57,6 @@ public interface Storage { String getName(); - Storage noBuffer(); - void init(); void shutdown(); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/AbstractDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/AbstractDao.java index 200bf80e3..75f4a9e95 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/AbstractDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/AbstractDao.java @@ -27,6 +27,7 @@ package me.lucko.luckperms.common.storage.dao; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.common.actionlog.Log; import me.lucko.luckperms.common.bulkupdate.BulkUpdate; import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint; @@ -34,7 +35,6 @@ 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.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.PlayerSaveResult; import java.util.Collections; import java.util.List; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/SplitStorageDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/SplitStorageDao.java index cf7249d20..c0a8a8524 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/SplitStorageDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/SplitStorageDao.java @@ -29,6 +29,7 @@ import com.google.common.collect.ImmutableMap; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.common.actionlog.Log; import me.lucko.luckperms.common.bulkupdate.BulkUpdate; import me.lucko.luckperms.common.bulkupdate.comparisons.Constraint; @@ -36,7 +37,6 @@ 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.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.PlayerSaveResult; import me.lucko.luckperms.common.storage.SplitStorageType; import me.lucko.luckperms.common.storage.StorageType; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/AbstractConfigurateDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/AbstractConfigurateDao.java index c47b10455..797340c49 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/AbstractConfigurateDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/AbstractConfigurateDao.java @@ -32,6 +32,7 @@ import com.google.common.collect.Maps; import me.lucko.luckperms.api.ChatMetaType; import me.lucko.luckperms.api.LogEntry; import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.api.context.ImmutableContextSet; import me.lucko.luckperms.common.actionlog.Log; import me.lucko.luckperms.common.bulkupdate.BulkUpdate; @@ -45,7 +46,6 @@ import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.node.model.NodeDataContainer; import me.lucko.luckperms.common.node.utils.MetaType; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.PlayerSaveResult; import me.lucko.luckperms.common.storage.dao.AbstractDao; import me.lucko.luckperms.common.storage.dao.file.loader.ConfigurateLoader; import me.lucko.luckperms.common.storage.dao.file.loader.JsonLoader; diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileUuidCache.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileUuidCache.java index af44cad44..01dfd02ce 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileUuidCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/file/FileUuidCache.java @@ -30,7 +30,8 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Multimaps; import com.google.common.collect.SetMultimap; -import me.lucko.luckperms.common.storage.PlayerSaveResult; +import me.lucko.luckperms.api.PlayerSaveResult; +import me.lucko.luckperms.common.storage.PlayerSaveResultImpl; import me.lucko.luckperms.common.utils.Uuids; import java.io.BufferedReader; @@ -104,7 +105,7 @@ public class FileUuidCache { // perform the insert String oldUsername = this.lookupMap.put(uuid, username); - PlayerSaveResult result = PlayerSaveResult.determineBaseResult(username, oldUsername); + PlayerSaveResultImpl result = PlayerSaveResultImpl.determineBaseResult(username, oldUsername); Set conflicting = new HashSet<>(this.lookupMap.lookupUuid(username)); conflicting.remove(uuid); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java index 7050dec98..34fca7ef8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/mongodb/MongoDao.java @@ -40,6 +40,7 @@ import com.mongodb.client.model.UpdateOptions; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.api.context.ImmutableContextSet; import me.lucko.luckperms.api.context.MutableContextSet; @@ -59,7 +60,7 @@ import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.node.model.NodeDataContainer; import me.lucko.luckperms.common.node.model.NodeHeldPermission; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.PlayerSaveResult; +import me.lucko.luckperms.common.storage.PlayerSaveResultImpl; import me.lucko.luckperms.common.storage.StorageCredentials; import me.lucko.luckperms.common.storage.dao.AbstractDao; @@ -582,7 +583,7 @@ public class MongoDao extends AbstractDao { c.replaceOne(new Document("_id", uuid), new Document("_id", uuid).append("name", username), new UpdateOptions().upsert(true)); } - PlayerSaveResult result = PlayerSaveResult.determineBaseResult(username, oldUsername); + PlayerSaveResultImpl result = PlayerSaveResultImpl.determineBaseResult(username, oldUsername); Set conflicting = new HashSet<>(); try (MongoCursor cursor = c.find(new Document("name", username)).iterator()) { diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java index 78b57f839..ccb8e42a4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/dao/sql/SqlDao.java @@ -32,6 +32,7 @@ import com.google.gson.reflect.TypeToken; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.api.PlayerSaveResult; import me.lucko.luckperms.common.actionlog.ExtendedLogEntry; import me.lucko.luckperms.common.actionlog.Log; import me.lucko.luckperms.common.bulkupdate.BulkUpdate; @@ -49,7 +50,7 @@ import me.lucko.luckperms.common.node.factory.NodeFactory; import me.lucko.luckperms.common.node.model.NodeDataContainer; import me.lucko.luckperms.common.node.model.NodeHeldPermission; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.PlayerSaveResult; +import me.lucko.luckperms.common.storage.PlayerSaveResultImpl; import me.lucko.luckperms.common.storage.dao.AbstractDao; import me.lucko.luckperms.common.storage.dao.sql.connection.AbstractConnectionFactory; import me.lucko.luckperms.common.storage.dao.sql.connection.file.SQLiteConnectionFactory; @@ -932,7 +933,7 @@ public class SqlDao extends AbstractDao { } } - PlayerSaveResult result = PlayerSaveResult.determineBaseResult(username, oldUsername); + PlayerSaveResultImpl result = PlayerSaveResultImpl.determineBaseResult(username, oldUsername); Set conflicting = new HashSet<>(); try (Connection c = this.provider.getConnection()) { diff --git a/nukkit/pom.xml b/nukkit/pom.xml index f58addd3b..c9173ba09 100644 --- a/nukkit/pom.xml +++ b/nukkit/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT 4.0.0 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 667a76d2e..3519b5c3e 100644 --- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitPlugin.java +++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/LPNukkitPlugin.java @@ -266,7 +266,7 @@ public class LPNukkitPlugin extends AbstractLuckPermsPlugin { final User user = getUserManager().getIfLoaded(player.getUniqueId()); if (user != null) { - user.getCachedData().invalidateCaches(); + user.getCachedData().invalidate(); getUserManager().unload(user); } } diff --git a/pom.xml b/pom.xml index 662fb7f93..b4479a4df 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.lucko.luckperms luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT api @@ -55,7 +55,7 @@ true - 4.1 + 4.2 ${git.closest.tag.commit.count} diff --git a/sponge/pom.xml b/sponge/pom.xml index 068566006..5903a78cd 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT 4.0.0 diff --git a/sponge/sponge-service-api6/pom.xml b/sponge/sponge-service-api6/pom.xml index edfc024de..285c92a55 100644 --- a/sponge/sponge-service-api6/pom.xml +++ b/sponge/sponge-service-api6/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/sponge/sponge-service-api7/pom.xml b/sponge/sponge-service-api7/pom.xml index dd134ae26..a3749c14a 100644 --- a/sponge/sponge-service-api7/pom.xml +++ b/sponge/sponge-service-api7/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/sponge/sponge-service/pom.xml b/sponge/sponge-service/pom.xml index dc4cc16a9..f4295e57b 100644 --- a/sponge/sponge-service/pom.xml +++ b/sponge/sponge-service/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.1-SNAPSHOT + 4.2-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubject.java index d56f905ed..4dd88588c 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubject.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/calculated/CalculatedSubject.java @@ -321,7 +321,7 @@ public abstract class CalculatedSubject implements LPSubject { @Override public void invalidateCaches() { - this.cachedData.invalidateCaches(); + this.cachedData.invalidate(); } } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/internal/HolderSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/internal/HolderSubject.java index d247e4c12..0c6d72d2c 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/internal/HolderSubject.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/internal/HolderSubject.java @@ -161,7 +161,7 @@ public abstract class HolderSubject implements LPSub @Override public void invalidateCaches() { // invalidate for all changes - this.parent.getCachedData().invalidateCaches(); + this.parent.getCachedData().invalidate(); } }