diff --git a/api/src/main/java/net/luckperms/api/LuckPerms.java b/api/src/main/java/net/luckperms/api/LuckPerms.java
index 7855f4e88..41eae2658 100644
--- a/api/src/main/java/net/luckperms/api/LuckPerms.java
+++ b/api/src/main/java/net/luckperms/api/LuckPerms.java
@@ -46,7 +46,6 @@ import net.luckperms.api.track.TrackManager;
import org.checkerframework.checker.nullness.qual.NonNull;
-import java.util.Collection;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
@@ -207,11 +206,4 @@ public interface LuckPerms {
*/
void registerMessengerProvider(@NonNull MessengerProvider messengerProvider);
- /**
- * Gets a {@link Collection} of all known permission strings.
- *
- * @return a collection of the known permissions
- */
- @NonNull Collection getKnownPermissions();
-
}
diff --git a/api/src/main/java/net/luckperms/api/event/node/NodeMutateEvent.java b/api/src/main/java/net/luckperms/api/event/node/NodeMutateEvent.java
index 89930074d..3fe298880 100644
--- a/api/src/main/java/net/luckperms/api/event/node/NodeMutateEvent.java
+++ b/api/src/main/java/net/luckperms/api/event/node/NodeMutateEvent.java
@@ -27,8 +27,8 @@ package net.luckperms.api.event.node;
import net.luckperms.api.event.LuckPermsEvent;
import net.luckperms.api.event.Param;
-import net.luckperms.api.model.DataType;
import net.luckperms.api.model.PermissionHolder;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.model.group.Group;
import net.luckperms.api.model.user.User;
import net.luckperms.api.node.Node;
diff --git a/api/src/main/java/net/luckperms/api/model/PermissionHolder.java b/api/src/main/java/net/luckperms/api/model/PermissionHolder.java
index 184a1534b..47fea0e7e 100644
--- a/api/src/main/java/net/luckperms/api/model/PermissionHolder.java
+++ b/api/src/main/java/net/luckperms/api/model/PermissionHolder.java
@@ -26,26 +26,18 @@
package net.luckperms.api.model;
import net.luckperms.api.cacheddata.CachedDataManager;
-import net.luckperms.api.context.ContextSet;
-import net.luckperms.api.context.ImmutableContextSet;
+import net.luckperms.api.model.data.DataType;
+import net.luckperms.api.model.data.NodeMap;
import net.luckperms.api.model.group.Group;
-import net.luckperms.api.model.group.GroupManager;
import net.luckperms.api.model.user.User;
-import net.luckperms.api.model.user.UserManager;
import net.luckperms.api.node.Node;
-import net.luckperms.api.node.NodeEqualityPredicate;
-import net.luckperms.api.node.Tristate;
import net.luckperms.api.query.QueryOptions;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
import java.util.SortedSet;
import java.util.UUID;
-import java.util.function.Predicate;
/**
* Generic superinterface for an object which holds permissions.
@@ -156,108 +148,6 @@ public interface PermissionHolder {
*/
@NonNull NodeMap transientData();
- /**
- * Encapsulates a store of data ({@link Node}s) within a {@link PermissionHolder}.
- *
- * The effect of any mutate operation will not persist in storage unless changes are
- * explicitly saved. If changes are not saved, the effect will only be observed until the next
- * time the holders permission data is (re)loaded. Changes to {@link User}s should be saved
- * using {@link UserManager#saveUser(User)}, and changes to {@link Group}s should be saved
- * using {@link GroupManager#saveGroup(Group)}.
- *
- * Before making changes to a user or group, it may be a good idea to load a fresh copy of
- * the backing data from the storage if you haven't done so already, to avoid overwriting changes
- * made already. This can be done via {@link UserManager#loadUser(UUID)} or
- * {@link GroupManager#loadGroup(String)} respectively.
- */
- interface NodeMap {
-
- /**
- * Gets a map of the {@link Node}s contained within this instance,
- * mapped to their defined {@link Node#getContexts() context}.
- *
- * @return a map of nodes
- */
- @NonNull Map> toMap();
-
- /**
- * Gets a flattened set of {@link Node}s contained within this instance.
- *
- * Effectively combines the value collections of the map returned by
- * {@link #toMap()}.
- *
- * @return a flattened set of the holders own nodes
- */
- @NonNull Set toSet();
-
- /**
- * Gets if this instance contains a given {@link Node}.
- *
- * Returns {@link Tristate#UNDEFINED} if the instance does not contain the node,
- * and the {@link Node#getValue() assigned value} of the node as a {@link Tristate}
- * if it is present.
- *
- * @param node the node to check for
- * @param equalityPredicate how to determine if a node matches
- * @return a Tristate relating to the assigned state of the node
- * @throws NullPointerException if the node is null
- */
- @NonNull Tristate contains(@NonNull Node node, @NonNull NodeEqualityPredicate equalityPredicate);
-
- /**
- * Adds a node.
- *
- * @param node the node to be add
- * @return the result of the operation
- */
- @NonNull DataMutateResult add(@NonNull Node node);
-
- /**
- * Adds a node.
- *
- * @param node the node to add
- * @param temporaryMergeBehaviour the behaviour used to merge temporary permission entries
- * @return the result of the operation
- */
- @NonNull TemporaryDataMutateResult add(@NonNull Node node, @NonNull TemporaryMergeBehaviour temporaryMergeBehaviour);
-
- /**
- * Removes a node.
- *
- * @param node the node to remove
- * @return the result of the operation
- */
- @NonNull DataMutateResult remove(@NonNull Node node);
-
- /**
- * Clears all nodes.
- */
- void clear();
-
- /**
- * Clears any nodes which pass the predicate.
- *
- * @param test the predicate to test for nodes which should be removed
- */
- void clear(@NonNull Predicate super Node> test);
-
- /**
- * Clears all nodes in a specific context.
- *
- * @param contextSet the contexts to filter by
- */
- void clear(@NonNull ContextSet contextSet);
-
- /**
- * Clears all nodes in a specific context which pass the predicate.
- *
- * @param contextSet the contexts to filter by
- * @param test the predicate to test for nodes which should be removed
- */
- void clear(@NonNull ContextSet contextSet, @NonNull Predicate super Node> test);
-
- }
-
/**
* Gets a flattened/squashed view of the holders permissions.
*
@@ -272,7 +162,7 @@ public interface PermissionHolder {
*
* @return a list of the holders own nodes.
*/
- @NonNull List getNodes();
+ @NonNull Collection getNodes();
/**
* Gets a sorted set of all held nodes.
@@ -301,7 +191,7 @@ public interface PermissionHolder {
* @param queryOptions the query options
* @return a list of nodes
*/
- @NonNull List resolveInheritedNodes(@NonNull QueryOptions queryOptions);
+ @NonNull Collection resolveInheritedNodes(@NonNull QueryOptions queryOptions);
/**
* Gets a mutable sorted set of the nodes that this object has and inherits, filtered by context
diff --git a/api/src/main/java/net/luckperms/api/model/TemporaryDataMutateResult.java b/api/src/main/java/net/luckperms/api/model/TemporaryDataMutateResult.java
deleted file mode 100644
index 39eae4b1a..000000000
--- a/api/src/main/java/net/luckperms/api/model/TemporaryDataMutateResult.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * This file is part of LuckPerms, licensed under the MIT License.
- *
- * Copyright (c) lucko (Luck)
- * Copyright (c) contributors
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-package net.luckperms.api.model;
-
-import net.luckperms.api.node.Node;
-import net.luckperms.api.util.Result;
-
-import org.checkerframework.checker.nullness.qual.NonNull;
-
-/**
- * Extension of {@link DataMutateResult} for temporary set operations.
- */
-public interface TemporaryDataMutateResult extends Result {
-
- /**
- * Gets the underlying result.
- *
- * @return the result
- */
- @NonNull DataMutateResult getResult();
-
- /**
- * Gets the node that resulted from any {@link TemporaryMergeBehaviour}
- * processing.
- *
- * If no processing took place, the same instance will be returned by
- * this method.
- *
- * @return the resultant node
- */
- @NonNull Node getMergedNode();
-
- @Override
- default boolean wasSuccessful() {
- return getResult().wasSuccessful();
- }
-
-}
diff --git a/api/src/main/java/net/luckperms/api/model/DataMutateResult.java b/api/src/main/java/net/luckperms/api/model/data/DataMutateResult.java
similarity index 63%
rename from api/src/main/java/net/luckperms/api/model/DataMutateResult.java
rename to api/src/main/java/net/luckperms/api/model/data/DataMutateResult.java
index cac6ed74f..df03bc6b7 100644
--- a/api/src/main/java/net/luckperms/api/model/DataMutateResult.java
+++ b/api/src/main/java/net/luckperms/api/model/data/DataMutateResult.java
@@ -1,5 +1,5 @@
/*
- * This file is part of LuckPerms, licensed under the MIT License.
+ * This file is part of luckperms, licensed under the MIT License.
*
* Copyright (c) lucko (Luck)
* Copyright (c) contributors
@@ -23,11 +23,15 @@
* SOFTWARE.
*/
-package net.luckperms.api.model;
+package net.luckperms.api.model.data;
+import net.luckperms.api.model.PermissionHolder;
+import net.luckperms.api.node.Node;
import net.luckperms.api.track.Track;
import net.luckperms.api.util.Result;
+import org.checkerframework.checker.nullness.qual.NonNull;
+
/**
* Represents the result of a data mutation call on a LuckPerms object.
*
@@ -40,29 +44,54 @@ public enum DataMutateResult implements Result {
*/
SUCCESS(true),
+ /**
+ * Indicates the mutation failed
+ */
+ FAIL(false),
+
/**
* Indicates the mutation failed because the subject of the action already has something
*/
- ALREADY_HAS(false),
+ FAIL_ALREADY_HAS(false),
/**
* Indicates the mutation failed because the subject of the action lacks something
*/
- LACKS(false),
+ FAIL_LACKS(false);
- /**
- * Indicates the mutation failed
- */
- FAIL(false);
+ private final boolean successful;
- private final boolean success;
-
- DataMutateResult(boolean success) {
- this.success = success;
+ DataMutateResult(boolean successful) {
+ this.successful = successful;
}
@Override
public boolean wasSuccessful() {
- return this.success;
+ return this.successful;
+ }
+
+ /**
+ * Extension of {@link DataMutateResult} for temporary set operations.
+ */
+ public interface WithMergedNode {
+
+ /**
+ * Gets the underlying result.
+ *
+ * @return the result
+ */
+ @NonNull DataMutateResult getResult();
+
+ /**
+ * Gets the node that resulted from any {@link TemporaryNodeMergeStrategy}
+ * processing.
+ *
+ * If no processing took place, the same instance will be returned by
+ * this method.
+ *
+ * @return the resultant node
+ */
+ @NonNull Node getMergedNode();
+
}
}
diff --git a/api/src/main/java/net/luckperms/api/model/DataType.java b/api/src/main/java/net/luckperms/api/model/data/DataType.java
similarity index 93%
rename from api/src/main/java/net/luckperms/api/model/DataType.java
rename to api/src/main/java/net/luckperms/api/model/data/DataType.java
index 363ed1707..ae396fe8b 100644
--- a/api/src/main/java/net/luckperms/api/model/DataType.java
+++ b/api/src/main/java/net/luckperms/api/model/data/DataType.java
@@ -1,5 +1,5 @@
/*
- * This file is part of LuckPerms, licensed under the MIT License.
+ * This file is part of luckperms, licensed under the MIT License.
*
* Copyright (c) lucko (Luck)
* Copyright (c) contributors
@@ -23,7 +23,7 @@
* SOFTWARE.
*/
-package net.luckperms.api.model;
+package net.luckperms.api.model.data;
/**
* Represents a type of data.
diff --git a/api/src/main/java/net/luckperms/api/model/data/NodeMap.java b/api/src/main/java/net/luckperms/api/model/data/NodeMap.java
new file mode 100644
index 000000000..e771c5d7b
--- /dev/null
+++ b/api/src/main/java/net/luckperms/api/model/data/NodeMap.java
@@ -0,0 +1,146 @@
+/*
+ * This file is part of luckperms, licensed under the MIT License.
+ *
+ * Copyright (c) lucko (Luck)
+ * Copyright (c) contributors
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package net.luckperms.api.model.data;
+
+import net.luckperms.api.context.ContextSet;
+import net.luckperms.api.context.ImmutableContextSet;
+import net.luckperms.api.model.PermissionHolder;
+import net.luckperms.api.model.group.Group;
+import net.luckperms.api.model.group.GroupManager;
+import net.luckperms.api.model.user.User;
+import net.luckperms.api.model.user.UserManager;
+import net.luckperms.api.node.Node;
+import net.luckperms.api.node.NodeEqualityPredicate;
+import net.luckperms.api.node.Tristate;
+
+import org.checkerframework.checker.nullness.qual.NonNull;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.UUID;
+import java.util.function.Predicate;
+
+/**
+ * Encapsulates a store of data ({@link Node}s) within a {@link PermissionHolder}.
+ *
+ * The effect of any mutate operation will not persist in storage unless changes are
+ * explicitly saved. If changes are not saved, the effect will only be observed until the next
+ * time the holders permission data is (re)loaded. Changes to {@link User}s should be saved
+ * using {@link UserManager#saveUser(User)}, and changes to {@link Group}s should be saved
+ * using {@link GroupManager#saveGroup(Group)}.
+ *
+ * Before making changes to a user or group, it may be a good idea to load a fresh copy of
+ * the backing data from the storage if you haven't done so already, to avoid overwriting changes
+ * made already. This can be done via {@link UserManager#loadUser(UUID)} or
+ * {@link GroupManager#loadGroup(String)} respectively.
+ */
+public interface NodeMap {
+
+ /**
+ * Gets a map of the {@link Node}s contained within this instance,
+ * mapped to their defined {@link Node#getContexts() context}.
+ *
+ * @return a map of nodes
+ */
+ @NonNull Map> toMap();
+
+ /**
+ * Gets a flattened view of {@link Node}s contained within this instance.
+ *
+ * Effectively combines the value collections of the map returned by
+ * {@link #toMap()}.
+ *
+ * @return a flattened collection of nodes
+ */
+ @NonNull Collection toCollection();
+
+ /**
+ * Gets if this instance contains a given {@link Node}.
+ *
+ * Returns {@link Tristate#UNDEFINED} if the instance does not contain the node,
+ * and the {@link Node#getValue() assigned value} of the node as a {@link Tristate}
+ * if it is present.
+ *
+ * @param node the node to check for
+ * @param equalityPredicate how to determine if a node matches
+ * @return a Tristate relating to the assigned state of the node
+ * @throws NullPointerException if the node is null
+ */
+ @NonNull Tristate contains(@NonNull Node node, @NonNull NodeEqualityPredicate equalityPredicate);
+
+ /**
+ * Adds a node.
+ *
+ * @param node the node to be add
+ * @return the result of the operation
+ */
+ @NonNull DataMutateResult add(@NonNull Node node);
+
+ /**
+ * Adds a node.
+ *
+ * @param node the node to add
+ * @param temporaryNodeMergeStrategy the strategy used to merge temporary permission entries
+ * @return the result of the operation
+ */
+ DataMutateResult.@NonNull WithMergedNode add(@NonNull Node node, @NonNull TemporaryNodeMergeStrategy temporaryNodeMergeStrategy);
+
+ /**
+ * Removes a node.
+ *
+ * @param node the node to remove
+ * @return the result of the operation
+ */
+ @NonNull DataMutateResult remove(@NonNull Node node);
+
+ /**
+ * Clears all nodes.
+ */
+ void clear();
+
+ /**
+ * Clears any nodes which pass the predicate.
+ *
+ * @param test the predicate to test for nodes which should be removed
+ */
+ void clear(@NonNull Predicate super Node> test);
+
+ /**
+ * Clears all nodes in a specific context.
+ *
+ * @param contextSet the contexts to filter by
+ */
+ void clear(@NonNull ContextSet contextSet);
+
+ /**
+ * Clears all nodes in a specific context which pass the predicate.
+ *
+ * @param contextSet the contexts to filter by
+ * @param test the predicate to test for nodes which should be removed
+ */
+ void clear(@NonNull ContextSet contextSet, @NonNull Predicate super Node> test);
+
+}
diff --git a/api/src/main/java/net/luckperms/api/model/TemporaryMergeBehaviour.java b/api/src/main/java/net/luckperms/api/model/data/TemporaryNodeMergeStrategy.java
similarity index 80%
rename from api/src/main/java/net/luckperms/api/model/TemporaryMergeBehaviour.java
rename to api/src/main/java/net/luckperms/api/model/data/TemporaryNodeMergeStrategy.java
index 4bb47be8b..7f71ba257 100644
--- a/api/src/main/java/net/luckperms/api/model/TemporaryMergeBehaviour.java
+++ b/api/src/main/java/net/luckperms/api/model/data/TemporaryNodeMergeStrategy.java
@@ -1,5 +1,5 @@
/*
- * This file is part of LuckPerms, licensed under the MIT License.
+ * This file is part of luckperms, licensed under the MIT License.
*
* Copyright (c) lucko (Luck)
* Copyright (c) contributors
@@ -23,9 +23,8 @@
* SOFTWARE.
*/
-package net.luckperms.api.model;
+package net.luckperms.api.model.data;
-import net.luckperms.api.model.PermissionHolder.NodeMap;
import net.luckperms.api.node.Node;
/**
@@ -33,13 +32,13 @@ import net.luckperms.api.node.Node;
* that would otherwise conflict with existing entries.
*
* The default behaviour of {@link NodeMap#add(Node)} is
- * to return a result of {@link DataMutateResult#ALREADY_HAS} when an equivalent
- * node is found. This can be replicated using {@link #FAIL_WITH_ALREADY_HAS}.
+ * to return a result of {@link DataMutateResult#FAIL_ALREADY_HAS} when an equivalent
+ * node is found. This can be replicated using {@link #NONE}.
*
- * However, the {@link NodeMap#add(Node, TemporaryMergeBehaviour)}
+ *
However, the {@link NodeMap#add(Node, TemporaryNodeMergeStrategy)}
* method allows this behaviour to be customized for temporary permissions.
*/
-public enum TemporaryMergeBehaviour {
+public enum TemporaryNodeMergeStrategy {
/**
* Expiry durations will be added to the existing expiry time of a permission.
@@ -54,6 +53,6 @@ public enum TemporaryMergeBehaviour {
/**
* The operation will fail if an existing temporary node is present.
*/
- FAIL_WITH_ALREADY_HAS
+ NONE
}
diff --git a/api/src/main/java/net/luckperms/api/model/user/User.java b/api/src/main/java/net/luckperms/api/model/user/User.java
index eee847650..0c3e45e6c 100644
--- a/api/src/main/java/net/luckperms/api/model/user/User.java
+++ b/api/src/main/java/net/luckperms/api/model/user/User.java
@@ -25,8 +25,8 @@
package net.luckperms.api.model.user;
-import net.luckperms.api.model.DataMutateResult;
import net.luckperms.api.model.PermissionHolder;
+import net.luckperms.api.model.data.DataMutateResult;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
diff --git a/api/src/main/java/net/luckperms/api/platform/Platform.java b/api/src/main/java/net/luckperms/api/platform/Platform.java
index da2c5fb90..271a6e6ca 100644
--- a/api/src/main/java/net/luckperms/api/platform/Platform.java
+++ b/api/src/main/java/net/luckperms/api/platform/Platform.java
@@ -28,6 +28,7 @@ package net.luckperms.api.platform;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.time.Instant;
+import java.util.Collection;
import java.util.Set;
import java.util.UUID;
@@ -50,6 +51,13 @@ public interface Platform {
*/
@NonNull Set getUniqueConnections();
+ /**
+ * Gets a {@link Collection} of all known permission strings.
+ *
+ * @return a collection of the known permissions
+ */
+ @NonNull Collection getKnownPermissions();
+
/**
* Gets the time when the plugin first started.
*
diff --git a/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrder.java b/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrder.java
index 4be8f7f90..694511a55 100644
--- a/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrder.java
+++ b/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrder.java
@@ -25,7 +25,7 @@
package net.luckperms.api.query.dataorder;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.query.QueryOptions;
import org.checkerframework.checker.nullness.qual.NonNull;
diff --git a/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrderFunction.java b/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrderFunction.java
index ee13c2689..3f32b4b72 100644
--- a/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrderFunction.java
+++ b/api/src/main/java/net/luckperms/api/query/dataorder/DataQueryOrderFunction.java
@@ -25,8 +25,8 @@
package net.luckperms.api.query.dataorder;
-import net.luckperms.api.model.DataType;
import net.luckperms.api.model.PermissionHolder;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.query.OptionKey;
import org.checkerframework.checker.nullness.qual.NonNull;
diff --git a/api/src/main/java/net/luckperms/api/track/Track.java b/api/src/main/java/net/luckperms/api/track/Track.java
index 5a90eba68..503ce8308 100644
--- a/api/src/main/java/net/luckperms/api/track/Track.java
+++ b/api/src/main/java/net/luckperms/api/track/Track.java
@@ -26,7 +26,7 @@
package net.luckperms.api.track;
import net.luckperms.api.context.ContextSet;
-import net.luckperms.api.model.DataMutateResult;
+import net.luckperms.api.model.data.DataMutateResult;
import net.luckperms.api.model.group.Group;
import net.luckperms.api.model.user.User;
@@ -58,13 +58,6 @@ public interface Track {
*/
@NonNull List getGroups();
- /**
- * Gets the number of groups on this track
- *
- * @return the number of groups on this track
- */
- int getSize();
-
/**
* Gets the next group on the track, after the one provided
*
diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissionAttachment.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissionAttachment.java
index 67c3682b9..e22812c88 100644
--- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissionAttachment.java
+++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/inject/permissible/LPPermissionAttachment.java
@@ -32,7 +32,7 @@ import me.lucko.luckperms.common.config.ConfigKeys;
import me.lucko.luckperms.common.model.User;
import me.lucko.luckperms.common.node.factory.NodeBuilders;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.metadata.NodeMetadataKey;
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 58a6b331e..0e8a385ef 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
@@ -55,7 +55,7 @@ import me.lucko.luckperms.common.util.ProgressLogger;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
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 d9dcbeab4..63d6af438 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
@@ -48,7 +48,7 @@ import me.lucko.luckperms.common.util.Uuids;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import org.anjocaido.groupmanager.GlobalGroups;
diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsBukkit.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsBukkit.java
index e001fd89c..8d72585c3 100644
--- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsBukkit.java
+++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/migration/MigrationPermissionsBukkit.java
@@ -46,7 +46,7 @@ import me.lucko.luckperms.common.util.ProgressLogger;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
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 df88d820e..b33a7ca3f 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
@@ -51,7 +51,7 @@ import me.lucko.luckperms.common.util.ProgressLogger;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import org.bukkit.Bukkit;
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 f8b929576..347e2933b 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
@@ -57,7 +57,7 @@ import me.lucko.luckperms.common.util.ProgressLogger;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeBuilder;
import org.bukkit.Bukkit;
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 0f1c7baa6..a9c790093 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
@@ -49,7 +49,7 @@ import me.lucko.luckperms.common.util.ProgressLogger;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import org.bukkit.Bukkit;
diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultChat.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultChat.java
index fb3b8ec50..a77222efb 100644
--- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultChat.java
+++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultChat.java
@@ -42,7 +42,7 @@ import me.lucko.luckperms.common.verbose.event.MetaCheckEvent;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType;
import net.luckperms.api.node.NodeBuilder;
import net.luckperms.api.node.NodeType;
diff --git a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java
index 7d5952a1d..ea8d70c6b 100644
--- a/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java
+++ b/bukkit/src/main/java/me/lucko/luckperms/bukkit/vault/LuckPermsVaultPermission.java
@@ -48,7 +48,7 @@ import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
import net.luckperms.api.context.ContextSet;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Tristate;
import net.luckperms.api.query.Flag;
import net.luckperms.api.query.QueryOptions;
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 316d99ef3..0adcf965e 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
@@ -49,7 +49,7 @@ import net.alpenblock.bungeeperms.Server;
import net.alpenblock.bungeeperms.World;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import java.util.List;
import java.util.Map;
diff --git a/common/src/main/java/me/lucko/luckperms/common/api/LuckPermsApiProvider.java b/common/src/main/java/me/lucko/luckperms/common/api/LuckPermsApiProvider.java
index 9a359af25..def04a46d 100644
--- a/common/src/main/java/me/lucko/luckperms/common/api/LuckPermsApiProvider.java
+++ b/common/src/main/java/me/lucko/luckperms/common/api/LuckPermsApiProvider.java
@@ -54,7 +54,6 @@ import net.luckperms.api.track.TrackManager;
import org.checkerframework.checker.nullness.qual.NonNull;
-import java.util.Collection;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
@@ -147,11 +146,6 @@ public class LuckPermsApiProvider implements LuckPerms {
return this.contextManager;
}
- @Override
- public @NonNull Collection getKnownPermissions() {
- return this.plugin.getPermissionRegistry().rootAsList();
- }
-
@Override
public @NonNull NodeBuilderRegistry getNodeBuilderRegistry() {
return ApiNodeBuilderRegistry.INSTANCE;
diff --git a/common/src/main/java/me/lucko/luckperms/common/api/MinimalApiProvider.java b/common/src/main/java/me/lucko/luckperms/common/api/MinimalApiProvider.java
index d1e8a9dc0..2ec7c5e40 100644
--- a/common/src/main/java/me/lucko/luckperms/common/api/MinimalApiProvider.java
+++ b/common/src/main/java/me/lucko/luckperms/common/api/MinimalApiProvider.java
@@ -54,7 +54,6 @@ import net.luckperms.api.track.TrackManager;
import org.checkerframework.checker.nullness.qual.NonNull;
-import java.util.Collection;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.CompletableFuture;
@@ -99,7 +98,6 @@ public class MinimalApiProvider implements LuckPerms {
@Override public @NonNull MetaStackFactory getMetaStackFactory() { throw exception(); }
@Override public @NonNull CompletableFuture runUpdateTask() { throw exception(); }
@Override public void registerMessengerProvider(@NonNull MessengerProvider messengerProvider) { throw exception(); }
- @Override public @NonNull Collection getKnownPermissions() { throw exception(); }
private static final class MinimalActionLogger implements ActionLogger {
private static final MinimalActionLogger INSTANCE = new MinimalActionLogger();
diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPermissionHolder.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPermissionHolder.java
index 11783f205..52999f616 100644
--- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPermissionHolder.java
+++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPermissionHolder.java
@@ -30,10 +30,10 @@ import me.lucko.luckperms.common.model.PermissionHolder;
import net.luckperms.api.cacheddata.CachedDataManager;
import net.luckperms.api.context.ContextSet;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
-import net.luckperms.api.model.TemporaryDataMutateResult;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
+import net.luckperms.api.model.data.NodeMap;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeEqualityPredicate;
import net.luckperms.api.node.Tristate;
@@ -140,7 +140,7 @@ public class ApiPermissionHolder implements net.luckperms.api.model.PermissionHo
}
@Override
- public @NonNull Set toSet() {
+ public @NonNull Set toCollection() {
return ApiPermissionHolder.this.handle.getData(this.dataType).asSet();
}
@@ -155,8 +155,8 @@ public class ApiPermissionHolder implements net.luckperms.api.model.PermissionHo
}
@Override
- public @NonNull TemporaryDataMutateResult add(@NonNull Node node, @NonNull TemporaryMergeBehaviour temporaryMergeBehaviour) {
- return ApiPermissionHolder.this.handle.setNode(this.dataType, node, temporaryMergeBehaviour);
+ public DataMutateResult.@NonNull WithMergedNode add(@NonNull Node node, @NonNull TemporaryNodeMergeStrategy temporaryNodeMergeStrategy) {
+ return ApiPermissionHolder.this.handle.setNode(this.dataType, node, temporaryNodeMergeStrategy);
}
@Override
diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPlatform.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPlatform.java
index 9f87a744e..c7053b655 100644
--- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPlatform.java
+++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiPlatform.java
@@ -33,6 +33,7 @@ import net.luckperms.api.platform.PluginMetadata;
import org.checkerframework.checker.nullness.qual.NonNull;
import java.time.Instant;
+import java.util.Collection;
import java.util.Collections;
import java.util.Set;
import java.util.UUID;
@@ -64,6 +65,11 @@ public class ApiPlatform implements Platform, PluginMetadata {
return Collections.unmodifiableSet(this.plugin.getConnectionListener().getUniqueConnections());
}
+ @Override
+ public @NonNull Collection getKnownPermissions() {
+ return this.plugin.getPermissionRegistry().rootAsList();
+ }
+
@Override
public @NonNull Instant getStartTime() {
return Instant.ofEpochMilli(this.plugin.getBootstrap().getStartupTime());
diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiTrack.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiTrack.java
index f995e32eb..1145a5402 100644
--- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiTrack.java
+++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiTrack.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.common.model.Track;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.ContextSet;
-import net.luckperms.api.model.DataMutateResult;
+import net.luckperms.api.model.data.DataMutateResult;
import net.luckperms.api.model.group.Group;
import net.luckperms.api.model.user.User;
import net.luckperms.api.track.DemotionResult;
diff --git a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUser.java b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUser.java
index 141332fc7..77a0c00ee 100644
--- a/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUser.java
+++ b/common/src/main/java/me/lucko/luckperms/common/api/implementation/ApiUser.java
@@ -31,8 +31,8 @@ import me.lucko.luckperms.common.cacheddata.UserCachedDataManager;
import me.lucko.luckperms.common.model.User;
import me.lucko.luckperms.common.node.types.Inheritance;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeEqualityPredicate;
import org.checkerframework.checker.nullness.qual.NonNull;
@@ -77,7 +77,7 @@ public class ApiUser extends ApiPermissionHolder implements net.luckperms.api.mo
public @NonNull DataMutateResult setPrimaryGroup(@NonNull String group) {
Objects.requireNonNull(group, "group");
if (getPrimaryGroup().equalsIgnoreCase(group)) {
- return DataMutateResult.ALREADY_HAS;
+ return DataMutateResult.FAIL_ALREADY_HAS;
}
if (!this.handle.hasNode(DataType.NORMAL, Inheritance.builder(group.toLowerCase()).build(), NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) {
diff --git a/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java b/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java
index 6973091aa..2c79a5c55 100644
--- a/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java
+++ b/common/src/main/java/me/lucko/luckperms/common/backup/Importer.java
@@ -40,7 +40,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.sender.Sender;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import java.util.ArrayList;
diff --git a/common/src/main/java/me/lucko/luckperms/common/command/utils/ArgumentParser.java b/common/src/main/java/me/lucko/luckperms/common/command/utils/ArgumentParser.java
index 21f1714c6..02c96c94d 100644
--- a/common/src/main/java/me/lucko/luckperms/common/command/utils/ArgumentParser.java
+++ b/common/src/main/java/me/lucko/luckperms/common/command/utils/ArgumentParser.java
@@ -36,7 +36,7 @@ import me.lucko.luckperms.common.util.DateParser;
import net.luckperms.api.context.ImmutableContextSet;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import java.util.List;
import java.util.Optional;
@@ -122,27 +122,28 @@ public class ArgumentParser {
return unixTime < (System.currentTimeMillis() / 1000L);
}
- public static TemporaryMergeBehaviour parseTemporaryModifier(String s) {
+ public static TemporaryNodeMergeStrategy parseTemporaryModifier(String s) {
switch (s.toLowerCase()) {
case "accumulate":
- return TemporaryMergeBehaviour.ADD_NEW_DURATION_TO_EXISTING;
+ return TemporaryNodeMergeStrategy.ADD_NEW_DURATION_TO_EXISTING;
case "replace":
- return TemporaryMergeBehaviour.REPLACE_EXISTING_IF_DURATION_LONGER;
+ return TemporaryNodeMergeStrategy.REPLACE_EXISTING_IF_DURATION_LONGER;
case "deny":
- return TemporaryMergeBehaviour.FAIL_WITH_ALREADY_HAS;
+ case "none":
+ return TemporaryNodeMergeStrategy.NONE;
default:
throw new IllegalArgumentException("Unknown value: " + s);
}
}
- public static Optional parseTemporaryModifier(int index, List args) {
+ public static Optional parseTemporaryModifier(int index, List args) {
if (index < 0 || index >= args.size()) {
return Optional.empty();
}
String s = args.get(index);
try {
- Optional ret = Optional.of(parseTemporaryModifier(s));
+ Optional ret = Optional.of(parseTemporaryModifier(s));
args.remove(index);
return ret;
} catch (IllegalArgumentException e) {
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java
index aebf101eb..f71bce3ff 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddChatMeta.java
@@ -48,8 +48,8 @@ import me.lucko.luckperms.common.util.TextUtils;
import net.kyori.text.TextComponent;
import net.kyori.text.event.HoverEvent;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java
index 8176cf527..6a6e58fd3 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaAddTempChatMeta.java
@@ -50,9 +50,9 @@ import me.lucko.luckperms.common.util.TextUtils;
import net.kyori.text.TextComponent;
import net.kyori.text.event.HoverEvent;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
-import net.luckperms.api.model.TemporaryDataMutateResult;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import net.luckperms.api.node.ChatMetaType;
import java.util.List;
@@ -81,7 +81,7 @@ public class MetaAddTempChatMeta extends SharedSubCommand {
int priority = ArgumentParser.parsePriority(0, args);
String meta = ArgumentParser.parseString(1, args);
long duration = ArgumentParser.parseDuration(2, args);
- TemporaryMergeBehaviour modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR));
+ TemporaryNodeMergeStrategy modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR));
MutableContextSet context = ArgumentParser.parseContext(3, args, plugin);
if (ArgumentPermissions.checkContext(plugin, sender, permission, context) ||
@@ -90,7 +90,7 @@ public class MetaAddTempChatMeta extends SharedSubCommand {
return CommandResult.NO_PERMISSION;
}
- TemporaryDataMutateResult ret = holder.setNode(DataType.NORMAL, this.type.builder(meta, priority).expiry(duration).withContext(context).build(), modifier);
+ DataMutateResult.WithMergedNode ret = holder.setNode(DataType.NORMAL, this.type.builder(meta, priority).expiry(duration).withContext(context).build(), modifier);
if (ret.getResult().wasSuccessful()) {
duration = ret.getMergedNode().getExpiry().getEpochSecond();
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java
index f1b68815b..ad69b1d65 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaClear.java
@@ -45,7 +45,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java
index 7ff38a1d2..1e2f48b42 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveChatMeta.java
@@ -48,8 +48,8 @@ import me.lucko.luckperms.common.util.TextUtils;
import net.kyori.text.TextComponent;
import net.kyori.text.event.HoverEvent;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java
index c9808aec4..a837aaa94 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaRemoveTempChatMeta.java
@@ -48,8 +48,8 @@ import me.lucko.luckperms.common.util.TextUtils;
import net.kyori.text.TextComponent;
import net.kyori.text.event.HoverEvent;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java
index 66f13fd59..1c9402512 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSet.java
@@ -49,7 +49,7 @@ import me.lucko.luckperms.common.util.TextUtils;
import net.kyori.text.TextComponent;
import net.kyori.text.event.HoverEvent;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeEqualityPredicate;
import net.luckperms.api.node.NodeType;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java
index 824dbcf3f..35ee172c2 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetChatMeta.java
@@ -50,8 +50,8 @@ import me.lucko.luckperms.common.util.TextUtils;
import net.kyori.text.TextComponent;
import net.kyori.text.event.HoverEvent;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType;
import net.luckperms.api.query.QueryOptions;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java
index f56c27d0e..8bd57a0c9 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTemp.java
@@ -51,8 +51,8 @@ import me.lucko.luckperms.common.util.TextUtils;
import net.kyori.text.TextComponent;
import net.kyori.text.event.HoverEvent;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
+import net.luckperms.api.model.data.DataType;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeEqualityPredicate;
import net.luckperms.api.node.NodeType;
@@ -74,7 +74,7 @@ public class MetaSetTemp extends SharedSubCommand {
String key = args.get(0);
String value = args.get(1);
long duration = ArgumentParser.parseDuration(2, args);
- TemporaryMergeBehaviour modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR));
+ TemporaryNodeMergeStrategy modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR));
MutableContextSet context = ArgumentParser.parseContext(3, args, plugin);
if (ArgumentPermissions.checkContext(plugin, sender, permission, context) ||
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java
index 613bf5ac4..1b191b22c 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaSetTempChatMeta.java
@@ -52,9 +52,9 @@ import me.lucko.luckperms.common.util.TextUtils;
import net.kyori.text.TextComponent;
import net.kyori.text.event.HoverEvent;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
-import net.luckperms.api.model.TemporaryDataMutateResult;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import net.luckperms.api.node.ChatMetaType;
import net.luckperms.api.query.QueryOptions;
@@ -85,7 +85,7 @@ public class MetaSetTempChatMeta extends SharedSubCommand {
int priority = ArgumentParser.parseIntOrElse(0, args, Integer.MIN_VALUE);
String meta;
long duration;
- TemporaryMergeBehaviour modifier;
+ TemporaryNodeMergeStrategy modifier;
MutableContextSet context;
if (priority == Integer.MIN_VALUE) {
@@ -130,7 +130,7 @@ public class MetaSetTempChatMeta extends SharedSubCommand {
}
}
- TemporaryDataMutateResult ret = holder.setNode(DataType.NORMAL, this.type.builder(meta, priority).expiry(duration).withContext(context).build(), modifier);
+ DataMutateResult.WithMergedNode ret = holder.setNode(DataType.NORMAL, this.type.builder(meta, priority).expiry(duration).withContext(context).build(), modifier);
if (ret.getResult().wasSuccessful()) {
duration = ret.getMergedNode().getExpiry().getEpochSecond();
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java
index fb086da76..8ba196cb3 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnset.java
@@ -45,7 +45,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java
index d32b396c1..d2526cf37 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/meta/MetaUnsetTemp.java
@@ -45,7 +45,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java
index f7d369303..193ed5f1a 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/other/HolderClear.java
@@ -45,7 +45,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java
index 0137e1fc3..ed8820930 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentAdd.java
@@ -47,8 +47,8 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import java.util.List;
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 2297dad25..d69d63e8a 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
@@ -49,10 +49,9 @@ import me.lucko.luckperms.common.util.DurationFormatter;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
-import net.luckperms.api.model.TemporaryDataMutateResult;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
-import net.luckperms.api.util.Result;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import java.util.List;
@@ -70,7 +69,7 @@ public class ParentAddTemp extends SharedSubCommand {
String groupName = ArgumentParser.parseName(0, args);
long duration = ArgumentParser.parseDuration(1, args);
- TemporaryMergeBehaviour modifier = ArgumentParser.parseTemporaryModifier(2, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR));
+ TemporaryNodeMergeStrategy modifier = ArgumentParser.parseTemporaryModifier(2, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR));
MutableContextSet context = ArgumentParser.parseContext(2, args, plugin);
Group group = StorageAssistant.loadGroup(groupName, sender, plugin, false);
@@ -91,9 +90,9 @@ public class ParentAddTemp extends SharedSubCommand {
return CommandResult.STATE_ERROR;
}
- TemporaryDataMutateResult ret = holder.setNode(DataType.NORMAL, Inheritance.builder(group.getName()).expiry(duration).withContext(context).build(), modifier);
+ DataMutateResult.WithMergedNode ret = holder.setNode(DataType.NORMAL, Inheritance.builder(group.getName()).expiry(duration).withContext(context).build(), modifier);
- if (((Result) ret.getResult()).wasSuccessful()) {
+ if (ret.getResult().wasSuccessful()) {
duration = ret.getMergedNode().getExpiry().getEpochSecond();
Message.SET_TEMP_INHERIT_SUCCESS.send(sender, holder.getFormattedDisplayName(), group.getFormattedDisplayName(), DurationFormatter.LONG.formatDateDiff(duration), MessageUtils.contextSetToString(plugin.getLocaleManager(), context));
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java
index c5f221541..ff4af2f88 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClear.java
@@ -45,7 +45,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java
index a8bbbe78e..b758e99b5 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentClearTrack.java
@@ -49,7 +49,7 @@ import me.lucko.luckperms.common.storage.misc.DataConstraints;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java
index 64930536f..61ac02251 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemove.java
@@ -50,8 +50,8 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java
index 1f94447ea..9da0fee38 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentRemoveTemp.java
@@ -46,8 +46,8 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java
index 02443784f..f90821c80 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSet.java
@@ -49,7 +49,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java
index 0cc1c90c6..03dd923e0 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/ParentSetTrack.java
@@ -49,7 +49,7 @@ import me.lucko.luckperms.common.storage.misc.DataConstraints;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java
index 5addea578..60014e5f3 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/parent/UserSwitchPrimaryGroup.java
@@ -47,7 +47,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeEqualityPredicate;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java
index 1f8f3cfd4..42b838a37 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionCheck.java
@@ -44,7 +44,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeEqualityPredicate;
import net.luckperms.api.node.Tristate;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java
index a6e5c0ac6..13e86fd1f 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionClear.java
@@ -45,7 +45,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java
index 6997eb741..a5b07c659 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSet.java
@@ -46,8 +46,8 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.types.InheritanceNode;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java
index a10a264a2..bbd0f49fc 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionSetTemp.java
@@ -48,12 +48,11 @@ import me.lucko.luckperms.common.util.DurationFormatter;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
-import net.luckperms.api.model.TemporaryDataMutateResult;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.types.InheritanceNode;
-import net.luckperms.api.util.Result;
import java.util.List;
@@ -72,7 +71,7 @@ public class PermissionSetTemp extends SharedSubCommand {
String node = ArgumentParser.parseString(0, args);
boolean value = ArgumentParser.parseBoolean(1, args);
long duration = ArgumentParser.parseDuration(2, args);
- TemporaryMergeBehaviour modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR));
+ TemporaryNodeMergeStrategy modifier = ArgumentParser.parseTemporaryModifier(3, args).orElseGet(() -> plugin.getConfiguration().get(ConfigKeys.TEMPORARY_ADD_BEHAVIOUR));
MutableContextSet context = ArgumentParser.parseContext(3, args, plugin);
if (ArgumentPermissions.checkContext(plugin, sender, permission, context) ||
@@ -91,9 +90,9 @@ public class PermissionSetTemp extends SharedSubCommand {
}
}
- TemporaryDataMutateResult result = holder.setNode(DataType.NORMAL, builtNode, modifier);
+ DataMutateResult.WithMergedNode result = holder.setNode(DataType.NORMAL, builtNode, modifier);
- if (((Result) result.getResult()).wasSuccessful()) {
+ if (result.getResult().wasSuccessful()) {
duration = result.getMergedNode().getExpiry().getEpochSecond();
Message.SETPERMISSION_TEMP_SUCCESS.send(sender, node, value, holder.getFormattedDisplayName(), DurationFormatter.LONG.formatDateDiff(duration), MessageUtils.contextSetToString(plugin.getLocaleManager(), context));
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java
index 4dc30bf3f..efed1cdc6 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnset.java
@@ -46,8 +46,8 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.types.InheritanceNode;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java
index e9b29cb1f..ea3acd7ea 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/generic/permission/PermissionUnsetTemp.java
@@ -46,8 +46,8 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.types.InheritanceNode;
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 8256011f2..958e42a15 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
@@ -41,7 +41,7 @@ import me.lucko.luckperms.common.storage.misc.DataConstraints;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.event.cause.CreationCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import java.util.List;
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 c1c8379de..6334aa3be 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
@@ -41,7 +41,7 @@ import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.event.cause.CreationCause;
import net.luckperms.api.event.cause.DeletionCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java
index 2cde8f100..4a4160492 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetDisplayName.java
@@ -46,7 +46,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import net.luckperms.api.node.types.DisplayNameNode;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetWeight.java b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetWeight.java
index 460234fb6..2c91ed0a9 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetWeight.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/group/GroupSetWeight.java
@@ -42,7 +42,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/log/LogNotify.java b/common/src/main/java/me/lucko/luckperms/common/commands/log/LogNotify.java
index f4e2f4836..230ca6c62 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/log/LogNotify.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/log/LogNotify.java
@@ -39,7 +39,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/migration/MigrationUtils.java b/common/src/main/java/me/lucko/luckperms/common/commands/migration/MigrationUtils.java
index 1201d8068..489285632 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/migration/MigrationUtils.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/migration/MigrationUtils.java
@@ -29,7 +29,7 @@ import me.lucko.luckperms.common.model.Group;
import me.lucko.luckperms.common.node.factory.NodeBuilders;
import me.lucko.luckperms.common.node.types.Weight;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeBuilder;
import net.luckperms.api.node.NodeType;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/misc/ApplyEditsCommand.java b/common/src/main/java/me/lucko/luckperms/common/commands/misc/ApplyEditsCommand.java
index 34c1579d1..adf8512e5 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/misc/ApplyEditsCommand.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/misc/ApplyEditsCommand.java
@@ -55,7 +55,7 @@ import me.lucko.luckperms.common.web.WebEditor;
import net.luckperms.api.actionlog.Action;
import net.luckperms.api.event.cause.CreationCause;
import net.luckperms.api.event.cause.DeletionCause;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import java.util.ArrayList;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackAppend.java b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackAppend.java
index 6f53b1a16..4e3700388 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackAppend.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackAppend.java
@@ -43,7 +43,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.storage.misc.DataConstraints;
import me.lucko.luckperms.common.util.Predicates;
-import net.luckperms.api.model.DataMutateResult;
+import net.luckperms.api.model.data.DataMutateResult;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackInsert.java b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackInsert.java
index 51f805cdb..1f656f87d 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackInsert.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackInsert.java
@@ -43,7 +43,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.storage.misc.DataConstraints;
import me.lucko.luckperms.common.util.Predicates;
-import net.luckperms.api.model.DataMutateResult;
+import net.luckperms.api.model.data.DataMutateResult;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackRemove.java b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackRemove.java
index 6b9d7066a..258432113 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackRemove.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/track/TrackRemove.java
@@ -42,7 +42,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.storage.misc.DataConstraints;
import me.lucko.luckperms.common.util.Predicates;
-import net.luckperms.api.model.DataMutateResult;
+import net.luckperms.api.model.data.DataMutateResult;
import java.util.List;
diff --git a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserClone.java b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserClone.java
index e5ad76cac..531614737 100644
--- a/common/src/main/java/me/lucko/luckperms/common/commands/user/UserClone.java
+++ b/common/src/main/java/me/lucko/luckperms/common/commands/user/UserClone.java
@@ -40,7 +40,7 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.Predicates;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import java.util.List;
import java.util.UUID;
diff --git a/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java b/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java
index e063128c5..2a1ab570a 100644
--- a/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java
+++ b/common/src/main/java/me/lucko/luckperms/common/config/ConfigKeys.java
@@ -41,7 +41,7 @@ import me.lucko.luckperms.common.util.ImmutableCollectors;
import net.luckperms.api.metastacking.DuplicateRemovalFunction;
import net.luckperms.api.metastacking.MetaStackDefinition;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import net.luckperms.api.query.Flag;
import net.luckperms.api.query.QueryOptions;
@@ -131,7 +131,7 @@ public final class ConfigKeys {
/**
* Controls how temporary add commands should behave
*/
- public static final ConfigKey TEMPORARY_ADD_BEHAVIOUR = customKey(c -> {
+ public static final ConfigKey TEMPORARY_ADD_BEHAVIOUR = customKey(c -> {
String option = c.getString("temporary-add-behaviour", "deny").toLowerCase();
if (!option.equals("deny") && !option.equals("replace") && !option.equals("accumulate")) {
option = "deny";
diff --git a/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java
index a51ebb1fa..d6f7e87f5 100644
--- a/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java
+++ b/common/src/main/java/me/lucko/luckperms/common/event/EventFactory.java
@@ -84,8 +84,8 @@ import net.luckperms.api.event.user.UserLoadEvent;
import net.luckperms.api.event.user.track.UserDemoteEvent;
import net.luckperms.api.event.user.track.UserPromoteEvent;
import net.luckperms.api.extension.Extension;
-import net.luckperms.api.model.DataType;
import net.luckperms.api.model.PlayerSaveResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import org.checkerframework.checker.nullness.qual.Nullable;
diff --git a/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java b/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java
index ed5adcb23..c08561638 100644
--- a/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java
+++ b/common/src/main/java/me/lucko/luckperms/common/model/PermissionHolder.java
@@ -38,10 +38,9 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import net.luckperms.api.context.ContextSet;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
-import net.luckperms.api.model.TemporaryDataMutateResult;
-import net.luckperms.api.model.TemporaryMergeBehaviour;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
+import net.luckperms.api.model.data.TemporaryNodeMergeStrategy;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeEqualityPredicate;
import net.luckperms.api.node.NodeType;
@@ -410,7 +409,7 @@ public abstract class PermissionHolder {
public DataMutateResult setNode(DataType dataType, Node node, boolean callEvent) {
if (hasNode(dataType, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME) != Tristate.UNDEFINED) {
- return DataMutateResult.ALREADY_HAS;
+ return DataMutateResult.FAIL_ALREADY_HAS;
}
NodeMap data = getData(dataType);
@@ -428,8 +427,8 @@ public abstract class PermissionHolder {
return DataMutateResult.SUCCESS;
}
- public TemporaryDataMutateResult setNode(DataType dataType, Node node, TemporaryMergeBehaviour mergeBehaviour) {
- if (node.hasExpiry() && mergeBehaviour != TemporaryMergeBehaviour.FAIL_WITH_ALREADY_HAS) {
+ public DataMutateResult.WithMergedNode setNode(DataType dataType, Node node, TemporaryNodeMergeStrategy mergeStrategy) {
+ if (node.hasExpiry() && mergeStrategy != TemporaryNodeMergeStrategy.NONE) {
Node otherMatch = getData(dataType).immutable().values().stream()
.filter(NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE.equalTo(node))
.findFirst().orElse(null);
@@ -437,7 +436,7 @@ public abstract class PermissionHolder {
NodeMap data = getData(dataType);
Node newNode = null;
- switch (mergeBehaviour) {
+ switch (mergeStrategy) {
case ADD_NEW_DURATION_TO_EXISTING: {
// Create a new Node with the same properties, but add the expiry dates together
long newExpiry = otherMatch.getExpiry().plus(Duration.between(Instant.now(), node.getExpiry())).getEpochSecond();
@@ -462,18 +461,18 @@ public abstract class PermissionHolder {
ImmutableCollection extends Node> after = data.immutable().values();
this.plugin.getEventFactory().handleNodeAdd(newNode, this, dataType, before, after);
- return new TemporaryResult(DataMutateResult.SUCCESS, newNode);
+ return new MergedNodeResult(DataMutateResult.SUCCESS, newNode);
}
}
}
// Fallback to the normal handling.
- return new TemporaryResult(setNode(dataType, node, true), node);
+ return new MergedNodeResult(setNode(dataType, node, true), node);
}
public DataMutateResult unsetNode(DataType dataType, Node node) {
if (hasNode(dataType, node, NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE) == Tristate.UNDEFINED) {
- return DataMutateResult.LACKS;
+ return DataMutateResult.FAIL_LACKS;
}
ImmutableCollection extends Node> before = getData(dataType).immutable().values();
@@ -543,11 +542,11 @@ public abstract class PermissionHolder {
return OptionalInt.empty();
}
- private static final class TemporaryResult implements TemporaryDataMutateResult {
+ private static final class MergedNodeResult implements DataMutateResult.WithMergedNode {
private final DataMutateResult result;
private final Node mergedNode;
- private TemporaryResult(DataMutateResult result, Node mergedNode) {
+ private MergedNodeResult(DataMutateResult result, Node mergedNode) {
this.result = result;
this.mergedNode = mergedNode;
}
diff --git a/common/src/main/java/me/lucko/luckperms/common/model/Track.java b/common/src/main/java/me/lucko/luckperms/common/model/Track.java
index 25b16d367..d54d473ac 100644
--- a/common/src/main/java/me/lucko/luckperms/common/model/Track.java
+++ b/common/src/main/java/me/lucko/luckperms/common/model/Track.java
@@ -34,8 +34,8 @@ import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.sender.Sender;
import net.luckperms.api.context.ContextSet;
-import net.luckperms.api.model.DataMutateResult;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataMutateResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.types.InheritanceNode;
import net.luckperms.api.track.DemotionResult;
@@ -177,7 +177,7 @@ public final class Track {
*/
public DataMutateResult appendGroup(Group group) {
if (containsGroup(group)) {
- return DataMutateResult.ALREADY_HAS;
+ return DataMutateResult.FAIL_ALREADY_HAS;
}
List before = ImmutableList.copyOf(this.groups);
@@ -198,7 +198,7 @@ public final class Track {
*/
public DataMutateResult insertGroup(Group group, int position) throws IndexOutOfBoundsException {
if (containsGroup(group)) {
- return DataMutateResult.ALREADY_HAS;
+ return DataMutateResult.FAIL_ALREADY_HAS;
}
List before = ImmutableList.copyOf(this.groups);
@@ -227,7 +227,7 @@ public final class Track {
*/
public DataMutateResult removeGroup(String group) {
if (!containsGroup(group)) {
- return DataMutateResult.LACKS;
+ return DataMutateResult.FAIL_LACKS;
}
List before = ImmutableList.copyOf(this.groups);
diff --git a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java
index a824c15b7..1312cd2b3 100644
--- a/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java
+++ b/common/src/main/java/me/lucko/luckperms/common/model/manager/user/AbstractUserManager.java
@@ -35,7 +35,7 @@ import me.lucko.luckperms.common.model.manager.group.GroupManager;
import me.lucko.luckperms.common.node.types.Inheritance;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.types.InheritanceNode;
diff --git a/common/src/main/java/me/lucko/luckperms/common/plugin/util/AbstractConnectionListener.java b/common/src/main/java/me/lucko/luckperms/common/plugin/util/AbstractConnectionListener.java
index 13d311cb4..353328f65 100644
--- a/common/src/main/java/me/lucko/luckperms/common/plugin/util/AbstractConnectionListener.java
+++ b/common/src/main/java/me/lucko/luckperms/common/plugin/util/AbstractConnectionListener.java
@@ -28,8 +28,8 @@ package me.lucko.luckperms.common.plugin.util;
import me.lucko.luckperms.common.model.User;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
-import net.luckperms.api.model.DataType;
import net.luckperms.api.model.PlayerSaveResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.platform.Platform;
import java.util.Set;
diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java
index f7f1c731e..8194524f7 100644
--- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java
+++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/file/AbstractConfigurateStorage.java
@@ -53,8 +53,8 @@ import me.lucko.luckperms.common.util.MoreFiles;
import net.luckperms.api.actionlog.Action;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
import net.luckperms.api.model.PlayerSaveResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeBuilder;
import net.luckperms.api.node.NodeType;
diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/mongodb/MongoStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/mongodb/MongoStorage.java
index c0b70120c..f70ad7109 100644
--- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/mongodb/MongoStorage.java
+++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/mongodb/MongoStorage.java
@@ -59,8 +59,8 @@ import net.luckperms.api.context.Context;
import net.luckperms.api.context.ContextSet;
import net.luckperms.api.context.DefaultContextKeys;
import net.luckperms.api.context.MutableContextSet;
-import net.luckperms.api.model.DataType;
import net.luckperms.api.model.PlayerSaveResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.HeldNode;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeBuilder;
diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java
index a5ef39e86..9f702ada8 100644
--- a/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java
+++ b/common/src/main/java/me/lucko/luckperms/common/storage/implementation/sql/SqlStorage.java
@@ -49,8 +49,8 @@ import me.lucko.luckperms.common.storage.misc.PlayerSaveResultImpl;
import me.lucko.luckperms.common.util.gson.GsonProvider;
import net.luckperms.api.actionlog.Action;
-import net.luckperms.api.model.DataType;
import net.luckperms.api.model.PlayerSaveResult;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.HeldNode;
import net.luckperms.api.node.Node;
diff --git a/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissionAttachment.java b/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissionAttachment.java
index f5cbc900c..396f0aa18 100644
--- a/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissionAttachment.java
+++ b/nukkit/src/main/java/me/lucko/luckperms/nukkit/inject/permissible/LPPermissionAttachment.java
@@ -32,7 +32,7 @@ import me.lucko.luckperms.common.model.User;
import me.lucko.luckperms.common.node.factory.NodeBuilders;
import me.lucko.luckperms.nukkit.inject.dummy.DummyPlugin;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.metadata.NodeMetadataKey;
import net.luckperms.api.util.Result;
diff --git a/sponge/sponge-service/src/main/java/me/lucko/luckperms/sponge/service/model/LPSubjectData.java b/sponge/sponge-service/src/main/java/me/lucko/luckperms/sponge/service/model/LPSubjectData.java
index 63dd4a82f..6eee4b9e1 100644
--- a/sponge/sponge-service/src/main/java/me/lucko/luckperms/sponge/service/model/LPSubjectData.java
+++ b/sponge/sponge-service/src/main/java/me/lucko/luckperms/sponge/service/model/LPSubjectData.java
@@ -29,7 +29,7 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Tristate;
import org.spongepowered.api.service.permission.SubjectData;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/ProxyFactory.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/ProxyFactory.java
index 08c0beea6..1c4c6461a 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/ProxyFactory.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/ProxyFactory.java
@@ -31,7 +31,7 @@ import me.lucko.luckperms.sponge.service.model.LPSubject;
import me.lucko.luckperms.sponge.service.model.LPSubjectCollection;
import me.lucko.luckperms.sponge.service.model.LPSubjectData;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import org.spongepowered.api.service.permission.PermissionDescription;
import org.spongepowered.api.service.permission.PermissionService;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubjectData.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubjectData.java
index 3c310b030..01056f0dc 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubjectData.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/CalculatedSubjectData.java
@@ -37,7 +37,7 @@ import me.lucko.luckperms.sponge.service.model.LPSubjectData;
import me.lucko.luckperms.sponge.service.model.LPSubjectReference;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Tristate;
import net.luckperms.api.query.QueryOptions;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/MonitoredSubjectData.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/MonitoredSubjectData.java
index 3878c7e2a..c6175461f 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/MonitoredSubjectData.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/calculated/MonitoredSubjectData.java
@@ -30,7 +30,7 @@ import me.lucko.luckperms.sponge.service.model.LPSubject;
import me.lucko.luckperms.sponge.service.model.LPSubjectReference;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Tristate;
import java.util.concurrent.CompletableFuture;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubject.java
index 66f3e2ae0..5b477a194 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubject.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubject.java
@@ -45,7 +45,7 @@ import me.lucko.luckperms.sponge.service.model.LPSubject;
import me.lucko.luckperms.sponge.service.model.LPSubjectReference;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.Tristate;
import net.luckperms.api.query.QueryOptions;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubjectData.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubjectData.java
index 73b7662ef..35a6d3911 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubjectData.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/permissionholder/PermissionHolderSubjectData.java
@@ -45,7 +45,7 @@ import me.lucko.luckperms.sponge.service.model.LPSubjectData;
import me.lucko.luckperms.sponge.service.model.LPSubjectReference;
import net.luckperms.api.context.ImmutableContextSet;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType;
import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeType;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/persisted/PersistedSubject.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/persisted/PersistedSubject.java
index a89cc2ad1..485e3c6c0 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/persisted/PersistedSubject.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/persisted/PersistedSubject.java
@@ -35,7 +35,7 @@ import me.lucko.luckperms.sponge.service.model.calculated.CalculatedSubject;
import me.lucko.luckperms.sponge.service.model.calculated.CalculatedSubjectData;
import me.lucko.luckperms.sponge.service.model.calculated.MonitoredSubjectData;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.service.permission.Subject;
diff --git a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/persisted/PersistedSubjectData.java b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/persisted/PersistedSubjectData.java
index 80686f990..39d94eeff 100644
--- a/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/persisted/PersistedSubjectData.java
+++ b/sponge/src/main/java/me/lucko/luckperms/sponge/service/model/persisted/PersistedSubjectData.java
@@ -28,7 +28,7 @@ package me.lucko.luckperms.sponge.service.model.persisted;
import me.lucko.luckperms.sponge.service.LuckPermsService;
import me.lucko.luckperms.sponge.service.model.calculated.MonitoredSubjectData;
-import net.luckperms.api.model.DataType;
+import net.luckperms.api.model.data.DataType;
/**
* Extension of CalculatedSubjectData which persists data when modified