0

fixed a bug and added proper string arguments

This commit is contained in:
NEMESIS13cz
2016-08-20 19:25:30 +02:00
parent 2ebd064129
commit c0098fb61f
2 changed files with 41 additions and 5 deletions

View File

@@ -10,7 +10,6 @@ import com.nemez.cmdmgr.CommandManager;
public class CmdMgrTest extends JavaPlugin { public class CmdMgrTest extends JavaPlugin {
public void onEnable() { public void onEnable() {
CommandManager.debugHelpMenu = true;
CommandManager.registerCommand(new File("plugins/test.cmd"), this, this); CommandManager.registerCommand(new File("plugins/test.cmd"), this, this);
} }

View File

@@ -262,12 +262,49 @@ public class Executable extends org.bukkit.command.Command {
} }
@Override @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>(); ArrayList<ExecutableDefinition> defs = new ArrayList<ExecutableDefinition>();
defs.addAll(commands); defs.addAll(commands);
defLoop: for (int j = 0; j < defs.size(); j++) { defLoop: for (int j = 0; j < defs.size(); j++) {
int i = 0; int i = 0, k = 0;
for (int k = 0; i < args.length; i++, k++) { for (; i < args.length; i++, k++) {
if (!defs.get(j).valid(k, args[i])) { if (!defs.get(j).valid(k, args[i])) {
if (!defs.get(j).isOptional(k)) { if (!defs.get(j).isOptional(k)) {
defs.remove(j); 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); defs.remove(j);
j--; j--;
} }