summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNEMESIS13cz <OfficialNemes@gmail.com>2016-08-20 19:25:30 +0200
committerNEMESIS13cz <OfficialNemes@gmail.com>2016-08-20 19:25:30 +0200
commitc0098fb61f19183eebf879463d7ce0fce7a59838 (patch)
tree15cc50dba54ccad7e543a7c1feee30aaeca4c9b5
parent2ebd0641292780711f1a9ffd357b01072a3c61e8 (diff)
fixed a bug and added proper string arguments
-rw-r--r--CmdMgrTest.java1
-rw-r--r--com/nemez/cmdmgr/util/Executable.java45
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<ExecutableDefinition> defs = new ArrayList<ExecutableDefinition>();
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--;
}