diff --git a/src/main/java/buttondevteam/core/CommandCaller.java b/src/main/java/buttondevteam/core/CommandCaller.java index 8d7b86b..29ce030 100644 --- a/src/main/java/buttondevteam/core/CommandCaller.java +++ b/src/main/java/buttondevteam/core/CommandCaller.java @@ -56,20 +56,18 @@ public class CommandCaller implements CommandExecutor { path += " " + arg; TBMCCommandBase cmd = TBMCChatAPI.GetCommands().get(path); int argc = 0; - while (cmd == null && path.contains(" ")) { + String[] subcmds = null; + while (cmd == null && (subcmds = TBMCChatAPI.GetSubCommands(path, sender)).length == 0 && path.contains(" ")) { path = path.substring(0, path.lastIndexOf(' ')); argc++; cmd = TBMCChatAPI.GetCommands().get(path); } if (cmd == null) { - String[] subcmds = TBMCChatAPI.GetSubCommands(path, sender); - if (subcmds.length > 0) + if (subcmds == null || subcmds.length > 0) sender.sendMessage(subcmds); else { - final String errormsg = "§cYou don't have access to any of this command's subcommands."; + final String errormsg = "§cYou don't have access to any of this command's subcommands or it doesn't have any."; sender.sendMessage(errormsg); - if (!(sender instanceof ConsoleCommandSender)) - Bukkit.getConsoleSender().sendMessage(errormsg); } return true; } diff --git a/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java b/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java index 8039c55..3ed861d 100644 --- a/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java +++ b/src/main/java/buttondevteam/lib/chat/TBMCChatAPI.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Set; +import java.util.function.Consumer; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -42,7 +43,8 @@ public class TBMCChatAPI { } /** - * Returns messages formatted for Minecraft chat listing the subcommands of the command. + * Returns messages formatted for Minecraft chat listing the subcommands of the command.
+ * Returns a header if subcommands were found, otherwise returns an empty array. * * @param command * The command which we want the subcommands of @@ -52,20 +54,24 @@ public class TBMCChatAPI { */ public static String[] GetSubCommands(String command, CommandSender sender) { ArrayList cmds = new ArrayList(); - cmds.add("§6---- Subcommands ----"); + Consumer addToCmds = cmd -> { + if (cmds.size() == 0) + cmds.add("§6---- Subcommands ----"); + cmds.add(cmd); + }; for (TBMCCommandBase cmd : TBMCChatAPI.GetCommands().values()) { if (cmd.GetCommandPath().startsWith(command + " ")) { int ind = cmd.GetCommandPath().indexOf(' ', command.length() + 2); if (ind >= 0) { String newcmd = cmd.GetCommandPath().substring(0, ind); if (!cmds.contains("/" + newcmd)) - cmds.add("/" + newcmd); + addToCmds.accept("/" + newcmd); } if (cmd.GetPlayerOnly() && !(sender instanceof Player)) continue; if (cmd.GetModOnly() && !MainPlugin.permission.has(sender, "tbmc.admin")) continue; - cmds.add("/" + cmd.GetCommandPath()); + addToCmds.accept("/" + cmd.GetCommandPath()); } } return cmds.toArray(new String[cmds.size()]);