summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNEMESIS13cz <OfficialNemes@gmail.com>2016-11-19 16:56:48 +0100
committerNEMESIS13cz <OfficialNemes@gmail.com>2016-11-19 16:56:48 +0100
commitcbe402fc730521b0b30d404a453ab3244bad71e4 (patch)
treec9cc3442e1f448a065de06742bf5c4a4bf642941
parent5358030f8d082fb26a011cf6fccb768273c70a6a (diff)
added 'empty' commands (e.g /stop)
-rw-r--r--CmdMgrTest.java6
-rw-r--r--com/nemez/cmdmgr/CommandManager.java18
-rw-r--r--com/nemez/cmdmgr/component/EmptyComponent.java19
-rw-r--r--com/nemez/cmdmgr/util/Executable.java119
-rw-r--r--com/nemez/cmdmgr/util/ExecutableDefinition.java3
-rw-r--r--com/nemez/cmdmgr/util/HelpPageCommand.java2
6 files changed, 114 insertions, 53 deletions
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 "<empty>";
+ }
+}
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("<empty>")) {
+
+ }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<ExecutableDefinition> defs = new ArrayList<ExecutableDefinition>();
- 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("<empty>", "");
this.description = description;
this.method = method;
this.type = type;