From cbe402fc730521b0b30d404a453ab3244bad71e4 Mon Sep 17 00:00:00 2001 From: NEMESIS13cz Date: Sat, 19 Nov 2016 16:56:48 +0100 Subject: added 'empty' commands (e.g /stop) --- CmdMgrTest.java | 6 ++ com/nemez/cmdmgr/CommandManager.java | 18 +++- com/nemez/cmdmgr/component/EmptyComponent.java | 19 ++++ com/nemez/cmdmgr/util/Executable.java | 119 ++++++++++++++---------- com/nemez/cmdmgr/util/ExecutableDefinition.java | 3 + com/nemez/cmdmgr/util/HelpPageCommand.java | 2 +- 6 files changed, 114 insertions(+), 53 deletions(-) create mode 100644 com/nemez/cmdmgr/component/EmptyComponent.java diff --git a/CmdMgrTest.java b/CmdMgrTest.java index b6f1600..86bb9b5 100644 --- a/CmdMgrTest.java +++ b/CmdMgrTest.java @@ -17,6 +17,12 @@ public class CmdMgrTest extends JavaPlugin { } + @Command(hook="home_empty") + public boolean executeHomeNull(CommandSender sender) { + sender.sendMessage("You executed an empty /home"); + return true; + } + @Command(hook="home_set") public boolean executeSetHome(CommandSender sender, String name) { sender.sendMessage("You executed:"); diff --git a/com/nemez/cmdmgr/CommandManager.java b/com/nemez/cmdmgr/CommandManager.java index 3c90ea5..ae788c7 100644 --- a/com/nemez/cmdmgr/CommandManager.java +++ b/com/nemez/cmdmgr/CommandManager.java @@ -18,6 +18,7 @@ import com.nemez.cmdmgr.component.ByteComponent; import com.nemez.cmdmgr.component.ChainComponent; import com.nemez.cmdmgr.component.ConstantComponent; import com.nemez.cmdmgr.component.DoubleComponent; +import com.nemez.cmdmgr.component.EmptyComponent; import com.nemez.cmdmgr.component.FloatComponent; import com.nemez.cmdmgr.component.ICommandComponent; import com.nemez.cmdmgr.component.IntegerComponent; @@ -433,10 +434,16 @@ public class CommandManager { insideType = false; /* current argument type is null, throw an error */ if (currentArgComp == null) { - /* should never happen */ - plugin.getLogger().log(Level.WARNING, "Type error at line " + line + ": Type has no type?"); - errors = true; - return false; + currentArgComp = resolveComponentType(buffer.toString()); + buffer = new StringBuilder(); + if (currentArgComp instanceof EmptyComponent) { + + }else{ + /* should never happen */ + plugin.getLogger().log(Level.WARNING, "Type error at line " + line + ": Type has no type?"); + errors = true; + return false; + } }else{ /* set the value of the current type and reset the buffer */ currentArgComp.argName = buffer.toString(); @@ -519,6 +526,9 @@ public class CommandManager { case "opt": case "flag": return new OptionalComponent(); + case "empty": + case "null": + return new EmptyComponent(); } return null; } diff --git a/com/nemez/cmdmgr/component/EmptyComponent.java b/com/nemez/cmdmgr/component/EmptyComponent.java new file mode 100644 index 0000000..35e4d26 --- /dev/null +++ b/com/nemez/cmdmgr/component/EmptyComponent.java @@ -0,0 +1,19 @@ +package com.nemez.cmdmgr.component; + +public class EmptyComponent extends ArgumentComponent { + + @Override + public Object get(String input) { + return ""; + } + + @Override + public boolean valid(String input) { + return true; + } + + @Override + public String getComponentInfo() { + return ""; + } +} diff --git a/com/nemez/cmdmgr/util/Executable.java b/com/nemez/cmdmgr/util/Executable.java index 40d0277..c757c9e 100644 --- a/com/nemez/cmdmgr/util/Executable.java +++ b/com/nemez/cmdmgr/util/Executable.java @@ -193,7 +193,11 @@ public class Executable extends org.bukkit.command.Command { } } }else{ - command.add(new ConstantComponent(s)); + if (s.equals("")) { + + }else{ + command.add(new ConstantComponent(s)); + } } } @@ -265,65 +269,84 @@ public class Executable extends org.bukkit.command.Command { @Override 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; + String[] args; + if (args_.length == 0) { + args = new String[0]; + }else{ + 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++; } - }else if (c == ' ' && !inString) { - argSize++; + last = c; } - last = c; - } - last = '\0'; - String[] args = new String[argSize]; - String buffer = ""; - int index = 0; + last = '\0'; + args = new String[argSize]; + String buffer = ""; + int index = 0; - for (char c : rawArgs) { - if (c == '"') { - if (last != '\\') { - inString = !inString; + 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 = buffer.substring(0, buffer.length() - 1) + '"'; + buffer += c; } - }else if (c == ' ' && !inString) { - args[index] = buffer; - buffer = ""; - index++; - }else{ - buffer += c; + last = c; } - last = c; } - ArrayList defs = new ArrayList(); - defs.addAll(commands); - defLoop: for (int j = 0; j < defs.size(); j++) { - 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); - j--; - continue defLoop; - }else{ - i--; - continue; - } + + if (args.length == 0) { + for (ExecutableDefinition d : commands) { + if (d.getLength(0) == 0) { + defs.add(d); + break; } } - if (k != defs.get(j).getLength(k)) { - defs.remove(j); - j--; + }else{ + defs.addAll(commands); + defLoop: for (int j = 0; j < defs.size(); j++) { + if (defs.get(j).getLength(args.length) == 0) { + defs.remove(j); + j--; + continue; + } + 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); + j--; + continue defLoop; + }else{ + i--; + continue; + } + } + } + if (k != defs.get(j).getLength(k)) { + defs.remove(j); + j--; + } } } - if (args.length == 0 || defs.size() == 0) { + if (defs.size() == 0) { printPage(sender, 1); }else{ ExecutableDefinition def = defs.get(0); diff --git a/com/nemez/cmdmgr/util/ExecutableDefinition.java b/com/nemez/cmdmgr/util/ExecutableDefinition.java index fdf29b6..4e00e9d 100644 --- a/com/nemez/cmdmgr/util/ExecutableDefinition.java +++ b/com/nemez/cmdmgr/util/ExecutableDefinition.java @@ -109,6 +109,9 @@ public class ExecutableDefinition { } public int getLength(int argSize) { + if (components.size() == 0) { + return 0; + } if (argSize >= components.size()) { if (components.get(components.size() - 1) instanceof StringComponent) { StringComponent strComp = (StringComponent) components.get(components.size() - 1); diff --git a/com/nemez/cmdmgr/util/HelpPageCommand.java b/com/nemez/cmdmgr/util/HelpPageCommand.java index a3ee138..2229672 100644 --- a/com/nemez/cmdmgr/util/HelpPageCommand.java +++ b/com/nemez/cmdmgr/util/HelpPageCommand.java @@ -10,7 +10,7 @@ public class HelpPageCommand { public HelpPageCommand(String perm, String usage, String description, String method, Type type) { this.permission = perm; - this.usage = usage; + this.usage = usage.replaceAll("", ""); this.description = description; this.method = method; this.type = type; -- cgit v1.2.3