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