From 15b149d55c555a080d50836f4999fe1ecaa481b7 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 14 Jun 2017 22:17:33 -0400 Subject: [PATCH] Big Break: Change the Command Completion Handler signature to match Context For consistency, make Completion Handlers be implemented the same way Context Handlers are. Previously when we added the Context parameter, we left the original signature in place and simply tacked , c on the end. This made migration easier than changing all completion handlers bodies. But since 0.5.0 is a big migration already, let's just get it over with. See changes to Bukkit default completions and the example plugin for migration example. --- .../aikar/commands/BukkitCommandCompletions.java | 13 +++++++------ .../co/aikar/commands/BukkitCommandManager.java | 2 +- .../aikar/commands/BungeeCommandCompletions.java | 8 +++++--- .../co/aikar/commands/BungeeCommandManager.java | 3 +-- .../co/aikar/commands/CommandCompletions.java | 15 ++++++++------- .../java/co/aikar/commands/CommandManager.java | 2 +- .../main/java/co/aikar/acfexample/ACFExample.java | 2 +- .../co/aikar/commands/PaperCommandManager.java | 2 +- .../aikar/commands/SpongeCommandCompletions.java | 4 +--- .../co/aikar/commands/SpongeCommandManager.java | 2 +- 10 files changed, 27 insertions(+), 26 deletions(-) diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandCompletions.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandCompletions.java index 53a8d8ca..7c550d2d 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandCompletions.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandCompletions.java @@ -39,15 +39,15 @@ import java.util.stream.Collectors; import java.util.stream.Stream; @SuppressWarnings("WeakerAccess") -public class BukkitCommandCompletions extends CommandCompletions { +public class BukkitCommandCompletions extends CommandCompletions { public BukkitCommandCompletions(BukkitCommandManager manager) { super(manager); - registerCompletion("mobs", (sender, config, input, c) -> { + registerCompletion("mobs", c -> { final Stream normal = Stream.of(EntityType.values()) .map(entityType -> ACFUtil.simplifyString(entityType.getName())); return normal.collect(Collectors.toList()); }); - registerCompletion("chatcolors", (sender, config, input, c) -> { + registerCompletion("chatcolors", c -> { Stream colors = Stream.of(ChatColor.values()); if (c.hasConfig("colorsonly")) { colors = colors.filter(color -> color.ordinal() <= 0xF); @@ -62,11 +62,12 @@ public class BukkitCommandCompletions extends CommandCompletions ACFUtil.simplifyString(color.name())).collect(Collectors.toList()); }); - registerCompletion("worlds", (sender, config, input, c) -> ( + registerCompletion("worlds", c -> ( Bukkit.getWorlds().stream().map(World::getName).collect(Collectors.toList()) )); - registerCompletion("players", (sender, config, input, c) -> { + registerCompletion("players", c -> { + CommandSender sender = c.getSender(); Validate.notNull(sender, "Sender cannot be null"); Player senderPlayer = sender instanceof Player ? (Player) sender : null; @@ -74,7 +75,7 @@ public class BukkitCommandCompletions extends CommandCompletions matchedPlayers = new ArrayList(); for (Player player : Bukkit.getOnlinePlayers()) { String name = player.getName(); - if ((senderPlayer == null || senderPlayer.canSee(player)) && StringUtil.startsWithIgnoreCase(name, input)) { + if ((senderPlayer == null || senderPlayer.canSee(player)) && StringUtil.startsWithIgnoreCase(name, c.getInput())) { matchedPlayers.add(name); } } diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java index d1e18931..e14aa298 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java @@ -105,7 +105,7 @@ public class BukkitCommandManager extends CommandManager { } @Override - public synchronized CommandCompletions getCommandCompletions() { + public synchronized CommandCompletions getCommandCompletions() { if (this.completions == null) { this.completions = new BukkitCommandCompletions(this); } diff --git a/bungee/src/main/java/co/aikar/commands/BungeeCommandCompletions.java b/bungee/src/main/java/co/aikar/commands/BungeeCommandCompletions.java index 7a53196c..e5c30d9c 100644 --- a/bungee/src/main/java/co/aikar/commands/BungeeCommandCompletions.java +++ b/bungee/src/main/java/co/aikar/commands/BungeeCommandCompletions.java @@ -35,11 +35,11 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -public class BungeeCommandCompletions extends CommandCompletions { +public class BungeeCommandCompletions extends CommandCompletions { public BungeeCommandCompletions(CommandManager manager) { super(manager); - registerCompletion("chatcolors", (sender, config, input, c) -> { + registerCompletion("chatcolors", c -> { Stream colors = Stream.of(ChatColor.values()); if (c.hasConfig("colorsonly")) { colors = colors.filter(color -> color.ordinal() <= 0xF); @@ -54,8 +54,10 @@ public class BungeeCommandCompletions extends CommandCompletions ACFUtil.simplifyString(color.name())).collect(Collectors.toList()); }); - registerCompletion("players", (sender, config, input, c) -> { + registerCompletion("players", c -> { + CommandSender sender = c.getSender(); ACFBungeeUtil.validate(sender, "Sender cannot be null"); + String input = c.getInput(); ArrayList matchedPlayers = new ArrayList<>(); for (ProxiedPlayer player : ProxyServer.getInstance().getPlayers()) { diff --git a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java index 4c28e683..2ba99b4d 100644 --- a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java +++ b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java @@ -60,7 +60,7 @@ public class BungeeCommandManager extends CommandManager { } @Override - public synchronized CommandCompletions getCommandCompletions() { + public synchronized CommandCompletions getCommandCompletions() { if (this.completions == null) { this.completions = new BungeeCommandCompletions(this); } @@ -69,7 +69,6 @@ public class BungeeCommandManager extends CommandManager { @Override public void registerCommand(BaseCommand command) { - final String plugin = this.plugin.getDescription().getName().toLowerCase(); command.onRegister(this); for (Map.Entry entry : command.registeredCommands.entrySet()) { String key = entry.getKey().toLowerCase(); diff --git a/core/src/main/java/co/aikar/commands/CommandCompletions.java b/core/src/main/java/co/aikar/commands/CommandCompletions.java index 079b66aa..d9fe1798 100644 --- a/core/src/main/java/co/aikar/commands/CommandCompletions.java +++ b/core/src/main/java/co/aikar/commands/CommandCompletions.java @@ -37,13 +37,14 @@ import java.util.stream.IntStream; @SuppressWarnings({"WeakerAccess", "UnusedReturnValue"}) -public class CommandCompletions { +public class CommandCompletions { private final CommandManager manager; private Map completionMap = new HashMap<>(); public CommandCompletions(CommandManager manager) { this.manager = manager; - registerCompletion("range", (sender, config, input, c) -> { + registerCompletion("range", (c) -> { + String config = c.getConfig(); if (config == null) { return ImmutableList.of(); } @@ -59,10 +60,10 @@ public class CommandCompletions { } return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList()); }); - registerCompletion("timeunits", (sender, config, input, c) -> ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years")); + registerCompletion("timeunits", (c) -> ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years")); } - public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler handler) { + public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler handler) { return this.completionMap.put("@" + id.toLowerCase(), handler); } @@ -96,7 +97,7 @@ public class CommandCompletions { try { //noinspection unchecked - Collection completions = handler.getCompletions(sender.getIssuer(), config, input, context); + Collection completions = handler.getCompletions(context); if (completions != null) { allCompletions.addAll(completions); continue; @@ -120,8 +121,8 @@ public class CommandCompletions { return allCompletions; } - public interface CommandCompletionHandler { - Collection getCompletions(I sender, String config, String input, C context) throws InvalidCommandArgument; + public interface CommandCompletionHandler { + Collection getCompletions(C context) throws InvalidCommandArgument; } } diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java index 5929726d..b423d04f 100644 --- a/core/src/main/java/co/aikar/commands/CommandManager.java +++ b/core/src/main/java/co/aikar/commands/CommandManager.java @@ -45,7 +45,7 @@ abstract class CommandManager { * Gets the command completions manager * @return Command Completions */ - public abstract CommandCompletions getCommandCompletions(); + public abstract CommandCompletions getCommandCompletions(); /** * Lets you add custom string replacements that can be applied to annotation values, diff --git a/example/src/main/java/co/aikar/acfexample/ACFExample.java b/example/src/main/java/co/aikar/acfexample/ACFExample.java index 6ed8c990..d9abe5e0 100644 --- a/example/src/main/java/co/aikar/acfexample/ACFExample.java +++ b/example/src/main/java/co/aikar/acfexample/ACFExample.java @@ -42,7 +42,7 @@ public final class ACFExample extends JavaPlugin { commandManager.getCommandReplacements().addReplacements("test", "foobar", "%foo", "barbaz"); commandManager.getCommandReplacements().addReplacement("testcmd", "test4|foobar|barbaz"); commandManager.getCommandContexts().registerContext(SomeObject.class, SomeObject.getContextResolver()); - commandManager.getCommandCompletions().registerCompletion("test", (sender, config, input, c) -> ( + commandManager.getCommandCompletions().registerCompletion("test", c -> ( Lists.newArrayList("foo", "bar", "baz") )); commandManager.registerCommand(new SomeCommand()); diff --git a/paper/src/main/java/co/aikar/commands/PaperCommandManager.java b/paper/src/main/java/co/aikar/commands/PaperCommandManager.java index 28d0e1f8..5dd84b1d 100644 --- a/paper/src/main/java/co/aikar/commands/PaperCommandManager.java +++ b/paper/src/main/java/co/aikar/commands/PaperCommandManager.java @@ -43,7 +43,7 @@ public class PaperCommandManager extends BukkitCommandManager { } @Override - public synchronized CommandCompletions getCommandCompletions() { + public synchronized CommandCompletions getCommandCompletions() { if (this.completions == null) { this.completions = new PaperCommandCompletions(this); } diff --git a/sponge/src/main/java/co/aikar/commands/SpongeCommandCompletions.java b/sponge/src/main/java/co/aikar/commands/SpongeCommandCompletions.java index 2a073c24..ac757bb3 100644 --- a/sponge/src/main/java/co/aikar/commands/SpongeCommandCompletions.java +++ b/sponge/src/main/java/co/aikar/commands/SpongeCommandCompletions.java @@ -23,10 +23,8 @@ package co.aikar.commands; -import org.spongepowered.api.command.CommandSource; - @SuppressWarnings("WeakerAccess") -public class SpongeCommandCompletions extends CommandCompletions { +public class SpongeCommandCompletions extends CommandCompletions { public SpongeCommandCompletions(final SpongeCommandManager manager) { super(manager); diff --git a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java index 7b9eb8be..517562ff 100644 --- a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java +++ b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java @@ -62,7 +62,7 @@ public class SpongeCommandManager extends CommandManager { } @Override - public synchronized CommandCompletions getCommandCompletions() { + public synchronized CommandCompletions getCommandCompletions() { if (this.completions == null) { this.completions = new SpongeCommandCompletions(this); }