From c0098fb61f19183eebf879463d7ce0fce7a59838 Mon Sep 17 00:00:00 2001 From: NEMESIS13cz Date: Sat, 20 Aug 2016 19:25:30 +0200 Subject: fixed a bug and added proper string arguments --- CmdMgrTest.java | 1 - com/nemez/cmdmgr/util/Executable.java | 45 +++++++++++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/CmdMgrTest.java b/CmdMgrTest.java index 44fadf2..d7593df 100644 --- a/CmdMgrTest.java +++ b/CmdMgrTest.java @@ -10,7 +10,6 @@ import com.nemez.cmdmgr.CommandManager; public class CmdMgrTest extends JavaPlugin { public void onEnable() { - CommandManager.debugHelpMenu = true; CommandManager.registerCommand(new File("plugins/test.cmd"), this, this); } diff --git a/com/nemez/cmdmgr/util/Executable.java b/com/nemez/cmdmgr/util/Executable.java index e6e1904..1db27a3 100644 --- a/com/nemez/cmdmgr/util/Executable.java +++ b/com/nemez/cmdmgr/util/Executable.java @@ -262,12 +262,49 @@ public class Executable extends org.bukkit.command.Command { } @Override - public boolean execute(CommandSender sender, String name, String[] args) { + public boolean execute(CommandSender sender, String name, String[] args_) { + char[] rawArgs = (String.join(" ", args_) + ' ').toCharArray(); + int argSize = 0; + char last = '\0'; + boolean inString = false; + + for (char c : rawArgs) { + if (c == '"') { + if (last != '\\') { + inString = !inString; + } + }else if (c == ' ' && !inString) { + argSize++; + } + last = c; + } + last = '\0'; + String[] args = new String[argSize]; + String buffer = ""; + int index = 0; + + for (char c : rawArgs) { + if (c == '"') { + if (last != '\\') { + inString = !inString; + }else{ + buffer = buffer.substring(0, buffer.length() - 1) + '"'; + } + }else if (c == ' ' && !inString) { + args[index] = buffer; + buffer = ""; + index++; + }else{ + buffer += c; + } + last = c; + } + ArrayList defs = new ArrayList(); defs.addAll(commands); defLoop: for (int j = 0; j < defs.size(); j++) { - int i = 0; - for (int k = 0; i < args.length; i++, k++) { + int i = 0, k = 0; + for (; i < args.length; i++, k++) { if (!defs.get(j).valid(k, args[i])) { if (!defs.get(j).isOptional(k)) { defs.remove(j); @@ -279,7 +316,7 @@ public class Executable extends org.bukkit.command.Command { } } } - if (i != args.length) { + if (k != defs.get(j).getLength()) { defs.remove(j); j--; } -- cgit v1.2.3