From f9c60fdae0c4e3af8be8c6c2efbe32318300ed66 Mon Sep 17 00:00:00 2001 From: kento2 Date: Tue, 14 Apr 2026 22:35:16 +0200 Subject: [PATCH] . --- .../api/parsing/ParsedArgument.java | 9 ++--- .../api/structure/node/ArgumentNode.java | 2 +- .../api/structure/node/CommandNode.java | 2 +- ...eralNodeImpl.java => CommandNodeImpl.java} | 33 +++++++++++++++++-- 4 files changed, 38 insertions(+), 8 deletions(-) rename src/main/java/de/kencommand/impl/structure/node/{LiteralNodeImpl.java => CommandNodeImpl.java} (51%) diff --git a/src/main/java/de/kencommand/api/parsing/ParsedArgument.java b/src/main/java/de/kencommand/api/parsing/ParsedArgument.java index 0537991..52ddc14 100644 --- a/src/main/java/de/kencommand/api/parsing/ParsedArgument.java +++ b/src/main/java/de/kencommand/api/parsing/ParsedArgument.java @@ -1,10 +1,11 @@ package de.kencommand.api.parsing; -import de.kentoj.scrow.bukkit.command.literal.CommandArgument; +import de.kencommand.api.processing.CommandContext; +import de.kencommand.api.structure.argument.CommandArgument; -public interface ParsedArgument { +public interface ParsedArgument, V> { - T getValue(); + V getValue(); - CommandArgument getArgument(); + CommandArgument getArgument(); } diff --git a/src/main/java/de/kencommand/api/structure/node/ArgumentNode.java b/src/main/java/de/kencommand/api/structure/node/ArgumentNode.java index 4fb677d..6228d31 100644 --- a/src/main/java/de/kencommand/api/structure/node/ArgumentNode.java +++ b/src/main/java/de/kencommand/api/structure/node/ArgumentNode.java @@ -9,5 +9,5 @@ public interface ArgumentNode> { void addArgument(CommandArgument argument); - Set> getArguments(); + Set> getArguments(); } diff --git a/src/main/java/de/kencommand/api/structure/node/CommandNode.java b/src/main/java/de/kencommand/api/structure/node/CommandNode.java index d529930..4a4188f 100644 --- a/src/main/java/de/kencommand/api/structure/node/CommandNode.java +++ b/src/main/java/de/kencommand/api/structure/node/CommandNode.java @@ -9,7 +9,7 @@ import org.jetbrains.annotations.Nullable; * @param type of command sender * @param type of command context */ -public interface CommandNode> extends LiteralNode { +public interface CommandNode> extends LiteralNode, ArgumentNode { @NotNull String[] getNames(); diff --git a/src/main/java/de/kencommand/impl/structure/node/LiteralNodeImpl.java b/src/main/java/de/kencommand/impl/structure/node/CommandNodeImpl.java similarity index 51% rename from src/main/java/de/kencommand/impl/structure/node/LiteralNodeImpl.java rename to src/main/java/de/kencommand/impl/structure/node/CommandNodeImpl.java index afb8441..db39e82 100644 --- a/src/main/java/de/kencommand/impl/structure/node/LiteralNodeImpl.java +++ b/src/main/java/de/kencommand/impl/structure/node/CommandNodeImpl.java @@ -1,18 +1,36 @@ package de.kencommand.impl.structure.node; import de.kencommand.api.processing.CommandContext; +import de.kencommand.api.processing.CommandExecutor; +import de.kencommand.api.structure.argument.CommandArgument; import de.kencommand.api.structure.node.CommandNode; -import de.kencommand.api.structure.node.LiteralNode; import lombok.Getter; +import lombok.RequiredArgsConstructor; +import lombok.Setter; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.HashSet; import java.util.Set; -public class LiteralNodeImpl> implements LiteralNode { +@RequiredArgsConstructor +public class CommandNodeImpl> implements CommandNode { + + @Getter + private final String[] names; @Getter private final Set> literals = new HashSet<>(); + @Getter + private final Set> arguments = new HashSet<>(); + + @Getter + @Setter + private @Nullable CommandExecutor executor; + + @Getter + @Setter + private String description; @Override public void addLiteral(@NotNull CommandNode commandNode) { @@ -31,4 +49,15 @@ public class LiteralNodeImpl> implements LiteralN } return null; } + + @Override + public void addArgument(CommandArgument argument) { + if (arguments.stream() + .anyMatch(arg -> arg.getId().equals(argument.getId())) + ) { + throw new IllegalArgumentException("argument with same identifier is already added"); + } + + arguments.add(argument); + } }