context, @NotNull CommandInput input) {
+ final String next = input.readString();
final Match match = CommandUtils.getMatch(context);
if (match == null) return BASE_SUGGESTIONS;
@@ -74,7 +72,7 @@ public final class VictoryConditionParser
tmm.getParticipatingTeams().stream()
.map(Team::getNameLegacy)
.map(name -> name.replace(" ", "")))
- .filter(str -> LiquidMetal.match(str, input))
+ .filter(str -> LiquidMetal.match(str, next))
.collect(Collectors.toList());
}
}
diff --git a/core/src/main/java/tc/oc/pgm/command/util/CommandGraph.java b/core/src/main/java/tc/oc/pgm/command/util/CommandGraph.java
index cd9fb2a421..eeb2b51f1d 100644
--- a/core/src/main/java/tc/oc/pgm/command/util/CommandGraph.java
+++ b/core/src/main/java/tc/oc/pgm/command/util/CommandGraph.java
@@ -6,27 +6,6 @@
import static tc.oc.pgm.util.text.TextException.unknown;
import static tc.oc.pgm.util.text.TextException.usage;
-import cloud.commandframework.CommandManager;
-import cloud.commandframework.annotations.AnnotationParser;
-import cloud.commandframework.annotations.injection.ParameterInjector;
-import cloud.commandframework.annotations.injection.ParameterInjectorRegistry;
-import cloud.commandframework.arguments.parser.ArgumentParser;
-import cloud.commandframework.arguments.parser.ParserParameters;
-import cloud.commandframework.arguments.parser.ParserRegistry;
-import cloud.commandframework.arguments.parser.StandardParameters;
-import cloud.commandframework.bukkit.CloudBukkitCapabilities;
-import cloud.commandframework.exceptions.ArgumentParseException;
-import cloud.commandframework.exceptions.CommandExecutionException;
-import cloud.commandframework.exceptions.InvalidCommandSenderException;
-import cloud.commandframework.exceptions.InvalidSyntaxException;
-import cloud.commandframework.exceptions.NoPermissionException;
-import cloud.commandframework.exceptions.parsing.ParserException;
-import cloud.commandframework.execution.CommandExecutionCoordinator;
-import cloud.commandframework.execution.FilteringCommandSuggestionProcessor;
-import cloud.commandframework.extra.confirmation.CommandConfirmationManager;
-import cloud.commandframework.meta.CommandMeta;
-import cloud.commandframework.minecraft.extras.MinecraftHelp;
-import cloud.commandframework.paper.PaperCommandManager;
import io.leangen.geantyref.TypeToken;
import java.lang.reflect.Type;
import java.util.Locale;
@@ -37,15 +16,33 @@
import net.kyori.adventure.util.ComponentMessageThrowable;
import org.bukkit.command.CommandSender;
import org.bukkit.plugin.Plugin;
+import org.incendo.cloud.CommandManager;
+import org.incendo.cloud.annotations.AnnotationParser;
+import org.incendo.cloud.bukkit.CloudBukkitCapabilities;
+import org.incendo.cloud.exception.ArgumentParseException;
+import org.incendo.cloud.exception.CommandExecutionException;
+import org.incendo.cloud.exception.InvalidCommandSenderException;
+import org.incendo.cloud.exception.InvalidSyntaxException;
+import org.incendo.cloud.exception.NoPermissionException;
+import org.incendo.cloud.exception.handling.ExceptionContext;
+import org.incendo.cloud.exception.parsing.ParserException;
+import org.incendo.cloud.execution.ExecutionCoordinator;
+import org.incendo.cloud.injection.ParameterInjector;
+import org.incendo.cloud.injection.ParameterInjectorRegistry;
+import org.incendo.cloud.minecraft.extras.MinecraftHelp;
+import org.incendo.cloud.paper.LegacyPaperCommandManager;
+import org.incendo.cloud.parser.ArgumentParser;
+import org.incendo.cloud.parser.ParserRegistry;
+import org.incendo.cloud.setting.ManagerSetting;
+import org.incendo.cloud.suggestion.FilteringSuggestionProcessor;
import org.jetbrains.annotations.Nullable;
import tc.oc.pgm.util.Audience;
public abstract class CommandGraph {
protected P plugin;
- protected PaperCommandManager manager;
+ protected CommandManager manager;
protected MinecraftHelp minecraftHelp;
- protected CommandConfirmationManager confirmationManager;
protected AnnotationParser annotationParser;
protected ParameterInjectorRegistry injectors;
@@ -56,7 +53,6 @@ public CommandGraph(P plugin) throws Exception {
this.manager = createCommandManager();
this.minecraftHelp = createHelp();
// Allows us to require certain commands to be confirmed before they can be executed
- this.confirmationManager = createConfirmationManager();
this.annotationParser = createAnnotationParser();
// Utility
@@ -69,11 +65,11 @@ public CommandGraph(P plugin) throws Exception {
registerCommands();
}
- protected PaperCommandManager createCommandManager() throws Exception {
- PaperCommandManager manager =
- PaperCommandManager.createNative(plugin, CommandExecutionCoordinator.simpleCoordinator());
+ protected CommandManager createCommandManager() {
+ LegacyPaperCommandManager manager =
+ LegacyPaperCommandManager.createNative(plugin, ExecutionCoordinator.simpleCoordinator());
- manager.setSetting(CommandManager.ManagerSettings.LIBERAL_FLAG_PARSING, true);
+ manager.settings().set(ManagerSetting.LIBERAL_FLAG_PARSING, true);
// Register Brigadier mappings
if (manager.hasCapability(CloudBukkitCapabilities.BRIGADIER)) manager.registerBrigadier();
@@ -82,15 +78,10 @@ protected PaperCommandManager createCommandManager() throws Excep
if (manager.hasCapability(CloudBukkitCapabilities.ASYNCHRONOUS_COMPLETION))
manager.registerAsynchronousCompletions();
- // Add the input queue to the context, this allows greedy suggestions to work on it
- manager.registerCommandPreProcessor(
- context ->
- context.getCommandContext().store(CommandKeys.INPUT_QUEUE, context.getInputQueue()));
-
// Basic suggestion filtering processor which avoids suggesting flags when not applicable
- manager.commandSuggestionProcessor(
- new FilteringCommandSuggestionProcessor<>(
- FilteringCommandSuggestionProcessor.Filter.Simple.contextFree(
+ manager.suggestionProcessor(
+ new FilteringSuggestionProcessor<>(
+ FilteringSuggestionProcessor.Filter.Simple.contextFree(
(s, i) ->
i.isEmpty()
|| !s.startsWith("-")
@@ -100,20 +91,11 @@ protected PaperCommandManager createCommandManager() throws Excep
}
protected AnnotationParser createAnnotationParser() {
- final Function commandMetaFunction =
- p ->
- CommandMeta.simple()
- .with(
- CommandMeta.DESCRIPTION,
- p.get(StandardParameters.DESCRIPTION, "No description"))
- .build();
- return new AnnotationParser<>(manager, CommandSender.class, commandMetaFunction);
+ return new AnnotationParser<>(manager, CommandSender.class);
}
protected abstract MinecraftHelp createHelp();
- protected abstract CommandConfirmationManager createConfirmationManager();
-
protected abstract void setupInjectors();
protected abstract void setupParsers();
@@ -157,23 +139,31 @@ protected void registerParser(Type type, ParserBuilder parser) {
// Exception handling
protected void setupExceptionHandlers() {
- registerExceptionHandler(InvalidSyntaxException.class, e -> usage(e.getCorrectSyntax()));
+ registerExceptionHandler(InvalidSyntaxException.class, e -> usage(e.correctSyntax()));
registerExceptionHandler(InvalidCommandSenderException.class, e -> playerOnly());
registerExceptionHandler(NoPermissionException.class, e -> noPermission());
- manager.registerExceptionHandler(ArgumentParseException.class, this::handleException);
- manager.registerExceptionHandler(CommandExecutionException.class, this::handleException);
+ manager
+ .exceptionController()
+ .registerHandler(ArgumentParseException.class, this::handleException);
+ manager
+ .exceptionController()
+ .registerHandler(CommandExecutionException.class, this::handleException);
}
protected void registerExceptionHandler(
Class ex, Function toComponent) {
- manager.registerExceptionHandler(
- ex, (cs, e) -> Audience.get(cs).sendWarning(toComponent.apply(e)));
+ manager
+ .exceptionController()
+ .registerHandler(
+ ex,
+ (c) ->
+ Audience.get(c.context().sender()).sendWarning(toComponent.apply(c.exception())));
}
- protected void handleException(CommandSender cs, E e) {
- Audience audience = Audience.get(cs);
- Component message = getMessage(e);
+ protected void handleException(ExceptionContext context) {
+ Audience audience = Audience.get(context.context().sender());
+ Component message = getMessage(context.exception());
if (message != null) audience.sendWarning(message);
}
diff --git a/core/src/main/java/tc/oc/pgm/command/util/CommandKeys.java b/core/src/main/java/tc/oc/pgm/command/util/CommandKeys.java
index 0c3e24928f..901c07a113 100644
--- a/core/src/main/java/tc/oc/pgm/command/util/CommandKeys.java
+++ b/core/src/main/java/tc/oc/pgm/command/util/CommandKeys.java
@@ -1,9 +1,7 @@
package tc.oc.pgm.command.util;
-import cloud.commandframework.keys.CloudKey;
-import cloud.commandframework.keys.SimpleCloudKey;
import io.leangen.geantyref.TypeToken;
-import java.util.LinkedList;
+import org.incendo.cloud.key.CloudKey;
import tc.oc.pgm.api.match.Match;
import tc.oc.pgm.api.setting.SettingKey;
import tc.oc.pgm.rotation.pools.MapPoolType;
@@ -11,16 +9,11 @@
public class CommandKeys {
// Keep the current match in a key, avoids excessive lookups, one in each parser/injector.
- public static final CloudKey MATCH =
- SimpleCloudKey.of("_pgm_match_", new TypeToken() {});
-
- // Variable to access the current input queue
- public static final CloudKey> INPUT_QUEUE =
- SimpleCloudKey.of("_pgm_input_queue_", new TypeToken