From d3d4572ca49c36b6228821ffa600ee9cff0ca930 Mon Sep 17 00:00:00 2001 From: graywolf336 Date: Fri, 29 May 2015 16:56:02 -0500 Subject: [PATCH] First stab at tab complete of jail commands, #77 Right now, the first option of the jail command completes and checks for proper permission and all that good stuff. Good way to get started with commands but that's all that has been completed right now. Plan is that the command interface will get a tabComplete method which all the classes that implement it will handle. Then if a tabComplete happens on that command we'll let the command handle it, so the command handlers don't get cluttered. --- .../java/com/graywolf336/jail/JailMain.java | 19 ++++++++++ src/main/java/com/graywolf336/jail/Util.java | 22 ++++++++++++ .../graywolf336/jail/command/JailHandler.java | 36 +++++++++++++++++++ .../subcommands/JailCreateCellCommand.java | 2 +- .../subcommands/JailTeleInCommand.java | 2 +- .../subcommands/JailTeleOutCommand.java | 2 +- .../subcommands/JailTransferAllCommand.java | 2 +- 7 files changed, 81 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/graywolf336/jail/JailMain.java b/src/main/java/com/graywolf336/jail/JailMain.java index 7c9166b..92f6e42 100644 --- a/src/main/java/com/graywolf336/jail/JailMain.java +++ b/src/main/java/com/graywolf336/jail/JailMain.java @@ -1,5 +1,7 @@ package com.graywolf336.jail; +import java.util.Collections; +import java.util.List; import java.util.concurrent.TimeUnit; import org.bukkit.command.Command; @@ -196,6 +198,23 @@ public class JailMain extends JavaPlugin { return true;//Always return true here, that way we can handle the help and command usage ourself. } + public List onTabComplete(CommandSender sender, Command command, String commandLabel, String[] args) { + if(jh == null || cmdHand == null) { + sender.sendMessage(Lang.PLUGINNOTLOADED.get()); + getServer().getConsoleSender().sendMessage(Lang.PLUGINNOTLOADED.get()); + }else { + debug("Tab Complete Args (" + args.length + ") for '" + commandLabel + "': " + Util.getStringFromArray(", ", args)); + if(commandLabel.equalsIgnoreCase("jail") || commandLabel.equalsIgnoreCase("j")) { + return jh.parseTabComplete(jm, sender, args); + }else { + //cmdHand.handleCommand(jm, sender, command.getName().toLowerCase(), args); + //unjail,etc + } + } + + return Collections.emptyList(); + } + public void reloadEverything() throws Exception { //Reload the configuration file reloadConfig(); diff --git a/src/main/java/com/graywolf336/jail/Util.java b/src/main/java/com/graywolf336/jail/Util.java index 4063f15..c3e01eb 100644 --- a/src/main/java/com/graywolf336/jail/Util.java +++ b/src/main/java/com/graywolf336/jail/Util.java @@ -91,6 +91,28 @@ public class Util { return false; } + + public static String getStringFromArray(String separator, String... list) { + StringBuilder result = new StringBuilder(); + + for(String s : list) { + if(result.length() != 0) result.append(separator); + result.append(s); + } + + return result.toString(); + } + + public static String getStringFromList(String separator, List list) { + StringBuilder result = new StringBuilder(); + + for(String s : list) { + if(result.length() != 0) result.append(separator); + result.append(s); + } + + return result.toString(); + } /** Returns a colorful message from the color codes. */ public static String getColorfulMessage(String message) { diff --git a/src/main/java/com/graywolf336/jail/command/JailHandler.java b/src/main/java/com/graywolf336/jail/command/JailHandler.java index 4ded425..412a839 100644 --- a/src/main/java/com/graywolf336/jail/command/JailHandler.java +++ b/src/main/java/com/graywolf336/jail/command/JailHandler.java @@ -1,6 +1,7 @@ package com.graywolf336.jail.command; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map.Entry; @@ -47,6 +48,41 @@ public class JailHandler { plugin.debug("Loaded " + commands.size() + " sub-commands of /jail."); } + + public List parseTabComplete(JailManager jm, CommandSender sender, String[] args) { + if(args[0].equalsIgnoreCase("")) { + List results = new ArrayList(); + boolean hasJailPermission = false; + + for(Command c : commands.values()) { + CommandInfo i = c.getClass().getAnnotation(CommandInfo.class); + //Skip the jail subcommand instance, since it is unique + if(i.pattern().equalsIgnoreCase("jail|j")) { + hasJailPermission = sender.hasPermission(i.permission()); + continue; + } + + //Skip if the command requires a player and the sender isn't a player + if(i.needsPlayer() && !(sender instanceof Player)) continue; + + if(sender.hasPermission(i.permission())) { + results.add(i.pattern().split("\\|")[0]); + } + } + + //Sort the results before adding the player names + Collections.sort(results); + + //Don't send out all the players if they don't have jail permission + if(hasJailPermission) + for(Player p : jm.getPlugin().getServer().getOnlinePlayers()) + results.add(p.getName()); + + return results; + } + + return Collections.emptyList(); + } /** * Handles the given command and checks that the command is in valid form. diff --git a/src/main/java/com/graywolf336/jail/command/subcommands/JailCreateCellCommand.java b/src/main/java/com/graywolf336/jail/command/subcommands/JailCreateCellCommand.java index 2318e83..183017c 100644 --- a/src/main/java/com/graywolf336/jail/command/subcommands/JailCreateCellCommand.java +++ b/src/main/java/com/graywolf336/jail/command/subcommands/JailCreateCellCommand.java @@ -13,7 +13,7 @@ import com.graywolf336.jail.command.CommandInfo; maxArgs = 2, minimumArgs = 1, needsPlayer = true, - pattern = "createcell|createcells|cellcreate|cellscreate|cc", + pattern = "createcells|createcell|cellcreate|cellscreate|cc", permission = "jail.command.jailcreatecells", usage = "/jail createcell [jail] (cellname)" ) diff --git a/src/main/java/com/graywolf336/jail/command/subcommands/JailTeleInCommand.java b/src/main/java/com/graywolf336/jail/command/subcommands/JailTeleInCommand.java index d50adc5..ecc6a09 100644 --- a/src/main/java/com/graywolf336/jail/command/subcommands/JailTeleInCommand.java +++ b/src/main/java/com/graywolf336/jail/command/subcommands/JailTeleInCommand.java @@ -13,7 +13,7 @@ import com.graywolf336.jail.enums.Lang; maxArgs = 2, minimumArgs = 1, needsPlayer = false, - pattern = "telein|teleportin", + pattern = "teleportin|telein", permission = "jail.command.jailtelein", usage = "/jail telein [jail] (name)" ) diff --git a/src/main/java/com/graywolf336/jail/command/subcommands/JailTeleOutCommand.java b/src/main/java/com/graywolf336/jail/command/subcommands/JailTeleOutCommand.java index 846680d..2a30e89 100644 --- a/src/main/java/com/graywolf336/jail/command/subcommands/JailTeleOutCommand.java +++ b/src/main/java/com/graywolf336/jail/command/subcommands/JailTeleOutCommand.java @@ -13,7 +13,7 @@ import com.graywolf336.jail.enums.Lang; maxArgs = 2, minimumArgs = 1, needsPlayer = false, - pattern = "teleout|teleportout", + pattern = "teleportout|teleout", permission = "jail.command.jailteleout", usage = "/jail teleout [jail] (name)" ) diff --git a/src/main/java/com/graywolf336/jail/command/subcommands/JailTransferAllCommand.java b/src/main/java/com/graywolf336/jail/command/subcommands/JailTransferAllCommand.java index f3ef705..d0c156e 100644 --- a/src/main/java/com/graywolf336/jail/command/subcommands/JailTransferAllCommand.java +++ b/src/main/java/com/graywolf336/jail/command/subcommands/JailTransferAllCommand.java @@ -15,7 +15,7 @@ import com.graywolf336.jail.enums.Lang; maxArgs = 2, minimumArgs = 2, needsPlayer = false, - pattern = "transferall|transall", + pattern = "transferall|transall|ta", permission = "jail.command.jailtransferall", usage = "/jail transferall [current] [target]" )