diff --git a/api/pom.xml b/api/pom.xml index c5d10af0b..4ad4fcb9b 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT 4.0.0 diff --git a/api/src/main/java/me/lucko/luckperms/api/Node.java b/api/src/main/java/me/lucko/luckperms/api/Node.java index f6bb02d7e..b845853e7 100644 --- a/api/src/main/java/me/lucko/luckperms/api/Node.java +++ b/api/src/main/java/me/lucko/luckperms/api/Node.java @@ -32,22 +32,59 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.stream.Stream; import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; /** - * Represents a permission node. + * Represents a LuckPerms "node". * - *

All implementations of this interface must be immutable.

+ *

The {@link Node} class encapsulates more than just permission assignments. + * Nodes are used to store data about inherited groups, as well as assigned + * prefixes, suffixes and meta values.

* - *

Use the {@link NodeFactory} to obtain and construct instances.

+ *

Combining these various states into one object (a "node") means that a + * holder only has to have one type of data set (a set of nodes) in order to + * take on various properties.

* + *

It is recommended that users of the API make use of {@link Stream}s + * to manipulate data and obtain the required information.

+ * + *

This interface provides a number of methods to read the attributes of the + * node, as well as methods to query and extract additional state and properties + * from these settings.

+ * + *

Nodes have the following attributes:

+ *

+ * + * + *

Nodes can also fall into the following sub categories.

+ *

+ * + * + *

The core node state must be immutable in all implementations.

+ * + * @see NodeFactory for obtaining and constructing instances. * @since 2.6 */ @Immutable -public interface Node extends Map.Entry { +public interface Node { /** * Gets the permission string @@ -64,7 +101,6 @@ public interface Node extends Map.Entry { * * @return the permission's value */ - @Override @Nonnull default Boolean getValue() { return getValuePrimitive(); @@ -394,6 +430,15 @@ public interface Node extends Map.Entry { return equals(other, StandardNodeEquality.IGNORE_VALUE_OR_IF_TEMPORARY); } + /** + * Constructs a new builder initially containing the current properties of + * this node. + * + * @return a new builder + * @since 4.1 + */ + Builder toBuilder(); + /** * Builds a Node instance */ diff --git a/bukkit/pom.xml b/bukkit/pom.xml index cbe9bc382..1c5bda5ad 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT 4.0.0 diff --git a/bungee/pom.xml b/bungee/pom.xml index 3ea490153..f02996a3e 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT 4.0.0 diff --git a/common/pom.xml b/common/pom.xml index a1347597a..086c8301f 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT 4.0.0 diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiNodeFactory.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiNodeFactory.java index 0614d327d..bc457ea9f 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiNodeFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiNodeFactory.java @@ -52,8 +52,7 @@ public final class ApiNodeFactory implements me.lucko.luckperms.api.NodeFactory @Nonnull @Override public Node.Builder newBuilderFromExisting(@Nonnull Node other) { - Objects.requireNonNull(other, "other"); - return NodeFactory.builder(other); + return Objects.requireNonNull(other, "other").toBuilder(); } @Nonnull diff --git a/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiPlatformInfo.java b/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiPlatformInfo.java index a0a66ca3f..068a8ad16 100644 --- a/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiPlatformInfo.java +++ b/common/src/main/java/me/lucko/luckperms/common/api/delegates/misc/ApiPlatformInfo.java @@ -50,7 +50,7 @@ public class ApiPlatformInfo implements PlatformInfo { @Override public double getApiVersion() { - return 4.0; + return 4.1; } @Nonnull diff --git a/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpec.java b/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpec.java index 07bfc8dde..dde85bdc4 100644 --- a/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpec.java +++ b/common/src/main/java/me/lucko/luckperms/common/locale/CommandSpec.java @@ -55,7 +55,7 @@ public enum CommandSpec { ) ), DEBUG("Produce debugging output", "/%s debug"), - VERBOSE("Manage verbose permission checking", "/%s verbose [filter]", + VERBOSE("Manage verbose permission checking", "/%s verbose [filter]", Arg.list( Arg.create("on|record|off|paste", true, "whether to enable/disable logging, or to paste the logged output"), Arg.create("filter", false, "the filter to match entries against") 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 4c3928d40..10e37343f 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 @@ -686,7 +686,7 @@ public abstract class PermissionHolder { Node previous = existing.get(); // Create a new node with the same properties, but add the expiry dates together - Node newNode = NodeFactory.builder(node).setExpiry(previous.getExpiryUnixTime() + node.getSecondsTilExpiry()).build(); + Node newNode = node.toBuilder().setExpiry(previous.getExpiryUnixTime() + node.getSecondsTilExpiry()).build(); // Remove the old node & add the new one. ImmutableCollection before = getEnduringNodes().values(); diff --git a/common/src/main/java/me/lucko/luckperms/common/node/ForwardingNode.java b/common/src/main/java/me/lucko/luckperms/common/node/ForwardingNode.java index 74c859b40..18c58d60b 100644 --- a/common/src/main/java/me/lucko/luckperms/common/node/ForwardingNode.java +++ b/common/src/main/java/me/lucko/luckperms/common/node/ForwardingNode.java @@ -230,12 +230,7 @@ public abstract class ForwardingNode implements Node { } @Override - public String getKey() { - return delegate().getKey(); - } - - @Override - public Boolean setValue(Boolean value) { - return delegate().setValue(value); + public Builder toBuilder() { + return delegate().toBuilder(); } } diff --git a/common/src/main/java/me/lucko/luckperms/common/node/ImmutableNode.java b/common/src/main/java/me/lucko/luckperms/common/node/ImmutableNode.java index 4b3e3c357..60b027dd0 100644 --- a/common/src/main/java/me/lucko/luckperms/common/node/ImmutableNode.java +++ b/common/src/main/java/me/lucko/luckperms/common/node/ImmutableNode.java @@ -162,6 +162,11 @@ public final class ImmutableNode implements Node { this.hashCode = calculateHashCode(); } + @Override + public Builder toBuilder() { + return new NodeBuilder(this); + } + @Nonnull @Override public String getPermission() { @@ -443,16 +448,6 @@ public final class ImmutableNode implements Node { public abstract boolean areEqual(@Nonnull ImmutableNode o1, @Nonnull ImmutableNode o2); } - @Override - public Boolean setValue(Boolean value) { - throw new UnsupportedOperationException(); - } - - @Override - public String getKey() { - return getPermission(); - } - private static String internString(String s) { return s == null ? null : s.intern(); } diff --git a/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java b/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java index a55d7838d..a47888bca 100644 --- a/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java +++ b/common/src/main/java/me/lucko/luckperms/common/node/NodeFactory.java @@ -62,10 +62,6 @@ public final class NodeFactory { return new NodeBuilder(s); } - public static Node.Builder builder(Node other) { - return new NodeBuilder(other); - } - public static Node.Builder buildGroupNode(String groupName) { return new NodeBuilder(groupNode(groupName)); } diff --git a/nukkit/pom.xml b/nukkit/pom.xml index ad5f48393..ef8a1bb7d 100644 --- a/nukkit/pom.xml +++ b/nukkit/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT 4.0.0 diff --git a/pom.xml b/pom.xml index 9ffdde9a2..3fd1fb0b4 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.lucko.luckperms luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT api diff --git a/sponge/pom.xml b/sponge/pom.xml index 0e9e33cbe..b08931a00 100644 --- a/sponge/pom.xml +++ b/sponge/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT 4.0.0 diff --git a/sponge/sponge-service-api6/pom.xml b/sponge/sponge-service-api6/pom.xml index a2cd24609..edfc024de 100644 --- a/sponge/sponge-service-api6/pom.xml +++ b/sponge/sponge-service-api6/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/sponge/sponge-service-api7/pom.xml b/sponge/sponge-service-api7/pom.xml index 6576f4661..dd134ae26 100644 --- a/sponge/sponge-service-api7/pom.xml +++ b/sponge/sponge-service-api7/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/sponge/sponge-service/pom.xml b/sponge/sponge-service/pom.xml index ba12e90dc..dc4cc16a9 100644 --- a/sponge/sponge-service/pom.xml +++ b/sponge/sponge-service/pom.xml @@ -5,7 +5,7 @@ luckperms me.lucko.luckperms - 4.0-SNAPSHOT + 4.1-SNAPSHOT ../../pom.xml 4.0.0