From 11b4b845b4e09bcb1efba786212c7ff27adf8d79 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Sun, 7 Aug 2022 16:06:46 -0700 Subject: [PATCH] Fix PluginBrigadierCommand suggestions delegation --- .../testplugin/PluginBrigadierCommand.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/io/papermc/paperweight/testplugin/PluginBrigadierCommand.java b/src/main/java/io/papermc/paperweight/testplugin/PluginBrigadierCommand.java index 6bd381a..48e6123 100644 --- a/src/main/java/io/papermc/paperweight/testplugin/PluginBrigadierCommand.java +++ b/src/main/java/io/papermc/paperweight/testplugin/PluginBrigadierCommand.java @@ -1,9 +1,15 @@ package io.papermc.paperweight.testplugin; +import com.mojang.brigadier.CommandDispatcher; +import com.mojang.brigadier.ParseResults; +import com.mojang.brigadier.StringReader; import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import java.util.List; import java.util.function.Consumer; +import com.mojang.brigadier.suggestion.Suggestion; import net.minecraft.commands.CommandSourceStack; import org.bukkit.Bukkit; +import org.bukkit.Location; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.PluginIdentifiableCommand; @@ -11,6 +17,7 @@ import org.bukkit.craftbukkit.v1_19_R1.CraftServer; import org.bukkit.craftbukkit.v1_19_R1.command.VanillaCommandWrapper; import org.bukkit.plugin.Plugin; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.framework.qual.DefaultQualifier; @DefaultQualifier(NonNull.class) @@ -40,6 +47,17 @@ final class PluginBrigadierCommand extends Command implements PluginIdentifiable return true; } + @Override + public List tabComplete(final CommandSender sender, final String alias, final String[] args, final @Nullable Location location) { + final String joined = String.join(" ", args); + final String argsString = joined.isBlank() ? "" : joined; + final CommandDispatcher dispatcher = ((CraftServer) Bukkit.getServer()).getServer().getCommands().getDispatcher(); + final ParseResults results = dispatcher.parse(new StringReader(alias + " " + argsString), VanillaCommandWrapper.getListener(sender)); + return dispatcher.getCompletionSuggestions(results) + .thenApply(result -> result.getList().stream().map(Suggestion::getText).toList()) + .join(); + } + @Override public Plugin getPlugin() { return this.plugin;