Remove deprecated Velocity 1.0.0 Command API.

This commit is contained in:
Andrew Steinborn
2020-10-22 00:13:20 -04:00
parent 9dfe44b125
commit a1eebc6502
6 changed files with 10 additions and 282 deletions

View File

@@ -32,29 +32,6 @@ public interface CommandNodeFactory<T extends Command> {
}
};
CommandNodeFactory<Command> FALLBACK = (alias, command) ->
BrigadierUtils.buildRawArgumentsLiteral(alias,
context -> {
CommandSource source = context.getSource();
String[] args = BrigadierUtils.getSplitArguments(context);
if (!command.hasPermission(source, args)) {
return BrigadierCommand.FORWARD;
}
command.execute(source, args);
return 1;
},
(context, builder) -> {
String[] args = BrigadierUtils.getSplitArguments(context);
return command.suggestAsync(context.getSource(), args).thenApply(values -> {
for (String value : values) {
builder.suggest(value);
}
return builder.build();
});
});
/**
* Returns a Brigadier node for the execution of the given command.
*

View File

@@ -19,14 +19,12 @@ import com.velocitypowered.api.event.command.CommandExecuteEvent;
import com.velocitypowered.api.event.command.CommandExecuteEvent.CommandResult;
import com.velocitypowered.proxy.plugin.VelocityEventManager;
import com.velocitypowered.proxy.util.BrigadierUtils;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.CompletableFuture;
import net.kyori.adventure.identity.Identity;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.NamedTextColor;
public class VelocityCommandManager implements CommandManager {
@@ -51,20 +49,6 @@ public class VelocityCommandManager implements CommandManager {
return new VelocityCommandMeta.Builder(command.getNode().getName());
}
@Override
public void register(final Command command, final String... aliases) {
Preconditions.checkArgument(aliases.length > 0, "no aliases provided");
register(aliases[0], command, Arrays.copyOfRange(aliases, 1, aliases.length));
}
@Override
public void register(final String alias, final Command command, final String... otherAliases) {
Preconditions.checkNotNull(alias, "alias");
Preconditions.checkNotNull(command, "command");
Preconditions.checkNotNull(otherAliases, "otherAliases");
register(metaBuilder(alias).aliases(otherAliases).build(), command);
}
@Override
public void register(final BrigadierCommand command) {
Preconditions.checkNotNull(command, "command");
@@ -85,20 +69,10 @@ public class VelocityCommandManager implements CommandManager {
} else if (command instanceof SimpleCommand) {
node = CommandNodeFactory.SIMPLE.create(primaryAlias, (SimpleCommand) command);
} else if (command instanceof RawCommand) {
// This ugly hack will be removed in Velocity 2.0. Most if not all plugins
// have side-effect free #suggest methods. We rely on the newer RawCommand
// throwing UOE.
RawCommand asRaw = (RawCommand) command;
try {
asRaw.suggest(null, new String[0]);
} catch (final UnsupportedOperationException e) {
node = CommandNodeFactory.RAW.create(primaryAlias, asRaw);
} catch (final Exception ignored) {
// The implementation probably relies on a non-null source
}
}
if (node == null) {
node = CommandNodeFactory.FALLBACK.create(primaryAlias, command);
node = CommandNodeFactory.RAW.create(primaryAlias, (RawCommand) command);
} else {
throw new IllegalArgumentException("Unknown command implementation for "
+ command.getClass().getName());
}
if (!(command instanceof BrigadierCommand)) {

View File

@@ -105,28 +105,15 @@ public class CommandManagerTests {
VelocityCommandManager manager = createManager();
RawCommand command = new NoopRawCommand();
assertThrows(IllegalArgumentException.class, () -> manager.register(command),
"no aliases throws");
manager.register(command, "foO", "BAR");
manager.register("foO", command, "BAR");
assertTrue(manager.hasCommand("fOo"));
assertTrue(manager.hasCommand("bar"));
}
@Test
void testDeprecatedRegister() {
VelocityCommandManager manager = createManager();
Command command = new NoopDeprecatedCommand();
manager.register("foo", command);
assertTrue(manager.hasCommand("foO"));
}
@Test
void testAlreadyRegisteredThrows() {
VelocityCommandManager manager = createManager();
manager.register("bar", new NoopDeprecatedCommand());
assertThrows(IllegalArgumentException.class, () ->
manager.register("BAR", new NoopSimpleCommand()));
manager.register("BAR", new NoopSimpleCommand());
assertThrows(IllegalArgumentException.class, () -> {
CommandMeta meta = manager.metaBuilder("baz")
.aliases("BAr")
@@ -263,35 +250,6 @@ public class CommandManagerTests {
assertFalse(manager.executeImmediately(MockCommandSource.INSTANCE, "sendThem foo"));
}
@Test
void testDeprecatedExecute() {
VelocityCommandManager manager = createManager();
AtomicBoolean executed = new AtomicBoolean(false);
Command command = new Command() {
@Override
public void execute(final CommandSource source, final String @NonNull [] args) {
assertEquals(MockCommandSource.INSTANCE, source);
assertArrayEquals(new String[] { "boo", "123" }, args);
executed.set(true);
}
};
manager.register("foo", command);
assertTrue(manager.execute(MockCommandSource.INSTANCE, "foo boo 123"));
assertTrue(executed.get());
Command noPermsCommand = new Command() {
@Override
public boolean hasPermission(final CommandSource source, final String @NonNull [] args) {
return false;
}
};
manager.register("oof", noPermsCommand, "veryOof");
assertFalse(manager.execute(MockCommandSource.INSTANCE, "veryOOF"));
assertFalse(manager.executeImmediately(MockCommandSource.INSTANCE, "ooF boo 54321"));
}
@Test
void testSuggestions() {
VelocityCommandManager manager = createManager();
@@ -352,24 +310,8 @@ public class CommandManagerTests {
};
manager.register("raw", rawCommand);
Command deprecatedCommand = new Command() {
@Override
public List<String> suggest(
final CommandSource source, final String @NonNull [] currentArgs) {
switch (currentArgs.length) {
case 0:
return ImmutableList.of("boo", "scary");
case 1:
return ImmutableList.of("123", "456");
default:
return ImmutableList.of();
}
}
};
manager.register("deprecated", deprecatedCommand);
assertEquals(
ImmutableList.of("brigadier", "deprecated", "raw", "simple"),
ImmutableList.of("brigadier", "raw", "simple"),
manager.offerSuggestions(MockCommandSource.INSTANCE, "").join(),
"literals are in alphabetical order");
assertEquals(
@@ -403,16 +345,6 @@ public class CommandManagerTests {
assertEquals(
ImmutableList.of("11", "13", "17"),
manager.offerSuggestions(MockCommandSource.INSTANCE, "rAW bar ").join());
assertEquals(
ImmutableList.of("boo", "scary"),
manager.offerSuggestions(MockCommandSource.INSTANCE, "deprecated ").join());
assertTrue(manager.offerSuggestions(MockCommandSource.INSTANCE, "deprecated")
.join().isEmpty());
assertEquals(
ImmutableList.of("123", "456"),
manager.offerSuggestions(MockCommandSource.INSTANCE, "deprEcated foo ").join());
assertTrue(manager.offerSuggestions(MockCommandSource.INSTANCE, "deprecated foo 789 ")
.join().isEmpty());
}
@Test
@@ -513,11 +445,4 @@ public class CommandManagerTests {
}
}
static class NoopDeprecatedCommand implements Command {
@Override
public void execute(final CommandSource source, final String @NonNull [] args) {
}
}
}