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]" )