From 5cec83b99274a4f8ccf65618ebf0512082975eb6 Mon Sep 17 00:00:00 2001 From: kento2 Date: Tue, 2 Jun 2026 23:48:07 +0200 Subject: [PATCH] . --- .idea/gradle.xml | 1 + build.gradle.kts | 3 -- kencommandapi-bukkit/build.gradle.kts | 9 ++-- .../kencommandapi/BukkitCommandContext.java | 2 +- .../kencommandapi/BukkitKenCommand.java | 2 +- .../kencommandapi/BukkitKenCommandApi.java | 2 +- .../PlayerSuggestionProvider.java | 21 +++++++++ .../type/OfflinePlayerArgumentType.java | 10 ++--- .../type/PlayerArgumentType.java | 10 +++-- .../java/de/kentoj/kencommandapi/Main.java | 2 +- .../kencommandapi/api/KenCommandApi.java | 6 +-- .../argument/ArgumentType.java | 6 ++- .../argument/CommandArgument.java | 2 +- .../argument/SuggestionProvider.java | 2 +- .../suggestion/NoSuggestionProvider.java | 4 +- .../node => nodes}/ArgumentNode.java | 4 +- .../node => nodes}/CommandNode.java | 2 +- .../node => nodes}/LiteralNode.java | 2 +- .../api/processing/CommandContext.java | 2 +- .../api/processing/ParsedArgument.java | 2 +- .../types/IntegerArgumentType.java | 8 ++-- .../types/StringArgumentType.java | 9 ++-- .../impl/AbstractKenCommandApi.java | 23 ++++++++-- .../impl/processing/ParsedArgumentImpl.java | 2 +- .../impl/processing/TabCompleter.java | 2 +- .../impl/structure/CommandArgumentImpl.java | 6 +-- .../impl/structure/CommandNodeImpl.java | 14 +++--- kencommandapi-velocity/build.gradle.kts | 23 ++++++++++ .../kentoj/kencommandapi/VelocityCommand.java | 23 ++++++++++ .../kencommandapi/VelocityCommandContext.java | 22 ++++++++++ .../kencommandapi/VelocityKenCommandApi.java | 43 +++++++++++++++++++ .../PlayerSuggestionProvider.java | 26 +++++++++++ .../type/PlayerArgumentType.java | 29 +++++++++++++ settings.gradle.kts | 3 +- 34 files changed, 269 insertions(+), 58 deletions(-) create mode 100644 kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure => }/argument/ArgumentType.java (67%) rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure => }/argument/CommandArgument.java (92%) rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure => }/argument/SuggestionProvider.java (82%) rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure => }/argument/suggestion/NoSuggestionProvider.java (75%) rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure/node => nodes}/ArgumentNode.java (68%) rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure/node => nodes}/CommandNode.java (92%) rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure/node => nodes}/LiteralNode.java (89%) rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure/argument => }/types/IntegerArgumentType.java (58%) rename kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/{structure/argument => }/types/StringArgumentType.java (55%) create mode 100644 kencommandapi-velocity/build.gradle.kts create mode 100644 kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommand.java create mode 100644 kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommandContext.java create mode 100644 kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityKenCommandApi.java create mode 100644 kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java create mode 100644 kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/type/PlayerArgumentType.java diff --git a/.idea/gradle.xml b/.idea/gradle.xml index c3f6e66..a7fcad5 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -11,6 +11,7 @@ diff --git a/build.gradle.kts b/build.gradle.kts index c5c9470..b8b917c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -38,9 +38,6 @@ subprojects { repositories { mavenCentral() - maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") { - name = "spigotmc-repo" - } scrowRepo() } diff --git a/kencommandapi-bukkit/build.gradle.kts b/kencommandapi-bukkit/build.gradle.kts index 2d34506..797ddf6 100644 --- a/kencommandapi-bukkit/build.gradle.kts +++ b/kencommandapi-bukkit/build.gradle.kts @@ -1,6 +1,3 @@ -val scrowToken = providers.gradleProperty("scrowMavenToken") - .orElse(providers.environmentVariable("SCROW_MAVEN_TOKEN")).get() - plugins { id("java") id("java-library") @@ -9,6 +6,12 @@ plugins { group = "de.kentoj" version = "2.3.0" +repositories { + maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") { + name = "spigotmc-repo" + } +} + dependencies { api(project(":kencommandapi-core")) compileOnly("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 dad9ea9..2dd50c0 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitCommandContext.java @@ -9,7 +9,7 @@ import java.util.Map; public class BukkitCommandContext extends CommandContextImpl { - public BukkitCommandContext( + BukkitCommandContext( CommandSender sender, Map> 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 be8d473..833fe89 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,7 @@ package de.kentoj.kencommandapi; import de.kentoj.kencommandapi.api.KenCommandApi; -import de.kentoj.kencommandapi.api.structure.node.CommandNode; +import de.kentoj.kencommandapi.api.nodes.CommandNode; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.jetbrains.annotations.NotNull; 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 0d19ba2..0eb967e 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommandApi.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/BukkitKenCommandApi.java @@ -2,7 +2,7 @@ package de.kentoj.kencommandapi; import de.kentoj.kencommandapi.api.processing.CommandException; import de.kentoj.kencommandapi.api.processing.ParsedArgument; -import de.kentoj.kencommandapi.api.structure.node.CommandNode; +import de.kentoj.kencommandapi.api.nodes.CommandNode; import de.kentoj.kencommandapi.impl.AbstractKenCommandApi; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java new file mode 100644 index 0000000..5940b63 --- /dev/null +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java @@ -0,0 +1,21 @@ +package de.kentoj.kencommandapi.suggestionprovider; + +import de.kentoj.kencommandapi.BukkitCommandContext; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +public class PlayerSuggestionProvider implements SuggestionProvider { + @Override + public CompletableFuture> suggest(BukkitCommandContext context) { + var list = Bukkit.getOnlinePlayers().stream() + .map(Player::getName) + .collect(Collectors.toSet()); + return CompletableFuture.completedFuture(list); + } +} 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 79ba71c..4211b6f 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 @@ -2,9 +2,10 @@ package de.kentoj.kencommandapi.type; import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.api.processing.CommandException; -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 de.kentoj.kencommandapi.api.argument.ArgumentType; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; +import de.kentoj.kencommandapi.api.argument.suggestion.NoSuggestionProvider; +import de.kentoj.kencommandapi.suggestionprovider.PlayerSuggestionProvider; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -12,7 +13,6 @@ 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) @@ -38,6 +38,6 @@ public class OfflinePlayerArgumentType implements ArgumentType defaultSuggestionProvider() { - return new NoSuggestionProvider<>(); + return new PlayerSuggestionProvider(); } } 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 884a9b2..8de4ef3 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 @@ -2,9 +2,10 @@ package de.kentoj.kencommandapi.type; import de.kentoj.kencommandapi.BukkitCommandContext; import de.kentoj.kencommandapi.api.processing.CommandException; -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 de.kentoj.kencommandapi.api.argument.ArgumentType; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; +import de.kentoj.kencommandapi.api.argument.suggestion.NoSuggestionProvider; +import de.kentoj.kencommandapi.suggestionprovider.PlayerSuggestionProvider; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; @@ -13,6 +14,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.Set; +import java.util.concurrent.CompletableFuture; @NoArgsConstructor(access = AccessLevel.PRIVATE) public class PlayerArgumentType implements ArgumentType { @@ -29,6 +31,6 @@ public class PlayerArgumentType implements ArgumentType defaultSuggestionProvider() { - return new NoSuggestionProvider<>(); + return new PlayerSuggestionProvider(); } } 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 eed12d9..ba12bb8 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/Main.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/Main.java @@ -2,7 +2,7 @@ package de.kentoj.kencommandapi; import de.kentoj.kencommandapi.api.processing.CommandException; import de.kentoj.kencommandapi.api.processing.ParsedArgument; -import de.kentoj.kencommandapi.api.structure.argument.types.IntegerArgumentType; +import de.kentoj.kencommandapi.api.types.IntegerArgumentType; import de.kentoj.kencommandapi.impl.AbstractKenCommandApi; import de.kentoj.kencommandapi.impl.processing.CommandContextImpl; 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 d7d8822..3424a45 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,9 +1,9 @@ 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; +import de.kentoj.kencommandapi.api.argument.ArgumentType; +import de.kentoj.kencommandapi.api.argument.CommandArgument; +import de.kentoj.kencommandapi.api.nodes.CommandNode; public interface KenCommandApi> { 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/argument/ArgumentType.java similarity index 67% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/ArgumentType.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/argument/ArgumentType.java index 7159428..58b7c7b 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/argument/ArgumentType.java @@ -1,4 +1,4 @@ -package de.kentoj.kencommandapi.api.structure.argument; +package de.kentoj.kencommandapi.api.argument; import de.kentoj.kencommandapi.api.processing.CommandContext; @@ -7,4 +7,8 @@ public interface ArgumentType, V> { V parseInput(String string); SuggestionProvider defaultSuggestionProvider(); + + default boolean isGreedy() { + return false; + } } 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/argument/CommandArgument.java similarity index 92% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/CommandArgument.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/argument/CommandArgument.java index ce76197..9087da5 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/argument/CommandArgument.java @@ -1,4 +1,4 @@ -package de.kentoj.kencommandapi.api.structure.argument; +package de.kentoj.kencommandapi.api.argument; import de.kentoj.kencommandapi.api.processing.CommandContext; import org.jetbrains.annotations.NotNull; 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/argument/SuggestionProvider.java similarity index 82% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/SuggestionProvider.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/argument/SuggestionProvider.java index 8ad3abc..7955f9a 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/argument/SuggestionProvider.java @@ -1,4 +1,4 @@ -package de.kentoj.kencommandapi.api.structure.argument; +package de.kentoj.kencommandapi.api.argument; import de.kentoj.kencommandapi.api.processing.CommandContext; 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/argument/suggestion/NoSuggestionProvider.java similarity index 75% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/suggestion/NoSuggestionProvider.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/argument/suggestion/NoSuggestionProvider.java index 4583ccb..082b801 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/argument/suggestion/NoSuggestionProvider.java @@ -1,7 +1,7 @@ -package de.kentoj.kencommandapi.api.structure.argument.suggestion; +package de.kentoj.kencommandapi.api.argument.suggestion; import de.kentoj.kencommandapi.api.processing.CommandContext; -import de.kentoj.kencommandapi.api.structure.argument.SuggestionProvider; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; import java.util.Collections; import java.util.Set; 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/nodes/ArgumentNode.java similarity index 68% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/ArgumentNode.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/nodes/ArgumentNode.java index 224b9fd..9e8f862 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/nodes/ArgumentNode.java @@ -1,7 +1,7 @@ -package de.kentoj.kencommandapi.api.structure.node; +package de.kentoj.kencommandapi.api.nodes; import de.kentoj.kencommandapi.api.processing.CommandContext; -import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; +import de.kentoj.kencommandapi.api.argument.CommandArgument; import java.util.Set; 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/nodes/CommandNode.java similarity index 92% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/CommandNode.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/nodes/CommandNode.java index f4f5400..db00864 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/nodes/CommandNode.java @@ -1,4 +1,4 @@ -package de.kentoj.kencommandapi.api.structure.node; +package de.kentoj.kencommandapi.api.nodes; import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.processing.CommandExecutor; 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/nodes/LiteralNode.java similarity index 89% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/node/LiteralNode.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/nodes/LiteralNode.java index 55150a2..b5c4270 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/nodes/LiteralNode.java @@ -1,4 +1,4 @@ -package de.kentoj.kencommandapi.api.structure.node; +package de.kentoj.kencommandapi.api.nodes; import de.kentoj.kencommandapi.api.processing.CommandContext; import org.jetbrains.annotations.NotNull; 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 f335dee..6b5839a 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 @@ -1,6 +1,6 @@ package de.kentoj.kencommandapi.api.processing; -import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; +import de.kentoj.kencommandapi.api.argument.CommandArgument; public interface CommandContext> { 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 9dbb054..995d909 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 @@ -1,6 +1,6 @@ package de.kentoj.kencommandapi.api.processing; -import de.kentoj.kencommandapi.api.structure.argument.CommandArgument; +import de.kentoj.kencommandapi.api.argument.CommandArgument; public interface ParsedArgument, V> { 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/types/IntegerArgumentType.java similarity index 58% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/types/IntegerArgumentType.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/types/IntegerArgumentType.java index 35ebbe0..0fe9834 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/types/IntegerArgumentType.java @@ -1,9 +1,9 @@ -package de.kentoj.kencommandapi.api.structure.argument.types; +package de.kentoj.kencommandapi.api.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 de.kentoj.kencommandapi.api.argument.ArgumentType; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; +import de.kentoj.kencommandapi.api.argument.suggestion.NoSuggestionProvider; public class IntegerArgumentType> implements ArgumentType { diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/types/StringArgumentType.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/types/StringArgumentType.java similarity index 55% rename from kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/types/StringArgumentType.java rename to kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/types/StringArgumentType.java index c556b26..7c392c0 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/structure/argument/types/StringArgumentType.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/types/StringArgumentType.java @@ -1,10 +1,9 @@ -package de.kentoj.kencommandapi.api.structure.argument.types; +package de.kentoj.kencommandapi.api.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.Getter; +import de.kentoj.kencommandapi.api.argument.ArgumentType; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; +import de.kentoj.kencommandapi.api.argument.suggestion.NoSuggestionProvider; public class StringArgumentType> implements ArgumentType { 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 eab5bba..51793f1 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 @@ -4,9 +4,9 @@ import de.kentoj.kencommandapi.api.KenCommandApi; import de.kentoj.kencommandapi.api.processing.CommandContext; import de.kentoj.kencommandapi.api.processing.CommandException; 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.api.argument.ArgumentType; +import de.kentoj.kencommandapi.api.argument.CommandArgument; +import de.kentoj.kencommandapi.api.nodes.CommandNode; import de.kentoj.kencommandapi.impl.processing.ParsedArgumentImpl; import de.kentoj.kencommandapi.impl.structure.CommandArgumentImpl; import de.kentoj.kencommandapi.impl.structure.CommandNodeImpl; @@ -16,6 +16,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.stream.Collectors; @RequiredArgsConstructor public abstract class AbstractKenCommandApi> implements KenCommandApi { @@ -85,9 +86,23 @@ public abstract class AbstractKenCommandApi> i continue; } - var parsedArg = arg.getType().parseInput(iter.next()); + var rawArgument = getRawArgument(arg, iter); + var parsedArg = arg.getType().parseInput(rawArgument); parsedArguments.put(arg.getId(), new ParsedArgumentImpl<>(parsedArg, arg)); } return parsedArguments; } + + private String getRawArgument(CommandArgument arg, Iterator iter) { + var rawArgument = ""; + if (arg.getType().isGreedy()) { + while (iter.hasNext()) { + //noinspection StringConcatenationInLoop + rawArgument += iter.next(); + } + } else { + rawArgument = iter.next(); + } + return rawArgument; + } } 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 58ff3cb..0d9d466 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 @@ -2,7 +2,7 @@ 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 de.kentoj.kencommandapi.api.argument.CommandArgument; import lombok.Value; @Value diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/TabCompleter.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/TabCompleter.java index 88f0fde..1061481 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/TabCompleter.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/processing/TabCompleter.java @@ -1,7 +1,7 @@ package de.kentoj.kencommandapi.impl.processing; import de.kentoj.kencommandapi.api.processing.CommandContext; -import de.kentoj.kencommandapi.api.structure.node.CommandNode; +import de.kentoj.kencommandapi.api.nodes.CommandNode; import java.util.Arrays; import java.util.List; diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/CommandArgumentImpl.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/CommandArgumentImpl.java index 77b4943..826d966 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/CommandArgumentImpl.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/CommandArgumentImpl.java @@ -1,9 +1,9 @@ package de.kentoj.kencommandapi.impl.structure; 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; +import de.kentoj.kencommandapi.api.argument.ArgumentType; +import de.kentoj.kencommandapi.api.argument.CommandArgument; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/CommandNodeImpl.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/CommandNodeImpl.java index 02d3874..e6af411 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/CommandNodeImpl.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/impl/structure/CommandNodeImpl.java @@ -1,15 +1,16 @@ package de.kentoj.kencommandapi.impl.structure; +import de.kentoj.kencommandapi.api.argument.CommandArgument; +import de.kentoj.kencommandapi.api.nodes.CommandNode; 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; import lombok.Getter; import lombok.Setter; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.HashSet; +import java.util.List; import java.util.Set; public class CommandNodeImpl> implements CommandNode { @@ -19,7 +20,7 @@ public class CommandNodeImpl> implements Comma @Getter private final Set> literals = new HashSet<>(); @Getter - private final Set> arguments = new HashSet<>(); + private final List> arguments = new HashSet<>(); @Getter @Setter @@ -59,9 +60,10 @@ public class CommandNodeImpl> implements Comma 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"); - } + ) throw new IllegalArgumentException("argument with same identifier is already added"); + if (arguments.getLast().getType().isGreedy()) + throw new IllegalStateException("can't append argument to a node, whose last argument type is greedy: " + + arguments.getLast().getType().getClass().getCanonicalName()); arguments.add(argument); } diff --git a/kencommandapi-velocity/build.gradle.kts b/kencommandapi-velocity/build.gradle.kts new file mode 100644 index 0000000..fe8cc66 --- /dev/null +++ b/kencommandapi-velocity/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + id("java") + id("java-library") +} + +group = "de.kentoj.scrow" +version = "" + +repositories { + mavenCentral() + maven { + name = "papermc" + url = uri("https://repo.papermc.io/repository/maven-public/") + } +} + +dependencies { + // https://docs.papermc.io/velocity/dev/creating-your-first-plugin/ + annotationProcessor("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT") + compileOnly("com.velocitypowered:velocity-api:3.5.0-SNAPSHOT") + + api(project(":kencommandapi-core")) +} \ No newline at end of file diff --git a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommand.java b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommand.java new file mode 100644 index 0000000..fc1dc20 --- /dev/null +++ b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommand.java @@ -0,0 +1,23 @@ +package de.kentoj.kencommandapi; + +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.command.SimpleCommand; +import de.kentoj.kencommandapi.api.nodes.CommandNode; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class VelocityCommand implements SimpleCommand { + + private final VelocityKenCommandApi commandApi; + private final CommandNode rootNode; + + @Override + public void execute(Invocation ctx) { + commandApi.invoke(rootNode, ctx.source(), ctx.arguments()); + } + + @Override + public boolean hasPermission(Invocation ctx) { + return commandApi.hasPermission(ctx.source(), rootNode.getPermission()); + } +} diff --git a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommandContext.java b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommandContext.java new file mode 100644 index 0000000..41a9bae --- /dev/null +++ b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommandContext.java @@ -0,0 +1,22 @@ +package de.kentoj.kencommandapi; + +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.proxy.Player; +import de.kentoj.kencommandapi.api.processing.ParsedArgument; +import de.kentoj.kencommandapi.impl.processing.CommandContextImpl; + +import java.util.Map; + +public class VelocityCommandContext extends CommandContextImpl { + + VelocityCommandContext( + CommandSource sender, + Map> parsedArguments + ) { + super(sender, parsedArguments); + } + + public Player getPlayerSender() { + return (Player) getSender(); + } +} diff --git a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityKenCommandApi.java b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityKenCommandApi.java new file mode 100644 index 0000000..3379bb3 --- /dev/null +++ b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityKenCommandApi.java @@ -0,0 +1,43 @@ +package de.kentoj.kencommandapi; + +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.proxy.ProxyServer; +import de.kentoj.kencommandapi.api.processing.CommandException; +import de.kentoj.kencommandapi.api.processing.ParsedArgument; +import de.kentoj.kencommandapi.api.nodes.CommandNode; +import de.kentoj.kencommandapi.impl.AbstractKenCommandApi; +import lombok.RequiredArgsConstructor; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; + +import java.util.Map; + +@RequiredArgsConstructor +public class VelocityKenCommandApi extends AbstractKenCommandApi { + + private final ProxyServer server; + + @Override + public VelocityCommandContext createContext(CommandSource sender, Map> parsedArguments) { + return new VelocityCommandContext(sender, parsedArguments); + } + + @Override + public void sendErrorMessage(CommandSource sender, CommandException ex) { + var cause = (ex.getCause() != null) ? ": " + ex.getCause().getMessage() : ""; + sender.sendMessage(Component.text(ex.getMessage() + cause).color(NamedTextColor.RED)); + } + + @Override + public boolean hasPermission(CommandSource commandSource, String permission) { + return commandSource.hasPermission(permission); + } + + public void register(CommandNode rootNode) { + var cm = server.getCommandManager(); + var meta = cm.metaBuilder(rootNode.getNames()[0]) + .aliases(rootNode.getNames()) + .build(); + cm.register(meta, new VelocityCommand(this, rootNode)); + } +} diff --git a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java new file mode 100644 index 0000000..896c36d --- /dev/null +++ b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java @@ -0,0 +1,26 @@ +package de.kentoj.kencommandapi.suggestionprovider; + +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.proxy.Player; +import com.velocitypowered.api.proxy.ProxyServer; +import de.kentoj.kencommandapi.VelocityCommandContext; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; +import lombok.RequiredArgsConstructor; + +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +@RequiredArgsConstructor +public class PlayerSuggestionProvider implements SuggestionProvider { + + private final ProxyServer proxyServer; + + @Override + public CompletableFuture> suggest(VelocityCommandContext context) { + var list = proxyServer.getAllPlayers().stream() + .map(Player::getUsername) + .collect(Collectors.toSet()); + return CompletableFuture.completedFuture(list); + } +} diff --git a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/type/PlayerArgumentType.java b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/type/PlayerArgumentType.java new file mode 100644 index 0000000..53434db --- /dev/null +++ b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/type/PlayerArgumentType.java @@ -0,0 +1,29 @@ +package de.kentoj.kencommandapi.type; + +import com.velocitypowered.api.command.CommandSource; +import com.velocitypowered.api.proxy.Player; +import com.velocitypowered.api.proxy.ProxyServer; +import de.kentoj.kencommandapi.VelocityCommandContext; +import de.kentoj.kencommandapi.api.argument.ArgumentType; +import de.kentoj.kencommandapi.api.argument.SuggestionProvider; +import de.kentoj.kencommandapi.api.processing.CommandException; +import de.kentoj.kencommandapi.suggestionprovider.PlayerSuggestionProvider; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class PlayerArgumentType implements ArgumentType { + + private final ProxyServer server; + + @Override + public Player parseInput(String string) { + var player = server.getPlayer(string).orElse(null); + if (player == null) throw new CommandException("Player not online -- " + string); + return player; + } + + @Override + public SuggestionProvider defaultSuggestionProvider() { + return new PlayerSuggestionProvider(server); + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index e29613a..6071d23 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,5 @@ rootProject.name = "KenCommandAPI" include("kencommandapi-core") -include("kencommandapi-bukkit") \ No newline at end of file +include("kencommandapi-bukkit") +include("kencommandapi-velocity") \ No newline at end of file