From 124e65a472afc6d2fb35f3172f400a14964c0420 Mon Sep 17 00:00:00 2001 From: kento2 Date: Thu, 16 Apr 2026 14:52:10 +0200 Subject: [PATCH] . --- README.md | 2 +- kencommandapi-bukkit/build.gradle.kts | 4 +-- .../kencommandapi/BukkitCommandContext.java | 9 +++-- .../kencommandapi/BukkitKenCommand.java | 10 +++--- .../kencommandapi/BukkitKenCommandApi.java | 10 +++--- .../type/OfflinePlayerArgumentType.java | 8 +++-- .../type/PlayerArgumentType.java | 8 +++-- kencommandapi-core/build.gradle.kts | 2 +- .../java/de/kentoj/kencommandapi/Main.java | 23 +++++++++---- .../kencommandapi/api/KenCommandApi.java | 8 ++--- .../api/processing/CommandContext.java | 8 ++--- .../api/processing/CommandExecutor.java | 2 +- .../api/processing/ParsedArgument.java | 4 +-- .../api/structure/argument/ArgumentType.java | 6 ++-- .../structure/argument/CommandArgument.java | 8 ++--- .../argument/SuggestionProvider.java | 2 +- .../suggestion/NoSuggestionProvider.java | 15 ++------- .../argument/types/IntegerArgumentType.java | 14 +++----- .../api/structure/node/ArgumentNode.java | 6 ++-- .../api/structure/node/CommandNode.java | 6 ++-- .../api/structure/node/LiteralNode.java | 8 ++--- .../impl/AbstractKenCommandApi.java | 19 ++++++----- .../impl/processing/CommandContextImpl.java | 8 ++--- .../impl/processing/ParsedArgumentImpl.java | 10 +++--- .../argument/CommandArgumentImpl.java | 6 ++-- .../impl/structure/node/CommandNodeImpl.java | 33 +++++++++---------- 26 files changed, 123 insertions(+), 116 deletions(-) diff --git a/README.md b/README.md index 73b2c33..7036b3e 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -As of v1.3.0, a command for getting/setting coins of a player could look like this: +As of v2.0.1, a command for getting/setting coins of a player could look like this: ```java public class CoinsCommand { diff --git a/kencommandapi-bukkit/build.gradle.kts b/kencommandapi-bukkit/build.gradle.kts index 30b531f..873bd73 100644 --- a/kencommandapi-bukkit/build.gradle.kts +++ b/kencommandapi-bukkit/build.gradle.kts @@ -9,7 +9,7 @@ plugins { } group = "de.kentoj" -version = "1.3.0" +version = "2.0.1" fun scrowRepo(handler: RepositoryHandler) = handler.maven { name = "scrow" @@ -38,7 +38,7 @@ dependencies { // https://mvnrepository.com/artifact/org.jetbrains/annotations implementation("org.jetbrains:annotations:26.0.2-1") - api("de.kentoj:kencommandapi-core:1.3.0") + api("de.kentoj:kencommandapi-core:2.0.1") api("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT") implementation("org.spigotmc:spigot-api:1.21.11-R0.1-SNAPSHOT") diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java index 7645d27..dad9ea9 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java @@ -1,6 +1,5 @@ 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; @@ -8,8 +7,12 @@ import org.bukkit.entity.Player; import java.util.Map; -public class BukkitCommandContext extends CommandContextImpl { - BukkitCommandContext(CommandSender sender, Map, ?>> parsedArguments) { +public class BukkitCommandContext extends CommandContextImpl { + + public BukkitCommandContext( + CommandSender sender, + Map> parsedArguments + ) { super(sender, parsedArguments); } diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommand.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommand.java index 0ae0609..af4c8c1 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommand.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommand.java @@ -1,7 +1,6 @@ package de.kentoj.kencommandapi; import de.kentoj.kencommandapi.api.KenCommandApi; -import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.structure.node.CommandNode; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -9,10 +8,13 @@ import org.jetbrains.annotations.NotNull; public class BukkitKenCommand extends Command { - private final CommandNode> rootNode; - private final KenCommandApi> commandManager; + private final CommandNode rootNode; + private final KenCommandApi commandManager; - protected BukkitKenCommand(KenCommandApi> commandManager, CommandNode> rootNode) { + protected BukkitKenCommand( + KenCommandApi commandManager, + CommandNode rootNode + ) { super(rootNode.getNames()[0]); this.rootNode = rootNode; this.commandManager = commandManager; 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 7679469..cf12ffa 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommandApi.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommandApi.java @@ -1,6 +1,5 @@ package de.kentoj.kencommandapi; -import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.processing.ParsedArgument; import de.kentoj.kencommandapi.api.structure.node.CommandNode; import de.kentoj.kencommandapi.impl.AbstractKenCommandApi; @@ -11,14 +10,17 @@ import org.bukkit.command.SimpleCommandMap; import java.lang.reflect.Field; import java.util.Map; -public class BukkitKenCommandApi extends AbstractKenCommandApi> { +public class BukkitKenCommandApi extends AbstractKenCommandApi { @Override - public CommandContext createContext(CommandSender sender, Map, ?>> parsedArguments) { + public BukkitCommandContext createContext( + CommandSender sender, + Map> parsedArguments + ) { return new BukkitCommandContext(sender, parsedArguments); } - public void register(CommandNode> rootNode) { + public void register(CommandNode rootNode) { try { Field field = Bukkit.getPluginManager().getClass().getDeclaredField("commandMap"); field.setAccessible(true); diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/type/OfflinePlayerArgumentType.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/type/OfflinePlayerArgumentType.java index 27832fa..a3176e0 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/type/OfflinePlayerArgumentType.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/type/OfflinePlayerArgumentType.java @@ -1,5 +1,6 @@ package de.kentoj.kencommandapi.type; +import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.structure.argument.ArgumentType; import de.kentoj.kencommandapi.api.structure.argument.SuggestionProvider; @@ -8,12 +9,13 @@ import lombok.Getter; import lombok.NoArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; import java.util.Set; import java.util.UUID; @NoArgsConstructor(access = AccessLevel.PRIVATE) -public class OfflinePlayerArgumentType implements ArgumentType { +public class OfflinePlayerArgumentType implements ArgumentType { @Getter(lazy = true) private static final OfflinePlayerArgumentType instance = new OfflinePlayerArgumentType(); @@ -33,7 +35,7 @@ public class OfflinePlayerArgumentType implements ArgumentType { } @Override - public SuggestionProvider defaultSuggestionProvider() { - return (SuggestionProvider>) context -> Set.of(); + public SuggestionProvider defaultSuggestionProvider() { + return context -> Set.of(); } } diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/type/PlayerArgumentType.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/type/PlayerArgumentType.java index 5308534..db2ec57 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/type/PlayerArgumentType.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/type/PlayerArgumentType.java @@ -1,5 +1,6 @@ package de.kentoj.kencommandapi.type; +import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.structure.argument.ArgumentType; import de.kentoj.kencommandapi.api.structure.argument.SuggestionProvider; @@ -7,12 +8,13 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Set; @NoArgsConstructor(access = AccessLevel.PRIVATE) -public class PlayerArgumentType implements ArgumentType { +public class PlayerArgumentType implements ArgumentType { @Getter(lazy = true) private static final PlayerArgumentType instance = new PlayerArgumentType(); @@ -25,7 +27,7 @@ public class PlayerArgumentType implements ArgumentType { } @Override - public SuggestionProvider defaultSuggestionProvider() { - return (SuggestionProvider>) context -> Set.of(); + public SuggestionProvider defaultSuggestionProvider() { + return context -> Set.of(); } } diff --git a/kencommandapi-core/build.gradle.kts b/kencommandapi-core/build.gradle.kts index ebc9545..0a74433 100644 --- a/kencommandapi-core/build.gradle.kts +++ b/kencommandapi-core/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } group = "de.kentoj" -version = "1.3.0" +version = "2.0.1" repositories { mavenCentral() 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 dbd729d..2e79a5e 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/Main.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/Main.java @@ -1,6 +1,5 @@ package de.kentoj.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.AbstractKenCommandApi; @@ -11,11 +10,23 @@ import java.util.Map; public class Main { + private static class BasicCommandContext extends CommandContextImpl { + public BasicCommandContext(PrintStream sender, Map> parsedArguments) { + super(sender, parsedArguments); + } + + public void respond(String msg) { + getSender().println("|==================|"); + getSender().println(msg); + getSender().println("|==================|"); + } + } + public static void main(String[] args) { - var api = new AbstractKenCommandApi>() { + var api = new AbstractKenCommandApi() { @Override - public CommandContextImpl createContext(PrintStream sender, Map, ?>> parsedArguments) { - return new CommandContextImpl<>(sender, parsedArguments); + public BasicCommandContext createContext(PrintStream sender, Map> parsedArguments) { + return new BasicCommandContext(sender, parsedArguments); } }; @@ -25,10 +36,10 @@ public class Main { addNode.setExecutor(ctx -> { int amount = ctx.getArg("amount"); - ctx.getSender().println("adding " + amount + "$ to your balance"); + ctx.respond("adding " + amount + "$ to your balance"); }); - addNode.addArgument(api.createArgument("amount", IntegerArgumentType.getInstance())); + addNode.addArgument(api.createArgument("amount", new IntegerArgumentType<>())); root.addLiteral(addNode); api.invoke(root, System.out, new String[]{"add", "100"}); } 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 6c93875..d7d8822 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 @@ -5,11 +5,11 @@ 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 7ed9095..f335dee 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 @@ -2,7 +2,7 @@ package de.kentoj.kencommandapi.api.processing; import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; -public interface CommandContext { +public interface CommandContext> { T getSender(); @@ -10,18 +10,18 @@ public interface CommandContext { * @return Object that is parsed from the raw argument * @throws RuntimeException if no value given and no default value supplied */ - ParsedArgument, V> getParsedArgument(String name); + ParsedArgument getParsedArgument(String name); @SuppressWarnings("unchecked") default V getArg(String name) { return (V) getParsedArgument(name).getValue(); } - default V getArg(CommandArgument, V> arg) { + default V getArg(CommandArgument arg) { return getArg(arg.getId()); } - default ParsedArgument, V> getParsedArgument(CommandArgument, V> arg) { + default ParsedArgument getParsedArgument(CommandArgument arg) { return getParsedArgument(arg.getId()); } } 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 3ff040d..2838127 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(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 4bc4fe3..9dbb054 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, V> { +public interface ParsedArgument, V> { V getValue(); - CommandArgument getArgument(); + CommandArgument getArgument(); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/ArgumentType.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/ArgumentType.java index 53ab833..7159428 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/ArgumentType.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/ArgumentType.java @@ -1,8 +1,10 @@ package de.kentoj.kencommandapi.api.structure.argument; -public interface ArgumentType { +import de.kentoj.kencommandapi.api.processing.CommandContext; + +public interface ArgumentType, V> { V parseInput(String string); - SuggestionProvider defaultSuggestionProvider(); + SuggestionProvider defaultSuggestionProvider(); } 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 888c09f..ce76197 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 @@ -4,20 +4,20 @@ import de.kentoj.kencommandapi.api.processing.CommandContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public interface CommandArgument, V> { +public interface CommandArgument, V> { String getId(); - ArgumentType getType(); + ArgumentType getType(); void setDefaultValue(@Nullable V defaultValue); @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 f338575..a391ba3 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(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 a91316a..8c164df 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 @@ -2,24 +2,13 @@ package de.kentoj.kencommandapi.api.structure.argument.suggestion; import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.structure.argument.SuggestionProvider; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import java.util.Set; -@NoArgsConstructor(access = AccessLevel.NONE) -public class NoSuggestionProvider implements SuggestionProvider> { - - @Getter(value = AccessLevel.PRIVATE, lazy = true) - private static final SuggestionProvider instance = new NoSuggestionProvider(); - - public static SuggestionProvider create() { - return getInstance(); - } +public class NoSuggestionProvider> implements SuggestionProvider { @Override - public Set suggest(CommandContext context) { + public Set suggest(S context) { return Set.of(); } } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/types/IntegerArgumentType.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/types/IntegerArgumentType.java index 806a70e..35ebbe0 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/types/IntegerArgumentType.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/types/IntegerArgumentType.java @@ -1,17 +1,11 @@ package de.kentoj.kencommandapi.api.structure.argument.types; +import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.structure.argument.ArgumentType; import de.kentoj.kencommandapi.api.structure.argument.SuggestionProvider; import de.kentoj.kencommandapi.api.structure.argument.suggestion.NoSuggestionProvider; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class IntegerArgumentType implements ArgumentType { - - @Getter(lazy = true) - private static final IntegerArgumentType instance = new IntegerArgumentType(); +public class IntegerArgumentType> implements ArgumentType { @Override public Integer parseInput(String string) { @@ -19,7 +13,7 @@ public class IntegerArgumentType implements ArgumentType { } @Override - public SuggestionProvider defaultSuggestionProvider() { - return NoSuggestionProvider.create(); + public SuggestionProvider defaultSuggestionProvider() { + return new NoSuggestionProvider<>(); } } 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 4d1713e..224b9fd 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 @@ -5,9 +5,9 @@ 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 3b8bea9..f4f5400 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 @@ -8,13 +8,13 @@ import org.jetbrains.annotations.Nullable; /** * @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 f5a6f02..bdb4fb1 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 @@ -6,11 +6,11 @@ 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/AbstractKenCommandApi.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/AbstractKenCommandApi.java index 5ab352e..648049f 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/AbstractKenCommandApi.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/AbstractKenCommandApi.java @@ -17,30 +17,31 @@ import java.util.Iterator; import java.util.Map; @RequiredArgsConstructor -public abstract class AbstractKenCommandApi> implements KenCommandApi { +public abstract class AbstractKenCommandApi> implements KenCommandApi { - public abstract S createContext(T sender, Map> parsedArguments); + 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); + assert executableLiteral.getExecutor() != null; 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"); @@ -59,11 +60,11 @@ public abstract class AbstractKenCommandApi> impl 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 8265df4..b3fa645 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 @@ -8,17 +8,17 @@ import lombok.RequiredArgsConstructor; import java.util.Map; @RequiredArgsConstructor -public class CommandContextImpl implements CommandContext { +public class CommandContextImpl> implements CommandContext { @Getter private final T sender; @Getter - private final Map, ?>> parsedArguments; + private final Map> parsedArguments; @Override - public ParsedArgument, V> getParsedArgument(String name) { + public ParsedArgument getParsedArgument(String name) { try { //noinspection unchecked - return (ParsedArgument, V>) parsedArguments.get(name); + return (ParsedArgument) 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 96261e3..58ff3cb 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 @@ -3,10 +3,10 @@ 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; +import lombok.Value; -@Data -public class ParsedArgumentImpl, V> implements ParsedArgument { - final V value; - final CommandArgument argument; +@Value +public class ParsedArgumentImpl, V> implements ParsedArgument { + V value; + 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 84976c1..49c4347 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 @@ -10,12 +10,12 @@ import lombok.Setter; import org.jetbrains.annotations.Nullable; @RequiredArgsConstructor -public class CommandArgumentImpl, V> implements CommandArgument { +public class CommandArgumentImpl, V> implements CommandArgument { @Getter private final String id; @Getter - private final ArgumentType type; + private final ArgumentType type; @Getter @Setter @@ -23,5 +23,5 @@ public class CommandArgumentImpl, V> implements Comm @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 9e713e8..7dbe2a0 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 @@ -12,31 +12,30 @@ 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; + @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; public CommandNodeImpl(String[] names) { if (names.length == 0) throw new IllegalArgumentException("at least one name is required"); this.names = 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) { + 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"); } @@ -44,7 +43,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; @@ -54,7 +53,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())) ) {