From b234cd9df78a83ca922c6a1000338e3ce0fe385c Mon Sep 17 00:00:00 2001 From: kento2 Date: Sun, 5 Jul 2026 00:36:48 +0200 Subject: [PATCH] . --- .idea/workspace.xml | 37 ++++++------------- build.gradle.kts | 2 +- kencommandapi-bukkit/build.gradle.kts | 2 +- .../de/kentoj/kencommandapi/CommandAPI.java | 2 +- ...ompleter.java => TabCompleteListener.java} | 8 ++-- .../PlayerSuggestionProvider.java | 6 +-- kencommandapi-core/build.gradle.kts | 2 +- .../kencommandapi/api/CommandHandler.java | 12 +++--- .../api/invocation/CommandExecutor.java | 2 +- .../api/invocation/SyncCommandExecutor.java | 14 +++++++ .../kencommandapi/api/parser/ParseResult.java | 2 +- .../api/suggestion/NoSuggestionProvider.java | 4 +- .../api/suggestion/SuggestionProvider.java | 2 +- .../internal/CommandNodeImpl.java | 2 +- .../de/kentoj/kencommandapi/CommandAPI.java | 2 +- .../kentoj/kencommandapi/VelocityCommand.java | 3 +- .../PlayerSuggestionProvider.java | 5 +-- 17 files changed, 51 insertions(+), 56 deletions(-) rename kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/{AsyncTabCompleter.java => TabCompleteListener.java} (77%) create mode 100644 kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/invocation/SyncCommandExecutor.java diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 9b895f6..437d766 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,42 +4,26 @@ - + - + @@ -572,6 +556,7 @@ - \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 72a06af..c48341d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ group = "de.kentoj.scrow" -version = "0.21" +version = "0.28" subprojects { group = rootProject.group diff --git a/kencommandapi-bukkit/build.gradle.kts b/kencommandapi-bukkit/build.gradle.kts index 69c09dd..7897e3c 100644 --- a/kencommandapi-bukkit/build.gradle.kts +++ b/kencommandapi-bukkit/build.gradle.kts @@ -13,7 +13,7 @@ repositories { } dependencies { - api(project(":kencommandapi-core")) + compileOnly(project(":kencommandapi-core")) compileOnly("io.papermc.paper:paper-api:1.21.11-rc3-R0.1-SNAPSHOT") } diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/CommandAPI.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/CommandAPI.java index 2671fa2..97f8033 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/CommandAPI.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/CommandAPI.java @@ -23,7 +23,7 @@ public class CommandAPI { public CommandAPI(Plugin plugin) { this.commandHandler = new CommandHandler<>(new CommandParser<>(Permissible::hasPermission), CommandSender::sendMessage, Permissible::hasPermission); - Bukkit.getPluginManager().registerEvents(new AsyncTabCompleter(this, commandHandler), plugin); + Bukkit.getPluginManager().registerEvents(new TabCompleteListener(this, commandHandler), plugin); try { Field field = Bukkit.getPluginManager().getClass().getDeclaredField("commandMap"); diff --git a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/AsyncTabCompleter.java b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/TabCompleteListener.java similarity index 77% rename from kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/AsyncTabCompleter.java rename to kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/TabCompleteListener.java index 3c48bcc..6935201 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/AsyncTabCompleter.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/TabCompleteListener.java @@ -8,18 +8,20 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @RequiredArgsConstructor -public class AsyncTabCompleter implements Listener { +public class TabCompleteListener implements Listener { private final CommandAPI commandAPI; private final CommandHandler commandHandler; @EventHandler(ignoreCancelled = true) public void onAsyncTabComplete(AsyncTabCompleteEvent ev) { + if (!ev.isCommand()) return; + var args = ev.getBuffer().split(" "); var label = args[0]; var rootNode = commandAPI.getRegistered(label); if (rootNode == null) return; - commandHandler.getSuggestions(rootNode, ev.getSender(), args) - .thenAccept(ev::setCompletions); + ev.setHandled(true); + ev.setCompletions(commandHandler.getSuggestions(rootNode, ev.getSender(), args)); } } 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 index e62c81f..3db53a4 100644 --- a/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java +++ b/kencommandapi-bukkit/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java @@ -6,14 +6,12 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import java.util.List; -import java.util.concurrent.CompletableFuture; public class PlayerSuggestionProvider implements SuggestionProvider { @Override - public CompletableFuture> suggest(CommandSender __) { - var list = Bukkit.getOnlinePlayers().stream() + public List suggest(CommandSender __) { + return Bukkit.getOnlinePlayers().stream() .map(Player::getName) .toList(); - return CompletableFuture.completedFuture(list); } } diff --git a/kencommandapi-core/build.gradle.kts b/kencommandapi-core/build.gradle.kts index 0a2ac13..cd1f43c 100644 --- a/kencommandapi-core/build.gradle.kts +++ b/kencommandapi-core/build.gradle.kts @@ -11,7 +11,7 @@ repositories { } dependencies { - api("net.kyori:adventure-api:5.2.0") + compileOnly("net.kyori:adventure-api:5.2.0") } publishing { diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/CommandHandler.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/CommandHandler.java index 6f810aa..960a587 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/CommandHandler.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/CommandHandler.java @@ -31,16 +31,14 @@ public class CommandHandler { var ctx = new CommandContext<>(sender, ((ParseResult.Success) parseResult).getParsedArguments()); assert parseResult.getLiteral().getExecutor() != null; parseResult.getLiteral().getExecutor().execute(ctx).whenComplete((result, ex) -> { - if (ex != null) { + if (ex != null) sendMessageMethod.send(sender, rootNode.getMessageStyle().exception(ex)); - } result.ifFailure(failure -> - sendMessageMethod.send(sender, rootNode.getMessageStyle().err(failure)) - ); + sendMessageMethod.send(sender, rootNode.getMessageStyle().err(failure))); }); } - public CompletableFuture> getSuggestions(RootCommandNode rootNode, T sender, String[] args) { + public List getSuggestions(RootCommandNode rootNode, T sender, String[] args) { var parseResult = commandParser.parseLiteral(rootNode, sender, args, false); if (parseResult instanceof ParseResult.ArgumentExpected) { @@ -56,7 +54,7 @@ public class CommandHandler { return getSuggestions(sender, parseResult.getLiteral(), filter); } - private CompletableFuture> getSuggestions(T sender, CommandNode literal, @Nullable String filter) { + private List getSuggestions(T sender, CommandNode literal, @Nullable String filter) { var stream = literal.getLiterals().stream() .filter(lit -> lit.getPermission() != null && hasPermissionMethod.hasPermission(sender, lit.getPermission())) .map(CommandNode::getNames) @@ -64,6 +62,6 @@ public class CommandHandler { if (filter != null) stream = stream.filter(f -> f.toLowerCase().contains(filter.toLowerCase())); - return CompletableFuture.completedFuture(stream.toList()); + return stream.toList(); } } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/invocation/CommandExecutor.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/invocation/CommandExecutor.java index ad4e900..eaef027 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/invocation/CommandExecutor.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/invocation/CommandExecutor.java @@ -6,5 +6,5 @@ import java.util.concurrent.CompletableFuture; public interface CommandExecutor { - CompletableFuture> execute(CommandContext ctx); + CompletableFuture> execute(CommandContext ctx); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/invocation/SyncCommandExecutor.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/invocation/SyncCommandExecutor.java new file mode 100644 index 0000000..67d09c3 --- /dev/null +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/invocation/SyncCommandExecutor.java @@ -0,0 +1,14 @@ +package de.kentoj.kencommandapi.api.invocation; + +import com.leakyabstractions.result.api.Result; + +import java.util.concurrent.CompletableFuture; + +public interface SyncCommandExecutor extends CommandExecutor { + + Result executeSync(CommandContext ctx); + + default CompletableFuture> execute(CommandContext ctx) { + return CompletableFuture.completedFuture(this.executeSync(ctx)); + } +} diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/ParseResult.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/ParseResult.java index 4453cf3..2ea7e8e 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/ParseResult.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/parser/ParseResult.java @@ -108,7 +108,7 @@ public abstract sealed class ParseResult permits ParseResult.IllegalArgument, @Override public String getMessage() { - return "Illegal argument '" + argStr + "' for " + argument.getId() + ":" + message; + return "Illegal argument '" + argStr + "' for " + argument.getId() + ": " + message; } } } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/NoSuggestionProvider.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/NoSuggestionProvider.java index d4c4dcf..89a9ea7 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/NoSuggestionProvider.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/NoSuggestionProvider.java @@ -7,7 +7,7 @@ import java.util.concurrent.CompletableFuture; public class NoSuggestionProvider implements SuggestionProvider { @Override - public CompletableFuture> suggest(T __) { - return CompletableFuture.completedFuture(Collections.emptyList()); + public List suggest(T __) { + return Collections.emptyList(); } } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/SuggestionProvider.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/SuggestionProvider.java index 64ae4ef..5cb14f7 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/SuggestionProvider.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/api/suggestion/SuggestionProvider.java @@ -8,5 +8,5 @@ public interface SuggestionProvider { /** * @return an unfiltered(no permission checks or filtering by input) list of strings that may be used for the argument */ - CompletableFuture> suggest(T sender); + List suggest(T sender); } diff --git a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/internal/CommandNodeImpl.java b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/internal/CommandNodeImpl.java index e8f911c..d34d912 100644 --- a/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/internal/CommandNodeImpl.java +++ b/kencommandapi-core/src/main/java/de/kentoj/kencommandapi/internal/CommandNodeImpl.java @@ -44,7 +44,7 @@ public class CommandNodeImpl implements CommandNode { if (isGreedy()) throw new IllegalStateException("can't add literal to a node with a greedy argument"); for (String name : commandNode.getNames()) if (getLiteral(name) != null) - throw new IllegalArgumentException("literal with same name is already exists"); + throw new IllegalArgumentException("literal with same name already exists"); literals.add(commandNode); } diff --git a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/CommandAPI.java b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/CommandAPI.java index 07b5519..1c8a21a 100644 --- a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/CommandAPI.java +++ b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/CommandAPI.java @@ -22,7 +22,7 @@ public class CommandAPI { public void register(RootCommandNode rootNode) { var cm = server.getCommandManager(); var meta = cm.metaBuilder(rootNode.getNames()[0]) - .aliases(Arrays.copyOfRange(rootNode.getNames(), 1, rootNode.getNames().length - 1)) + .aliases(Arrays.copyOfRange(rootNode.getNames(), 1, rootNode.getNames().length)) .build(); cm.register(meta, new VelocityCommand(commandHandler, rootNode)); } diff --git a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommand.java b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommand.java index e5a4f3c..0d9e2eb 100644 --- a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommand.java +++ b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/VelocityCommand.java @@ -7,7 +7,6 @@ import de.kentoj.kencommandapi.api.node.RootCommandNode; import lombok.RequiredArgsConstructor; import java.util.List; -import java.util.concurrent.CompletableFuture; @RequiredArgsConstructor public class VelocityCommand implements SimpleCommand { @@ -27,7 +26,7 @@ public class VelocityCommand implements SimpleCommand { } @Override - public CompletableFuture> suggestAsync(Invocation invocation) { + public List suggest(Invocation invocation) { return commandHandler.getSuggestions(rootNode, invocation.source(), invocation.arguments()); } } \ No newline at end of file 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 index f925463..d25f628 100644 --- a/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java +++ b/kencommandapi-velocity/src/main/java/de/kentoj/kencommandapi/suggestionprovider/PlayerSuggestionProvider.java @@ -15,10 +15,9 @@ public class PlayerSuggestionProvider implements SuggestionProvider> suggest(CommandSource __) { - var list = proxyServer.getAllPlayers().stream() + public List suggest(CommandSource __) { + return proxyServer.getAllPlayers().stream() .map(Player::getUsername) .toList(); - return CompletableFuture.completedFuture(list); } }