diff --git a/api/pom.xml b/api/pom.xml index 9d076b2dc..333282a97 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 2.17-SNAPSHOT + 3.0-SNAPSHOT 4.0.0 diff --git a/api/src/main/java/me/lucko/luckperms/api/Contexts.java b/api/src/main/java/me/lucko/luckperms/api/Contexts.java index 5fffa0a03..24cc6350d 100644 --- a/api/src/main/java/me/lucko/luckperms/api/Contexts.java +++ b/api/src/main/java/me/lucko/luckperms/api/Contexts.java @@ -24,8 +24,6 @@ package me.lucko.luckperms.api; import me.lucko.luckperms.api.context.ContextSet; -import java.util.Map; - /** * Context and options for a permission lookup. * @@ -51,18 +49,6 @@ public class Contexts { return new Contexts(context, includeGlobal, includeGlobalWorld, applyGroups, applyGlobalGroups, applyGlobalWorldGroups, op); } - @SuppressWarnings("deprecation") - @Deprecated - public static Contexts of(Map context, boolean includeGlobal, boolean includeGlobalWorld, boolean applyGroups, boolean applyGlobalGroups, boolean applyGlobalWorldGroups) { - return new Contexts(context, includeGlobal, includeGlobalWorld, applyGroups, applyGlobalGroups, applyGlobalWorldGroups); - } - - @SuppressWarnings("deprecation") - @Deprecated - public static Contexts of(Map context, boolean includeGlobal, boolean includeGlobalWorld, boolean applyGroups, boolean applyGlobalGroups, boolean applyGlobalWorldGroups, boolean op) { - return new Contexts(context, includeGlobal, includeGlobalWorld, applyGroups, applyGlobalGroups, applyGlobalWorldGroups, op); - } - /** * The contexts that apply for this lookup * The keys for servers and worlds are defined as static values. @@ -115,17 +101,6 @@ public class Contexts { this.op = op; } - @Deprecated - public Contexts(Map context, boolean includeGlobal, boolean includeGlobalWorld, boolean applyGroups, boolean applyGlobalGroups, boolean applyGlobalWorldGroups, boolean op) { - this(context == null ? null : ContextSet.fromMap(context), includeGlobal, includeGlobalWorld, applyGroups, applyGlobalGroups, applyGlobalWorldGroups, op); - } - - @SuppressWarnings("deprecation") - @Deprecated - public Contexts(Map context, boolean includeGlobal, boolean includeGlobalWorld, boolean applyGroups, boolean applyGlobalGroups, boolean applyGlobalWorldGroups) { - this(context, includeGlobal, includeGlobalWorld, applyGroups, applyGlobalGroups, applyGlobalWorldGroups, false); - } - /** * Gets the contexts that apply for this lookup * @@ -136,17 +111,6 @@ public class Contexts { return this.context; } - /** - * Gets the contexts that apply for this lookup - * - * @return an immutable map of context key value pairs - * @deprecated in favour of {@link #getContexts()} - */ - @Deprecated - public Map getContext() { - return this.context.toMap(); - } - /** * Gets if OP defaults should be included * diff --git a/api/src/main/java/me/lucko/luckperms/api/Datastore.java b/api/src/main/java/me/lucko/luckperms/api/Datastore.java deleted file mode 100644 index 621dfd052..000000000 --- a/api/src/main/java/me/lucko/luckperms/api/Datastore.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api; - -import me.lucko.luckperms.api.data.Callback; - -import java.util.Set; -import java.util.UUID; - -/** - * Deprecated Storage interface. Use {@link Storage} instead. - * - * @deprecated as of version 2.14 in favour of {@link Storage}. - */ -@Deprecated -public interface Datastore { - - String getName(); - - boolean isAcceptingLogins(); - - @Deprecated - Sync sync(); - - @Deprecated - Async async(); - - @Deprecated - Future future(); - - @Deprecated - interface Sync { - boolean logAction(LogEntry entry); - - Log getLog(); - - @Deprecated - boolean loadOrCreateUser(UUID uuid, String username); - - @Deprecated - boolean loadUser(UUID uuid); - - boolean loadUser(UUID uuid, String username); - - boolean saveUser(User user); - - boolean cleanupUsers(); - - Set getUniqueUsers(); - - boolean createAndLoadGroup(String name); - - boolean loadGroup(String name); - - boolean loadAllGroups(); - - boolean saveGroup(Group group); - - boolean deleteGroup(Group group); - - boolean createAndLoadTrack(String name); - - boolean loadTrack(String name); - - boolean loadAllTracks(); - - boolean saveTrack(Track track); - - boolean deleteTrack(Track track); - - boolean saveUUIDData(String username, UUID uuid); - - UUID getUUID(String username); - } - - @Deprecated - interface Async { - void logAction(LogEntry entry, Callback callback); - - void getLog(Callback callback); - - @Deprecated - void loadOrCreateUser(UUID uuid, String username, Callback callback); - - @Deprecated - void loadUser(UUID uuid, Callback callback); - - void loadUser(UUID uuid, String username, Callback callback); - - void saveUser(User user, Callback callback); - - void cleanupUsers(Callback callback); - - void getUniqueUsers(Callback> callback); - - void createAndLoadGroup(String name, Callback callback); - - void loadGroup(String name, Callback callback); - - void loadAllGroups(Callback callback); - - void saveGroup(Group group, Callback callback); - - void deleteGroup(Group group, Callback callback); - - void createAndLoadTrack(String name, Callback callback); - - void loadTrack(String name, Callback callback); - - void loadAllTracks(Callback callback); - - void saveTrack(Track track, Callback callback); - - void deleteTrack(Track track, Callback callback); - - void saveUUIDData(String username, UUID uuid, Callback callback); - - void getUUID(String username, Callback callback); - } - - @Deprecated - interface Future { - java.util.concurrent.Future logAction(LogEntry entry); - - java.util.concurrent.Future getLog(); - - @Deprecated - java.util.concurrent.Future loadOrCreateUser(UUID uuid, String username); - - @Deprecated - java.util.concurrent.Future loadUser(UUID uuid); - - java.util.concurrent.Future loadUser(UUID uuid, String username); - - java.util.concurrent.Future saveUser(User user); - - java.util.concurrent.Future cleanupUsers(); - - java.util.concurrent.Future> getUniqueUsers(); - - java.util.concurrent.Future createAndLoadGroup(String name); - - java.util.concurrent.Future loadGroup(String name); - - java.util.concurrent.Future loadAllGroups(); - - java.util.concurrent.Future saveGroup(Group group); - - java.util.concurrent.Future deleteGroup(Group group); - - java.util.concurrent.Future createAndLoadTrack(String name); - - java.util.concurrent.Future loadTrack(String name); - - java.util.concurrent.Future loadAllTracks(); - - java.util.concurrent.Future saveTrack(Track track); - - java.util.concurrent.Future deleteTrack(Track track); - - java.util.concurrent.Future saveUUIDData(String username, UUID uuid); - - java.util.concurrent.Future getUUID(String username); - } -} diff --git a/api/src/main/java/me/lucko/luckperms/api/LPConfiguration.java b/api/src/main/java/me/lucko/luckperms/api/LPConfiguration.java index 9bd4a4718..be123eb63 100644 --- a/api/src/main/java/me/lucko/luckperms/api/LPConfiguration.java +++ b/api/src/main/java/me/lucko/luckperms/api/LPConfiguration.java @@ -23,7 +23,6 @@ package me.lucko.luckperms.api; import me.lucko.luckperms.api.data.DatastoreConfiguration; -import me.lucko.luckperms.api.data.MySQLConfiguration; import java.util.Map; @@ -44,22 +43,6 @@ public interface LPConfiguration { */ int getSyncTime(); - /** - * Returns the default group, in a node representation - * @return the default group, in a node representation - * @deprecated as of 2.6, the default group is always "default" - */ - @Deprecated - String getDefaultGroupNode(); - - /** - * Returns the name of the default group - * @return the name of the default group - * @deprecated as of 2.6, the default group is always "default" - */ - @Deprecated - String getDefaultGroupName(); - /** * Returns if the users on this server will have their global permissions applied * @return if the users on this server will have their global permissions applied @@ -118,15 +101,6 @@ public interface LPConfiguration { */ boolean getLogNotify(); - /** - * Returns true if permission checks are being recorded / debugged - * @return true if permission checks are being recorded / debugged - * @since 2.9 - * @deprecated as this value is now always false. Functionality was replaced by the verbose command. - */ - @Deprecated - boolean getDebugPermissionChecks(); - /** * Returns true if the vanilla op system is enabled * @return true if the vanilla op system is enabled @@ -162,15 +136,6 @@ public interface LPConfiguration { */ boolean getVaultIncludeGlobal(); - /** - * Returns the database values set in the configuration - * @return the database values set in the configuration - * @deprecated use {@link #getDatastoreConfig()} - */ - @SuppressWarnings("deprecation") - @Deprecated - MySQLConfiguration getDatabaseValues(); - /** * Returns the values set for data storage in the configuration * @return the values set for data storage in the configuration diff --git a/api/src/main/java/me/lucko/luckperms/api/LuckPermsApi.java b/api/src/main/java/me/lucko/luckperms/api/LuckPermsApi.java index 8aa14ed02..112006362 100644 --- a/api/src/main/java/me/lucko/luckperms/api/LuckPermsApi.java +++ b/api/src/main/java/me/lucko/luckperms/api/LuckPermsApi.java @@ -22,10 +22,9 @@ package me.lucko.luckperms.api; -import me.lucko.luckperms.api.context.ContextListener; +import me.lucko.luckperms.api.context.ContextCalculator; import me.lucko.luckperms.api.context.ContextSet; -import me.lucko.luckperms.api.context.IContextCalculator; -import me.lucko.luckperms.api.event.LPListener; +import me.lucko.luckperms.api.event.EventBus; import java.util.Optional; import java.util.Set; @@ -42,37 +41,31 @@ public interface LuckPermsApi { void runUpdateTask(); /** + * Gets the API version * @return the version of the API running on the platform * @since 2.6 */ double getApiVersion(); /** + * Gets the plugin version * @return the version of the plugin running on the platform */ String getVersion(); /** + * Gets the platform LuckPerms is running on * @return the platform LuckPerms is running on * @since 2.7 */ PlatformType getPlatformType(); /** - * Registers a listener to be sent LuckPerms events - * - * @param listener the listener instance - * @throws NullPointerException if the listener is null + * Gets the event bus, used for subscribing to events + * @return the event bus + * @since 3.0 */ - void registerListener(LPListener listener); - - /** - * Unregisters a previously registered listener from the EventBus - * - * @param listener the listener instance to unregister - * @throws NullPointerException if the listener is null - */ - void unregisterListener(LPListener listener); + EventBus getEventBus(); /** * Gets a wrapped {@link LPConfiguration} instance, with read only access @@ -89,16 +82,6 @@ public interface LuckPermsApi { */ Storage getStorage(); - /** - * Gets a wrapped Datastore instance. - * - * @return a datastore instance - * @deprecated in favour of {@link #getStorage()} - */ - @SuppressWarnings("deprecation") - @Deprecated - Datastore getDatastore(); - /** * Gets the messaging service in use on the platform, if present. * @@ -274,15 +257,7 @@ public interface LuckPermsApi { * @param contextCalculator the context calculator to register. The type MUST be the player class of the platform. * @throws ClassCastException if the type is not the player class of the platform. */ - void registerContextCalculator(IContextCalculator contextCalculator); - - /** - * Registers a custom context listener to the server, - * - * @param contextListener the context listener to register. The type MUST be the player class of the platform. - * @throws ClassCastException if the type is not the player class of the platform. - */ - void registerContextListener(ContextListener contextListener); + void registerContextCalculator(ContextCalculator contextCalculator); /** * Gets a calculated context instance for the user using the rules of the platform. @@ -295,7 +270,7 @@ public interface LuckPermsApi { Optional getContextForUser(User user); /** - * Gets set of contexts applicable to a player using the platforms {@link IContextCalculator}s. + * Gets set of contexts applicable to a player using the platforms {@link ContextCalculator}s. * * @param player the player to calculate for. Must be the player instance for the platform. * @return a set of contexts. diff --git a/api/src/main/java/me/lucko/luckperms/api/Node.java b/api/src/main/java/me/lucko/luckperms/api/Node.java index 4e202e595..2b747e9c4 100644 --- a/api/src/main/java/me/lucko/luckperms/api/Node.java +++ b/api/src/main/java/me/lucko/luckperms/api/Node.java @@ -133,31 +133,6 @@ public interface Node extends Map.Entry { */ boolean shouldApplyWithContext(ContextSet context); - /** - * If this node should apply in the given context - * - * @param context the context key value pairs - * @param worldAndServer if world and server contexts should be checked - * @return true if the node should apply - * @deprecated in favour of {@link #shouldApplyWithContext(ContextSet, boolean)} - */ - @Deprecated - default boolean shouldApplyWithContext(Map context, boolean worldAndServer) { - return shouldApplyWithContext(ContextSet.fromMap(context), worldAndServer); - } - - /** - * If this node should apply in the given context - * - * @param context the context key value pairs - * @return true if the node should apply - * @deprecated in favour of {@link #shouldApplyWithContext(ContextSet)} - */ - @Deprecated - default boolean shouldApplyWithContext(Map context) { - return shouldApplyWithContext(ContextSet.fromMap(context)); - } - /** * Similar to {@link #shouldApplyOnServer(String, boolean, boolean)}, except this method accepts a List * @@ -227,15 +202,6 @@ public interface Node extends Map.Entry { */ boolean hasExpired(); - /** - * @return the extra contexts required for this node to apply - * @deprecated in favour of {@link #getContexts()} - */ - @Deprecated - default Map getExtraContexts() { - return getContexts().toMap(); - } - /** * @return the extra contexts required for this node to apply * @since 2.13 diff --git a/api/src/main/java/me/lucko/luckperms/api/PermissionHolder.java b/api/src/main/java/me/lucko/luckperms/api/PermissionHolder.java index ef907d78f..5d2a85d67 100644 --- a/api/src/main/java/me/lucko/luckperms/api/PermissionHolder.java +++ b/api/src/main/java/me/lucko/luckperms/api/PermissionHolder.java @@ -25,7 +25,6 @@ package me.lucko.luckperms.api; import me.lucko.luckperms.exceptions.ObjectAlreadyHasException; import me.lucko.luckperms.exceptions.ObjectLacksException; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; @@ -73,17 +72,6 @@ public interface PermissionHolder { */ Set getTransientPermissions(); - - /** - * Gets an immutable set of the nodes that this object has and inherits - * - * @return an immutable set of permissions - * @since 2.6 - * @deprecated in favour of {@link #getAllNodes(Contexts)} - */ - @Deprecated - Set getAllNodes(); - /** * Gets a mutable sorted set of the nodes that this object has and inherits, filtered by context * Unlike {@link #getAllNodesFiltered(Contexts)}, this method will not filter individual nodes. The context is only @@ -117,15 +105,6 @@ public interface PermissionHolder { */ Map exportNodes(Contexts contexts, boolean lowerCase); - /** - * Gets an immutable Map of the objects permission nodes - * - * @return an immutable map of permissions - * @deprecated in favour of {@link #getPermissions()} - */ - @Deprecated - Map getNodes(); - /** * Removes temporary permissions that have expired */ @@ -631,86 +610,4 @@ public interface PermissionHolder { */ Set getTemporaryPermissionNodes(); - /** - * Gets the permissions and inherited permissions that apply to a specific server and world - * - * @param server The server to get nodes for - * @param world The world to get nodes for - * @param excludedGroups Groups that shouldn't be inherited (to prevent circular inheritance issues) - * @param possibleNodes A list of possible permission nodes for wildcard permission handling - * @return a {@link Map} of the permissions - * @deprecated in favour of {@link #getPermissions(String, String, Map, boolean, List, boolean)} - */ - @Deprecated - Map getLocalPermissions(String server, String world, List excludedGroups, List possibleNodes); - - /** - * Gets the permissions and inherited permissions that apply to a specific server and world - * - * @param server The server to get nodes for - * @param world The world to get nodes for - * @param excludedGroups Groups that shouldn't be inherited (to prevent circular inheritance issues) - * @return a {@link Map} of the permissions - * @deprecated in favour of {@link #getPermissions(String, String, Map, boolean, List, boolean)} - */ - @Deprecated - Map getLocalPermissions(String server, String world, List excludedGroups); - - /** - * Gets the permissions and inherited permissions that apply to a specific server - * - * @param server The server to get nodes for - * @param excludedGroups Groups that shouldn't be inherited (to prevent circular inheritance issues) - * @param possibleNodes A list of possible permission nodes for wildcard permission handling - * @return a {@link Map} of the permissions - * @deprecated in favour of {@link #getPermissions(String, String, Map, boolean, List, boolean)} - */ - @Deprecated - Map getLocalPermissions(String server, List excludedGroups, List possibleNodes); - - /** - * Gets the permissions and inherited permissions that apply to a specific server - * - * @param server The server to get nodes for - * @param excludedGroups Groups that shouldn't be inherited (to prevent circular inheritance issues) - * @return a {@link Map} of the permissions - * @deprecated in favour of {@link #getPermissions(String, String, Map, boolean, List, boolean)} - */ - @Deprecated - Map getLocalPermissions(String server, List excludedGroups); - - /** - * Convert the holders nodes into a Map of permissions to be applied on the platform - * - * @param server the server - * @param world the world - * @param extraContext any extra context to filter by - * @param includeGlobal whether to include global nodes - * @param possibleNodes a list of possible permissions for resolving wildcards - * @param applyGroups if inherited group permissions should be included - * @return a map of permissions - * @since 2.6 - * @deprecated in favour of {@link #getAllNodesFiltered(Contexts)} - */ - @Deprecated - Map getPermissions(String server, String world, Map extraContext, boolean includeGlobal, List possibleNodes, boolean applyGroups); - - /** - * Processes the nodes and returns the temporary ones. - * - * @return a map of temporary nodes - * @deprecated in favour of {@link #getTemporaryPermissionNodes()} - */ - @Deprecated - Map, Long> getTemporaryNodes(); - - /** - * Processes the nodes and returns the non-temporary ones. - * - * @return a map of permanent nodes - * @deprecated in favour of {@link #getPermanentPermissionNodes()} - */ - @Deprecated - Map getPermanentNodes(); - } diff --git a/api/src/main/java/me/lucko/luckperms/api/PlatformType.java b/api/src/main/java/me/lucko/luckperms/api/PlatformType.java index e99644076..04e7fad81 100644 --- a/api/src/main/java/me/lucko/luckperms/api/PlatformType.java +++ b/api/src/main/java/me/lucko/luckperms/api/PlatformType.java @@ -31,12 +31,7 @@ public enum PlatformType { BUKKIT("Bukkit"), BUNGEE("Bungee"), - SPONGE("Sponge"), - - /** - * @since 2.9 - */ - STANDALONE("Standalone"); + SPONGE("Sponge"); private final String friendlyName; diff --git a/api/src/main/java/me/lucko/luckperms/api/context/ContextCalculator.java b/api/src/main/java/me/lucko/luckperms/api/context/ContextCalculator.java index f26303bea..aec773715 100644 --- a/api/src/main/java/me/lucko/luckperms/api/context/ContextCalculator.java +++ b/api/src/main/java/me/lucko/luckperms/api/context/ContextCalculator.java @@ -22,55 +22,34 @@ package me.lucko.luckperms.api.context; -import java.util.List; import java.util.Map; -import java.util.concurrent.CopyOnWriteArrayList; /** - * A simple implementation of the listener aspects of {@link IContextCalculator} + * Calculates whether contexts are applicable to {@link T} * - * @param the subject type + *

Somewhat inspired by the system used on Sponge. + * + * @param the subject type. Is ALWAYS the player class of the platform. */ -public abstract class ContextCalculator implements IContextCalculator { - private final List> listeners = new CopyOnWriteArrayList<>(); +public interface ContextCalculator { /** - * Pushes an update to all registered {@link ContextListener}s. - * Make sure any changes are applied internally before this method is called. + * Gives the subject all of the applicable contexts they meet * - * @param subject the subject that changed - * @param before the context state before the change - * @param current the context state after the change (now) - * @throws NullPointerException if any parameters are null + * @param subject the subject to add contexts to + * @param accumulator a map of contexts to add to + * @return the map + * @since 2.13 */ - protected void pushUpdate(T subject, Map.Entry before, Map.Entry current) { - if (subject == null) { - throw new NullPointerException("subject"); - } - if (before == null) { - throw new NullPointerException("before"); - } - if (current == null) { - throw new NullPointerException("current"); - } + MutableContextSet giveApplicableContext(T subject, MutableContextSet accumulator); - for (ContextListener listener : listeners) { - try { - listener.onContextChange(subject, before, current); - } catch (Exception e) { - System.out.println("Exception whilst passing context change to listener: " + listener); - e.printStackTrace(); - } - } - } - - @Override - public void addListener(ContextListener listener) { - if (listener == null) { - throw new NullPointerException("listener"); - } - - listeners.add(listener); - } + /** + * Checks to see if a context is applicable to a subject + * + * @param subject the subject to check against + * @param context the context to check for + * @return true if met, or false if not. If this calculator does not calculate the given context, return false. + */ + boolean isContextApplicable(T subject, Map.Entry context); } diff --git a/api/src/main/java/me/lucko/luckperms/api/context/IContextCalculator.java b/api/src/main/java/me/lucko/luckperms/api/context/IContextCalculator.java deleted file mode 100644 index 20e0b6876..000000000 --- a/api/src/main/java/me/lucko/luckperms/api/context/IContextCalculator.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api.context; - -import java.util.Map; - -/** - * Calculates whether contexts are applicable to {@link T} - * - *

Somewhat inspired by the system used on Sponge. - * - * @param the subject type. Is ALWAYS the player class of the platform. - */ -public interface IContextCalculator { - - /** - * Gives the subject all of the applicable contexts they meet - * - * @param subject the subject to add contexts to - * @param accumulator a map of contexts to add to - * @return the map - * @since 2.13 - */ - MutableContextSet giveApplicableContext(T subject, MutableContextSet accumulator); - - /** - * Checks to see if a context is applicable to a subject - * - * @param subject the subject to check against - * @param context the context to check for - * @return true if met, or false if not. If this calculator does not calculate the given context, return false. - */ - boolean isContextApplicable(T subject, Map.Entry context); - - /** - * Adds a listener to be called whenever a context handled by this calculator changes - * - * @param listener the listener instance - * @throws NullPointerException if listener is null - */ - void addListener(ContextListener listener); - -} diff --git a/api/src/main/java/me/lucko/luckperms/api/data/Callback.java b/api/src/main/java/me/lucko/luckperms/api/data/Callback.java deleted file mode 100644 index 177262e8c..000000000 --- a/api/src/main/java/me/lucko/luckperms/api/data/Callback.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api.data; - -import java.util.function.Consumer; - -/** - * A callback used to wait for the completion of asynchronous operations. - * All callbacks are ran on the main server thread. - * - * @param the return type - * @deprecated in favour of {@link Consumer} - */ -@Deprecated -public interface Callback { - - static Callback empty() { - return t -> { - }; - } - - static Callback of(Runnable runnable) { - if (runnable == null) { - throw new NullPointerException("runnable"); - } - return t -> runnable.run(); - } - - static Callback of(Consumer consumer) { - if (consumer == null) { - throw new NullPointerException("consumer"); - } - return consumer::accept; - } - - /** - * Helper method for converting old {@link Callback}s to use the new {@link me.lucko.luckperms.api.Storage} - * interface. - * - * @param callback the callback to convert - * @param the return type - * @return a consumer instance - * @since 2.14 - * @deprecated in favour of just using {@link Consumer}s. - */ - @Deprecated - static Consumer convertToConsumer(Callback callback) { - return callback::onComplete; - } - - /** - * Called when the operation completes. - * - * @param t the return value, may be null - */ - void onComplete(T t); - -} diff --git a/api/src/main/java/me/lucko/luckperms/api/data/DatastoreConfiguration.java b/api/src/main/java/me/lucko/luckperms/api/data/DatastoreConfiguration.java index c8f7dfa94..fae694df0 100644 --- a/api/src/main/java/me/lucko/luckperms/api/data/DatastoreConfiguration.java +++ b/api/src/main/java/me/lucko/luckperms/api/data/DatastoreConfiguration.java @@ -26,8 +26,7 @@ package me.lucko.luckperms.api.data; * Represents the data section of the main LuckPerms configuration. * All methods could return null. */ -@SuppressWarnings("deprecation") -public interface DatastoreConfiguration extends MySQLConfiguration { +public interface DatastoreConfiguration { String getAddress(); diff --git a/api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionAddEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionAddEvent.java deleted file mode 100644 index 3984df491..000000000 --- a/api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionAddEvent.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api.event; - -import me.lucko.luckperms.api.PermissionHolder; - -import java.util.Optional; - -public class AbstractPermissionAddEvent extends TargetedEvent { - - private final String server; - private final String world; - private final long expiry; - - protected AbstractPermissionAddEvent(String eventName, PermissionHolder target, String server, String world, long expiry) { - super(eventName, target); - this.server = server; - this.world = world; - this.expiry = expiry; - } - - public Optional getServer() { - return Optional.ofNullable(server); - } - - public Optional getWorld() { - return Optional.ofNullable(world); - } - - public boolean isTemporary() { - return expiry != 0L; - } - - public long getExpiry() { - return expiry; - } -} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/UserEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/Cancellable.java similarity index 79% rename from api/src/main/java/me/lucko/luckperms/api/event/UserEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/Cancellable.java index 80225181c..e19c959d5 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/UserEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/Cancellable.java @@ -22,21 +22,18 @@ package me.lucko.luckperms.api.event; -import me.lucko.luckperms.api.User; +import java.util.concurrent.atomic.AtomicBoolean; /** - * Represents an event acting upon a user. + * Represents an event that can be cancelled */ -public class UserEvent extends LPEvent { +public interface Cancellable { - private final User user; + /** + * Gets an {@link AtomicBoolean} holding the cancellation state of the event + * + * @return the cancellation + */ + AtomicBoolean getCancellationState(); - protected UserEvent(String eventName, User user) { - super(eventName); - this.user = user; - } - - public User getUser() { - return user; - } } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/LPEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/EventBus.java similarity index 59% rename from api/src/main/java/me/lucko/luckperms/api/event/LPEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/EventBus.java index a9cadd4f0..27eec611d 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/LPEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/EventBus.java @@ -22,39 +22,33 @@ package me.lucko.luckperms.api.event; -import me.lucko.luckperms.api.LuckPermsApi; +import java.util.Set; +import java.util.function.Consumer; /** - * Abstract LuckPerms Event class. + * The LuckPerms event bus. Used for subscribing (or registering listeners) to events. + * + * @since 3.0 */ -public abstract class LPEvent { +public interface EventBus { /** - * A friendly name of the event + * Subscribe to an event + * + * @param eventClass the event class + * @param handler the event handler + * @param the event class + * @return an event handler instance representing this subscription */ - private final String eventName; + EventHandler subscribe(Class eventClass, Consumer handler); + /** - * A link to the API instance provided for convenience. + * Gets a set of all registered handlers for a given event + * + * @param eventClass the event to find handlers for + * @param the event class + * @return an immutable set of event handlers */ - private LuckPermsApi api = null; - - protected LPEvent(String eventName) { - this.eventName = eventName; - } - - public String getEventName() { - return eventName; - } - - public LuckPermsApi getApi() { - return api; - } - - public void setApi(LuckPermsApi api) { - if (this.api != null) { - throw new IllegalStateException("API can only be set once."); - } - this.api = api; - } + Set> getHandlers(Class eventClass); } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionRemoveEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/EventHandler.java similarity index 56% rename from api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionRemoveEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/EventHandler.java index daa26636f..3af0c7139 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionRemoveEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/EventHandler.java @@ -22,41 +22,48 @@ package me.lucko.luckperms.api.event; -import me.lucko.luckperms.api.PermissionHolder; +import java.util.function.Consumer; -import java.util.Optional; - -public class AbstractPermissionRemoveEvent extends TargetedEvent { - - private final String server; - private final String world; - private final boolean temporary; - - protected AbstractPermissionRemoveEvent(String eventName, PermissionHolder target, String server, String world, boolean temporary) { - super(eventName, target); - this.server = server; - this.world = world; - this.temporary = temporary; - } - - public Optional getServer() { - return Optional.ofNullable(server); - } - - public Optional getWorld() { - return Optional.ofNullable(world); - } +/** + * Represents a handler for a LuckPerms event + * + * @param the event class + */ +public interface EventHandler { /** - * @deprecated use {@link #isTemporary()} + * Gets the class this handler is listening to + * + * @return the event class */ - @Deprecated - public boolean getTemporary() { - return temporary; - } + Class getEventClass(); - public boolean isTemporary() { - return temporary; - } + /** + * Returns true if this handler is active + * + * @return true if this handler is still active + */ + boolean isActive(); + + /** + * Unregisters this handler from the event bus + * + * @return true if the handler wasn't already unregistered + */ + boolean unregister(); + + /** + * Gets the event consumer responsible for handling the event + * + * @return the event consumer + */ + Consumer getConsumer(); + + /** + * Gets the number of times this handler has been called + * + * @return the number of times this handler has been called + */ + int getCallCount(); } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/TargetedEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/LuckPermsEvent.java similarity index 78% rename from api/src/main/java/me/lucko/luckperms/api/event/TargetedEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/LuckPermsEvent.java index 523bbc001..42286805e 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/TargetedEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/LuckPermsEvent.java @@ -22,21 +22,20 @@ package me.lucko.luckperms.api.event; +import me.lucko.luckperms.api.LuckPermsApi; + /** - * Represents an event acting upon a target + * The base event interface * - * @param the target type + * @since 3.0 */ -public class TargetedEvent extends LPEvent { +public interface LuckPermsEvent { - private final T target; + /** + * Get the API instance this event was dispatched from + * + * @return the api instance + */ + LuckPermsApi getApi(); - protected TargetedEvent(String eventName, T target) { - super(eventName); - this.target = target; - } - - public T getTarget() { - return target; - } } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/cause/CreationCause.java b/api/src/main/java/me/lucko/luckperms/api/event/cause/CreationCause.java new file mode 100644 index 000000000..34d5e0619 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/cause/CreationCause.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.cause; + +/** + * The cause of a group/track creation + */ +public enum CreationCause { + + /** + * The creation was caused by a command + */ + COMMAND, + + /** + * The creation was caused by an API call + */ + API, + + /** + * The creation was caused by a LuckPerms internal + */ + INTERNAL; + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/cause/DeletionCause.java b/api/src/main/java/me/lucko/luckperms/api/event/cause/DeletionCause.java new file mode 100644 index 000000000..e9c4b9c9a --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/cause/DeletionCause.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.cause; + +/** + * The cause of a group/track deletion + */ +public enum DeletionCause { + + /** + * The deletion was caused by a command + */ + COMMAND, + + /** + * The deletion was caused by an API call + */ + API, + + /** + * The deletion was caused by a LuckPerms internal + */ + INTERNAL; + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/GroupRemoveEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/events/GroupRemoveEvent.java deleted file mode 100644 index f44a74a7f..000000000 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/GroupRemoveEvent.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api.event.events; - -import me.lucko.luckperms.api.PermissionHolder; -import me.lucko.luckperms.api.event.AbstractPermissionRemoveEvent; - -/** - * Called whenever a user or group is removed from / stops inheriting another group - */ -public class GroupRemoveEvent extends AbstractPermissionRemoveEvent { - - /** - * The name of group being removed from the target. - * Be aware that this group may have already been deleted, and and instance may therefore not exist internally. - */ - private final String group; - - public GroupRemoveEvent(PermissionHolder target, String group, String server, String world, boolean temporary) { - super("Group Remove Event", target, server, world, temporary); - this.group = group; - } - - public String getGroup() { - return group; - } -} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionExpireEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionExpireEvent.java deleted file mode 100644 index 8d090ea49..000000000 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionExpireEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api.event.events; - -import me.lucko.luckperms.api.PermissionHolder; -import me.lucko.luckperms.api.event.TargetedEvent; - -/** - * Called when a permission expires for an object. - * - * @deprecated in favour of {@link PermissionNodeExpireEvent} - */ -@Deprecated -public class PermissionExpireEvent extends TargetedEvent { - - private final String node; - - public PermissionExpireEvent(PermissionHolder target, String node) { - super("Permission Expire Event", target); - this.node = node; - } - - public String getNode() { - return node; - } -} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionSetEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionSetEvent.java deleted file mode 100644 index c4f522cc1..000000000 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionSetEvent.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api.event.events; - -import me.lucko.luckperms.api.PermissionHolder; -import me.lucko.luckperms.api.event.AbstractPermissionAddEvent; - -import java.util.AbstractMap; -import java.util.Map; - -/** - * Called whenever a user or group has a permission set. - * - * @deprecated in favour of {@link PermissionNodeSetEvent} - */ -@Deprecated -public class PermissionSetEvent extends AbstractPermissionAddEvent { - - private final String node; - private final boolean value; - - public PermissionSetEvent(PermissionHolder target, String node, boolean value, String server, String world, long expiry) { - super("Permission Set Event", target, server, world, expiry); - this.node = node; - this.value = value; - } - - public String getNode() { - return node; - } - - public boolean getValue() { - return value; - } - - public Map.Entry getEntry() { - return new AbstractMap.SimpleEntry<>(node, value); - } -} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionUnsetEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionUnsetEvent.java deleted file mode 100644 index d009c6c64..000000000 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionUnsetEvent.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api.event.events; - -import me.lucko.luckperms.api.PermissionHolder; -import me.lucko.luckperms.api.event.AbstractPermissionRemoveEvent; - -/** - * Called whenever a user or group has a permission unset. - * - * @deprecated in favour of {@link PermissionNodeUnsetEvent} - */ -@Deprecated -public class PermissionUnsetEvent extends AbstractPermissionRemoveEvent { - - private final String node; - - public PermissionUnsetEvent(PermissionHolder target, String node, String server, String world, boolean temporary) { - super("Permission Unset Event", target, server, world, temporary); - this.node = node; - } - - public String getNode() { - return node; - } -} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/group/GroupCreateEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/group/GroupCreateEvent.java new file mode 100644 index 000000000..587b3f4b0 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/group/GroupCreateEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.group; + +import me.lucko.luckperms.api.Group; +import me.lucko.luckperms.api.event.LuckPermsEvent; +import me.lucko.luckperms.api.event.cause.CreationCause; + +/** + * Called when a group is created + */ +public interface GroupCreateEvent extends LuckPermsEvent { + + /** + * Gets the new group + * + * @return the new group + */ + Group getGroup(); + + /** + * Gets the cause of the creation + * + * @return the cause of the creation + */ + CreationCause getCause(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeUnsetEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/group/GroupDeleteEvent.java similarity index 62% rename from api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeUnsetEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/group/GroupDeleteEvent.java index 7cbcfd716..1dd9ff104 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeUnsetEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/group/GroupDeleteEvent.java @@ -20,19 +20,38 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.api.event.group; import me.lucko.luckperms.api.Node; -import me.lucko.luckperms.api.PermissionHolder; -import me.lucko.luckperms.api.event.AbstractPermissionEvent; +import me.lucko.luckperms.api.event.LuckPermsEvent; +import me.lucko.luckperms.api.event.cause.DeletionCause; + +import java.util.Set; /** - * Called when a permission node is unset from a holder - * - * @since 2.6 + * Called when a group is deleted */ -public class PermissionNodeUnsetEvent extends AbstractPermissionEvent { - public PermissionNodeUnsetEvent(PermissionHolder target, Node node) { - super("Permission Node Unset Event", target, node); - } +public interface GroupDeleteEvent extends LuckPermsEvent { + + /** + * Gets the name of the deleted group + * + * @return the name of the deleted group + */ + String getGroupName(); + + /** + * Gets an immutable copy of the groups existing data + * + * @return a copy of the groups existing data + */ + Set getExistingData(); + + /** + * Gets the cause of the deletion + * + * @return the cause of the deletion + */ + DeletionCause getCause(); + } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/group/GroupLoadAllEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/group/GroupLoadAllEvent.java new file mode 100644 index 000000000..509648be5 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/group/GroupLoadAllEvent.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.group; + +import me.lucko.luckperms.api.event.LuckPermsEvent; + +/** + * Called when all groups have been loaded in from storage. + * + *

Usually only called on startup and in sync tasks.

+ */ +public interface GroupLoadAllEvent extends LuckPermsEvent { + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/CancellableEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/group/GroupLoadEvent.java similarity index 72% rename from api/src/main/java/me/lucko/luckperms/api/event/CancellableEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/group/GroupLoadEvent.java index 52c31cef9..ea518f1c2 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/CancellableEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/group/GroupLoadEvent.java @@ -20,24 +20,23 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event; +package me.lucko.luckperms.api.event.group; + +import me.lucko.luckperms.api.Group; +import me.lucko.luckperms.api.event.LuckPermsEvent; /** - * Event that allows listeners to set the cancelled state of an event. + * Called when a group is loaded into memory from the storage. + * + * Note that this event is not the same as {@link GroupCreateEvent} */ -public abstract class CancellableEvent extends LPEvent { +public interface GroupLoadEvent extends LuckPermsEvent { - private boolean cancelled = false; + /** + * Gets the group that was loaded + * + * @return the group that was loaded + */ + Group getGroup(); - protected CancellableEvent(String eventName) { - super(eventName); - } - - public boolean isCancelled() { - return cancelled; - } - - public void setCancelled(boolean cancelled) { - this.cancelled = cancelled; - } } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/log/LogBroadcastEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/log/LogBroadcastEvent.java new file mode 100644 index 000000000..f2cd0680a --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/log/LogBroadcastEvent.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.log; + +import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.event.Cancellable; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +/** + * Called when a log entry is about to be sent to notifiable players on the platform + */ +public interface LogBroadcastEvent extends LuckPermsEvent, Cancellable { + + /** + * Gets the log entry to be broadcasted + * + * @return the log entry to be broadcasted + */ + LogEntry getEntry(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/log/LogPublishEvent.java similarity index 71% rename from api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/log/LogPublishEvent.java index 09ae4976a..6b2b88a3b 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/AbstractPermissionEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/log/LogPublishEvent.java @@ -20,24 +20,22 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event; +package me.lucko.luckperms.api.event.log; -import me.lucko.luckperms.api.Node; -import me.lucko.luckperms.api.PermissionHolder; +import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.event.Cancellable; +import me.lucko.luckperms.api.event.LuckPermsEvent; /** - * @since 2.6 + * Called when a log is about to be published to the storage file/table */ -public class AbstractPermissionEvent extends TargetedEvent { +public interface LogPublishEvent extends LuckPermsEvent, Cancellable { - private final Node node; + /** + * Gets the log entry to be published + * + * @return the log entry to be published + */ + LogEntry getEntry(); - protected AbstractPermissionEvent(String eventName, PermissionHolder target, Node node) { - super(eventName, target); - this.node = node; - } - - public Node getNode() { - return node; - } } diff --git a/api/src/main/java/me/lucko/luckperms/api/data/MySQLConfiguration.java b/api/src/main/java/me/lucko/luckperms/api/event/node/NodeAddEvent.java similarity index 79% rename from api/src/main/java/me/lucko/luckperms/api/data/MySQLConfiguration.java rename to api/src/main/java/me/lucko/luckperms/api/event/node/NodeAddEvent.java index aedaf44fe..fb7583aeb 100644 --- a/api/src/main/java/me/lucko/luckperms/api/data/MySQLConfiguration.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/node/NodeAddEvent.java @@ -20,19 +20,20 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.data; +package me.lucko.luckperms.api.event.node; + +import me.lucko.luckperms.api.Node; /** - * @deprecated Use {@link DatastoreConfiguration}. This is now used by multiple datastores, not just MySQL. + * Called when a node is added to a holder */ -@Deprecated -public interface MySQLConfiguration { +public interface NodeAddEvent extends NodeMutateEvent { - String getAddress(); + /** + * Gets the node that was added + * + * @return the node that was added + */ + Node getNode(); - String getDatabase(); - - String getUsername(); - - String getPassword(); } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/node/NodeClearEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/node/NodeClearEvent.java new file mode 100644 index 000000000..74ad904ec --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/node/NodeClearEvent.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.node; + +/** + * Called when a holder has their nodes cleared + */ +public interface NodeClearEvent extends NodeMutateEvent { + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/node/NodeMutateEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/node/NodeMutateEvent.java new file mode 100644 index 000000000..dac0dc176 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/node/NodeMutateEvent.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.node; + +import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.api.PermissionHolder; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +import java.util.Set; + +/** + * Called when a node is added to/removed from a user/group + */ +public interface NodeMutateEvent extends LuckPermsEvent { + + /** + * Gets the target of the event + * + * @return the event target + */ + PermissionHolder getTarget(); + + /** + * Gets an immutable copy of the holders data before the change + * + * @return the data before the change + */ + Set getDataBefore(); + + /** + * Gets an immutable copy of the holders data after the change + * + * @return the data after the change + */ + Set getDataAfter(); + + /** + * Gets whether the target of this event is a {@link me.lucko.luckperms.api.User} + * + *

This is equivalent to checking if getTarget() instanceof User

+ * + * @return if the event is targeting a user + */ + boolean isUser(); + + /** + * Gets whether the target of this event is a {@link me.lucko.luckperms.api.Group} + * + *

This is equivalent to checking if getTarget() instanceof Group

+ * + * @return if the event is targeting a group + */ + boolean isGroup(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/node/NodeRemoveEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/node/NodeRemoveEvent.java new file mode 100644 index 000000000..2308cf234 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/node/NodeRemoveEvent.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.node; + +import me.lucko.luckperms.api.Node; + +/** + * Called when a node is removed from a holder + */ +public interface NodeRemoveEvent extends NodeMutateEvent { + + /** + * Gets the node that was removed + * + * @return the node that was removed + */ + Node getNode(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/sync/ConfigReloadEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/sync/ConfigReloadEvent.java new file mode 100644 index 000000000..dfce7f27d --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/sync/ConfigReloadEvent.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.sync; + +import me.lucko.luckperms.api.event.LuckPermsEvent; + +/** + * Called when the configuration is reloaded + */ +public interface ConfigReloadEvent extends LuckPermsEvent { + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/PostSyncEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/sync/PostSyncEvent.java similarity index 82% rename from api/src/main/java/me/lucko/luckperms/api/event/events/PostSyncEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/sync/PostSyncEvent.java index 1dcec295b..37d1cee93 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/PostSyncEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/sync/PostSyncEvent.java @@ -20,17 +20,13 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.api.event.sync; -import me.lucko.luckperms.api.event.LPEvent; +import me.lucko.luckperms.api.event.LuckPermsEvent; /** - * Called after the sync task has ran. + * Called when an sync task has been completed */ -public class PostSyncEvent extends LPEvent { - - public PostSyncEvent() { - super("Post Sync Event"); - } +public interface PostSyncEvent extends LuckPermsEvent { } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/sync/PreNetworkSyncEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/sync/PreNetworkSyncEvent.java new file mode 100644 index 000000000..5d3cee124 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/sync/PreNetworkSyncEvent.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.sync; + +import me.lucko.luckperms.api.event.Cancellable; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +import java.util.UUID; + +/** + * Called before a network sync task runs + */ +public interface PreNetworkSyncEvent extends LuckPermsEvent, Cancellable { + + /** + * Gets the ID of the sync request + * + * @return the id of the sync request + */ + UUID getSyncId(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/PreSyncEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/sync/PreSyncEvent.java similarity index 77% rename from api/src/main/java/me/lucko/luckperms/api/event/events/PreSyncEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/sync/PreSyncEvent.java index 126ca3e09..d1252b82a 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/PreSyncEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/sync/PreSyncEvent.java @@ -20,18 +20,14 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.api.event.sync; -import me.lucko.luckperms.api.event.CancellableEvent; +import me.lucko.luckperms.api.event.Cancellable; +import me.lucko.luckperms.api.event.LuckPermsEvent; /** - * Called before the sync task is about to run. - * Set this event to cancelled to prevent the sync task from running. + * Called before a sync task runs */ -public class PreSyncEvent extends CancellableEvent { - - public PreSyncEvent() { - super("Pre Sync Event"); - } +public interface PreSyncEvent extends LuckPermsEvent, Cancellable { } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/track/TrackCreateEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/track/TrackCreateEvent.java new file mode 100644 index 000000000..b279c172d --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/track/TrackCreateEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.track; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.event.LuckPermsEvent; +import me.lucko.luckperms.api.event.cause.CreationCause; + +/** + * Called when a track is created + */ +public interface TrackCreateEvent extends LuckPermsEvent { + + /** + * Gets the new track + * + * @return the new track + */ + Track getTrack(); + + /** + * Gets the cause of the creation + * + * @return the cause of the creation + */ + CreationCause getCause(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/context/ContextListener.java b/api/src/main/java/me/lucko/luckperms/api/event/track/TrackDeleteEvent.java similarity index 63% rename from api/src/main/java/me/lucko/luckperms/api/context/ContextListener.java rename to api/src/main/java/me/lucko/luckperms/api/event/track/TrackDeleteEvent.java index 3b19c9bfc..ddf13c0b2 100644 --- a/api/src/main/java/me/lucko/luckperms/api/context/ContextListener.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/track/TrackDeleteEvent.java @@ -20,24 +20,37 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.context; +package me.lucko.luckperms.api.event.track; -import java.util.Map; +import me.lucko.luckperms.api.event.LuckPermsEvent; +import me.lucko.luckperms.api.event.cause.DeletionCause; + +import java.util.List; /** - * Listens to context changes - * - * @param the subject type, Is ALWAYS the player class of the platform. + * Called when a track is deleted */ -public interface ContextListener { +public interface TrackDeleteEvent extends LuckPermsEvent { /** - * Called whenever a context changes on the + * Gets the name of the deleted track * - * @param subject the subject that had context changed - * @param before the context state before the change - * @param current the context state after the change (now) + * @return the name of the deleted track */ - void onContextChange(T subject, Map.Entry before, Map.Entry current) throws Exception; + String getTrackName(); + + /** + * Gets an immutable copy of the tracks existing data + * + * @return a copy of the tracks existing data + */ + List getExistingData(); + + /** + * Gets the cause of the deletion + * + * @return the cause of the deletion + */ + DeletionCause getCause(); } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/track/TrackLoadAllEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/track/TrackLoadAllEvent.java new file mode 100644 index 000000000..8fbdb9703 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/track/TrackLoadAllEvent.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.track; + +import me.lucko.luckperms.api.event.LuckPermsEvent; + +/** + * Called when all tracks have been loaded in from storage. + * + *

Usually only called on startup and in sync tasks.

+ */ +public interface TrackLoadAllEvent extends LuckPermsEvent { + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/track/TrackLoadEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/track/TrackLoadEvent.java new file mode 100644 index 000000000..7e8eb8ef5 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/track/TrackLoadEvent.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.track; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +/** + * Called when a track is loaded into memory from the storage. + * + * Note that this event is not the same as {@link TrackCreateEvent} + */ +public interface TrackLoadEvent extends LuckPermsEvent { + + /** + * Gets the track that was loaded + * + * @return the track that was loaded + */ + Track getTrack(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackAddGroupEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackAddGroupEvent.java new file mode 100644 index 000000000..5f878d286 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackAddGroupEvent.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.track.mutate; + +/** + * Called when a group is added to a track + */ +public interface TrackAddGroupEvent extends TrackMutateEvent { + + /** + * Gets the group that was added + * + * @return the group that was added + */ + String getGroup(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/LPListener.java b/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackClearEvent.java similarity index 88% rename from api/src/main/java/me/lucko/luckperms/api/event/LPListener.java rename to api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackClearEvent.java index dc0bc7896..987c33517 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/LPListener.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackClearEvent.java @@ -20,10 +20,11 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event; +package me.lucko.luckperms.api.event.track.mutate; /** - * Used to mark a class that listens for LuckPerms events + * Called when a track is cleared */ -public interface LPListener { +public interface TrackClearEvent extends TrackMutateEvent { + } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/LogNotifyEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackMutateEvent.java similarity index 62% rename from api/src/main/java/me/lucko/luckperms/api/event/events/LogNotifyEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackMutateEvent.java index da5cc1d59..fb5630459 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/LogNotifyEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackMutateEvent.java @@ -20,30 +20,37 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.api.event.track.mutate; -import me.lucko.luckperms.api.LogEntry; -import me.lucko.luckperms.api.event.CancellableEvent; +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +import java.util.List; /** - * Called before a LogEntry is broadcasted to players only with the notify permission. - * The log entry will still be recorded in the datastore, regardless of the cancellation state of this event. - * Cancelling this event only stops the broadcast. + * Called when a track is changed */ -public class LogNotifyEvent extends CancellableEvent { +public interface TrackMutateEvent extends LuckPermsEvent { /** - * The log entry to be broadcasted + * Gets the track that was mutated + * + * @return the track that was mutated */ - private final LogEntry entry; + Track getTrack(); - public LogNotifyEvent(LogEntry entry) { - super("Log Notify Event"); - this.entry = entry; - } + /** + * Gets an immutable copy of the tracks data before the change + * + * @return the data before the change + */ + List getDataBefore(); - public LogEntry getEntry() { - return entry; - } + /** + * Gets an immutable copy of the tracks data after the change + * + * @return the data after the change + */ + List getDataAfter(); } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackRemoveGroupEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackRemoveGroupEvent.java new file mode 100644 index 000000000..3b753e575 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/track/mutate/TrackRemoveGroupEvent.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.track.mutate; + +/** + * Called when a group is removed from a track + */ +public interface TrackRemoveGroupEvent extends TrackMutateEvent { + + /** + * Gets the group that was removed + * + * @return the group that was removed + */ + String getGroup(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/user/UserCacheLoadEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/user/UserCacheLoadEvent.java new file mode 100644 index 000000000..b479b2905 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/UserCacheLoadEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.user; + +import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.caching.UserData; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +/** + * Called when a users {@link me.lucko.luckperms.api.caching.UserData} is loaded. + */ +public interface UserCacheLoadEvent extends LuckPermsEvent { + + /** + * Gets the user whose data was loaded + * + * @return the user + */ + User getUser(); + + /** + * Gets the data that was loaded + * + * @return the loaded data + */ + UserData getLoadedData(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/user/UserDataRecalculateEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/user/UserDataRecalculateEvent.java new file mode 100644 index 000000000..3f63483e3 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/UserDataRecalculateEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.user; + +import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.caching.UserData; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +/** + * Called when a users cached data is refreshed + */ +public interface UserDataRecalculateEvent extends LuckPermsEvent { + + /** + * Gets the user whose data was recalculated + * + * @return the user + */ + User getUser(); + + /** + * Gets the data that was recalculated + * + * @return the data + */ + UserData getData(); + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/UserFirstLoginEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/user/UserFirstLoginEvent.java similarity index 71% rename from api/src/main/java/me/lucko/luckperms/api/event/events/UserFirstLoginEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/user/UserFirstLoginEvent.java index 00905779a..431746c57 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/UserFirstLoginEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/UserFirstLoginEvent.java @@ -20,35 +20,37 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.api.event.user; -import me.lucko.luckperms.api.event.LPEvent; +import me.lucko.luckperms.api.event.LuckPermsEvent; import java.util.UUID; /** - * Called when the user logs into the network for the first time. Particularly useful for networks with multiple - * lobbies, who want to welcome a user when they join for the first time. + * Called when the user logs into the network for the first time. + * + *

Particularly useful for networks with multiple + * lobbies, who want to welcome a user when they join for the first time.

* *

This event is fired before the player has actually joined the game on the async login / auth event. If you want to - * do something with the user, store the UUID in a set, and then check the set in the PlayerJoinEvent o.e. + * do something with the user, store the UUID in a set, and then check the set in the PlayerJoinEvent o.e.

+ * + *

The users data will not be loaded when this event is called.

*/ -public class UserFirstLoginEvent extends LPEvent { +public interface UserFirstLoginEvent extends LuckPermsEvent { - private final UUID uuid; - private final String username; + /** + * Gets the UUID of the user + * + * @return the uuid of the user + */ + UUID getUuid(); - public UserFirstLoginEvent(UUID uuid, String username) { - super("User First Join Event"); - this.uuid = uuid; - this.username = username; - } + /** + * Gets the username of the user + * + * @return the username of the user + */ + String getUsername(); - public UUID getUuid() { - return uuid; - } - - public String getUsername() { - return username; - } } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/UserDemoteEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/user/UserLoadEvent.java similarity index 76% rename from api/src/main/java/me/lucko/luckperms/api/event/events/UserDemoteEvent.java rename to api/src/main/java/me/lucko/luckperms/api/event/user/UserLoadEvent.java index acaed456e..3295b2276 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/UserDemoteEvent.java +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/UserLoadEvent.java @@ -20,19 +20,21 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.api.event.user; -import me.lucko.luckperms.api.Track; import me.lucko.luckperms.api.User; -import me.lucko.luckperms.api.event.TrackEvent; +import me.lucko.luckperms.api.event.LuckPermsEvent; /** - * Called whenever a user is demoted down a track + * Called when a user is loaded into memory from the storage. */ -public class UserDemoteEvent extends TrackEvent { +public interface UserLoadEvent extends LuckPermsEvent { - public UserDemoteEvent(Track track, User user, String from, String to) { - super("User Demote Event", track, user, from, to); - } + /** + * Gets the user that was loaded + * + * @return the user that was loaded + */ + User getUser(); } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/user/track/TrackAction.java b/api/src/main/java/me/lucko/luckperms/api/event/user/track/TrackAction.java new file mode 100644 index 000000000..5af37a76e --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/track/TrackAction.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.user.track; + +/** + * Represents the type of action performed in a {@link UserTrackEvent} + */ +public enum TrackAction { + + /** + * The user was promoted up a track + */ + PROMOTION, + + /** + * The user was demoted down a track + */ + DEMOTION; + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserDemoteEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserDemoteEvent.java new file mode 100644 index 000000000..52f873c59 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserDemoteEvent.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.user.track; + +/** + * Called when a user is demoted down a track. + * + *

{@link #getAction()} is always {@link TrackAction#DEMOTION}

+ */ +public interface UserDemoteEvent extends UserTrackEvent { + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserPromoteEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserPromoteEvent.java new file mode 100644 index 000000000..b48adaafe --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserPromoteEvent.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.user.track; + +/** + * Called when a user is promoted up a track. + * + *

{@link #getAction()} is always {@link TrackAction#PROMOTION}

+ */ +public interface UserPromoteEvent extends UserTrackEvent { + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserTrackEvent.java b/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserTrackEvent.java new file mode 100644 index 000000000..43dfd7344 --- /dev/null +++ b/api/src/main/java/me/lucko/luckperms/api/event/user/track/UserTrackEvent.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.api.event.user.track; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +import java.util.Optional; + +/** + * Called when a user interacts with a track through a promotion or demotion + */ +public interface UserTrackEvent extends LuckPermsEvent { + + /** + * Gets the track involved in the event + * + * @return the track involved in the event + */ + Track getTrack(); + + /** + * Gets the user who was promoted or demoted + * + * @return the user involved in the event + */ + User getUser(); + + /** + * Gets the action performed + * + * @return the action performed + */ + TrackAction getAction(); + + /** + * Gets the group the user was promoted/demoted from. + * + *

May be {@link Optional#empty()} if the user wasn't already placed on the track.

+ * + * @return the group the user was promoted/demoted from + */ + Optional getGroupFrom(); + + /** + * Gets the group the user was promoted/demoted to + * + * @return the group the user was promoted/demoted to + */ + Optional getGroupTo(); + +} diff --git a/bukkit-legacy/pom.xml b/bukkit-legacy/pom.xml index 8c5f009a9..d94404560 100644 --- a/bukkit-legacy/pom.xml +++ b/bukkit-legacy/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 2.17-SNAPSHOT + 3.0-SNAPSHOT 4.0.0 diff --git a/bukkit-placeholders/pom.xml b/bukkit-placeholders/pom.xml index 9db9eb8fd..e0adab80b 100644 --- a/bukkit-placeholders/pom.xml +++ b/bukkit-placeholders/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 2.17-SNAPSHOT + 3.0-SNAPSHOT 4.0.0 diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 2743189b7..ffbb4823a 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 2.17-SNAPSHOT + 3.0-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 79c2e5855..6d1681152 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/LPBukkitPlugin.java @@ -246,14 +246,13 @@ public class LPBukkitPlugin extends JavaPlugin implements LuckPermsPlugin { uuidCache = new UuidCache(this); userManager = new GenericUserManager(this); groupManager = new GenericGroupManager(this); - trackManager = new GenericTrackManager(); + trackManager = new GenericTrackManager(this); importer = new Importer(commandManager); calculatorFactory = new BukkitCalculatorFactory(this); cachedStateManager = new CachedStateManager(this); contextManager = new ContextManager<>(); worldCalculator = new WorldCalculator(this); - pm.registerEvents(worldCalculator, this); contextManager.registerCalculator(worldCalculator); contextManager.registerCalculator(new ServerCalculator<>(getConfiguration())); diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java index 8ea99858c..5c022fd89 100644 --- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java +++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/WorldCalculator.java @@ -32,12 +32,11 @@ import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import org.bukkit.entity.Player; -import org.bukkit.event.Listener; import java.util.Map; @RequiredArgsConstructor -public class WorldCalculator extends ContextCalculator implements Listener { +public class WorldCalculator implements ContextCalculator { private static final String WORLD_KEY = "world"; private final LuckPermsPlugin plugin; 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 6a7e47e68..50616c4ef 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 @@ -30,6 +30,7 @@ import de.bananaco.bpermissions.api.World; import de.bananaco.bpermissions.api.WorldManager; import me.lucko.luckperms.api.MetaUtils; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SubCommand; @@ -114,7 +115,7 @@ public class MigrationBPermissions extends SubCommand { } // Make a LuckPerms group for the one being migrated. - plugin.getStorage().createAndLoadGroup(groupName).join(); + plugin.getStorage().createAndLoadGroup(groupName, CreationCause.INTERNAL).join(); me.lucko.luckperms.common.core.model.Group lpGroup = plugin.getGroupManager().getIfLoaded(groupName); migrateHolder(log, world, group, lpGroup); 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 ecc11b920..dd82f6ba7 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 @@ -24,6 +24,7 @@ package me.lucko.luckperms.bukkit.migration; import com.google.common.collect.Maps; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; @@ -90,7 +91,7 @@ public class MigrationGroupManager extends SubCommand { AtomicInteger globalGroupCount = new AtomicInteger(0); for (Group g : gg.getGroupList()) { - plugin.getStorage().createAndLoadGroup(g.getName().toLowerCase()).join(); + plugin.getStorage().createAndLoadGroup(g.getName().toLowerCase(), CreationCause.INTERNAL).join(); me.lucko.luckperms.common.core.model.Group group = plugin.getGroupManager().getIfLoaded(g.getName().toLowerCase()); for (String node : g.getPermissionList()) { @@ -214,7 +215,7 @@ public class MigrationGroupManager extends SubCommand { log.log("Starting group migration."); AtomicInteger groupCount = new AtomicInteger(0); for (Map.Entry, Boolean>> e : groups.entrySet()) { - plugin.getStorage().createAndLoadGroup(e.getKey()).join(); + plugin.getStorage().createAndLoadGroup(e.getKey(), CreationCause.INTERNAL).join(); me.lucko.luckperms.common.core.model.Group group = plugin.getGroupManager().getIfLoaded(e.getKey()); for (Map.Entry, Boolean> n : e.getValue().entrySet()) { 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 bb737f249..c7958d807 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 @@ -23,6 +23,7 @@ package me.lucko.luckperms.bukkit.migration; import me.lucko.luckperms.api.MetaUtils; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SubCommand; @@ -99,7 +100,7 @@ public class MigrationPermissionsEx extends SubCommand { int groupWeight = maxWeight - group.getRank(); final String name = group.getName().toLowerCase(); - plugin.getStorage().createAndLoadGroup(name).join(); + plugin.getStorage().createAndLoadGroup(name, CreationCause.INTERNAL).join(); Group lpGroup = plugin.getGroupManager().getIfLoaded(name); try { 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 732fd538d..b4afa707f 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 @@ -31,6 +31,7 @@ import com.github.cheesesoftware.PowerfulPermsAPI.ResultRunnable; import com.google.common.util.concurrent.ListenableFuture; import com.zaxxer.hikari.HikariDataSource; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.bukkit.migration.utils.LPResultRunnable; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; @@ -224,7 +225,7 @@ public class MigrationPowerfulPerms extends SubCommand { AtomicInteger groupCount = new AtomicInteger(0); Map groups = pm.getGroups(); // All versions for (Group g : groups.values()) { - plugin.getStorage().createAndLoadGroup(g.getName().toLowerCase()).join(); + plugin.getStorage().createAndLoadGroup(g.getName().toLowerCase(), CreationCause.INTERNAL).join(); final me.lucko.luckperms.common.core.model.Group group = plugin.getGroupManager().getIfLoaded(g.getName().toLowerCase()); for (Permission p : g.getOwnPermissions()) { // All versions 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 6bad52a04..cd2c6c20e 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 @@ -22,6 +22,7 @@ package me.lucko.luckperms.bukkit.migration; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SubCommand; @@ -90,7 +91,7 @@ public class MigrationZPermissions extends SubCommand { log.log("Starting group migration."); AtomicInteger groupCount = new AtomicInteger(0); for (String g : service.getAllGroups()) { - plugin.getStorage().createAndLoadGroup(g.toLowerCase()).join(); + plugin.getStorage().createAndLoadGroup(g.toLowerCase(), CreationCause.INTERNAL).join(); Group group = plugin.getGroupManager().getIfLoaded(g.toLowerCase()); PermissionEntity entity = internalService.getEntity(g, null, true); @@ -105,7 +106,7 @@ public class MigrationZPermissions extends SubCommand { log.log("Starting track migration."); AtomicInteger trackCount = new AtomicInteger(0); for (String t : service.getAllTracks()) { - plugin.getStorage().createAndLoadTrack(t.toLowerCase()).join(); + plugin.getStorage().createAndLoadTrack(t.toLowerCase(), CreationCause.INTERNAL).join(); Track track = plugin.getTrackManager().getIfLoaded(t.toLowerCase()); track.setGroups(service.getTrackGroups(t)); plugin.getStorage().saveTrack(track); diff --git a/bungee/pom.xml b/bungee/pom.xml index 216301b16..27a746488 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 2.17-SNAPSHOT + 3.0-SNAPSHOT 4.0.0 diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/BackendServerCalculator.java b/bungee/src/main/java/me/lucko/luckperms/bungee/BackendServerCalculator.java index 96ffb9393..937841711 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/BackendServerCalculator.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/BackendServerCalculator.java @@ -28,13 +28,10 @@ import me.lucko.luckperms.api.context.ContextCalculator; import me.lucko.luckperms.api.context.MutableContextSet; import net.md_5.bungee.api.connection.ProxiedPlayer; -import net.md_5.bungee.api.event.ServerSwitchEvent; -import net.md_5.bungee.api.plugin.Listener; -import net.md_5.bungee.event.EventHandler; import java.util.Map; -public class BackendServerCalculator extends ContextCalculator implements Listener { +public class BackendServerCalculator implements ContextCalculator { private static final String WORLD_KEY = "world"; private static String getServer(ProxiedPlayer player) { @@ -61,9 +58,4 @@ public class BackendServerCalculator extends ContextCalculator im String server = getServer(subject); return server != null && server.equals(context.getValue()); } - - @EventHandler - public void onPlayerServerSwitch(ServerSwitchEvent e) { - pushUpdate(e.getPlayer(), Maps.immutableEntry("null", "null"), Maps.immutableEntry(WORLD_KEY, getServer(e.getPlayer()))); - } } diff --git a/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeListener.java b/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeListener.java index 38288b505..04da854e2 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeListener.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/BungeeListener.java @@ -23,7 +23,6 @@ package me.lucko.luckperms.bungee; import me.lucko.luckperms.api.Contexts; -import me.lucko.luckperms.api.event.events.UserFirstLoginEvent; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.constants.Message; import me.lucko.luckperms.common.core.UuidCache; @@ -104,14 +103,14 @@ public class BungeeListener extends AbstractListener implements Listener { cache.addToCache(c.getUniqueId(), uuid); } else { // No previous data for this player - plugin.getApiProvider().fireEventAsync(new UserFirstLoginEvent(c.getUniqueId(), c.getName())); + plugin.getApiProvider().getEventFactory().handleUserFirstLogin(c.getUniqueId(), c.getName()); cache.addToCache(c.getUniqueId(), c.getUniqueId()); plugin.getStorage().force().saveUUIDData(c.getName(), c.getUniqueId()).join(); } } else { String name = plugin.getStorage().getName(c.getUniqueId()).join(); if (name == null) { - plugin.getApiProvider().fireEventAsync(new UserFirstLoginEvent(c.getUniqueId(), c.getName())); + plugin.getApiProvider().getEventFactory().handleUserFirstLogin(c.getUniqueId(), c.getName()); } // Online mode, no cache needed. This is just for name -> uuid lookup. 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 9e6c73d94..6c79fbdfe 100644 --- a/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java +++ b/bungee/src/main/java/me/lucko/luckperms/bungee/LPBungeePlugin.java @@ -192,14 +192,13 @@ public class LPBungeePlugin extends Plugin implements LuckPermsPlugin { uuidCache = new UuidCache(this); userManager = new GenericUserManager(this); groupManager = new GenericGroupManager(this); - trackManager = new GenericTrackManager(); + trackManager = new GenericTrackManager(this); importer = new Importer(commandManager); calculatorFactory = new BungeeCalculatorFactory(this); cachedStateManager = new CachedStateManager(this); contextManager = new ContextManager<>(); BackendServerCalculator serverCalculator = new BackendServerCalculator(); - getProxy().getPluginManager().registerListener(this, serverCalculator); contextManager.registerCalculator(serverCalculator); contextManager.registerCalculator(new ServerCalculator<>(configuration)); 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 47785a34a..5fe5f68fe 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 @@ -23,6 +23,7 @@ package me.lucko.luckperms.bungee.migration; import me.lucko.luckperms.api.MetaUtils; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SubCommand; @@ -68,7 +69,7 @@ public class MigrationBungeePerms extends SubCommand { for (Group g : bp.getPermissionsManager().getBackEnd().loadGroups()) { // Make a LuckPerms group for the one being migrated - plugin.getStorage().createAndLoadGroup(g.getName().toLowerCase()).join(); + plugin.getStorage().createAndLoadGroup(g.getName().toLowerCase(), CreationCause.INTERNAL).join(); me.lucko.luckperms.common.core.model.Group group = plugin.getGroupManager().getIfLoaded(g.getName().toLowerCase()); // Migrate global perms diff --git a/common/pom.xml b/common/pom.xml index 51687d0f5..aadf8e4dd 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 2.17-SNAPSHOT + 3.0-SNAPSHOT 4.0.0 diff --git a/common/src/main/java/me/lucko/luckperms/common/api/ApiProvider.java b/common/src/main/java/me/lucko/luckperms/common/api/ApiProvider.java index 5ac0bed83..f62fd8a5c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/ApiProvider.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/ApiProvider.java @@ -22,13 +22,10 @@ package me.lucko.luckperms.common.api; -import lombok.AllArgsConstructor; +import lombok.Getter; import lombok.NonNull; -import com.google.common.eventbus.EventBus; - import me.lucko.luckperms.api.Contexts; -import me.lucko.luckperms.api.Datastore; import me.lucko.luckperms.api.Group; import me.lucko.luckperms.api.LPConfiguration; import me.lucko.luckperms.api.Logger; @@ -41,21 +38,14 @@ import me.lucko.luckperms.api.Storage; import me.lucko.luckperms.api.Track; import me.lucko.luckperms.api.User; import me.lucko.luckperms.api.UuidCache; -import me.lucko.luckperms.api.context.ContextListener; +import me.lucko.luckperms.api.context.ContextCalculator; import me.lucko.luckperms.api.context.ContextSet; -import me.lucko.luckperms.api.context.IContextCalculator; -import me.lucko.luckperms.api.event.LPEvent; -import me.lucko.luckperms.api.event.LPListener; -import me.lucko.luckperms.common.api.delegate.DatastoreDelegate; -import me.lucko.luckperms.common.api.delegate.GroupDelegate; -import me.lucko.luckperms.common.api.delegate.LPConfigurationDelegate; -import me.lucko.luckperms.common.api.delegate.NodeFactoryDelegate; -import me.lucko.luckperms.common.api.delegate.StorageDelegate; -import me.lucko.luckperms.common.api.delegate.TrackDelegate; -import me.lucko.luckperms.common.api.delegate.UserDelegate; -import me.lucko.luckperms.common.api.delegate.UuidCacheDelegate; +import me.lucko.luckperms.common.api.delegates.NodeFactoryDelegate; +import me.lucko.luckperms.common.api.delegates.UserDelegate; import me.lucko.luckperms.common.core.NodeBuilder; import me.lucko.luckperms.common.core.UserIdentifier; +import me.lucko.luckperms.common.event.EventFactory; +import me.lucko.luckperms.common.event.LuckPermsEventBus; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import java.util.Optional; @@ -66,23 +56,19 @@ import java.util.stream.Collectors; /** * Implements the LuckPerms API using the plugin instance */ -@AllArgsConstructor public class ApiProvider implements LuckPermsApi { private final LuckPermsPlugin plugin; - private final EventBus eventBus = new EventBus("LuckPerms"); - public void fireEventAsync(LPEvent event) { - plugin.doAsync(() -> fireEvent(event)); - } + @Getter + private final LuckPermsEventBus eventBus; - public void fireEvent(LPEvent event) { - try { - event.setApi(this); - eventBus.post(event); - } catch (Exception e) { - getLogger().severe("Couldn't fire LuckPerms Event: " + event.getEventName()); - e.printStackTrace(); - } + @Getter + private final EventFactory eventFactory; + + public ApiProvider(LuckPermsPlugin plugin) { + this.plugin = plugin; + this.eventBus = new LuckPermsEventBus(plugin); + this.eventFactory = new EventFactory(eventBus); } @Override @@ -92,7 +78,7 @@ public class ApiProvider implements LuckPermsApi { @Override public double getApiVersion() { - return 2.17; + return 3.0; } @Override @@ -105,30 +91,14 @@ public class ApiProvider implements LuckPermsApi { return plugin.getServerType(); } - @Override - public void registerListener(@NonNull LPListener listener) { - eventBus.register(listener); - } - - @Override - public void unregisterListener(@NonNull LPListener listener) { - eventBus.unregister(listener); - } - @Override public LPConfiguration getConfiguration() { - return new LPConfigurationDelegate(plugin.getConfiguration()); + return plugin.getConfiguration().getDelegate(); } @Override public Storage getStorage() { - return new StorageDelegate(plugin, plugin.getStorage()); - } - - @SuppressWarnings("deprecation") - @Override - public Datastore getDatastore() { - return new DatastoreDelegate(plugin, plugin.getStorage()); + return plugin.getStorage().getDelegate(); } @Override @@ -138,7 +108,7 @@ public class ApiProvider implements LuckPermsApi { @Override public UuidCache getUuidCache() { - return new UuidCacheDelegate(plugin.getUuidCache()); + return plugin.getUuidCache().getDelegate(); } @Override @@ -149,7 +119,7 @@ public class ApiProvider implements LuckPermsApi { @Override public User getUser(@NonNull UUID uuid) { final me.lucko.luckperms.common.core.model.User user = plugin.getUserManager().get(uuid); - return user == null ? null : new UserDelegate(user); + return user == null ? null : user.getDelegate(); } @Override @@ -160,7 +130,7 @@ public class ApiProvider implements LuckPermsApi { @Override public User getUser(@NonNull String name) { final me.lucko.luckperms.common.core.model.User user = plugin.getUserManager().getByUsername(name); - return user == null ? null : new UserDelegate(user); + return user == null ? null : user.getDelegate(); } @Override @@ -170,7 +140,7 @@ public class ApiProvider implements LuckPermsApi { @Override public Set getUsers() { - return plugin.getUserManager().getAll().values().stream().map(UserDelegate::new).collect(Collectors.toSet()); + return plugin.getUserManager().getAll().values().stream().map(u -> u.getDelegate()).collect(Collectors.toSet()); } @Override @@ -187,7 +157,7 @@ public class ApiProvider implements LuckPermsApi { @Override public Group getGroup(@NonNull String name) { final me.lucko.luckperms.common.core.model.Group group = plugin.getGroupManager().getIfLoaded(name); - return group == null ? null : new GroupDelegate(group); + return group == null ? null : group.getDelegate(); } @Override @@ -197,7 +167,7 @@ public class ApiProvider implements LuckPermsApi { @Override public Set getGroups() { - return plugin.getGroupManager().getAll().values().stream().map(GroupDelegate::new).collect(Collectors.toSet()); + return plugin.getGroupManager().getAll().values().stream().map(g -> g.getDelegate()).collect(Collectors.toSet()); } @Override @@ -208,7 +178,7 @@ public class ApiProvider implements LuckPermsApi { @Override public Track getTrack(@NonNull String name) { final me.lucko.luckperms.common.core.model.Track track = plugin.getTrackManager().getIfLoaded(name); - return track == null ? null : new TrackDelegate(track); + return track == null ? null : track.getDelegate(); } @Override @@ -218,7 +188,7 @@ public class ApiProvider implements LuckPermsApi { @Override public Set getTracks() { - return plugin.getTrackManager().getAll().values().stream().map(TrackDelegate::new).collect(Collectors.toSet()); + return plugin.getTrackManager().getAll().values().stream().map(t -> t.getDelegate()).collect(Collectors.toSet()); } @Override @@ -238,16 +208,10 @@ public class ApiProvider implements LuckPermsApi { @SuppressWarnings("unchecked") @Override - public void registerContextCalculator(IContextCalculator contextCalculator) { + public void registerContextCalculator(ContextCalculator contextCalculator) { plugin.getContextManager().registerCalculator(contextCalculator); } - @SuppressWarnings("unchecked") - @Override - public void registerContextListener(ContextListener contextListener) { - plugin.getContextManager().registerListener(contextListener); - } - @Override public Optional getContextForUser(User user) { ApiUtils.checkUser(user); diff --git a/common/src/main/java/me/lucko/luckperms/common/api/ApiUtils.java b/common/src/main/java/me/lucko/luckperms/common/api/ApiUtils.java index 0ce3fdc26..7899824ac 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/ApiUtils.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/ApiUtils.java @@ -29,9 +29,9 @@ import com.google.common.base.Preconditions; import me.lucko.luckperms.api.Group; import me.lucko.luckperms.api.Track; import me.lucko.luckperms.api.User; -import me.lucko.luckperms.common.api.delegate.GroupDelegate; -import me.lucko.luckperms.common.api.delegate.TrackDelegate; -import me.lucko.luckperms.common.api.delegate.UserDelegate; +import me.lucko.luckperms.common.api.delegates.GroupDelegate; +import me.lucko.luckperms.common.api.delegates.TrackDelegate; +import me.lucko.luckperms.common.api.delegates.UserDelegate; import me.lucko.luckperms.common.utils.ArgumentChecker; @UtilityClass diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/DatastoreDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegate/DatastoreDelegate.java deleted file mode 100644 index 07dd0f0c2..000000000 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/DatastoreDelegate.java +++ /dev/null @@ -1,440 +0,0 @@ -/* - * Copyright (c) 2016 Lucko (Luck) - * - * 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.api.delegate; - -import lombok.AllArgsConstructor; -import lombok.NonNull; - -import me.lucko.luckperms.api.Datastore; -import me.lucko.luckperms.api.Group; -import me.lucko.luckperms.api.Log; -import me.lucko.luckperms.api.LogEntry; -import me.lucko.luckperms.api.Track; -import me.lucko.luckperms.api.User; -import me.lucko.luckperms.api.data.Callback; -import me.lucko.luckperms.common.config.ConfigKeys; -import me.lucko.luckperms.common.plugin.LuckPermsPlugin; -import me.lucko.luckperms.common.storage.Storage; - -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -import static me.lucko.luckperms.common.api.ApiUtils.checkGroup; -import static me.lucko.luckperms.common.api.ApiUtils.checkName; -import static me.lucko.luckperms.common.api.ApiUtils.checkTrack; -import static me.lucko.luckperms.common.api.ApiUtils.checkUser; -import static me.lucko.luckperms.common.api.ApiUtils.checkUsername; - -@SuppressWarnings("deprecation") -public class DatastoreDelegate implements Datastore { - - private final LuckPermsPlugin plugin; - private final Storage master; - private final Async async; - private final Sync sync; - private final Future future; - - public DatastoreDelegate(@NonNull LuckPermsPlugin plugin, @NonNull Storage master) { - this.plugin = plugin; - this.master = master; - this.async = new Async(master); - this.sync = new Sync(master); - this.future = new Future(master); - } - - private void registerCallback(CompletableFuture fut, Callback c) { - if (c != null) { - fut.thenAcceptAsync(Callback.convertToConsumer(c), plugin.getScheduler().getSyncExecutor()); - } - } - - @Override - public String getName() { - return master.getName(); - } - - @Override - public boolean isAcceptingLogins() { - return master.isAcceptingLogins(); - } - - @Override - public Datastore.Async async() { - return async; - } - - @Override - public Datastore.Sync sync() { - return sync; - } - - @Override - public Datastore.Future future() { - return future; - } - - @AllArgsConstructor - public class Async implements Datastore.Async { - private final me.lucko.luckperms.common.storage.Storage master; - - @Override - public void logAction(@NonNull LogEntry entry, Callback callback) { - registerCallback(master.force().logAction(entry), callback); - } - - @Override - public void getLog(@NonNull Callback callback) { - master.force().getLog().thenAcceptAsync(log -> callback.onComplete(new LogDelegate(log)), plugin.getScheduler().getSyncExecutor()); - } - - @Override - public void loadOrCreateUser(@NonNull UUID uuid, @NonNull String username, Callback callback) { - registerCallback(master.force().loadUser(uuid, checkUsername(username)), callback); - } - - @Override - public void loadUser(@NonNull UUID uuid, Callback callback) { - registerCallback(master.force().loadUser(uuid, "null"), callback); - } - - @Override - public void loadUser(@NonNull UUID uuid, @NonNull String username, Callback callback) { - registerCallback(master.force().loadUser(uuid, checkUsername(username)), callback); - } - - @Override - public void saveUser(@NonNull User user, Callback callback) { - checkUser(user); - registerCallback(master.force().saveUser(((UserDelegate) user).getMaster()), callback); - } - - @Override - public void cleanupUsers(Callback callback) { - registerCallback(master.force().cleanupUsers(), callback); - } - - @Override - public void getUniqueUsers(Callback> callback) { - registerCallback(master.force().getUniqueUsers(), callback); - } - - @Override - public void createAndLoadGroup(@NonNull String name, Callback callback) { - registerCallback(master.force().createAndLoadGroup(checkName(name)), callback); - } - - @Override - public void loadGroup(@NonNull String name, Callback callback) { - registerCallback(master.force().loadGroup(checkName(name)), callback); - } - - @Override - public void loadAllGroups(Callback callback) { - registerCallback(master.force().loadAllGroups(), callback); - } - - @Override - public void saveGroup(@NonNull Group group, Callback callback) { - checkGroup(group); - registerCallback(master.force().saveGroup(((GroupDelegate) group).getMaster()), callback); - } - - @Override - public void deleteGroup(@NonNull Group group, Callback callback) { - checkGroup(group); - if (group.getName().equalsIgnoreCase(plugin.getConfiguration().get(ConfigKeys.DEFAULT_GROUP_NAME))) { - throw new IllegalArgumentException("Cannot delete the default group."); - } - registerCallback(master.force().deleteGroup(((GroupDelegate) group).getMaster()), callback); - } - - @Override - public void createAndLoadTrack(@NonNull String name, Callback callback) { - registerCallback(master.force().createAndLoadTrack(checkName(name)), callback); - } - - @Override - public void loadTrack(@NonNull String name, Callback callback) { - registerCallback(master.force().loadTrack(checkName(name)), callback); - } - - @Override - public void loadAllTracks(Callback callback) { - registerCallback(master.force().loadAllTracks(), callback); - } - - @Override - public void saveTrack(@NonNull Track track, Callback callback) { - checkTrack(track); - registerCallback(master.force().saveTrack(((TrackDelegate) track).getMaster()), callback); - } - - @Override - public void deleteTrack(@NonNull Track track, Callback callback) { - checkTrack(track); - registerCallback(master.force().deleteTrack(((TrackDelegate) track).getMaster()), callback); - } - - @Override - public void saveUUIDData(@NonNull String username, @NonNull UUID uuid, Callback callback) { - registerCallback(master.force().saveUUIDData(checkUsername(username), uuid), callback); - } - - @Override - public void getUUID(@NonNull String username, Callback callback) { - registerCallback(master.force().getUUID(checkUsername(username)), callback); - } - } - - @AllArgsConstructor - public class Sync implements Datastore.Sync { - private final Storage master; - - @Override - public boolean logAction(@NonNull LogEntry entry) { - return master.force().logAction(entry).join(); - } - - @Override - public Log getLog() { - me.lucko.luckperms.common.data.Log log = master.force().getLog().join(); - if (log == null) { - return null; - } - return new LogDelegate(log); - } - - @Override - public boolean loadOrCreateUser(@NonNull UUID uuid, @NonNull String username) { - return master.force().loadUser(uuid, checkUsername(username)).join(); - } - - @Override - public boolean loadUser(@NonNull UUID uuid) { - return master.force().loadUser(uuid, "null").join(); - } - - @Override - public boolean loadUser(@NonNull UUID uuid, @NonNull String username) { - return master.force().loadUser(uuid, checkUsername(username)).join(); - } - - @Override - public boolean saveUser(@NonNull User user) { - checkUser(user); - return master.force().saveUser(((UserDelegate) user).getMaster()).join(); - } - - @Override - public boolean cleanupUsers() { - return master.force().cleanupUsers().join(); - } - - @Override - public Set getUniqueUsers() { - return master.force().getUniqueUsers().join(); - } - - @Override - public boolean createAndLoadGroup(@NonNull String name) { - return master.force().createAndLoadGroup(checkName(name)).join(); - } - - @Override - public boolean loadGroup(@NonNull String name) { - return master.force().loadGroup(checkName(name)).join(); - } - - @Override - public boolean loadAllGroups() { - return master.force().loadAllGroups().join(); - } - - @Override - public boolean saveGroup(@NonNull Group group) { - checkGroup(group); - return master.force().saveGroup(((GroupDelegate) group).getMaster()).join(); - } - - @Override - public boolean deleteGroup(@NonNull Group group) { - checkGroup(group); - if (group.getName().equalsIgnoreCase(plugin.getConfiguration().get(ConfigKeys.DEFAULT_GROUP_NAME))) { - throw new IllegalArgumentException("Cannot delete the default group."); - } - return master.force().deleteGroup(((GroupDelegate) group).getMaster()).join(); - } - - @Override - public boolean createAndLoadTrack(@NonNull String name) { - return master.force().createAndLoadTrack(checkName(name)).join(); - } - - @Override - public boolean loadTrack(@NonNull String name) { - return master.force().loadTrack(checkName(name)).join(); - } - - @Override - public boolean loadAllTracks() { - return master.force().loadAllTracks().join(); - } - - @Override - public boolean saveTrack(@NonNull Track track) { - checkTrack(track); - return master.force().saveTrack(((TrackDelegate) track).getMaster()).join(); - } - - @Override - public boolean deleteTrack(@NonNull Track track) { - checkTrack(track); - return master.force().deleteTrack(((TrackDelegate) track).getMaster()).join(); - } - - @Override - public boolean saveUUIDData(@NonNull String username, @NonNull UUID uuid) { - return master.force().saveUUIDData(checkUsername(username), uuid).join(); - } - - @Override - public UUID getUUID(@NonNull String username) { - return master.force().getUUID(checkUsername(username)).join(); - } - } - - @AllArgsConstructor - public class Future implements Datastore.Future { - private final Storage master; - - @Override - public java.util.concurrent.Future logAction(@NonNull LogEntry entry) { - return master.force().logAction(entry); - } - - @Override - public java.util.concurrent.Future getLog() { - return master.force().getLog().thenApply(log -> log == null ? null : new LogDelegate(log)); - } - - @Override - public java.util.concurrent.Future loadOrCreateUser(@NonNull UUID uuid, @NonNull String username) { - return master.force().loadUser(uuid, checkUsername(username)); - } - - @Override - public java.util.concurrent.Future loadUser(@NonNull UUID uuid) { - return master.force().loadUser(uuid, "null"); - } - - @Override - public java.util.concurrent.Future loadUser(@NonNull UUID uuid, @NonNull String username) { - return master.force().loadUser(uuid, checkUsername(username)); - } - - @Override - public java.util.concurrent.Future saveUser(@NonNull User user) { - checkUser(user); - return master.force().saveUser(((UserDelegate) user).getMaster()); - } - - @Override - public java.util.concurrent.Future cleanupUsers() { - return master.force().cleanupUsers(); - } - - @Override - public java.util.concurrent.Future> getUniqueUsers() { - return master.force().getUniqueUsers(); - } - - @Override - public java.util.concurrent.Future createAndLoadGroup(@NonNull String name) { - return master.force().createAndLoadGroup(checkName(name)); - } - - @Override - public java.util.concurrent.Future loadGroup(@NonNull String name) { - return master.force().loadGroup(checkName(name)); - } - - @Override - public java.util.concurrent.Future loadAllGroups() { - return master.force().loadAllGroups(); - } - - @Override - public java.util.concurrent.Future saveGroup(@NonNull Group group) { - checkGroup(group); - return master.force().saveGroup(((GroupDelegate) group).getMaster()); - } - - @Override - public java.util.concurrent.Future deleteGroup(@NonNull Group group) { - checkGroup(group); - if (group.getName().equalsIgnoreCase(plugin.getConfiguration().get(ConfigKeys.DEFAULT_GROUP_NAME))) { - throw new IllegalArgumentException("Cannot delete the default group."); - } - return master.force().deleteGroup(((GroupDelegate) group).getMaster()); - } - - @Override - public java.util.concurrent.Future createAndLoadTrack(@NonNull String name) { - return master.force().createAndLoadTrack(checkName(name)); - } - - @Override - public java.util.concurrent.Future loadTrack(@NonNull String name) { - return master.force().loadTrack(checkName(name)); - } - - @Override - public java.util.concurrent.Future loadAllTracks() { - return master.force().loadAllTracks(); - } - - @Override - public java.util.concurrent.Future saveTrack(@NonNull Track track) { - checkTrack(track); - return master.force().saveTrack(((TrackDelegate) track).getMaster()); - } - - @Override - public java.util.concurrent.Future deleteTrack(@NonNull Track track) { - checkTrack(track); - return master.force().deleteTrack(((TrackDelegate) track).getMaster()); - } - - @Override - public java.util.concurrent.Future saveUUIDData(@NonNull String username, @NonNull UUID uuid) { - return master.force().saveUUIDData(checkUsername(username), uuid); - } - - @Override - public java.util.concurrent.Future getUUID(@NonNull String username) { - return master.force().getUUID(checkUsername(username)); - } - } - -} diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/GroupDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/GroupDelegate.java similarity index 99% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/GroupDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/GroupDelegate.java index 354289682..cb6a326b9 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/GroupDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/GroupDelegate.java @@ -20,7 +20,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.AccessLevel; import lombok.EqualsAndHashCode; diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/LPConfigurationDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/LPConfigurationDelegate.java similarity index 87% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/LPConfigurationDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/LPConfigurationDelegate.java index e1c6e73c2..9cd5c51be 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/LPConfigurationDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/LPConfigurationDelegate.java @@ -20,13 +20,12 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.AllArgsConstructor; import me.lucko.luckperms.api.LPConfiguration; import me.lucko.luckperms.api.data.DatastoreConfiguration; -import me.lucko.luckperms.api.data.MySQLConfiguration; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.config.LuckPermsConfiguration; @@ -49,16 +48,6 @@ public class LPConfigurationDelegate implements LPConfiguration { return master.get(ConfigKeys.SYNC_TIME); } - @Override - public String getDefaultGroupNode() { - return master.get(ConfigKeys.DEFAULT_GROUP_NODE); - } - - @Override - public String getDefaultGroupName() { - return master.get(ConfigKeys.DEFAULT_GROUP_NAME); - } - @Override public boolean getIncludeGlobalPerms() { return master.get(ConfigKeys.INCLUDING_GLOBAL_PERMS); @@ -104,11 +93,6 @@ public class LPConfigurationDelegate implements LPConfiguration { return master.get(ConfigKeys.LOG_NOTIFY); } - @Override - public boolean getDebugPermissionChecks() { - return false; - } - @Override public boolean getEnableOps() { return master.get(ConfigKeys.OPS_ENABLED); @@ -134,12 +118,6 @@ public class LPConfigurationDelegate implements LPConfiguration { return master.get(ConfigKeys.VAULT_INCLUDING_GLOBAL); } - @SuppressWarnings("deprecation") - @Override - public MySQLConfiguration getDatabaseValues() { - return getDatastoreConfig(); - } - @Override public DatastoreConfiguration getDatastoreConfig() { return master.get(ConfigKeys.DATABASE_VALUES); diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/LogDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/LogDelegate.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/LogDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/LogDelegate.java index d6c88ba09..08a199090 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/LogDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/LogDelegate.java @@ -20,7 +20,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.AllArgsConstructor; import lombok.NonNull; diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/NodeFactoryDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/NodeFactoryDelegate.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/NodeFactoryDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/NodeFactoryDelegate.java index 0ad36f638..8a8ea0a8a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/NodeFactoryDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/NodeFactoryDelegate.java @@ -20,7 +20,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.NonNull; diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/PermissionHolderDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/PermissionHolderDelegate.java similarity index 77% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/PermissionHolderDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/PermissionHolderDelegate.java index 9df69c711..accf3d765 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/PermissionHolderDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/PermissionHolderDelegate.java @@ -20,12 +20,11 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.AllArgsConstructor; import lombok.NonNull; -import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; @@ -34,22 +33,18 @@ import me.lucko.luckperms.api.LocalizedNode; import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.PermissionHolder; import me.lucko.luckperms.api.Tristate; -import me.lucko.luckperms.api.context.ContextSet; import me.lucko.luckperms.common.utils.ExtractedContexts; import me.lucko.luckperms.exceptions.ObjectAlreadyHasException; import me.lucko.luckperms.exceptions.ObjectLacksException; -import java.util.AbstractMap; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import static me.lucko.luckperms.common.api.ApiUtils.checkTime; -import static me.lucko.luckperms.common.core.model.PermissionHolder.exportToLegacy; /** * Provides a link between {@link PermissionHolder} and {@link me.lucko.luckperms.common.core.model.PermissionHolder} @@ -79,11 +74,6 @@ public class PermissionHolderDelegate implements PermissionHolder { return ImmutableSet.copyOf(master.getTransientNodes()); } - @Override - public Set getAllNodes() { - return ImmutableSet.copyOf(master.getAllNodes(null, ExtractedContexts.generate(Contexts.allowAll()))); - } - @Override public SortedSet getAllNodes(@NonNull Contexts contexts) { return new TreeSet<>(master.getAllNodes(null, ExtractedContexts.generate(contexts))); @@ -99,11 +89,6 @@ public class PermissionHolderDelegate implements PermissionHolder { return new HashMap<>(master.exportNodes(contexts, lowerCase)); } - @Override - public Map getNodes() { - return ImmutableMap.copyOf(exportToLegacy(master.getNodes())); - } - @Override public Tristate hasPermission(@NonNull Node node) { return master.hasPermission(node, false); @@ -314,75 +299,11 @@ public class PermissionHolderDelegate implements PermissionHolder { master.clearTransientNodes(); } - @Override - public Map getLocalPermissions(String server, String world, List excludedGroups, List possibleNodes) { - Map context = new HashMap<>(); - if (server != null && !server.equals("")) { - context.put("server", server); - } - if (world != null && !world.equals("")) { - context.put("world", world); - } - return master.exportNodes(new Contexts(ContextSet.fromMap(context), true, true, true, true, true, false), false); - } - - @Override - public Map getLocalPermissions(String server, String world, List excludedGroups) { - Map context = new HashMap<>(); - if (server != null && !server.equals("")) { - context.put("server", server); - } - if (world != null && !world.equals("")) { - context.put("world", world); - } - return master.exportNodes(new Contexts(ContextSet.fromMap(context), true, true, true, true, true, false), false); - } - - @Override - public Map getLocalPermissions(String server, List excludedGroups, List possibleNodes) { - return getLocalPermissions(server, null, excludedGroups, possibleNodes); - } - - @Override - public Map getLocalPermissions(String server, List excludedGroups) { - return getLocalPermissions(server, null, excludedGroups, null); - } - - @Override - public Map getPermissions(String server, String world, Map extraContext, boolean includeGlobal, List possibleNodes, boolean applyGroups) { - if (extraContext == null) { - extraContext = new HashMap<>(); - } - if (server != null && !server.equals("")) { - extraContext.put("server", server); - } - if (world != null && !world.equals("")) { - extraContext.put("world", world); - } - return master.exportNodes(new Contexts(ContextSet.fromMap(extraContext), includeGlobal, includeGlobal, applyGroups, true, true, false), false); - } - - @Override - public Map, Long> getTemporaryNodes() { - Map, Long> m = new HashMap<>(); - - for (Node node : master.getTemporaryNodes()) { - m.put(new AbstractMap.SimpleEntry<>(node.getKey(), node.getValue()), node.getExpiryUnixTime()); - } - - return m; - } - @Override public Set getTemporaryPermissionNodes() { return master.getTemporaryNodes(); } - @Override - public Map getPermanentNodes() { - return exportToLegacy(master.getPermanentNodes()); - } - @Override public Set getPermanentPermissionNodes() { return master.getPermanentNodes(); diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/StorageDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/StorageDelegate.java similarity index 95% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/StorageDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/StorageDelegate.java index b09ce613a..bb5c0006b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/StorageDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/StorageDelegate.java @@ -20,7 +20,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.AllArgsConstructor; import lombok.NonNull; @@ -32,6 +32,8 @@ import me.lucko.luckperms.api.LogEntry; import me.lucko.luckperms.api.Storage; import me.lucko.luckperms.api.Track; import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.cause.DeletionCause; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -113,7 +115,7 @@ public class StorageDelegate implements Storage { @Override public CompletableFuture createAndLoadGroup(String name) { - return master.force().createAndLoadGroup(checkName(name)); + return master.force().createAndLoadGroup(checkName(name), CreationCause.API); } @Override @@ -138,7 +140,7 @@ public class StorageDelegate implements Storage { if (group.getName().equalsIgnoreCase(plugin.getConfiguration().get(ConfigKeys.DEFAULT_GROUP_NAME))) { throw new IllegalArgumentException("Cannot delete the default group."); } - return master.force().deleteGroup(((GroupDelegate) group).getMaster()); + return master.force().deleteGroup(((GroupDelegate) group).getMaster(), DeletionCause.API); } @Override @@ -148,7 +150,7 @@ public class StorageDelegate implements Storage { @Override public CompletableFuture createAndLoadTrack(String name) { - return master.force().createAndLoadTrack(checkName(name)); + return master.force().createAndLoadTrack(checkName(name), CreationCause.API); } @Override @@ -170,7 +172,7 @@ public class StorageDelegate implements Storage { @Override public CompletableFuture deleteTrack(Track track) { checkTrack(track); - return master.force().deleteTrack(((TrackDelegate) track).getMaster()); + return master.force().deleteTrack(((TrackDelegate) track).getMaster(), DeletionCause.API); } @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/TrackDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/TrackDelegate.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/TrackDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/TrackDelegate.java index 94a032866..ba36f740d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/TrackDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/TrackDelegate.java @@ -20,7 +20,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.AccessLevel; import lombok.EqualsAndHashCode; @@ -40,7 +40,6 @@ import static me.lucko.luckperms.common.api.ApiUtils.checkGroup; * Provides a link between {@link Track} and {@link me.lucko.luckperms.common.core.model.Track} */ @EqualsAndHashCode(of = {"name"}) -@SuppressWarnings("unused") public class TrackDelegate implements Track { @Getter(AccessLevel.PACKAGE) diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/UserDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/UserDelegate.java similarity index 98% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/UserDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/UserDelegate.java index 098747f7d..ee07aedd3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/UserDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/UserDelegate.java @@ -20,7 +20,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -43,7 +43,6 @@ import static me.lucko.luckperms.common.api.ApiUtils.checkTime; * Provides a link between {@link User} and {@link me.lucko.luckperms.common.core.model.User} */ @EqualsAndHashCode(of = {"uuid"}, callSuper = false) -@SuppressWarnings("unused") public class UserDelegate extends PermissionHolderDelegate implements User { @Getter diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegate/UuidCacheDelegate.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/UuidCacheDelegate.java similarity index 97% rename from common/src/main/java/me/lucko/luckperms/common/api/delegate/UuidCacheDelegate.java rename to common/src/main/java/me/lucko/luckperms/common/api/delegates/UuidCacheDelegate.java index 211465c20..83736cc35 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegate/UuidCacheDelegate.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/UuidCacheDelegate.java @@ -20,7 +20,7 @@ * SOFTWARE. */ -package me.lucko.luckperms.common.api.delegate; +package me.lucko.luckperms.common.api.delegates; import lombok.AllArgsConstructor; import lombok.NonNull; 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 bd6aba1ed..4c01a71e3 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 @@ -22,9 +22,6 @@ package me.lucko.luckperms.common.commands.generic.parent; -import me.lucko.luckperms.api.event.events.GroupAddEvent; -import me.lucko.luckperms.common.api.delegate.GroupDelegate; -import me.lucko.luckperms.common.api.delegate.PermissionHolderDelegate; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; @@ -93,21 +90,18 @@ public class ParentAddTemp extends SharedSubCommand { Message.SET_TEMP_INHERIT_SUCCESS.send(sender, holder.getFriendlyName(), group.getDisplayName(), DateUtil.formatDateDiff(duration) ); - plugin.getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(holder), new GroupDelegate(group), null, null, duration)); break; case SERVER: duration = holder.setPermission(new NodeBuilder("group." + group.getName()).setValue(true).setServer(server).setExpiry(duration).build(), modifier).getExpiryUnixTime(); Message.SET_TEMP_INHERIT_SERVER_SUCCESS.send(sender, holder.getFriendlyName(), group.getDisplayName(), server, DateUtil.formatDateDiff(duration) ); - plugin.getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(holder), new GroupDelegate(group), server, null, duration)); break; case SERVER_AND_WORLD: duration = holder.setPermission(new NodeBuilder("group." + group.getName()).setValue(true).setServer(server).setWorld(world).setExpiry(duration).build(), modifier).getExpiryUnixTime(); Message.SET_TEMP_INHERIT_SERVER_WORLD_SUCCESS.send(sender, holder.getFriendlyName(), group.getDisplayName(), server, world, DateUtil.formatDateDiff(duration) ); - plugin.getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(holder), new GroupDelegate(group), server, world, duration)); break; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/CreateGroup.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/CreateGroup.java index 845f628f6..5606188a8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/group/CreateGroup.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/CreateGroup.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.common.commands.group; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SingleCommand; @@ -62,7 +63,7 @@ public class CreateGroup extends SingleCommand { return CommandResult.INVALID_ARGS; } - if (!plugin.getStorage().createAndLoadGroup(groupName).join()) { + if (!plugin.getStorage().createAndLoadGroup(groupName, CreationCause.COMMAND).join()) { Message.CREATE_GROUP_ERROR.send(sender); return CommandResult.FAILURE; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/DeleteGroup.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/DeleteGroup.java index af12223cc..ce8ce4cf8 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/group/DeleteGroup.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/DeleteGroup.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.common.commands.group; +import me.lucko.luckperms.api.event.cause.DeletionCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SingleCommand; @@ -73,7 +74,7 @@ public class DeleteGroup extends SingleCommand { return CommandResult.LOADING_ERROR; } - if (!plugin.getStorage().deleteGroup(group).join()) { + if (!plugin.getStorage().deleteGroup(group, DeletionCause.COMMAND).join()) { Message.DELETE_GROUP_ERROR.send(sender); return CommandResult.FAILURE; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupClone.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupClone.java index a68d02e6d..bd6b0ce96 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupClone.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupClone.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.common.commands.group; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; @@ -57,7 +58,7 @@ public class GroupClone extends SubCommand { return CommandResult.INVALID_ARGS; } - if (!plugin.getStorage().createAndLoadGroup(newGroupName).join()) { + if (!plugin.getStorage().createAndLoadGroup(newGroupName, CreationCause.COMMAND).join()) { Message.CREATE_GROUP_ERROR.send(sender); return CommandResult.FAILURE; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupRename.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupRename.java index fbc92d5cc..c00a056ca 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupRename.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupRename.java @@ -22,6 +22,8 @@ package me.lucko.luckperms.common.commands.group; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.cause.DeletionCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; @@ -57,7 +59,7 @@ public class GroupRename extends SubCommand { return CommandResult.INVALID_ARGS; } - if (!plugin.getStorage().createAndLoadGroup(newGroupName).join()) { + if (!plugin.getStorage().createAndLoadGroup(newGroupName, CreationCause.COMMAND).join()) { Message.CREATE_GROUP_ERROR.send(sender); return CommandResult.FAILURE; } @@ -68,7 +70,7 @@ public class GroupRename extends SubCommand { return CommandResult.LOADING_ERROR; } - if (!plugin.getStorage().deleteGroup(group).join()) { + if (!plugin.getStorage().deleteGroup(group, DeletionCause.COMMAND).join()) { Message.DELETE_GROUP_ERROR.send(sender); return CommandResult.FAILURE; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/track/CreateTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/track/CreateTrack.java index 57c754430..48c1d45eb 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/track/CreateTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/track/CreateTrack.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.common.commands.track; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SingleCommand; @@ -62,7 +63,7 @@ public class CreateTrack extends SingleCommand { return CommandResult.INVALID_ARGS; } - if (!plugin.getStorage().createAndLoadTrack(trackName).join()) { + if (!plugin.getStorage().createAndLoadTrack(trackName, CreationCause.COMMAND).join()) { Message.CREATE_TRACK_ERROR.send(sender); return CommandResult.FAILURE; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/track/DeleteTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/track/DeleteTrack.java index 24b487145..b87cff7f4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/track/DeleteTrack.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/track/DeleteTrack.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.common.commands.track; +import me.lucko.luckperms.api.event.cause.DeletionCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SingleCommand; @@ -66,7 +67,7 @@ public class DeleteTrack extends SingleCommand { return CommandResult.LOADING_ERROR; } - if (!plugin.getStorage().deleteTrack(track).join()) { + if (!plugin.getStorage().deleteTrack(track, DeletionCause.COMMAND).join()) { Message.DELETE_TRACK_ERROR.send(sender); return CommandResult.FAILURE; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackClone.java b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackClone.java index 3801ce195..a1a483bab 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackClone.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackClone.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.common.commands.track; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; @@ -57,7 +58,7 @@ public class TrackClone extends SubCommand { return CommandResult.INVALID_ARGS; } - if (!plugin.getStorage().createAndLoadTrack(newTrackName).join()) { + if (!plugin.getStorage().createAndLoadTrack(newTrackName, CreationCause.INTERNAL).join()) { Message.CREATE_TRACK_ERROR.send(sender); return CommandResult.FAILURE; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackRename.java b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackRename.java index 80f811877..ff3a990d0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackRename.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackRename.java @@ -22,6 +22,8 @@ package me.lucko.luckperms.common.commands.track; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.cause.DeletionCause; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; @@ -57,7 +59,7 @@ public class TrackRename extends SubCommand { return CommandResult.INVALID_ARGS; } - if (!plugin.getStorage().createAndLoadTrack(newTrackName).join()) { + if (!plugin.getStorage().createAndLoadTrack(newTrackName, CreationCause.COMMAND).join()) { Message.CREATE_TRACK_ERROR.send(sender); return CommandResult.FAILURE; } @@ -68,7 +70,7 @@ public class TrackRename extends SubCommand { return CommandResult.LOADING_ERROR; } - if (!plugin.getStorage().deleteTrack(track).join()) { + if (!plugin.getStorage().deleteTrack(track, DeletionCause.COMMAND).join()) { Message.DELETE_TRACK_ERROR.send(sender); return CommandResult.FAILURE; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java index 4f0f9f13d..3e5a1c859 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserDemote.java @@ -25,9 +25,6 @@ package me.lucko.luckperms.common.commands.user; import com.google.common.base.Objects; import me.lucko.luckperms.api.Node; -import me.lucko.luckperms.api.event.events.UserDemoteEvent; -import me.lucko.luckperms.common.api.delegate.TrackDelegate; -import me.lucko.luckperms.common.api.delegate.UserDelegate; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; @@ -150,7 +147,7 @@ public class UserDemote extends SubCommand { .action("demote " + args.stream().collect(Collectors.joining(" "))) .build().submit(plugin, sender); save(user, sender, plugin); - plugin.getApiProvider().fireEventAsync(new UserDemoteEvent(new TrackDelegate(track), new UserDelegate(user), old, null)); + plugin.getApiProvider().getEventFactory().handleUserDemote(user, track, old, null); return CommandResult.SUCCESS; } @@ -194,7 +191,7 @@ public class UserDemote extends SubCommand { .action("demote " + args.stream().collect(Collectors.joining(" "))) .build().submit(plugin, sender); save(user, sender, plugin); - plugin.getApiProvider().fireEventAsync(new UserDemoteEvent(new TrackDelegate(track), new UserDelegate(user), old, previousGroup.getName())); + plugin.getApiProvider().getEventFactory().handleUserDemote(user, track, old, previousGroup.getName()); return CommandResult.SUCCESS; } diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java index f7784093f..a4f359313 100644 --- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java +++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserPromote.java @@ -25,9 +25,6 @@ package me.lucko.luckperms.common.commands.user; import com.google.common.base.Objects; import me.lucko.luckperms.api.Node; -import me.lucko.luckperms.api.event.events.UserPromoteEvent; -import me.lucko.luckperms.common.api.delegate.TrackDelegate; -import me.lucko.luckperms.common.api.delegate.UserDelegate; import me.lucko.luckperms.common.commands.Arg; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; @@ -147,7 +144,7 @@ public class UserPromote extends SubCommand { .action("promote " + args.stream().collect(Collectors.joining(" "))) .build().submit(plugin, sender); save(user, sender, plugin); - plugin.getApiProvider().fireEventAsync(new UserPromoteEvent(new TrackDelegate(track), new UserDelegate(user), null, first)); + plugin.getApiProvider().getEventFactory().handleUserPromote(user, track, null, first); return CommandResult.SUCCESS; } @@ -211,7 +208,7 @@ public class UserPromote extends SubCommand { .action("promote " + args.stream().collect(Collectors.joining(" "))) .build().submit(plugin, sender); save(user, sender, plugin); - plugin.getApiProvider().fireEventAsync(new UserPromoteEvent(new TrackDelegate(track), new UserDelegate(user), old, nextGroup.getName())); + plugin.getApiProvider().getEventFactory().handleUserPromote(user, track, old, nextGroup.getName()); return CommandResult.SUCCESS; } diff --git a/common/src/main/java/me/lucko/luckperms/common/config/AbstractConfiguration.java b/common/src/main/java/me/lucko/luckperms/common/config/AbstractConfiguration.java index c213046a1..f62073a70 100644 --- a/common/src/main/java/me/lucko/luckperms/common/config/AbstractConfiguration.java +++ b/common/src/main/java/me/lucko/luckperms/common/config/AbstractConfiguration.java @@ -22,10 +22,13 @@ package me.lucko.luckperms.common.config; +import lombok.Getter; + import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; +import me.lucko.luckperms.common.api.delegates.LPConfigurationDelegate; import me.lucko.luckperms.common.config.keys.EnduringKey; import java.util.Optional; @@ -42,6 +45,9 @@ public abstract class AbstractConfiguration implements LuckPermsConfiguration { } }); + @Getter + private final LPConfigurationDelegate delegate = new LPConfigurationDelegate(this); + @Override public T get(ConfigKey key) { return (T) cache.getUnchecked(key).orElse(null); @@ -60,5 +66,7 @@ public abstract class AbstractConfiguration implements LuckPermsConfiguration { cache.invalidateAll(toInvalidate); loadAll(); + + getPlugin().getApiProvider().getEventFactory().handleConfigReload(); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/config/LuckPermsConfiguration.java b/common/src/main/java/me/lucko/luckperms/common/config/LuckPermsConfiguration.java index 2b897de8d..76a60377d 100644 --- a/common/src/main/java/me/lucko/luckperms/common/config/LuckPermsConfiguration.java +++ b/common/src/main/java/me/lucko/luckperms/common/config/LuckPermsConfiguration.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.common.config; +import me.lucko.luckperms.common.api.delegates.LPConfigurationDelegate; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import java.util.List; @@ -29,6 +30,8 @@ import java.util.Map; public interface LuckPermsConfiguration { + LPConfigurationDelegate getDelegate(); + LuckPermsPlugin getPlugin(); void init(); diff --git a/common/src/main/java/me/lucko/luckperms/common/contexts/ContextManager.java b/common/src/main/java/me/lucko/luckperms/common/contexts/ContextManager.java index d6475380f..5bf70ebc2 100644 --- a/common/src/main/java/me/lucko/luckperms/common/contexts/ContextManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/contexts/ContextManager.java @@ -26,9 +26,8 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import me.lucko.luckperms.api.context.ContextListener; +import me.lucko.luckperms.api.context.ContextCalculator; import me.lucko.luckperms.api.context.ContextSet; -import me.lucko.luckperms.api.context.IContextCalculator; import me.lucko.luckperms.api.context.MutableContextSet; import java.util.List; @@ -37,8 +36,7 @@ import java.util.concurrent.TimeUnit; public class ContextManager { - private final List> calculators = new CopyOnWriteArrayList<>(); - private final List> listeners = new CopyOnWriteArrayList<>(); + private final List> calculators = new CopyOnWriteArrayList<>(); private final LoadingCache cache = CacheBuilder.newBuilder() .weakKeys() @@ -51,7 +49,7 @@ public class ContextManager { }); private MutableContextSet calculateApplicableContext(T subject, MutableContextSet accumulator) { - for (IContextCalculator calculator : calculators) { + for (ContextCalculator calculator : calculators) { calculator.giveApplicableContext(subject, accumulator); } return accumulator; @@ -61,19 +59,10 @@ public class ContextManager { return cache.getUnchecked(subject); } - public void registerCalculator(IContextCalculator calculator) { - listeners.forEach(calculator::addListener); + public void registerCalculator(ContextCalculator calculator) { calculators.add(calculator); } - public void registerListener(ContextListener listener) { - for (IContextCalculator calculator : calculators) { - calculator.addListener(listener); - } - - listeners.add(listener); - } - public int getCalculatorsSize() { return calculators.size(); } diff --git a/common/src/main/java/me/lucko/luckperms/common/contexts/ServerCalculator.java b/common/src/main/java/me/lucko/luckperms/common/contexts/ServerCalculator.java index e66623dd4..b2cb96231 100644 --- a/common/src/main/java/me/lucko/luckperms/common/contexts/ServerCalculator.java +++ b/common/src/main/java/me/lucko/luckperms/common/contexts/ServerCalculator.java @@ -34,7 +34,7 @@ import me.lucko.luckperms.common.config.LuckPermsConfiguration; import java.util.Map; @AllArgsConstructor -public class ServerCalculator extends ContextCalculator { +public class ServerCalculator implements ContextCalculator { private final LuckPermsConfiguration config; @Override diff --git a/common/src/main/java/me/lucko/luckperms/common/core/UuidCache.java b/common/src/main/java/me/lucko/luckperms/common/core/UuidCache.java index 82acce200..90c1c27f5 100644 --- a/common/src/main/java/me/lucko/luckperms/common/core/UuidCache.java +++ b/common/src/main/java/me/lucko/luckperms/common/core/UuidCache.java @@ -22,12 +22,14 @@ package me.lucko.luckperms.common.core; +import lombok.Getter; import lombok.RequiredArgsConstructor; import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; import com.google.common.collect.Maps; +import me.lucko.luckperms.common.api.delegates.UuidCacheDelegate; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -43,6 +45,9 @@ public class UuidCache { // External UUID --> Internal UUID private final BiMap cache = Maps.synchronizedBiMap(HashBiMap.create()); + @Getter + private final UuidCacheDelegate delegate = new UuidCacheDelegate(this); + public UUID getUUID(UUID external) { return plugin.getConfiguration().get(ConfigKeys.ONLINE_MODE) ? external : cache.getOrDefault(external, external); } diff --git a/common/src/main/java/me/lucko/luckperms/common/core/model/Group.java b/common/src/main/java/me/lucko/luckperms/common/core/model/Group.java index 5dc376729..fcf425972 100644 --- a/common/src/main/java/me/lucko/luckperms/common/core/model/Group.java +++ b/common/src/main/java/me/lucko/luckperms/common/core/model/Group.java @@ -26,6 +26,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.ToString; +import me.lucko.luckperms.common.api.delegates.GroupDelegate; import me.lucko.luckperms.common.caching.handlers.GroupReference; import me.lucko.luckperms.common.caching.handlers.HolderReference; import me.lucko.luckperms.common.config.ConfigKeys; @@ -42,6 +43,9 @@ public class Group extends PermissionHolder implements Identifiable { @Getter private final String name; + @Getter + private final GroupDelegate delegate = new GroupDelegate(this); + public Group(String name, LuckPermsPlugin plugin) { super(name, plugin); this.name = name; diff --git a/common/src/main/java/me/lucko/luckperms/common/core/model/PermissionHolder.java b/common/src/main/java/me/lucko/luckperms/common/core/model/PermissionHolder.java index 80d51247d..a3348776c 100644 --- a/common/src/main/java/me/lucko/luckperms/common/core/model/PermissionHolder.java +++ b/common/src/main/java/me/lucko/luckperms/common/core/model/PermissionHolder.java @@ -39,13 +39,7 @@ import me.lucko.luckperms.api.Contexts; import me.lucko.luckperms.api.LocalizedNode; import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.Tristate; -import me.lucko.luckperms.api.event.events.GroupAddEvent; -import me.lucko.luckperms.api.event.events.GroupRemoveEvent; -import me.lucko.luckperms.api.event.events.PermissionNodeExpireEvent; -import me.lucko.luckperms.api.event.events.PermissionNodeSetEvent; -import me.lucko.luckperms.api.event.events.PermissionNodeUnsetEvent; -import me.lucko.luckperms.common.api.delegate.GroupDelegate; -import me.lucko.luckperms.common.api.delegate.PermissionHolderDelegate; +import me.lucko.luckperms.common.api.delegates.PermissionHolderDelegate; import me.lucko.luckperms.common.caching.MetaHolder; import me.lucko.luckperms.common.caching.handlers.CachedStateManager; import me.lucko.luckperms.common.caching.handlers.GroupReference; @@ -384,6 +378,7 @@ public abstract class PermissionHolder { public abstract String getFriendlyName(); public abstract HolderReference toReference(); + public abstract PermissionHolderDelegate getDelegate(); public Set getNodes() { return enduringCache.get(); @@ -549,6 +544,8 @@ public abstract class PermissionHolder { boolean work = false; Set removed = new HashSet<>(); + ImmutableSet before = ImmutableSet.copyOf(getPermissions(true)); + synchronized (nodes) { Iterator it = nodes.iterator(); while (it.hasNext()) { @@ -586,9 +583,10 @@ public abstract class PermissionHolder { return false; } - PermissionHolderDelegate link = new PermissionHolderDelegate(this); + ImmutableSet after = ImmutableSet.copyOf(getPermissions(true)); + for (Node r : removed) { - plugin.getApiProvider().fireEventAsync(new PermissionNodeExpireEvent(link, r)); + plugin.getApiProvider().getEventFactory().handleNodeRemove(r, this, before, after); } return true; @@ -704,12 +702,16 @@ public abstract class PermissionHolder { throw new ObjectAlreadyHasException(); } + ImmutableSet before = ImmutableSet.copyOf(getNodes()); + synchronized (nodes) { nodes.add(node); } invalidateCache(true); - plugin.getApiProvider().fireEventAsync(new PermissionNodeSetEvent(new PermissionHolderDelegate(this), node)); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + + plugin.getApiProvider().getEventFactory().handleNodeAdd(node, this, before, after); } /** @@ -733,6 +735,8 @@ public abstract class PermissionHolder { // Create a new node with the same properties, but add the expiry dates together Node newNode = NodeFactory.builderFromExisting(node).setExpiry(previous.getExpiryUnixTime() + node.getSecondsTilExpiry()).build(); + ImmutableSet before = ImmutableSet.copyOf(getNodes()); + // Remove the old node & add the new one. synchronized (nodes) { nodes.remove(previous); @@ -740,8 +744,8 @@ public abstract class PermissionHolder { } invalidateCache(true); - plugin.getApiProvider().fireEventAsync(new PermissionNodeUnsetEvent(new PermissionHolderDelegate(this), previous)); - plugin.getApiProvider().fireEventAsync(new PermissionNodeSetEvent(new PermissionHolderDelegate(this), newNode)); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeAdd(newNode, this, before, after); return newNode; } @@ -756,14 +760,16 @@ public abstract class PermissionHolder { // Only replace if the new expiry time is greater than the old one. if (node.getExpiryUnixTime() > previous.getExpiryUnixTime()) { + ImmutableSet before = ImmutableSet.copyOf(getNodes()); + synchronized (nodes) { nodes.remove(previous); nodes.add(node); } invalidateCache(true); - plugin.getApiProvider().fireEventAsync(new PermissionNodeUnsetEvent(new PermissionHolderDelegate(this), previous)); - plugin.getApiProvider().fireEventAsync(new PermissionNodeSetEvent(new PermissionHolderDelegate(this), node)); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeAdd(node, this, before, after); return node; } } @@ -788,12 +794,16 @@ public abstract class PermissionHolder { throw new ObjectAlreadyHasException(); } + ImmutableSet before = ImmutableSet.copyOf(getTransientNodes()); + synchronized (transientNodes) { transientNodes.add(node); } invalidateCache(false); - plugin.getApiProvider().fireEventAsync(new PermissionNodeSetEvent(new PermissionHolderDelegate(this), node)); + ImmutableSet after = ImmutableSet.copyOf(getTransientNodes()); + + plugin.getApiProvider().getEventFactory().handleNodeAdd(node, this, before, after); } public void setPermission(String node, boolean value) throws ObjectAlreadyHasException { @@ -831,17 +841,15 @@ public abstract class PermissionHolder { throw new ObjectLacksException(); } + ImmutableSet before = ImmutableSet.copyOf(getNodes()); + synchronized (nodes) { nodes.removeIf(e -> e.almostEquals(node)); } invalidateCache(true); - if (node.isGroupNode()) { - plugin.getApiProvider().fireEventAsync(new GroupRemoveEvent(new PermissionHolderDelegate(this), - node.getGroupName(), node.getServer().orElse(null), node.getWorld().orElse(null), node.isTemporary())); - } else { - plugin.getApiProvider().fireEventAsync(new PermissionNodeUnsetEvent(new PermissionHolderDelegate(this), node)); - } + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeRemove(node, this, before, after); } /** @@ -855,17 +863,15 @@ public abstract class PermissionHolder { throw new ObjectLacksException(); } + ImmutableSet before = ImmutableSet.copyOf(getTransientNodes()); + synchronized (transientNodes) { transientNodes.removeIf(e -> e.almostEquals(node)); } invalidateCache(false); - if (node.isGroupNode()) { - plugin.getApiProvider().fireEventAsync(new GroupRemoveEvent(new PermissionHolderDelegate(this), - node.getGroupName(), node.getServer().orElse(null), node.getWorld().orElse(null), node.isTemporary())); - } else { - plugin.getApiProvider().fireEventAsync(new PermissionNodeUnsetEvent(new PermissionHolderDelegate(this), node)); - } + ImmutableSet after = ImmutableSet.copyOf(getTransientNodes()); + plugin.getApiProvider().getEventFactory().handleNodeRemove(node, this, before, after); } public void unsetPermission(String node, boolean temporary) throws ObjectLacksException { @@ -910,7 +916,6 @@ public abstract class PermissionHolder { } setPermission("group." + group.getName(), true); - getPlugin().getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(this), new GroupDelegate(group), null, null, 0L)); } public void setInheritGroup(Group group, String server) throws ObjectAlreadyHasException { @@ -919,7 +924,6 @@ public abstract class PermissionHolder { } setPermission("group." + group.getName(), true, server); - getPlugin().getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(this), new GroupDelegate(group), server, null, 0L)); } public void setInheritGroup(Group group, String server, String world) throws ObjectAlreadyHasException { @@ -928,7 +932,6 @@ public abstract class PermissionHolder { } setPermission("group." + group.getName(), true, server, world); - getPlugin().getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(this), new GroupDelegate(group), server, world, 0L)); } public void setInheritGroup(Group group, long expireAt) throws ObjectAlreadyHasException { @@ -937,7 +940,6 @@ public abstract class PermissionHolder { } setPermission("group." + group.getName(), true, expireAt); - getPlugin().getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(this), new GroupDelegate(group), null, null, expireAt)); } public void setInheritGroup(Group group, String server, long expireAt) throws ObjectAlreadyHasException { @@ -946,7 +948,6 @@ public abstract class PermissionHolder { } setPermission("group." + group.getName(), true, server, expireAt); - getPlugin().getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(this), new GroupDelegate(group), server, null, expireAt)); } public void setInheritGroup(Group group, String server, String world, long expireAt) throws ObjectAlreadyHasException { @@ -955,7 +956,6 @@ public abstract class PermissionHolder { } setPermission("group." + group.getName(), true, server, world, expireAt); - getPlugin().getApiProvider().fireEventAsync(new GroupAddEvent(new PermissionHolderDelegate(this), new GroupDelegate(group), server, world, expireAt)); } public void unsetInheritGroup(Group group) throws ObjectLacksException { @@ -986,27 +986,34 @@ public abstract class PermissionHolder { * Clear all of the holders permission nodes */ public void clearNodes() { + ImmutableSet before = ImmutableSet.copyOf(getNodes()); synchronized (nodes) { nodes.clear(); } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearNodes(String server) { String finalServer = Optional.ofNullable(server).orElse("global"); + ImmutableSet before = ImmutableSet.copyOf(getNodes()); synchronized (nodes) { if (!nodes.removeIf(n -> n.getServer().orElse("global").equalsIgnoreCase(finalServer))) { return; } } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearNodes(String server, String world) { String finalServer = Optional.ofNullable(server).orElse("global"); String finalWorld = Optional.ofNullable(world).orElse("null"); + ImmutableSet before = ImmutableSet.copyOf(getNodes()); synchronized (nodes) { boolean b = nodes.removeIf(n -> n.getServer().orElse("global").equalsIgnoreCase(finalServer) && @@ -1016,9 +1023,13 @@ public abstract class PermissionHolder { } } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearParents() { + ImmutableSet before = ImmutableSet.copyOf(getNodes()); + synchronized (nodes) { boolean b = nodes.removeIf(Node::isGroupNode); if (!b) { @@ -1029,11 +1040,14 @@ public abstract class PermissionHolder { plugin.getUserManager().giveDefaultIfNeeded((User) this, false); } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearParents(String server) { String finalServer = Optional.ofNullable(server).orElse("global"); + ImmutableSet before = ImmutableSet.copyOf(getNodes()); synchronized (nodes) { boolean b = nodes.removeIf(n -> n.isGroupNode() && n.getServer().orElse("global").equalsIgnoreCase(finalServer) @@ -1046,12 +1060,15 @@ public abstract class PermissionHolder { plugin.getUserManager().giveDefaultIfNeeded((User) this, false); } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearParents(String server, String world) { String finalServer = Optional.ofNullable(server).orElse("global"); String finalWorld = Optional.ofNullable(world).orElse("null"); + ImmutableSet before = ImmutableSet.copyOf(getNodes()); synchronized (nodes) { boolean b = nodes.removeIf(n -> n.isGroupNode() && @@ -1066,20 +1083,27 @@ public abstract class PermissionHolder { plugin.getUserManager().giveDefaultIfNeeded((User) this, false); } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearMeta() { + ImmutableSet before = ImmutableSet.copyOf(getNodes()); + synchronized (nodes) { if (!nodes.removeIf(n -> n.isMeta() || n.isPrefix() || n.isSuffix())) { return; } } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearMeta(String server) { String finalServer = Optional.ofNullable(server).orElse("global"); + ImmutableSet before = ImmutableSet.copyOf(getNodes()); synchronized (nodes) { boolean b = nodes.removeIf(n -> (n.isMeta() || n.isPrefix() || n.isSuffix()) && @@ -1090,12 +1114,15 @@ public abstract class PermissionHolder { } } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearMeta(String server, String world) { String finalServer = Optional.ofNullable(server).orElse("global"); String finalWorld = Optional.ofNullable(world).orElse("null"); + ImmutableSet before = ImmutableSet.copyOf(getNodes()); synchronized (nodes) { boolean b = nodes.removeIf(n -> (n.isMeta() || n.isPrefix() || n.isSuffix()) && ( @@ -1108,12 +1135,15 @@ public abstract class PermissionHolder { } } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearMetaKeys(String key, String server, String world, boolean temp) { String finalServer = Optional.ofNullable(server).orElse("global"); String finalWorld = Optional.ofNullable(world).orElse("null"); + ImmutableSet before = ImmutableSet.copyOf(getNodes()); synchronized (nodes) { boolean b = nodes.removeIf(n -> n.isMeta() && (n.isTemporary() == temp) && n.getMeta().getKey().equalsIgnoreCase(key) && @@ -1125,13 +1155,19 @@ public abstract class PermissionHolder { } } invalidateCache(true); + ImmutableSet after = ImmutableSet.copyOf(getNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } public void clearTransientNodes() { + ImmutableSet before = ImmutableSet.copyOf(getTransientNodes()); + synchronized (transientNodes) { transientNodes.clear(); } invalidateCache(false); + ImmutableSet after = ImmutableSet.copyOf(getTransientNodes()); + plugin.getApiProvider().getEventFactory().handleNodeClear(this, before, after); } /** diff --git a/common/src/main/java/me/lucko/luckperms/common/core/model/Track.java b/common/src/main/java/me/lucko/luckperms/common/core/model/Track.java index d913af616..e992919dd 100644 --- a/common/src/main/java/me/lucko/luckperms/common/core/model/Track.java +++ b/common/src/main/java/me/lucko/luckperms/common/core/model/Track.java @@ -29,6 +29,8 @@ import lombok.ToString; import com.google.common.collect.ImmutableList; +import me.lucko.luckperms.common.api.delegates.TrackDelegate; +import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.utils.Identifiable; import me.lucko.luckperms.exceptions.ObjectAlreadyHasException; import me.lucko.luckperms.exceptions.ObjectLacksException; @@ -49,13 +51,20 @@ public class Track implements Identifiable { */ @Getter private final String name; + + private final LuckPermsPlugin plugin; + @Getter private final Lock ioLock = new ReentrantLock(); + /** * The groups within this track */ private List groups = Collections.synchronizedList(new ArrayList<>()); + @Getter + private final TrackDelegate delegate = new TrackDelegate(this); + @Override public String getId() { return name.toLowerCase(); @@ -147,8 +156,13 @@ public class Track implements Identifiable { * @throws ObjectAlreadyHasException if the group is already on this track somewhere */ public void appendGroup(Group group) throws ObjectAlreadyHasException { + List before = ImmutableList.copyOf(groups); + assertNotContains(group); groups.add(group.getName()); + + List after = ImmutableList.copyOf(groups); + plugin.getApiProvider().getEventFactory().handleTrackAddGroup(this, group.getName(), before, after); } /** @@ -160,8 +174,13 @@ public class Track implements Identifiable { * @throws IndexOutOfBoundsException if the position is less than 0 or greater than the size of the track */ public void insertGroup(Group group, int position) throws ObjectAlreadyHasException, IndexOutOfBoundsException { + List before = ImmutableList.copyOf(groups); + assertNotContains(group); groups.add(position, group.getName()); + + List after = ImmutableList.copyOf(groups); + plugin.getApiProvider().getEventFactory().handleTrackAddGroup(this, group.getName(), before, after); } /** @@ -181,8 +200,12 @@ public class Track implements Identifiable { * @throws ObjectLacksException if the group is not on this track */ public void removeGroup(String group) throws ObjectLacksException { + List before = ImmutableList.copyOf(groups); assertContains(group); groups.remove(group); + + List after = ImmutableList.copyOf(groups); + plugin.getApiProvider().getEventFactory().handleTrackRemoveGroup(this, group, before, after); } /** @@ -209,7 +232,9 @@ public class Track implements Identifiable { * Clear all of the groups within this track */ public void clearGroups() { + List before = ImmutableList.copyOf(groups); groups.clear(); + plugin.getApiProvider().getEventFactory().handleTrackClear(this, before); } private void assertNotContains(Group g) throws ObjectAlreadyHasException { diff --git a/common/src/main/java/me/lucko/luckperms/common/core/model/User.java b/common/src/main/java/me/lucko/luckperms/common/core/model/User.java index 50d5a3446..ab06e28ce 100644 --- a/common/src/main/java/me/lucko/luckperms/common/core/model/User.java +++ b/common/src/main/java/me/lucko/luckperms/common/core/model/User.java @@ -28,8 +28,7 @@ import lombok.Setter; import lombok.ToString; import me.lucko.luckperms.api.caching.UserData; -import me.lucko.luckperms.api.event.events.UserPermissionRefreshEvent; -import me.lucko.luckperms.common.api.delegate.UserDelegate; +import me.lucko.luckperms.common.api.delegates.UserDelegate; import me.lucko.luckperms.common.caching.UserCache; import me.lucko.luckperms.common.caching.handlers.HolderReference; import me.lucko.luckperms.common.caching.handlers.UserReference; @@ -79,6 +78,9 @@ public class User extends PermissionHolder implements Identifiable + * + * 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.event; + +import lombok.Getter; +import lombok.Setter; + +import me.lucko.luckperms.api.LuckPermsApi; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +public abstract class AbstractEvent implements LuckPermsEvent { + + @Getter + @Setter + private LuckPermsApi api = null; + +} 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 new file mode 100644 index 000000000..472a34ec5 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event; + +import lombok.RequiredArgsConstructor; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; + +import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.api.caching.UserData; +import me.lucko.luckperms.api.event.LuckPermsEvent; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.cause.DeletionCause; +import me.lucko.luckperms.common.core.model.Group; +import me.lucko.luckperms.common.core.model.PermissionHolder; +import me.lucko.luckperms.common.core.model.Track; +import me.lucko.luckperms.common.core.model.User; +import me.lucko.luckperms.common.event.impl.EventConfigReload; +import me.lucko.luckperms.common.event.impl.EventGroupCreate; +import me.lucko.luckperms.common.event.impl.EventGroupDelete; +import me.lucko.luckperms.common.event.impl.EventGroupLoad; +import me.lucko.luckperms.common.event.impl.EventGroupLoadAll; +import me.lucko.luckperms.common.event.impl.EventLogBroadcast; +import me.lucko.luckperms.common.event.impl.EventLogPublish; +import me.lucko.luckperms.common.event.impl.EventNodeAdd; +import me.lucko.luckperms.common.event.impl.EventNodeClear; +import me.lucko.luckperms.common.event.impl.EventNodeRemove; +import me.lucko.luckperms.common.event.impl.EventPostSync; +import me.lucko.luckperms.common.event.impl.EventPreNetworkSync; +import me.lucko.luckperms.common.event.impl.EventPreSync; +import me.lucko.luckperms.common.event.impl.EventTrackAddGroup; +import me.lucko.luckperms.common.event.impl.EventTrackClear; +import me.lucko.luckperms.common.event.impl.EventTrackCreate; +import me.lucko.luckperms.common.event.impl.EventTrackDelete; +import me.lucko.luckperms.common.event.impl.EventTrackLoad; +import me.lucko.luckperms.common.event.impl.EventTrackLoadAll; +import me.lucko.luckperms.common.event.impl.EventTrackRemoveGroup; +import me.lucko.luckperms.common.event.impl.EventUserCacheLoad; +import me.lucko.luckperms.common.event.impl.EventUserDataRecalculate; +import me.lucko.luckperms.common.event.impl.EventUserDemote; +import me.lucko.luckperms.common.event.impl.EventUserFirstLogin; +import me.lucko.luckperms.common.event.impl.EventUserLoad; +import me.lucko.luckperms.common.event.impl.EventUserPromote; + +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicBoolean; + +@RequiredArgsConstructor +public final class EventFactory { + private final LuckPermsEventBus eventBus; + + private void fireEvent(LuckPermsEvent event) { + eventBus.fireEventAsync(event); + } + + public void handleGroupCreate(Group group, CreationCause cause) { + EventGroupCreate event = new EventGroupCreate(group.getDelegate(), cause); + fireEvent(event); + } + + public void handleGroupDelete(Group group, DeletionCause cause) { + EventGroupDelete event = new EventGroupDelete(group.getName(), ImmutableSet.copyOf(group.getNodes()), cause); + fireEvent(event); + } + + public void handleGroupLoadAll() { + EventGroupLoadAll event = new EventGroupLoadAll(); + fireEvent(event); + } + + public void handleGroupLoad(Group group) { + EventGroupLoad event = new EventGroupLoad(group.getDelegate()); + fireEvent(event); + } + + public boolean handleLogBroadcast(boolean initialState, LogEntry entry) { + AtomicBoolean cancel = new AtomicBoolean(initialState); + EventLogBroadcast event = new EventLogBroadcast(cancel, entry); + eventBus.fireEvent(event); + return cancel.get(); + } + + public boolean handleLogPublish(boolean initialState, LogEntry entry) { + AtomicBoolean cancel = new AtomicBoolean(initialState); + EventLogPublish event = new EventLogPublish(cancel, entry); + eventBus.fireEvent(event); + return cancel.get(); + } + + public void handleNodeAdd(Node node, PermissionHolder target, Set before, Set after) { + EventNodeAdd event = new EventNodeAdd(node, target.getDelegate(), ImmutableSet.copyOf(before), ImmutableSet.copyOf(after)); + fireEvent(event); + } + + public void handleNodeClear(PermissionHolder target, Set before, Set after) { + EventNodeClear event = new EventNodeClear(target.getDelegate(), ImmutableSet.copyOf(before), ImmutableSet.copyOf(after)); + fireEvent(event); + } + + public void handleNodeRemove(Node node, PermissionHolder target, Set before, Set after) { + EventNodeRemove event = new EventNodeRemove(node, target.getDelegate(), ImmutableSet.copyOf(before), ImmutableSet.copyOf(after)); + fireEvent(event); + } + + public void handleConfigReload() { + EventConfigReload event = new EventConfigReload(); + fireEvent(event); + } + + public void handlePostSync() { + EventPostSync event = new EventPostSync(); + fireEvent(event); + } + + public boolean handleNetworkPreSync(boolean initialState, UUID id) { + AtomicBoolean cancel = new AtomicBoolean(initialState); + EventPreNetworkSync event = new EventPreNetworkSync(cancel, id); + eventBus.fireEvent(event); + return cancel.get(); + } + + public boolean handlePreSync(boolean initialState) { + AtomicBoolean cancel = new AtomicBoolean(initialState); + EventPreSync event = new EventPreSync(cancel); + eventBus.fireEvent(event); + return cancel.get(); + } + + public void handleTrackCreate(Track track, CreationCause cause) { + EventTrackCreate event = new EventTrackCreate(track.getDelegate(), cause); + fireEvent(event); + } + + public void handleTrackDelete(Track track, DeletionCause cause) { + EventTrackDelete event = new EventTrackDelete(track.getName(), ImmutableList.copyOf(track.getGroups()), cause); + fireEvent(event); + } + + public void handleTrackLoadAll() { + EventTrackLoadAll event = new EventTrackLoadAll(); + fireEvent(event); + } + + public void handleTrackLoad(Track track) { + EventTrackLoad event = new EventTrackLoad(track.getDelegate()); + fireEvent(event); + } + + public void handleTrackAddGroup(Track track, String group, List before, List after) { + EventTrackAddGroup event = new EventTrackAddGroup(group, track.getDelegate(), ImmutableList.copyOf(before), ImmutableList.copyOf(after)); + fireEvent(event); + } + + public void handleTrackClear(Track track, List before) { + EventTrackClear event = new EventTrackClear(track.getDelegate(), ImmutableList.copyOf(before), ImmutableList.of()); + fireEvent(event); + } + + public void handleTrackRemoveGroup(Track track, String group, List before, List after) { + EventTrackRemoveGroup event = new EventTrackRemoveGroup(group, track.getDelegate(), ImmutableList.copyOf(before), ImmutableList.copyOf(after)); + fireEvent(event); + } + + public void handleUserCacheLoad(User user, UserData data) { + EventUserCacheLoad event = new EventUserCacheLoad(user.getDelegate(), data); + fireEvent(event); + } + + public void handleUserDataRecalculate(User user, UserData data) { + EventUserDataRecalculate event = new EventUserDataRecalculate(user.getDelegate(), data); + fireEvent(event); + } + + public void handleUserFirstLogin(UUID uuid, String username) { + EventUserFirstLogin event = new EventUserFirstLogin(uuid, username); + fireEvent(event); + } + + public void handleUserLoad(User user) { + EventUserLoad event = new EventUserLoad(user.getDelegate()); + fireEvent(event); + } + + public void handleUserDemote(User user, Track track, String from, String to) { + EventUserDemote event = new EventUserDemote(track.getDelegate(), user.getDelegate(), from, to); + fireEvent(event); + } + + public void handleUserPromote(User user, Track track, String from, String to) { + EventUserPromote event = new EventUserPromote(track.getDelegate(), user.getDelegate(), from, to); + fireEvent(event); + } + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/LuckPermsEventBus.java b/common/src/main/java/me/lucko/luckperms/common/event/LuckPermsEventBus.java new file mode 100644 index 000000000..67dfbfac2 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/LuckPermsEventBus.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event; + +import lombok.Getter; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; + +import com.google.common.collect.ImmutableSet; + +import me.lucko.luckperms.api.event.Cancellable; +import me.lucko.luckperms.api.event.EventBus; +import me.lucko.luckperms.api.event.EventHandler; +import me.lucko.luckperms.api.event.LuckPermsEvent; +import me.lucko.luckperms.common.plugin.LuckPermsPlugin; + +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Consumer; + +@RequiredArgsConstructor +public class LuckPermsEventBus implements EventBus { + + @Getter + private final LuckPermsPlugin plugin; + private final Map, Set>> handlerMap = new ConcurrentHashMap<>(); + + @Override + public EventHandler subscribe(@NonNull Class eventClass, @NonNull Consumer handler) { + if (!eventClass.isInterface()) { + throw new IllegalArgumentException("class " + eventClass + " is not an interface"); + } + if (!LuckPermsEvent.class.isAssignableFrom(eventClass)) { + throw new IllegalArgumentException("class " + eventClass.getName() + " does not implement LuckPermsEvent"); + } + + Set> handlers = handlerMap.computeIfAbsent(eventClass, c -> ConcurrentHashMap.newKeySet()); + + LuckPermsEventHandler eventHandler = new LuckPermsEventHandler<>(this, eventClass, handler); + handlers.add(eventHandler); + + return eventHandler; + } + + @SuppressWarnings("unchecked") + @Override + public Set> getHandlers(Class eventClass) { + Set> handlers = handlerMap.get(eventClass); + if (handlers == null) { + return ImmutableSet.of(); + } else { + ImmutableSet.Builder> ret = ImmutableSet.builder(); + for (LuckPermsEventHandler handler : handlers) { + ret.add((EventHandler) handler); + } + + return ret.build(); + } + } + + public void unregisterHandler(LuckPermsEventHandler handler) { + Set> handlers = handlerMap.get(handler.getEventClass()); + if (handlers != null) { + handlers.remove(handler); + } + } + + public void fireEvent(LuckPermsEvent event) { + if (event instanceof AbstractEvent) { + ((AbstractEvent) event).setApi(plugin.getApiProvider()); + } + + for (Map.Entry, Set>> ent : handlerMap.entrySet()) { + if (!ent.getKey().isAssignableFrom(event.getClass())) { + continue; + } + + ent.getValue().forEach(h -> h.handle(event)); + } + } + + public void fireEventAsync(LuckPermsEvent event) { + if (event instanceof Cancellable) { + throw new IllegalArgumentException("cannot call Cancellable event async"); + } + plugin.doAsync(() -> fireEvent(event)); + } +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/LuckPermsEventHandler.java b/common/src/main/java/me/lucko/luckperms/common/event/LuckPermsEventHandler.java new file mode 100644 index 000000000..d6a07c244 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/LuckPermsEventHandler.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import me.lucko.luckperms.api.event.EventHandler; +import me.lucko.luckperms.api.event.LuckPermsEvent; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Consumer; + +@RequiredArgsConstructor +public class LuckPermsEventHandler implements EventHandler { + private final LuckPermsEventBus eventBus; + + @Getter + private final Class eventClass; + + @Getter + private final Consumer consumer; + + private final AtomicBoolean active = new AtomicBoolean(true); + private final AtomicInteger callCount = new AtomicInteger(0); + + @Override + public boolean isActive() { + return active.get(); + } + + @Override + public boolean unregister() { + // already unregistered + if (!active.getAndSet(false)) { + return false; + } + + eventBus.unregisterHandler(this); + return true; + } + + @Override + public int getCallCount() { + return callCount.get(); + } + + void handle(LuckPermsEvent event) { + try { + T t = (T) event; + consumer.accept(t); + callCount.incrementAndGet(); + } catch (Throwable t) { + eventBus.getPlugin().getLog().warn("Unable to pass event " + event.getClass().getSimpleName() + " to handler " + consumer.getClass().getName()); + t.printStackTrace(); + } + } +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventConfigReload.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventConfigReload.java new file mode 100644 index 000000000..e7495373a --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventConfigReload.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.ToString; + +import me.lucko.luckperms.api.event.sync.ConfigReloadEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@ToString +public class EventConfigReload extends AbstractEvent implements ConfigReloadEvent { + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupCreate.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupCreate.java new file mode 100644 index 000000000..da52ce027 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupCreate.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Group; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.group.GroupCreateEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@Getter +@ToString +@AllArgsConstructor +public class EventGroupCreate extends AbstractEvent implements GroupCreateEvent { + + private final Group group; + private final CreationCause cause; + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeExpireEvent.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupDelete.java similarity index 67% rename from api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeExpireEvent.java rename to common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupDelete.java index 741e7aa15..3f53f2a0a 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeExpireEvent.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupDelete.java @@ -20,19 +20,26 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.common.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; import me.lucko.luckperms.api.Node; -import me.lucko.luckperms.api.PermissionHolder; -import me.lucko.luckperms.api.event.AbstractPermissionEvent; +import me.lucko.luckperms.api.event.cause.DeletionCause; +import me.lucko.luckperms.api.event.group.GroupDeleteEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.Set; + +@Getter +@ToString +@AllArgsConstructor +public class EventGroupDelete extends AbstractEvent implements GroupDeleteEvent { + + private final String groupName; + private final Set existingData; + private final DeletionCause cause; -/** - * Called when a temporary permission node expires - * - * @since 2.6 - */ -public class PermissionNodeExpireEvent extends AbstractPermissionEvent { - public PermissionNodeExpireEvent(PermissionHolder target, Node node) { - super("Permission Node Expire Event", target, node); - } } diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupLoad.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupLoad.java new file mode 100644 index 000000000..7505938dc --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupLoad.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Group; +import me.lucko.luckperms.api.event.group.GroupLoadEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@Getter +@ToString +@AllArgsConstructor +public class EventGroupLoad extends AbstractEvent implements GroupLoadEvent { + + private final Group group; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupLoadAll.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupLoadAll.java new file mode 100644 index 000000000..a3b18277a --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventGroupLoadAll.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.ToString; + +import me.lucko.luckperms.api.event.group.GroupLoadAllEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@ToString +public class EventGroupLoadAll extends AbstractEvent implements GroupLoadAllEvent { + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventLogBroadcast.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventLogBroadcast.java new file mode 100644 index 000000000..cf6001df8 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventLogBroadcast.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.event.log.LogBroadcastEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.concurrent.atomic.AtomicBoolean; + +@Getter +@ToString +@AllArgsConstructor +public class EventLogBroadcast extends AbstractEvent implements LogBroadcastEvent { + + private final AtomicBoolean cancellationState; + private final LogEntry entry; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventLogPublish.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventLogPublish.java new file mode 100644 index 000000000..ffa8976dd --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventLogPublish.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.event.log.LogPublishEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.concurrent.atomic.AtomicBoolean; + +@Getter +@ToString +@AllArgsConstructor +public class EventLogPublish extends AbstractEvent implements LogPublishEvent { + + private final AtomicBoolean cancellationState; + private final LogEntry entry; + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeSetEvent.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeAdd.java similarity index 61% rename from api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeSetEvent.java rename to common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeAdd.java index 79091f944..6f19c84a1 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/PermissionNodeSetEvent.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeAdd.java @@ -20,19 +20,38 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.common.event.impl; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Group; import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.PermissionHolder; -import me.lucko.luckperms.api.event.AbstractPermissionEvent; +import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.event.node.NodeAddEvent; +import me.lucko.luckperms.common.event.AbstractEvent; -/** - * Called when a permission node is set on a holder - * - * @since 2.6 - */ -public class PermissionNodeSetEvent extends AbstractPermissionEvent { - public PermissionNodeSetEvent(PermissionHolder target, Node node) { - super("Permission Node Set Event", target, node); +import java.util.Set; + +@Getter +@ToString +@AllArgsConstructor +public class EventNodeAdd extends AbstractEvent implements NodeAddEvent { + + private final Node node; + private final PermissionHolder target; + private final Set dataBefore; + private final Set dataAfter; + + @Override + public boolean isUser() { + return target instanceof User; + } + + @Override + public boolean isGroup() { + return target instanceof Group; } } diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/GroupAddEvent.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeClear.java similarity index 62% rename from api/src/main/java/me/lucko/luckperms/api/event/events/GroupAddEvent.java rename to common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeClear.java index c02a1adc9..4fd97d226 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/GroupAddEvent.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeClear.java @@ -20,28 +20,38 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.common.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; import me.lucko.luckperms.api.Group; +import me.lucko.luckperms.api.Node; import me.lucko.luckperms.api.PermissionHolder; -import me.lucko.luckperms.api.event.AbstractPermissionAddEvent; +import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.event.node.NodeClearEvent; +import me.lucko.luckperms.common.event.AbstractEvent; -/** - * Called whenever a user or group is added to / starts to inherit another group - */ -public class GroupAddEvent extends AbstractPermissionAddEvent { +import java.util.Set; - /** - * The group being added to the target - */ - private final Group group; +@Getter +@ToString +@AllArgsConstructor +public class EventNodeClear extends AbstractEvent implements NodeClearEvent { - public GroupAddEvent(PermissionHolder target, Group group, String server, String world, long expiry) { - super("Group Add Event", target, server, world, expiry); - this.group = group; + private final PermissionHolder target; + private final Set dataBefore; + private final Set dataAfter; + + @Override + public boolean isUser() { + return target instanceof User; } - public Group getGroup() { - return group; + @Override + public boolean isGroup() { + return target instanceof Group; } + } diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeRemove.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeRemove.java new file mode 100644 index 000000000..d46080c2d --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventNodeRemove.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Group; +import me.lucko.luckperms.api.Node; +import me.lucko.luckperms.api.PermissionHolder; +import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.event.node.NodeRemoveEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.Set; + +@Getter +@ToString +@AllArgsConstructor +public class EventNodeRemove extends AbstractEvent implements NodeRemoveEvent { + + private final Node node; + private final PermissionHolder target; + private final Set dataBefore; + private final Set dataAfter; + + @Override + public boolean isUser() { + return target instanceof User; + } + + @Override + public boolean isGroup() { + return target instanceof Group; + } + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPostSync.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPostSync.java new file mode 100644 index 000000000..5dcc106f6 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPostSync.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.ToString; + +import me.lucko.luckperms.api.event.sync.PostSyncEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@ToString +public class EventPostSync extends AbstractEvent implements PostSyncEvent { + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPreNetworkSync.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPreNetworkSync.java new file mode 100644 index 000000000..28c34d7bc --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPreNetworkSync.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.event.sync.PreNetworkSyncEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.UUID; +import java.util.concurrent.atomic.AtomicBoolean; + +@Getter +@ToString +@AllArgsConstructor +public class EventPreNetworkSync extends AbstractEvent implements PreNetworkSyncEvent { + + private final AtomicBoolean cancellationState; + private final UUID syncId; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPreSync.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPreSync.java new file mode 100644 index 000000000..8653f6fdb --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventPreSync.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.event.sync.PreSyncEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.concurrent.atomic.AtomicBoolean; + +@Getter +@ToString +@AllArgsConstructor +public class EventPreSync extends AbstractEvent implements PreSyncEvent { + + private final AtomicBoolean cancellationState; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackAddGroup.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackAddGroup.java new file mode 100644 index 000000000..b82d87eef --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackAddGroup.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.event.track.mutate.TrackAddGroupEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.List; + +@Getter +@ToString +@AllArgsConstructor +public class EventTrackAddGroup extends AbstractEvent implements TrackAddGroupEvent { + + private final String group; + private final Track track; + private final List dataBefore; + private final List dataAfter; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackClear.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackClear.java new file mode 100644 index 000000000..902b873f1 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackClear.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.event.track.mutate.TrackClearEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.List; + +@Getter +@ToString +@AllArgsConstructor +public class EventTrackClear extends AbstractEvent implements TrackClearEvent { + + private final Track track; + private final List dataBefore; + private final List dataAfter; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackCreate.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackCreate.java new file mode 100644 index 000000000..42c735a55 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackCreate.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.track.TrackCreateEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@Getter +@ToString +@AllArgsConstructor +public class EventTrackCreate extends AbstractEvent implements TrackCreateEvent { + + private final Track track; + private final CreationCause cause; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackDelete.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackDelete.java new file mode 100644 index 000000000..b99bccd90 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackDelete.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.event.cause.DeletionCause; +import me.lucko.luckperms.api.event.track.TrackDeleteEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.List; + +@Getter +@ToString +@AllArgsConstructor +public class EventTrackDelete extends AbstractEvent implements TrackDeleteEvent { + + private final String trackName; + private final List existingData; + private final DeletionCause cause; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackLoad.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackLoad.java new file mode 100644 index 000000000..585e7b829 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackLoad.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.event.track.TrackLoadEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@Getter +@ToString +@AllArgsConstructor +public class EventTrackLoad extends AbstractEvent implements TrackLoadEvent { + + private final Track track; + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackLoadAll.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackLoadAll.java new file mode 100644 index 000000000..ed8f10696 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackLoadAll.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.ToString; + +import me.lucko.luckperms.api.event.track.TrackLoadAllEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@ToString +public class EventTrackLoadAll extends AbstractEvent implements TrackLoadAllEvent { + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackRemoveGroup.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackRemoveGroup.java new file mode 100644 index 000000000..7ac19be68 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventTrackRemoveGroup.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.event.track.mutate.TrackRemoveGroupEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.List; + +@Getter +@ToString +@AllArgsConstructor +public class EventTrackRemoveGroup extends AbstractEvent implements TrackRemoveGroupEvent { + + private final String group; + private final Track track; + private final List dataBefore; + private final List dataAfter; + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/UserPermissionRefreshEvent.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserCacheLoad.java similarity index 71% rename from api/src/main/java/me/lucko/luckperms/api/event/events/UserPermissionRefreshEvent.java rename to common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserCacheLoad.java index 85ff7967a..c19a3412a 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/UserPermissionRefreshEvent.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserCacheLoad.java @@ -20,19 +20,23 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.common.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; import me.lucko.luckperms.api.User; -import me.lucko.luckperms.api.event.UserEvent; +import me.lucko.luckperms.api.caching.UserData; +import me.lucko.luckperms.api.event.user.UserCacheLoadEvent; +import me.lucko.luckperms.common.event.AbstractEvent; -/** - * Called after a user has their permissions refreshed. If you cache user permissions within your own plugin, it's a - * good idea to update said cache whenever this event is called. - */ -public class UserPermissionRefreshEvent extends UserEvent { +@Getter +@ToString +@AllArgsConstructor +public class EventUserCacheLoad extends AbstractEvent implements UserCacheLoadEvent { - public UserPermissionRefreshEvent(User user) { - super("User Permission Refresh Event", user); - } + private final User user; + private final UserData loadedData; } diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserDataRecalculate.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserDataRecalculate.java new file mode 100644 index 000000000..25d90c4da --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserDataRecalculate.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.caching.UserData; +import me.lucko.luckperms.api.event.user.UserDataRecalculateEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +@Getter +@ToString +@AllArgsConstructor +public class EventUserDataRecalculate extends AbstractEvent implements UserDataRecalculateEvent { + + private final User user; + private final UserData data; + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/TrackEvent.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserDemote.java similarity index 61% rename from api/src/main/java/me/lucko/luckperms/api/event/TrackEvent.java rename to common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserDemote.java index 234b1a739..615f158d5 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/TrackEvent.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserDemote.java @@ -20,39 +20,45 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event; +package me.lucko.luckperms.common.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; import me.lucko.luckperms.api.Track; import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.event.user.track.TrackAction; +import me.lucko.luckperms.api.event.user.track.UserDemoteEvent; +import me.lucko.luckperms.common.event.AbstractEvent; -public abstract class TrackEvent extends LPEvent { +import java.util.Optional; +@ToString +@AllArgsConstructor +public class EventUserDemote extends AbstractEvent implements UserDemoteEvent { + + @Getter private final Track track; + @Getter private final User user; - private final String fromGroup; - private final String toGroup; - protected TrackEvent(String eventName, Track track, User user, String fromGroup, String toGroup) { - super(eventName); - this.track = track; - this.user = user; - this.fromGroup = fromGroup; - this.toGroup = toGroup; + private final String groupFrom; + private final String groupTo; + + @Override + public TrackAction getAction() { + return TrackAction.DEMOTION; } - public Track getTrack() { - return track; + @Override + public Optional getGroupFrom() { + return Optional.ofNullable(groupFrom); } - public User getUser() { - return user; + @Override + public Optional getGroupTo() { + return Optional.ofNullable(groupTo); } - public String getFromGroup() { - return fromGroup; - } - - public String getToGroup() { - return toGroup; - } } diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserFirstLogin.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserFirstLogin.java new file mode 100644 index 000000000..4083574c0 --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserFirstLogin.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.event.user.UserFirstLoginEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.UUID; + +@Getter +@ToString +@AllArgsConstructor +public class EventUserFirstLogin extends AbstractEvent implements UserFirstLoginEvent { + + private final UUID uuid; + private final String username; + +} diff --git a/api/src/main/java/me/lucko/luckperms/api/event/events/UserPromoteEvent.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserLoad.java similarity index 75% rename from api/src/main/java/me/lucko/luckperms/api/event/events/UserPromoteEvent.java rename to common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserLoad.java index fa77972b4..a130b88a3 100644 --- a/api/src/main/java/me/lucko/luckperms/api/event/events/UserPromoteEvent.java +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserLoad.java @@ -20,19 +20,21 @@ * SOFTWARE. */ -package me.lucko.luckperms.api.event.events; +package me.lucko.luckperms.common.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; -import me.lucko.luckperms.api.Track; import me.lucko.luckperms.api.User; -import me.lucko.luckperms.api.event.TrackEvent; +import me.lucko.luckperms.api.event.user.UserLoadEvent; +import me.lucko.luckperms.common.event.AbstractEvent; -/** - * Called whenever a user is promoted up a track - */ -public class UserPromoteEvent extends TrackEvent { +@Getter +@ToString +@AllArgsConstructor +public class EventUserLoad extends AbstractEvent implements UserLoadEvent { - public UserPromoteEvent(Track track, User user, String from, String to) { - super("User Promote Event", track, user, from, to); - } + private final User user; } diff --git a/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserPromote.java b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserPromote.java new file mode 100644 index 000000000..3fdbb834b --- /dev/null +++ b/common/src/main/java/me/lucko/luckperms/common/event/impl/EventUserPromote.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2016 Lucko (Luck) + * + * 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.event.impl; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.ToString; + +import me.lucko.luckperms.api.Track; +import me.lucko.luckperms.api.User; +import me.lucko.luckperms.api.event.user.track.TrackAction; +import me.lucko.luckperms.api.event.user.track.UserPromoteEvent; +import me.lucko.luckperms.common.event.AbstractEvent; + +import java.util.Optional; + +@ToString +@AllArgsConstructor +public class EventUserPromote extends AbstractEvent implements UserPromoteEvent { + + @Getter + private final Track track; + @Getter + private final User user; + + private final String groupFrom; + private final String groupTo; + + @Override + public TrackAction getAction() { + return TrackAction.PROMOTION; + } + + @Override + public Optional getGroupFrom() { + return Optional.ofNullable(groupFrom); + } + + @Override + public Optional getGroupTo() { + return Optional.ofNullable(groupTo); + } + +} diff --git a/common/src/main/java/me/lucko/luckperms/common/managers/impl/GenericTrackManager.java b/common/src/main/java/me/lucko/luckperms/common/managers/impl/GenericTrackManager.java index f38cb97e2..c4a84383a 100644 --- a/common/src/main/java/me/lucko/luckperms/common/managers/impl/GenericTrackManager.java +++ b/common/src/main/java/me/lucko/luckperms/common/managers/impl/GenericTrackManager.java @@ -22,15 +22,20 @@ package me.lucko.luckperms.common.managers.impl; +import lombok.AllArgsConstructor; + import me.lucko.luckperms.common.core.model.Track; import me.lucko.luckperms.common.managers.AbstractManager; import me.lucko.luckperms.common.managers.TrackManager; +import me.lucko.luckperms.common.plugin.LuckPermsPlugin; +@AllArgsConstructor public class GenericTrackManager extends AbstractManager implements TrackManager { + private final LuckPermsPlugin plugin; @Override public Track apply(String name) { - return new Track(name); + return new Track(name, plugin); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/messaging/AbstractMessagingService.java b/common/src/main/java/me/lucko/luckperms/common/messaging/AbstractMessagingService.java index 9f18f77fa..e0755bbe3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/messaging/AbstractMessagingService.java +++ b/common/src/main/java/me/lucko/luckperms/common/messaging/AbstractMessagingService.java @@ -64,6 +64,11 @@ public abstract class AbstractMessagingService implements InternalMessagingServi } plugin.getLog().info("[" + name + " Messaging] Received update ping with id: " + uuid.toString()); + + if (plugin.getApiProvider().getEventFactory().handleNetworkPreSync(false, uuid)) { + return; + } + plugin.getUpdateTaskBuffer().request(); if (callback != null) { 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 05c678741..ee8221674 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 @@ -23,11 +23,15 @@ package me.lucko.luckperms.common.storage; import lombok.AccessLevel; +import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.experimental.Delegate; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.cause.DeletionCause; +import me.lucko.luckperms.common.api.delegates.StorageDelegate; import me.lucko.luckperms.common.core.model.Group; import me.lucko.luckperms.common.core.model.Track; import me.lucko.luckperms.common.core.model.User; @@ -49,14 +53,25 @@ import java.util.function.Supplier; @RequiredArgsConstructor(access = AccessLevel.PRIVATE) public class AbstractStorage implements Storage { public static Storage wrap(LuckPermsPlugin plugin, AbstractBacking backing) { - BufferedOutputStorage bufferedDs = BufferedOutputStorage.wrap(TolerantStorage.wrap(new AbstractStorage(backing)), 1000L); + BufferedOutputStorage bufferedDs = BufferedOutputStorage.wrap(TolerantStorage.wrap(new AbstractStorage(plugin, backing)), 1000L); plugin.getScheduler().doAsyncRepeating(bufferedDs, 10L); return bufferedDs; } + private final LuckPermsPlugin plugin; + @Delegate(types = Delegated.class) private final AbstractBacking backing; + @Getter + private final StorageDelegate delegate; + + private AbstractStorage(LuckPermsPlugin plugin, AbstractBacking backing) { + this.plugin = plugin; + this.backing = backing; + this.delegate = new StorageDelegate(plugin, this); + } + private CompletableFuture makeFuture(Supplier supplier) { return CompletableFuture.supplyAsync(supplier, backing.getPlugin().getScheduler().getAsyncExecutor()); } @@ -78,7 +93,13 @@ public class AbstractStorage implements Storage { @Override public CompletableFuture loadUser(UUID uuid, String username) { - return makeFuture(() -> backing.loadUser(uuid, username)); + return makeFuture(() -> { + if (backing.loadUser(uuid, username)) { + plugin.getApiProvider().getEventFactory().handleUserLoad(plugin.getUserManager().get(uuid)); + return true; + } + return false; + }); } @Override @@ -102,18 +123,36 @@ public class AbstractStorage implements Storage { } @Override - public CompletableFuture createAndLoadGroup(String name) { - return makeFuture(() -> backing.createAndLoadGroup(name)); + public CompletableFuture createAndLoadGroup(String name, CreationCause cause) { + return makeFuture(() -> { + if (backing.createAndLoadGroup(name)) { + plugin.getApiProvider().getEventFactory().handleGroupCreate(plugin.getGroupManager().getIfLoaded(name), cause); + return true; + } + return false; + }); } @Override public CompletableFuture loadGroup(String name) { - return makeFuture(() -> backing.loadGroup(name)); + return makeFuture(() -> { + if (backing.loadGroup(name)) { + plugin.getApiProvider().getEventFactory().handleGroupLoad(plugin.getGroupManager().getIfLoaded(name)); + return true; + } + return false; + }); } @Override public CompletableFuture loadAllGroups() { - return makeFuture(backing::loadAllGroups); + return makeFuture(() -> { + if (backing.loadAllGroups()) { + plugin.getApiProvider().getEventFactory().handleGroupLoadAll(); + return true; + } + return false; + }); } @Override @@ -122,8 +161,14 @@ public class AbstractStorage implements Storage { } @Override - public CompletableFuture deleteGroup(Group group) { - return makeFuture(() -> backing.deleteGroup(group)); + public CompletableFuture deleteGroup(Group group, DeletionCause cause) { + return makeFuture(() -> { + if (backing.deleteGroup(group)) { + plugin.getApiProvider().getEventFactory().handleGroupDelete(group, cause); + return true; + } + return false; + }); } @Override @@ -132,18 +177,36 @@ public class AbstractStorage implements Storage { } @Override - public CompletableFuture createAndLoadTrack(String name) { - return makeFuture(() -> backing.createAndLoadTrack(name)); + public CompletableFuture createAndLoadTrack(String name, CreationCause cause) { + return makeFuture(() -> { + if (backing.createAndLoadTrack(name)) { + plugin.getApiProvider().getEventFactory().handleTrackCreate(plugin.getTrackManager().getIfLoaded(name), cause); + return true; + } + return false; + }); } @Override public CompletableFuture loadTrack(String name) { - return makeFuture(() -> backing.loadTrack(name)); + return makeFuture(() -> { + if (backing.loadTrack(name)) { + plugin.getApiProvider().getEventFactory().handleTrackLoad(plugin.getTrackManager().getIfLoaded(name)); + return true; + } + return false; + }); } @Override public CompletableFuture loadAllTracks() { - return makeFuture(backing::loadAllTracks); + return makeFuture(() -> { + if (backing.loadAllTracks()) { + plugin.getApiProvider().getEventFactory().handleTrackLoadAll(); + return true; + } + return false; + }); } @Override @@ -152,8 +215,14 @@ public class AbstractStorage implements Storage { } @Override - public CompletableFuture deleteTrack(Track track) { - return makeFuture(() -> backing.deleteTrack(track)); + public CompletableFuture deleteTrack(Track track, DeletionCause cause) { + return makeFuture(() -> { + if (backing.deleteTrack(track)) { + plugin.getApiProvider().getEventFactory().handleTrackDelete(track, cause); + return true; + } + return false; + }); } @Override 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 2fff47c66..e44617e35 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 @@ -24,6 +24,9 @@ package me.lucko.luckperms.common.storage; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.cause.DeletionCause; +import me.lucko.luckperms.common.api.delegates.StorageDelegate; import me.lucko.luckperms.common.core.model.Group; import me.lucko.luckperms.common.core.model.Track; import me.lucko.luckperms.common.core.model.User; @@ -39,6 +42,8 @@ import java.util.concurrent.CompletableFuture; */ public interface Storage { + StorageDelegate getDelegate(); + String getName(); boolean isAcceptingLogins(); @@ -65,7 +70,7 @@ public interface Storage { CompletableFuture>> getUsersWithPermission(String permission); - CompletableFuture createAndLoadGroup(String name); + CompletableFuture createAndLoadGroup(String name, CreationCause cause); CompletableFuture loadGroup(String name); @@ -73,11 +78,11 @@ public interface Storage { CompletableFuture saveGroup(Group group); - CompletableFuture deleteGroup(Group group); + CompletableFuture deleteGroup(Group group, DeletionCause cause); CompletableFuture>> getGroupsWithPermission(String permission); - CompletableFuture createAndLoadTrack(String name); + CompletableFuture createAndLoadTrack(String name, CreationCause cause); CompletableFuture loadTrack(String name); @@ -85,7 +90,7 @@ public interface Storage { CompletableFuture saveTrack(Track track); - CompletableFuture deleteTrack(Track track); + CompletableFuture deleteTrack(Track track, DeletionCause cause); CompletableFuture saveUUIDData(String username, UUID uuid); diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/wrappings/TolerantStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/wrappings/TolerantStorage.java index 0a425a960..347e40c69 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/wrappings/TolerantStorage.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/wrappings/TolerantStorage.java @@ -28,6 +28,9 @@ import lombok.experimental.Delegate; import me.lucko.luckperms.api.HeldPermission; import me.lucko.luckperms.api.LogEntry; +import me.lucko.luckperms.api.event.cause.CreationCause; +import me.lucko.luckperms.api.event.cause.DeletionCause; +import me.lucko.luckperms.common.api.delegates.StorageDelegate; import me.lucko.luckperms.common.core.model.Group; import me.lucko.luckperms.common.core.model.Track; import me.lucko.luckperms.common.core.model.User; @@ -144,10 +147,10 @@ public class TolerantStorage implements Storage { } @Override - public CompletableFuture createAndLoadGroup(String name) { + public CompletableFuture createAndLoadGroup(String name, CreationCause cause) { phaser.register(); try { - return backing.createAndLoadGroup(name); + return backing.createAndLoadGroup(name, cause); } finally { phaser.arriveAndDeregister(); } @@ -184,10 +187,10 @@ public class TolerantStorage implements Storage { } @Override - public CompletableFuture deleteGroup(Group group) { + public CompletableFuture deleteGroup(Group group, DeletionCause cause) { phaser.register(); try { - return backing.deleteGroup(group); + return backing.deleteGroup(group, cause); } finally { phaser.arriveAndDeregister(); } @@ -204,10 +207,10 @@ public class TolerantStorage implements Storage { } @Override - public CompletableFuture createAndLoadTrack(String name) { + public CompletableFuture createAndLoadTrack(String name, CreationCause cause) { phaser.register(); try { - return backing.createAndLoadTrack(name); + return backing.createAndLoadTrack(name, cause); } finally { phaser.arriveAndDeregister(); } @@ -244,10 +247,10 @@ public class TolerantStorage implements Storage { } @Override - public CompletableFuture deleteTrack(Track track) { + public CompletableFuture deleteTrack(Track track, DeletionCause cause) { phaser.register(); try { - return backing.deleteTrack(track); + return backing.deleteTrack(track, cause); } finally { phaser.arriveAndDeregister(); } @@ -284,6 +287,7 @@ public class TolerantStorage implements Storage { } private interface Delegated { + StorageDelegate getDelegate(); String getName(); boolean isAcceptingLogins(); void setAcceptingLogins(boolean b); diff --git a/common/src/main/java/me/lucko/luckperms/common/tasks/UpdateTask.java b/common/src/main/java/me/lucko/luckperms/common/tasks/UpdateTask.java index 33b81e17a..34a3dce68 100644 --- a/common/src/main/java/me/lucko/luckperms/common/tasks/UpdateTask.java +++ b/common/src/main/java/me/lucko/luckperms/common/tasks/UpdateTask.java @@ -24,8 +24,7 @@ package me.lucko.luckperms.common.tasks; import lombok.AllArgsConstructor; -import me.lucko.luckperms.api.event.events.PostSyncEvent; -import me.lucko.luckperms.api.event.events.PreSyncEvent; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.plugin.LuckPermsPlugin; @@ -38,15 +37,15 @@ public class UpdateTask implements Runnable { */ @Override public void run() { - PreSyncEvent event = new PreSyncEvent(); - plugin.getApiProvider().fireEvent(event); - if (event.isCancelled()) return; + if (plugin.getApiProvider().getEventFactory().handlePreSync(false)) { + return; + } // Reload all groups plugin.getStorage().loadAllGroups().join(); String defaultGroup = plugin.getConfiguration().get(ConfigKeys.DEFAULT_GROUP_NAME); if (!plugin.getGroupManager().isLoaded(defaultGroup)) { - plugin.getStorage().createAndLoadGroup(defaultGroup).join(); + plugin.getStorage().createAndLoadGroup(defaultGroup, CreationCause.INTERNAL).join(); } // Reload all tracks @@ -57,6 +56,6 @@ public class UpdateTask implements Runnable { plugin.onPostUpdate(); - plugin.getApiProvider().fireEvent(new PostSyncEvent()); + plugin.getApiProvider().getEventFactory().handlePostSync(); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/utils/AbstractListener.java b/common/src/main/java/me/lucko/luckperms/common/utils/AbstractListener.java index eb1a4ba03..6969aefc3 100644 --- a/common/src/main/java/me/lucko/luckperms/common/utils/AbstractListener.java +++ b/common/src/main/java/me/lucko/luckperms/common/utils/AbstractListener.java @@ -24,7 +24,6 @@ package me.lucko.luckperms.common.utils; import lombok.AllArgsConstructor; -import me.lucko.luckperms.api.event.events.UserFirstLoginEvent; import me.lucko.luckperms.common.config.ConfigKeys; import me.lucko.luckperms.common.core.UuidCache; import me.lucko.luckperms.common.core.model.User; @@ -50,14 +49,14 @@ public class AbstractListener { cache.addToCache(u, uuid); } else { // No previous data for this player - plugin.getApiProvider().fireEventAsync(new UserFirstLoginEvent(u, username)); + plugin.getApiProvider().getEventFactory().handleUserFirstLogin(u, username); cache.addToCache(u, u); plugin.getStorage().force().saveUUIDData(username, u); } } else { String name = plugin.getStorage().force().getName(u).join(); if (name == null) { - plugin.getApiProvider().fireEventAsync(new UserFirstLoginEvent(u, username)); + plugin.getApiProvider().getEventFactory().handleUserFirstLogin(u, username); } // Online mode, no cache needed. This is just for name -> uuid lookup. diff --git a/pom.xml b/pom.xml index 5558ffca5..3e3476f05 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.lucko.luckperms luckperms - 2.17-SNAPSHOT + 3.0-SNAPSHOT api common @@ -38,7 +38,7 @@ UTF-8 - 2.17 + 3.0 ${git.closest.tag.commit.count} diff --git a/sponge/pom.xml b/sponge/pom.xml index 7a79e7241..1c2aad1d6 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 2.17-SNAPSHOT + 3.0-SNAPSHOT 4.0.0 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 71d3cbb58..f061dd8bd 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/LPSpongePlugin.java @@ -247,7 +247,7 @@ public class LPSpongePlugin implements LuckPermsPlugin { uuidCache = new UuidCache(this); userManager = new SpongeUserManager(this); groupManager = new SpongeGroupManager(this); - trackManager = new GenericTrackManager(); + trackManager = new GenericTrackManager(this); importer = new Importer(commandManager); calculatorFactory = new SpongeCalculatorFactory(this); cachedStateManager = new CachedStateManager(this); diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeMainCommand.java b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeMainCommand.java index 13295f484..eb5c3313f 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeMainCommand.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/commands/SpongeMainCommand.java @@ -100,7 +100,7 @@ public class SpongeMainCommand extends BaseCommand { if (args.size() < 1) { Util.sendPluginMessage(sender, "&aCurrent Subject Collections:\n" + - Util.listToCommaSep(service.getKnownSubjects().keySet().stream() + Util.listToCommaSep(service.getCollections().keySet().stream() .filter(s -> !s.equalsIgnoreCase("user") && !s.equalsIgnoreCase("group")) .collect(Collectors.toList()) ) @@ -115,7 +115,7 @@ public class SpongeMainCommand extends BaseCommand { return CommandResult.STATE_ERROR; } - if (service.getKnownSubjects().keySet().stream().map(String::toLowerCase).noneMatch(s -> s.equalsIgnoreCase(subjectCollection))) { + if (service.getCollections().keySet().stream().map(String::toLowerCase).noneMatch(s -> s.equalsIgnoreCase(subjectCollection))) { Util.sendPluginMessage(sender, "Warning: SubjectCollection '&4" + subjectCollection + "&c' doesn't already exist. Creating it now."); } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/SpongeCalculatorLink.java b/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/SpongeCalculatorLink.java index f9902b539..ce90d7a74 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/SpongeCalculatorLink.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/SpongeCalculatorLink.java @@ -36,7 +36,7 @@ import java.util.Map; import java.util.Set; @AllArgsConstructor -public class SpongeCalculatorLink extends ContextCalculator { +public class SpongeCalculatorLink implements ContextCalculator { private final org.spongepowered.api.service.context.ContextCalculator calculator; @Override diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/WorldCalculator.java b/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/WorldCalculator.java index 6da68b19d..a3910f458 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/WorldCalculator.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/contexts/WorldCalculator.java @@ -38,7 +38,7 @@ import java.util.Optional; import java.util.UUID; @RequiredArgsConstructor -public class WorldCalculator extends ContextCalculator { +public class WorldCalculator implements ContextCalculator { private final LPSpongePlugin plugin; @Override @@ -65,11 +65,7 @@ public class WorldCalculator extends ContextCalculator { } Optional p = plugin.getGame().getServer().getPlayer(plugin.getUuidCache().getExternalUUID(uuid)); - if (!p.isPresent()) { - return false; - } - - return context.getKey().equals(Context.WORLD_KEY) && p.get().getWorld().getName().equals(context.getValue()); + return p.map(player -> context.getKey().equals(Context.WORLD_KEY) && player.getWorld().getName().equals(context.getValue())).orElse(false); } } diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeGroupManager.java b/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeGroupManager.java index 7e8704f47..26923797b 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeGroupManager.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/managers/SpongeGroupManager.java @@ -34,6 +34,7 @@ import com.google.common.util.concurrent.UncheckedExecutionException; import me.lucko.luckperms.api.Tristate; import me.lucko.luckperms.api.context.ContextSet; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.core.model.Group; import me.lucko.luckperms.common.managers.GroupManager; import me.lucko.luckperms.common.utils.ArgumentChecker; @@ -81,7 +82,7 @@ public class SpongeGroupManager implements GroupManager, LPSubjectCollection { } // Request load - plugin.getStorage().createAndLoadGroup(s).join(); + plugin.getStorage().createAndLoadGroup(s, CreationCause.INTERNAL).join(); SpongeGroup group = getIfLoaded(s); if (group == null) { diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionManager.java b/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionManager.java index 9f4a4fd2b..a5e3d9180 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionManager.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionManager.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.sponge.migration; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SubCommand; @@ -110,7 +111,7 @@ public class MigrationPermissionManager extends SubCommand { String pmName = MigrationUtils.convertName(pmGroup.getIdentifier()); // Make a LuckPerms group for the one being migrated - plugin.getStorage().createAndLoadGroup(pmName).join(); + plugin.getStorage().createAndLoadGroup(pmName, CreationCause.INTERNAL).join(); Group group = plugin.getGroupManager().getIfLoaded(pmName); migrateSubject(pmGroup, group, 100); plugin.getStorage().saveGroup(group); diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionsEx.java b/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionsEx.java index d2ec0a161..c956c19c2 100644 --- a/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionsEx.java +++ b/sponge/src/main/java/me/lucko/luckperms/sponge/migration/MigrationPermissionsEx.java @@ -22,6 +22,7 @@ package me.lucko.luckperms.sponge.migration; +import me.lucko.luckperms.api.event.cause.CreationCause; import me.lucko.luckperms.common.commands.CommandException; import me.lucko.luckperms.common.commands.CommandResult; import me.lucko.luckperms.common.commands.SubCommand; @@ -126,7 +127,7 @@ public class MigrationPermissionsEx extends SubCommand { } // Make a LuckPerms group for the one being migrated - plugin.getStorage().createAndLoadGroup(pexName).join(); + plugin.getStorage().createAndLoadGroup(pexName, CreationCause.INTERNAL).join(); Group group = plugin.getGroupManager().getIfLoaded(pexName); migrateSubject(pexGroup, group, weight); plugin.getStorage().saveGroup(group); @@ -148,7 +149,7 @@ public class MigrationPermissionsEx extends SubCommand { // Migrate tracks log.log("Starting track migration."); for (Map.Entry> e : tracks.entrySet()) { - plugin.getStorage().createAndLoadTrack(e.getKey()).join(); + plugin.getStorage().createAndLoadTrack(e.getKey(), CreationCause.INTERNAL).join(); Track track = plugin.getTrackManager().getIfLoaded(e.getKey()); for (String groupName : e.getValue().values()) { Group group = plugin.getGroupManager().getIfLoaded(groupName);