From 0078822da1aef35fcb965df79983dff430cfd269 Mon Sep 17 00:00:00 2001 From: kento2 Date: Wed, 15 Apr 2026 21:25:32 +0200 Subject: [PATCH] . --- .../kencommandapi/BukkitCommandContext.java | 19 ++++++++++++++++ .../kencommandapi/BukkitKenCommandApi.java | 14 +++++++++--- .../java/de/kentoj/kencommandapi/Main.java | 14 +++++++++--- .../kencommandapi/api/KenCommandApi.java | 9 ++++---- .../api/processing/CommandContext.java | 2 +- .../api/processing/CommandExecutor.java | 4 ++-- .../api/processing/ParsedArgument.java | 4 ++-- .../structure/argument/CommandArgument.java | 11 +++++----- .../argument/SuggestionProvider.java | 4 ++-- .../suggestion/NoSuggestionProvider.java | 6 ++--- .../api/structure/node/ArgumentNode.java | 7 +++--- .../api/structure/node/CommandNode.java | 9 ++++---- .../api/structure/node/LiteralNode.java | 9 ++++---- ...piImpl.java => AbstractKenCommandApi.java} | 22 ++++++++++--------- .../impl/processing/CommandContextImpl.java | 6 ++--- .../impl/processing/ParsedArgumentImpl.java | 5 +++-- .../argument/CommandArgumentImpl.java | 7 +++--- .../impl/structure/node/CommandNodeImpl.java | 15 +++++++------ 18 files changed, 106 insertions(+), 61 deletions(-) create mode 100644 kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/{KenCommandApiImpl.java => AbstractKenCommandApi.java} (73%) diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java new file mode 100644 index 0000000..7645d27 --- /dev/null +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java @@ -0,0 +1,19 @@ +package de.kentoj.kencommandapi; + +import de.kentoj.kencommandapi.api.processing.CommandContext; +import de.kentoj.kencommandapi.api.processing.ParsedArgument; +import de.kentoj.kencommandapi.impl.processing.CommandContextImpl; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Map; + +public class BukkitCommandContext extends CommandContextImpl { + BukkitCommandContext(CommandSender sender, Map, ?>> parsedArguments) { + super(sender, parsedArguments); + } + + public Player getPlayerSender() { + return ((Player) getSender()); + } +} diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommandApi.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommandApi.java index e6ae442..7a15eb4 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommandApi.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommandApi.java @@ -1,8 +1,16 @@ package de.kentoj.kencommandapi; -import de.kentoj.kencommandapi.api.KenCommandApi; +import de.kentoj.kencommandapi.api.processing.CommandContext; +import de.kentoj.kencommandapi.api.processing.ParsedArgument; +import de.kentoj.kencommandapi.impl.AbstractKenCommandApi; +import org.bukkit.command.CommandSender; -public class BukkitKenCommandApi extends KenCommandApiImpl<> { +import java.util.Map; - private final KenCommandApi<> +public class BukkitKenCommandApi extends AbstractKenCommandApi> { + + @Override + public CommandContext createContext(CommandSender sender, Map, ?>> parsedArguments) { + return new BukkitCommandContext(sender, parsedArguments); + } } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/Main.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/Main.java index cfbf2c6..097ac58 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/Main.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/Main.java @@ -1,15 +1,23 @@ package de.kentoj.kencommandapi; -import de.kentoj.kencommandapi.api.KenCommandApi; +import de.kentoj.kencommandapi.api.processing.CommandContext; +import de.kentoj.kencommandapi.api.processing.ParsedArgument; import de.kentoj.kencommandapi.api.structure.argument.types.IntegerArgumentType; -import de.kentoj.kencommandapi.impl.KenCommandApiImpl; +import de.kentoj.kencommandapi.impl.AbstractKenCommandApi; +import de.kentoj.kencommandapi.impl.processing.CommandContextImpl; import java.io.PrintStream; +import java.util.Map; public class Main { public static void main(String[] args) { - KenCommandApi api = new KenCommandApiImpl<>(); + var api = new AbstractKenCommandApi>() { + @Override + public CommandContextImpl createContext(PrintStream sender, Map, ?>> parsedArguments) { + return new CommandContextImpl<>(sender, parsedArguments); + } + }; var root = api.createNode("coins"); diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/KenCommandApi.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/KenCommandApi.java index 42a1a36..6c93875 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/KenCommandApi.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/KenCommandApi.java @@ -1,14 +1,15 @@ package de.kentoj.kencommandapi.api; +import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.structure.argument.ArgumentType; import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.structure.node.CommandNode; -public interface KenCommandApi { +public interface KenCommandApi> { - CommandNode createNode(String... name); + CommandNode createNode(String... name); - CommandArgument createArgument(String id, ArgumentType type); + CommandArgument createArgument(String id, ArgumentType type); - void invoke(CommandNode node, T sender, String[] args); + void invoke(CommandNode node, T sender, String[] args); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/CommandContext.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/CommandContext.java index 932c558..a11125e 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/CommandContext.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/CommandContext.java @@ -8,7 +8,7 @@ public interface CommandContext { * @return Object that is parsed from the raw argument * @throws RuntimeException if no value given and no default value supplied */ - ParsedArgument getParsedArgument(String name); + ParsedArgument, V> getParsedArgument(String name); @SuppressWarnings("unchecked") default V getArg(String name) { diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/CommandExecutor.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/CommandExecutor.java index b6c30b3..3ff040d 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/CommandExecutor.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/CommandExecutor.java @@ -1,6 +1,6 @@ package de.kentoj.kencommandapi.api.processing; -public interface CommandExecutor { +public interface CommandExecutor> { - void execute(CommandContext ctx); + void execute(S ctx); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/ParsedArgument.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/ParsedArgument.java index 8b2899f..4bc4fe3 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/ParsedArgument.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/processing/ParsedArgument.java @@ -2,9 +2,9 @@ package de.kentoj.kencommandapi.api.processing; import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; -public interface ParsedArgument { +public interface ParsedArgument, V> { V getValue(); - CommandArgument getArgument(); + CommandArgument getArgument(); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/CommandArgument.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/CommandArgument.java index f3355dd..888c09f 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/CommandArgument.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/CommandArgument.java @@ -1,22 +1,23 @@ package de.kentoj.kencommandapi.api.structure.argument; +import de.kentoj.kencommandapi.api.processing.CommandContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public interface CommandArgument { +public interface CommandArgument, V> { String getId(); ArgumentType getType(); - void setDefaultValue(@Nullable T defaultValue); + void setDefaultValue(@Nullable V defaultValue); - @Nullable T getDefaultValue(); + @Nullable V getDefaultValue(); - void setSuggestionProvider(@Nullable SuggestionProvider suggestionProvider); + void setSuggestionProvider(@Nullable SuggestionProvider suggestionProvider); /** * @return the explicitly set SuggestionProvider or the default suggestions for the type if unset/null */ - @NotNull SuggestionProvider getSuggestionProvider(); + @NotNull SuggestionProvider getSuggestionProvider(); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/SuggestionProvider.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/SuggestionProvider.java index 5b11e11..f338575 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/SuggestionProvider.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/SuggestionProvider.java @@ -4,7 +4,7 @@ import de.kentoj.kencommandapi.api.processing.CommandContext; import java.util.Set; -public interface SuggestionProvider { +public interface SuggestionProvider> { - Set suggest(CommandContext context); + Set suggest(S context); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/suggestion/NoSuggestionProvider.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/suggestion/NoSuggestionProvider.java index 63e8759..a91316a 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/suggestion/NoSuggestionProvider.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/suggestion/NoSuggestionProvider.java @@ -9,12 +9,12 @@ import lombok.NoArgsConstructor; import java.util.Set; @NoArgsConstructor(access = AccessLevel.NONE) -public class NoSuggestionProvider implements SuggestionProvider { +public class NoSuggestionProvider implements SuggestionProvider> { @Getter(value = AccessLevel.PRIVATE, lazy = true) - private static final SuggestionProvider instance = new NoSuggestionProvider(); + private static final SuggestionProvider instance = new NoSuggestionProvider(); - public static SuggestionProvider create() { + public static SuggestionProvider create() { return getInstance(); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/ArgumentNode.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/ArgumentNode.java index bc70189..4d1713e 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/ArgumentNode.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/ArgumentNode.java @@ -1,12 +1,13 @@ package de.kentoj.kencommandapi.api.structure.node; +import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import java.util.Set; -public interface ArgumentNode { +public interface ArgumentNode> { - void addArgument(CommandArgument argument); + void addArgument(CommandArgument argument); - Set> getArguments(); + Set> getArguments(); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/CommandNode.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/CommandNode.java index a7210db..3b8bea9 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/CommandNode.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/CommandNode.java @@ -1,19 +1,20 @@ package de.kentoj.kencommandapi.api.structure.node; +import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.processing.CommandExecutor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** - * @param type of command sender + * @param type of command context */ -public interface CommandNode extends ArgumentNode, LiteralNode { +public interface CommandNode> extends ArgumentNode, LiteralNode { @NotNull String[] getNames(); - void setExecutor(@Nullable CommandExecutor executor); + void setExecutor(@Nullable CommandExecutor executor); - @Nullable CommandExecutor getExecutor(); + @Nullable CommandExecutor getExecutor(); void setDescription(@Nullable String description); diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/LiteralNode.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/LiteralNode.java index d0d201e..f5a6f02 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/LiteralNode.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/LiteralNode.java @@ -1,15 +1,16 @@ package de.kentoj.kencommandapi.api.structure.node; +import de.kentoj.kencommandapi.api.processing.CommandContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Set; -public interface LiteralNode { +public interface LiteralNode> { - void addLiteral(@NotNull CommandNode commandNode); + void addLiteral(@NotNull CommandNode commandNode); - @Nullable CommandNode getLiteral(@NotNull String name); + @Nullable CommandNode getLiteral(@NotNull String name); - @NotNull Set> getLiterals(); + @NotNull Set> getLiterals(); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/KenCommandApiImpl.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/AbstractKenCommandApi.java similarity index 73% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/KenCommandApiImpl.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/AbstractKenCommandApi.java index a324c0e..5ab352e 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/KenCommandApiImpl.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/AbstractKenCommandApi.java @@ -1,11 +1,11 @@ package de.kentoj.kencommandapi.impl; import de.kentoj.kencommandapi.api.KenCommandApi; +import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.processing.ParsedArgument; import de.kentoj.kencommandapi.api.structure.argument.ArgumentType; import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.structure.node.CommandNode; -import de.kentoj.kencommandapi.impl.processing.CommandContextImpl; import de.kentoj.kencommandapi.impl.processing.ParsedArgumentImpl; import de.kentoj.kencommandapi.impl.structure.argument.CommandArgumentImpl; import de.kentoj.kencommandapi.impl.structure.node.CommandNodeImpl; @@ -17,28 +17,30 @@ import java.util.Iterator; import java.util.Map; @RequiredArgsConstructor -public class KenCommandApiImpl implements KenCommandApi { +public abstract class AbstractKenCommandApi> implements KenCommandApi { + + public abstract S createContext(T sender, Map> parsedArguments); @Override - public CommandNode createNode(String... name) { + public CommandNode createNode(String... name) { return new CommandNodeImpl<>(name); } @Override - public CommandArgument createArgument(String id, ArgumentType type) { + public CommandArgument createArgument(String id, ArgumentType type) { return new CommandArgumentImpl<>(id, type); } @Override - public void invoke(CommandNode node, T sender, String[] args) { + public void invoke(CommandNode node, T sender, String[] args) { var iter = Arrays.stream(args).iterator(); var executableLiteral = processLiterals(node, iter); var parsedArguments = parseArguments(executableLiteral, iter); - executableLiteral.getExecutor().execute(new CommandContextImpl<>(sender, parsedArguments)); + executableLiteral.getExecutor().execute(createContext(sender, parsedArguments)); } - private CommandNode processLiterals(CommandNode commandNode, Iterator iter) { + private CommandNode processLiterals(CommandNode commandNode, Iterator iter) { if (!iter.hasNext()) { // literals/arguments are optional if the node itself is executable if (commandNode.getExecutor() == null) throw new RuntimeException("no literal given but required"); @@ -57,11 +59,11 @@ public class KenCommandApiImpl implements KenCommandApi { return processLiterals(literal, iter); } - private Map> parseArguments(CommandNode commandNode, Iterator iter) { - Map> parsedArguments = new HashMap<>(); + private Map> parseArguments(CommandNode commandNode, Iterator iter) { + Map> parsedArguments = new HashMap<>(); for (var argument : commandNode.getArguments()) { @SuppressWarnings("unchecked") - var arg = ((CommandArgument) argument); + var arg = ((CommandArgument) argument); if (!iter.hasNext()) { var defaultValue = arg.getDefaultValue(); diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/CommandContextImpl.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/CommandContextImpl.java index 2903814..8265df4 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/CommandContextImpl.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/CommandContextImpl.java @@ -12,13 +12,13 @@ public class CommandContextImpl implements CommandContext { @Getter private final T sender; @Getter - private final Map> parsedArguments; + private final Map, ?>> parsedArguments; @Override - public ParsedArgument getParsedArgument(String name) { + public ParsedArgument, V> getParsedArgument(String name) { try { //noinspection unchecked - return (ParsedArgument) parsedArguments.get(name); + return (ParsedArgument, V>) parsedArguments.get(name); } catch (ClassCastException e) { throw new RuntimeException("requested argument with wrong type", e); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/ParsedArgumentImpl.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/ParsedArgumentImpl.java index b2a4723..96261e3 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/ParsedArgumentImpl.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/ParsedArgumentImpl.java @@ -1,11 +1,12 @@ package de.kentoj.kencommandapi.impl.processing; +import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.processing.ParsedArgument; import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import lombok.Data; @Data -public class ParsedArgumentImpl implements ParsedArgument { +public class ParsedArgumentImpl, V> implements ParsedArgument { final V value; - final CommandArgument argument; + final CommandArgument argument; } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/argument/CommandArgumentImpl.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/argument/CommandArgumentImpl.java index 4ada473..84976c1 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/argument/CommandArgumentImpl.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/argument/CommandArgumentImpl.java @@ -1,5 +1,6 @@ package de.kentoj.kencommandapi.impl.structure.argument; +import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.structure.argument.ArgumentType; import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.structure.argument.SuggestionProvider; @@ -9,7 +10,7 @@ import lombok.Setter; import org.jetbrains.annotations.Nullable; @RequiredArgsConstructor -public class CommandArgumentImpl implements CommandArgument { +public class CommandArgumentImpl, V> implements CommandArgument { @Getter private final String id; @@ -18,9 +19,9 @@ public class CommandArgumentImpl implements CommandArgument { @Getter @Setter - private @Nullable T defaultValue; + private @Nullable V defaultValue; @Getter @Setter - private @Nullable SuggestionProvider suggestionProvider; + private @Nullable SuggestionProvider suggestionProvider; } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/node/CommandNodeImpl.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/node/CommandNodeImpl.java index 2dff79b..9e713e8 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/node/CommandNodeImpl.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/node/CommandNodeImpl.java @@ -1,5 +1,6 @@ package de.kentoj.kencommandapi.impl.structure.node; +import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.processing.CommandExecutor; import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; import de.kentoj.kencommandapi.api.structure.node.CommandNode; @@ -11,7 +12,7 @@ import org.jetbrains.annotations.Nullable; import java.util.HashSet; import java.util.Set; -public class CommandNodeImpl implements CommandNode { +public class CommandNodeImpl> implements CommandNode { @Getter private final String[] names; @@ -22,20 +23,20 @@ public class CommandNodeImpl implements CommandNode { } @Getter - private final Set> literals = new HashSet<>(); + private final Set> literals = new HashSet<>(); @Getter - private final Set> arguments = new HashSet<>(); + private final Set> arguments = new HashSet<>(); @Getter @Setter - private @Nullable CommandExecutor executor; + private @Nullable CommandExecutor executor; @Getter @Setter private String description; @Override - public void addLiteral(@NotNull CommandNode commandNode) { + public void addLiteral(@NotNull CommandNode commandNode) { for (String name : commandNode.getNames()) { if (getLiteral(name) != null) throw new IllegalArgumentException("literal with same name is already added"); } @@ -43,7 +44,7 @@ public class CommandNodeImpl implements CommandNode { } @Override - public CommandNode getLiteral(@NotNull String name) { + public CommandNode getLiteral(@NotNull String name) { for (var literal : literals) { for (String literalName : literal.getNames()) { if (literalName.equalsIgnoreCase(name)) return literal; @@ -53,7 +54,7 @@ public class CommandNodeImpl implements CommandNode { } @Override - public void addArgument(CommandArgument argument) { + public void addArgument(CommandArgument argument) { if (arguments.stream() .anyMatch(arg -> arg.getId().equals(argument.getId())) ) {