From 619c603a4f163746b8a0d21a038735ee2f76e3ea Mon Sep 17 00:00:00 2001 From: Logan Fick Date: Fri, 8 Feb 2019 16:53:55 -0500 Subject: Reformatted code. --- src/main/java/com/nemez/cmdmgr/Command.java | 18 +- src/main/java/com/nemez/cmdmgr/CommandManager.java | 553 ++++++++++----------- src/main/java/com/nemez/cmdmgr/EmptyCommand.java | 14 +- .../nemez/cmdmgr/component/ArgumentComponent.java | 2 +- .../nemez/cmdmgr/component/BooleanComponent.java | 10 +- .../com/nemez/cmdmgr/component/ByteComponent.java | 6 +- .../com/nemez/cmdmgr/component/ChainComponent.java | 30 +- .../nemez/cmdmgr/component/ConstantComponent.java | 6 +- .../nemez/cmdmgr/component/DoubleComponent.java | 2 +- .../com/nemez/cmdmgr/component/EmptyComponent.java | 2 +- .../com/nemez/cmdmgr/component/FloatComponent.java | 2 +- .../nemez/cmdmgr/component/ICommandComponent.java | 3 + .../nemez/cmdmgr/component/IntegerComponent.java | 2 +- .../com/nemez/cmdmgr/component/LongComponent.java | 2 +- .../nemez/cmdmgr/component/OptionalComponent.java | 2 +- .../com/nemez/cmdmgr/component/ShortComponent.java | 2 +- .../nemez/cmdmgr/component/StringComponent.java | 4 +- .../cmdmgr/util/AsyncExecutableDefinition.java | 29 +- .../java/com/nemez/cmdmgr/util/BranchStack.java | 12 +- .../java/com/nemez/cmdmgr/util/Executable.java | 324 ++++++------ .../nemez/cmdmgr/util/ExecutableDefinition.java | 72 +-- .../com/nemez/cmdmgr/util/HelpPageCommand.java | 4 +- src/main/java/com/nemez/cmdmgr/util/Property.java | 2 +- src/main/java/com/nemez/cmdmgr/util/Type.java | 28 +- 24 files changed, 552 insertions(+), 579 deletions(-) diff --git a/src/main/java/com/nemez/cmdmgr/Command.java b/src/main/java/com/nemez/cmdmgr/Command.java index f9eaf49..2c9bba1 100644 --- a/src/main/java/com/nemez/cmdmgr/Command.java +++ b/src/main/java/com/nemez/cmdmgr/Command.java @@ -5,16 +5,14 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; -@Target(ElementType.METHOD) -@Retention(RetentionPolicy.RUNTIME) -public @interface Command -{ - enum AsyncType - { - NEVER, ALWAYS; - } - +@Target (ElementType.METHOD) +@Retention (RetentionPolicy.RUNTIME) +public @interface Command { String hook(); - + AsyncType async() default AsyncType.NEVER; + + enum AsyncType { + NEVER, ALWAYS; + } } diff --git a/src/main/java/com/nemez/cmdmgr/CommandManager.java b/src/main/java/com/nemez/cmdmgr/CommandManager.java index d298ea1..a455a7b 100644 --- a/src/main/java/com/nemez/cmdmgr/CommandManager.java +++ b/src/main/java/com/nemez/cmdmgr/CommandManager.java @@ -1,11 +1,13 @@ //@noformat package com.nemez.cmdmgr; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.InputStream; -import java.io.InputStreamReader; +import com.nemez.cmdmgr.component.*; +import com.nemez.cmdmgr.util.*; +import org.bukkit.Bukkit; +import org.bukkit.command.CommandMap; +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.*; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; @@ -15,81 +17,50 @@ import java.util.List; import java.util.Map; import java.util.logging.Level; -import org.bukkit.Bukkit; -import org.bukkit.command.CommandMap; -import org.bukkit.plugin.java.JavaPlugin; - -import com.nemez.cmdmgr.component.ArgumentComponent; -import com.nemez.cmdmgr.component.BooleanComponent; -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; -import com.nemez.cmdmgr.component.LongComponent; -import com.nemez.cmdmgr.component.OptionalComponent; -import com.nemez.cmdmgr.component.ShortComponent; -import com.nemez.cmdmgr.component.StringComponent; -import com.nemez.cmdmgr.util.BranchStack; -import com.nemez.cmdmgr.util.Executable; -import com.nemez.cmdmgr.util.HelpPageCommand; -import com.nemez.cmdmgr.util.Property; -import com.nemez.cmdmgr.util.Type; - /** - * Example command.cmd - * - * command home: - * set [string:name]: - * run home_set name - * help Set a new home - * perm home.set - * del [string:name]: - * run home_del name - * help Delete home\n&CCannot be undone! - * perm home.del - * list: - * run home_list - * help Show all homes - * perm home.list - * [string:name]: - * run home_tp name - * help Teleport to specified home - * perm home.tp + * Example command.cmd + *

+ * command home: + * set [string:name]: + * run home_set name + * help Set a new home + * perm home.set + * del [string:name]: + * run home_del name + * help Delete home\n&CCannot be undone! + * perm home.del + * list: + * run home_list + * help Show all homes + * perm home.list + * [string:name]: + * run home_tp name + * help Teleport to specified home + * perm home.tp + *

+ * Generated in-game command structure: + * (will only show commands the user has permission to execute) + *

+ * /home set + * /home del + * /home list + * /home + * /home help + *

+ * Java code: * - * Generated in-game command structure: - * (will only show commands the user has permission to execute) - * - * /home set - * /home del - * /home list - * /home - * /home help - * - * Java code: - * - * @Command(hook="home_set") - * public void executeHomeSet(String name) { - * ... - * } - * - * @Command(hook="home_del") - * public void executeHomeDelete(String name) { - * ... - * } - * - * @Command(hook="home_list") - * public void executeHomeList() { - * ... - * } - * - * @Command(hook="home_tp") - * public void executeHomeTeleport(String name) { - * ... - * } + * @Command(hook="home_set") public void executeHomeSet(String name) { + * ... + * } + * @Command(hook="home_del") public void executeHomeDelete(String name) { + * ... + * } + * @Command(hook="home_list") public void executeHomeList() { + * ... + * } + * @Command(hook="home_tp") public void executeHomeTeleport(String name) { + * ... + * } */ public class CommandManager { @@ -97,27 +68,28 @@ public class CommandManager { /* Debugging toggle to generate help pages with types, e.g: str, i8, i32, fp64, etc. */ public static boolean debugHelpMenu = false; /* Internal boolean to keep track of errors during resolving */ - public static boolean errors = false; + public static boolean errors = false; /* Switches for color and formatting in the built-in help message and pagination text */ public static String helpDescriptionFormatting = "&b"; - public static String helpUsageFormatting = "&6"; - public static String helpPageHeaderFormatting = "&a"; + public static String helpUsageFormatting = "&6"; + public static String helpPageHeaderFormatting = "&a"; public static String helpInvalidPageFormatting = "&c"; - public static String noPermissionFormatting = "&c"; - public static String notAllowedFormatting = "&c"; - + public static String noPermissionFormatting = "&c"; + public static String notAllowedFormatting = "&c"; + /* List of all commands that can be invoked async */ - public static ArrayList asyncExecutables = new ArrayList(); - public static HashMap> commands = new HashMap>(); + public static ArrayList asyncExecutables = new ArrayList(); + public static HashMap> commands = new HashMap>(); /* */ - + /** * Registers a command from a String of source code - * - * @param cmdSourceCode source code + * + * @param cmdSourceCode source code * @param commandHandler instance of a class where your java functions are located - * @param plugin your plugin class + * @param plugin your plugin class + * * @return success - if command was processed and registered successfully */ public static boolean registerCommand(String cmdSourceCode, Object commandHandler, JavaPlugin plugin) { @@ -125,7 +97,7 @@ public class CommandManager { return false; } /* get the class definition of the 'commandHandler' and get its functions */ - Method[] methods = commandHandler.getClass().getMethods(); + Method[] methods = commandHandler.getClass().getMethods(); ArrayList finalMethods = new ArrayList(); /* extract all the functions annotated with @Command that are not static */ @@ -136,18 +108,19 @@ public class CommandManager { } return parse(cmdSourceCode, finalMethods, plugin, commandHandler); } - + /** * Registers a command from a source File - * - * @param sourceFile file containing source code + * + * @param sourceFile file containing source code * @param commandHandler instance of a class where your java functions are located - * @param plugin your plugin class + * @param plugin your plugin class + * * @return success - if command was processed and registered successfully */ public static boolean registerCommand(File sourceFile, Object commandHandler, JavaPlugin plugin) { StringBuilder src = new StringBuilder(); - String buf = ""; + String buf = ""; try { BufferedReader reader = new BufferedReader(new FileReader(sourceFile)); while ((buf = reader.readLine()) != null) { @@ -163,18 +136,19 @@ public class CommandManager { } return registerCommand(src.toString(), commandHandler, plugin); } - + /** * Registers a command from an InputStream - * - * @param sourceStream input stream containing source code + * + * @param sourceStream input stream containing source code * @param commandHandler instance of a class where your java functions are located - * @param plugin your plugin class + * @param plugin your plugin class + * * @return success - if command was processed and registered successfully */ public static boolean registerCommand(InputStream sourceStream, Object commandHandler, JavaPlugin plugin) { StringBuilder src = new StringBuilder(); - String buf = ""; + String buf = ""; try { BufferedReader reader = new BufferedReader(new InputStreamReader(sourceStream)); while ((buf = reader.readLine()) != null) { @@ -189,16 +163,16 @@ public class CommandManager { } return registerCommand(src.toString(), commandHandler, plugin); } - + /** * Unregisters all commands from a source File - * + * * @param sourceFile file containing source code - * @param plugin your plugin class + * @param plugin your plugin class */ public static void unregisterCommands(File sourceFile, JavaPlugin plugin) { StringBuilder src = new StringBuilder(); - String buf = ""; + String buf = ""; try { BufferedReader reader = new BufferedReader(new FileReader(sourceFile)); while ((buf = reader.readLine()) != null) { @@ -212,33 +186,10 @@ public class CommandManager { } unregisterCommands(src.toString()); } - - /** - * Unregisters all commands from an InputStream - * - * @param sourceStream input stream containing source code - * @param plugin your plugin class - */ - public static void unregisterCommands(InputStream sourceStream, JavaPlugin plugin) { - StringBuilder src = new StringBuilder(); - String buf = ""; - try { - BufferedReader reader = new BufferedReader(new InputStreamReader(sourceStream)); - while ((buf = reader.readLine()) != null) { - src.append(buf + '\n'); - } - reader.close(); - } catch (Exception e) { - plugin.getLogger().log(Level.WARNING, "Error while loading command file. (" + sourceStream.toString() + ")"); - plugin.getLogger().log(Level.WARNING, e.getCause().toString()); - return; - } - unregisterCommands(src.toString()); - } - + /** * Unregisters all commands from a String of source code - * + * * @param cmdSourceCode source code */ public static void unregisterCommands(String cmdSourceCode) { @@ -247,15 +198,15 @@ public class CommandManager { } parseUnregister(cmdSourceCode); } - + public static void parseUnregister(String src) { - char[] chars = src.toCharArray(); - StringBuilder buffer = new StringBuilder(); - int nesting = 0; - + char[] chars = src.toCharArray(); + StringBuilder buffer = new StringBuilder(); + int nesting = 0; + for (int i = 0; i < chars.length; i++) { char c = chars[i]; - + if (c == ';') { if (nesting == 1) { String[] alias = buffer.toString().trim().split("\\ "); @@ -264,7 +215,7 @@ public class CommandManager { } } buffer = new StringBuilder(); - }else if (c == '{') { + } else if (c == '{') { if (nesting == 0) { String[] command = buffer.toString().trim().split("\\ "); if (command.length == 2 && command[0].equals("command")) { @@ -275,10 +226,10 @@ public class CommandManager { nesting++; } buffer = new StringBuilder(); - }else if (c == '}') { + } else if (c == '}') { nesting--; buffer = new StringBuilder(); - }else { + } else { buffer.append(c); } } @@ -286,7 +237,7 @@ public class CommandManager { /** * Unregisters a command specified by its name or alias - * + * * @param name name or alias of command */ public static void unregisterCommand(String name) { @@ -294,10 +245,10 @@ public class CommandManager { try { final Field mapField = Bukkit.getServer().getClass().getDeclaredField("commandMap"); mapField.setAccessible(true); - CommandMap map = (CommandMap) mapField.get(Bukkit.getServer()); + CommandMap map = (CommandMap) mapField.get(Bukkit.getServer()); final Field knownCommandsField = mapField.getClass().getSuperclass().getDeclaredField("knownCommands"); knownCommandsField.setAccessible(true); - @SuppressWarnings("unchecked") + @SuppressWarnings ("unchecked") Map knownCommands = (Map) knownCommandsField.get(map); knownCommands.remove(name); map.register(name, empty); @@ -305,19 +256,40 @@ public class CommandManager { e.printStackTrace(); } } - - public static void unregisterAll(String[] commands) - { - for (String name : commands) - { + + /** + * Unregisters all commands from an InputStream + * + * @param sourceStream input stream containing source code + * @param plugin your plugin class + */ + public static void unregisterCommands(InputStream sourceStream, JavaPlugin plugin) { + StringBuilder src = new StringBuilder(); + String buf = ""; + try { + BufferedReader reader = new BufferedReader(new InputStreamReader(sourceStream)); + while ((buf = reader.readLine()) != null) { + src.append(buf + '\n'); + } + reader.close(); + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, "Error while loading command file. (" + sourceStream.toString() + ")"); + plugin.getLogger().log(Level.WARNING, e.getCause().toString()); + return; + } + unregisterCommands(src.toString()); + } + + public static void unregisterAll(String[] commands) { + for (String name : commands) { EmptyCommand emptyCommand = new EmptyCommand(name); try { final Field cmdMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); cmdMap.setAccessible(true); - CommandMap map = (CommandMap) cmdMap.get(Bukkit.getServer()); + CommandMap map = (CommandMap) cmdMap.get(Bukkit.getServer()); final Field knownCommandsField = map.getClass().getSuperclass().getDeclaredField("knownCommands"); knownCommandsField.setAccessible(true); - @SuppressWarnings("unchecked") + @SuppressWarnings ("unchecked") Map knownCommands = (Map) knownCommandsField.get(map); knownCommands.remove(name); map.register(name, emptyCommand); @@ -326,26 +298,26 @@ public class CommandManager { } } } - + public static void unregisterAllWithFallback(String fallback) { try { final Field cmdMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); cmdMap.setAccessible(true); - CommandMap map = (CommandMap) cmdMap.get(Bukkit.getServer()); + CommandMap map = (CommandMap) cmdMap.get(Bukkit.getServer()); final Field knownCommandsField = map.getClass().getSuperclass().getDeclaredField("knownCommands"); knownCommandsField.setAccessible(true); - @SuppressWarnings("unchecked") + @SuppressWarnings ("unchecked") Map knownCommands = (Map) knownCommandsField.get(map); - + fallback = fallback.toLowerCase(); - + List toRemove = new ArrayList<>(); - for (String key: knownCommands.keySet()) { - org.bukkit.command.Command value = knownCommands.get(key); - if ((value instanceof Executable) && ((Executable)value).getMethodContainerName().equals(fallback)) { - toRemove.add(key); - value.unregister(map); + for (String key : knownCommands.keySet()) { + org.bukkit.command.Command value = knownCommands.get(key); + if ((value instanceof Executable) && ((Executable) value).getMethodContainerName().equals(fallback)) { + toRemove.add(key); + value.unregister(map); } } for (String key : toRemove) { @@ -353,20 +325,21 @@ public class CommandManager { knownCommands.remove(key); map.register(key, emptyCommand); } - - + + } catch (Exception e) { e.printStackTrace(); } } - + /** * Parses the source code into an abstract command syntax - * - * @param source String containing command source code - * @param methods ArrayList of methods gathered from the plugin's handler class - * @param plugin plugin to register commands as + * + * @param source String containing command source code + * @param methods ArrayList of methods gathered from the plugin's handler class + * @param plugin plugin to register commands as * @param methodContainer class containing method handles + * * @return success - if command parsing and registration was successful */ private static boolean parse(String source, ArrayList methods, JavaPlugin plugin, Object methodContainer) { @@ -398,7 +371,7 @@ public class CommandManager { int line = 0; // buffer for '...' and '"' properties of string types StringBuilder sideBuffer = new StringBuilder(); - + /* iterate over all characters */ for (int i = 0; i < chars.length; i++) { /* get current char */ @@ -421,7 +394,7 @@ public class CommandManager { plugin.getLogger().log(Level.WARNING, "Syntax error at line " + line + ": Already defining a type."); errors = true; return false; - }else{ + } else { /* okay, resolve what type this is */ currentArgComp = resolveComponentType(buffer.toString()); buffer = new StringBuilder(); @@ -432,18 +405,18 @@ public class CommandManager { return false; } } - }else{ + } else { /* not inside a type, probably just a string in the help property */ buffer.append(':'); } - /* current is a semicolon, we just finished a property line */ - /* help this is an example; */ - /* ^ */ - }else if (current == ';') { + /* current is a semicolon, we just finished a property line */ + /* help this is an example; */ + /* ^ */ + } else if (current == ';') { /* semicolon is backslash escaped, treat it as a normal character */ if (previous == '\\') { buffer.append(';'); - }else{ + } else { /* there is nothing on the stack, we are defining properties of 'nothing', throw an error */ if (stack.get() == null) { plugin.getLogger().log(Level.WARNING, "Syntax error at line " + line + ": Not in code section."); @@ -454,25 +427,27 @@ public class CommandManager { if (gettingAlias) { stack.get().aliases.add(buffer.toString()); gettingAlias = false; - }else if (currentProp == Property.HELP) { + } else if (currentProp == Property.HELP) { stack.get().help = buffer.toString(); - /* same as above, except its the function to run */ - }else if (currentProp == Property.EXECUTE) { + /* same as above, except its the function to run */ + } else if (currentProp == Property.EXECUTE) { stack.get().execute = buffer.toString(); - /* same again, but with the permission, and as that should not contain spaces, trim it */ - }else if (currentProp == Property.PERMISSION) { + /* same again, but with the permission, and as that should not contain spaces, trim it */ + } else if (currentProp == Property.PERMISSION) { stack.get().permission = buffer.toString().trim(); - /* execution type, check if its a valid one and set it */ - }else if (currentProp == Property.TYPE) { + /* execution type, check if its a valid one and set it */ + } else if (currentProp == Property.TYPE) { stack.get().type = resolveExecutionType(buffer.toString().trim()); /* not a valid type, throw an error */ if (stack.get().type == null) { - plugin.getLogger().log(Level.WARNING, "Attribute error at line " + line + ": Invalid attribute value. (" + buffer.toString().trim() + ")."); + plugin + .getLogger() + .log(Level.WARNING, "Attribute error at line " + line + ": Invalid attribute value. (" + buffer.toString().trim() + ")."); errors = true; return false; } - /* currently not defining anything, throw an error */ - }else{ + /* currently not defining anything, throw an error */ + } else { plugin.getLogger().log(Level.WARNING, "Attribute error at line " + line + ": Invalid attribute type."); errors = true; return false; @@ -481,8 +456,8 @@ public class CommandManager { currentProp = Property.NONE; buffer = new StringBuilder(); } - /* current is an opening curly bracket, we just entered a sub-command property definition */ - }else if (current == '{') { + /* current is an opening curly bracket, we just entered a sub-command property definition */ + } else if (current == '{') { /* increment bracket counter */ bracketCounter++; /* are we getting the name of the command? */ @@ -490,14 +465,14 @@ public class CommandManager { /* set the command name to what we just gathered (trimmed) */ cmdName = buffer.toString().trim(); gettingName = false; - }else{ + } else { /* are we currently in an argument? */ if (currentArgComp == null) { /* no, but if there is something that looks like text, put it into the current subcommand as a constant */ if (buffer.toString().trim().length() > 0) { currentChain.append(new ConstantComponent(buffer.toString().trim())); } - }else{ + } else { /* yes, put it into the current subcommand */ /* could happen when there are no 'spaces' */ /* [str:example]{ */ @@ -518,8 +493,8 @@ public class CommandManager { stack.push(currentChain); /* reset our current sub-command */ currentChain = new ChainComponent(); - /* current is a closing curly bracket, we just finished a property section */ - }else if (current == '}') { + /* current is a closing curly bracket, we just finished a property section */ + } else if (current == '}') { /* decrement the bracket counter */ bracketCounter--; /* pop whatever was on the stack */ @@ -558,42 +533,42 @@ public class CommandManager { continue; } currentChain = new ChainComponent(); - /* current is a space, we just finished defining which property we are about to set */ - }else if (current == ' ') { + /* current is a space, we just finished defining which property we are about to set */ + } else if (current == ' ') { /* we are already defining a property, append it as text */ if (currentProp != Property.NONE) { buffer.append(' '); - }else{ + } else { /* we got the 'command' definition, the name of the command will follow */ if (buffer.toString().equals("command") && !gettingName && !gettingAlias && cmdName == null) { gettingName = true; - /* we got other properties, their values will follow */ - }else if (buffer.toString().equals("alias") && !gettingAlias && !gettingName) { + /* we got other properties, their values will follow */ + } else if (buffer.toString().equals("alias") && !gettingAlias && !gettingName) { gettingAlias = true; - }else if (buffer.toString().equals("help")) { + } else if (buffer.toString().equals("help")) { currentProp = Property.HELP; - }else if (buffer.toString().equals("run")) { + } else if (buffer.toString().equals("run")) { currentProp = Property.EXECUTE; - }else if (buffer.toString().equals("perm")) { + } else if (buffer.toString().equals("perm")) { currentProp = Property.PERMISSION; - }else if (buffer.toString().equals("type")) { + } else if (buffer.toString().equals("type")) { currentProp = Property.TYPE; - /* we didn't get any of those, we are probably in the middle of a sub-command definition */ - /* example [int:value] { */ - /* ^ ^ */ - }else{ + /* we didn't get any of those, we are probably in the middle of a sub-command definition */ + /* example [int:value] { */ + /* ^ ^ */ + } else { /* we are getting the name and we didn't set it yet, set it */ if (gettingName && cmdName == null) { cmdName = buffer.toString().trim(); gettingName = false; - }else{ + } else { /* we aren't defining a type, put the current text into the sub-command as a constant */ if (currentArgComp == null) { if (buffer.toString().trim().length() > 0) { currentChain.append(new ConstantComponent(buffer.toString().trim())); } /* we are defining a command, put it into the sub-command */ - }else{ + } else { currentChain.append(currentArgComp); currentArgComp = null; } @@ -602,41 +577,41 @@ public class CommandManager { /* reset the buffer */ buffer = new StringBuilder(); } - /* current is an opening square bracket, we just started a type definition */ - }else if (current == '[') { + /* current is an opening square bracket, we just started a type definition */ + } else if (current == '[') { /* we are defining a property, treat it as text */ if (currentProp != Property.NONE) { buffer.append('['); - /* we are already inside of a type definition, throw an error */ - }else if (insideType) { + /* we are already inside of a type definition, throw an error */ + } else if (insideType) { plugin.getLogger().log(Level.WARNING, "Syntax error at line " + line + ": Invalid type declaration."); errors = true; return false; - }else{ + } else { /* we just entered a type definition */ insideType = true; } - /* current is a closing square bracket, we just finished a type definition */ - }else if (current == ']') { + /* current is a closing square bracket, we just finished a type definition */ + } else if (current == ']') { /* we are defining a property, treat it as text */ if (currentProp != Property.NONE) { buffer.append(']'); - /* we are inside of a type */ - }else if (insideType) { + /* we are inside of a type */ + } else if (insideType) { insideType = false; /* current argument type is null, throw an error */ if (currentArgComp == null) { currentArgComp = resolveComponentType(buffer.toString()); buffer = new StringBuilder(); if (currentArgComp instanceof EmptyComponent) { - - }else{ + + } else { /* should never happen */ plugin.getLogger().log(Level.WARNING, "Type error at line " + line + ": Type has no type?"); errors = true; return false; } - }else{ + } else { /* set the value of the current type and reset the buffer */ currentArgComp.argName = buffer.toString(); buffer = new StringBuilder(); @@ -646,109 +621,111 @@ public class CommandManager { } sideBuffer = new StringBuilder(); } - }else{ + } else { /* we are not defining a type, throw an error */ plugin.getLogger().log(Level.WARNING, "Syntax error at line " + line + ": Not in type declaration."); errors = true; return false; } - /* typical escape sequences and such */ - }else if (current == 'n' && currentProp == Property.HELP) { + /* typical escape sequences and such */ + } else if (current == 'n' && currentProp == Property.HELP) { if (previous == '\\') { buffer.append('\n'); - }else{ + } else { buffer.append('n'); } - }else if (current == 't' && currentProp == Property.HELP) { + } else if (current == 't' && currentProp == Property.HELP) { if (previous == '\\') { buffer.append('\t'); - }else{ + } else { buffer.append('t'); } - }else if (current == '\\' && currentProp == Property.HELP) { + } else if (current == '\\' && currentProp == Property.HELP) { if (previous == '\\') { buffer.append('\\'); } - }else if (current != '\r' && current != '\n' && current != '\t') { + } else if (current != '\r' && current != '\n' && current != '\t') { if (currentArgComp != null && current == '.') { if (currentArgComp instanceof StringComponent) { sideBuffer.append(current); - }else{ + } else { plugin.getLogger().log(Level.WARNING, "Syntax error at line " + line + ": '...' is invalid for non-string types."); errors = true; return false; } - }else{ + } else { buffer.append(current); } } previous = current; } - + return true; } - + /** * Resolves the string into a type, or null if invalid - * + * * @param type string you want to evaluate + * * @return the type class or null if invalid */ private static ArgumentComponent resolveComponentType(String type) { switch (type) { - case "string": - return new StringComponent(); - case "int": - case "integer": - return new IntegerComponent(); - case "short": - return new ShortComponent(); - case "long": - return new LongComponent(); - case "byte": - return new ByteComponent(); - case "float": - return new FloatComponent(); - case "double": - return new DoubleComponent(); - case "bool": - case "boolean": - return new BooleanComponent(); - case "optional": - case "opt": - case "flag": - return new OptionalComponent(); - case "empty": - case "null": - return new EmptyComponent(); + case "string": + return new StringComponent(); + case "int": + case "integer": + return new IntegerComponent(); + case "short": + return new ShortComponent(); + case "long": + return new LongComponent(); + case "byte": + return new ByteComponent(); + case "float": + return new FloatComponent(); + case "double": + return new DoubleComponent(); + case "bool": + case "boolean": + return new BooleanComponent(); + case "optional": + case "opt": + case "flag": + return new OptionalComponent(); + case "empty": + case "null": + return new EmptyComponent(); } return null; } - + /** * Resolves the string into a property, or null if invalid - * + * * @param type string you want to evaluate + * * @return the property enum or null if invalid */ private static Type resolveExecutionType(String type) { switch (type) { - case "player": - return Type.PLAYER; - case "both": - case "any": - case "all": - return Type.BOTH; - case "server": - case "console": - return Type.CONSOLE; - case "none": - case "nobody": - return Type.NOBODY; + case "player": + return Type.PLAYER; + case "both": + case "any": + case "all": + return Type.BOTH; + case "server": + case "console": + return Type.CONSOLE; + case "none": + case "nobody": + return Type.NOBODY; } return null; } - + private static void postProcess(String cmdName, ChainComponent components, ArrayList methods, JavaPlugin plugin, Object methodContainer) { components.execute = null; components.help = null; @@ -757,21 +734,21 @@ public class CommandManager { Executable cmd = new Executable(cmdName, constructHelpPages(cmdName, components), methodContainer.getClass().getSimpleName()); cmd.register(methods, plugin, methodContainer, components.getAliases()); } - + private static ArrayList constructHelpPages(String cmdName, ChainComponent root) { - String[] rawLines = constructHelpPagesRecursive(root).split("\r"); - ArrayList pages = new ArrayList(); - ArrayList lines = new ArrayList(); - HelpPageCommand[] page = new HelpPageCommand[5]; - + String[] rawLines = constructHelpPagesRecursive(root).split("\r"); + ArrayList pages = new ArrayList(); + ArrayList lines = new ArrayList(); + HelpPageCommand[] page = new HelpPageCommand[5]; + for (int i = 0; i < rawLines.length; i++) { if (rawLines[i].length() > 0 && !rawLines[i].equals("\0null\0null\0null\0null\0")) { lines.add(rawLines[i]); } } - + boolean firstPass = true; - int i; + int i; for (i = 0; i < lines.size(); i++) { if (i % 5 == 0 && !firstPass) { pages.add(page); @@ -787,35 +764,37 @@ public class CommandManager { } page[i % 5] = new HelpPageCommand(cmdName + ".help", "/" + cmdName + " help ", "Shows help.", null, Type.BOTH); pages.add(page); - + return pages; } - + private static String constructHelpPagesRecursive(ICommandComponent component) { String data = ""; - + if (component instanceof ChainComponent) { - ChainComponent comp = (ChainComponent) component; + ChainComponent comp = (ChainComponent) component; ArrayList leaves = new ArrayList(); - String chain = ""; + String chain = ""; data += "\r"; for (ICommandComponent c : comp.getComponents()) { String temp = constructHelpPagesRecursive(c); if (c instanceof ChainComponent) { temp = temp.replaceAll("\r", "\r" + chain); leaves.add(temp); - }else{ + } else { chain += temp; } } - data += chain + "\0" + ((comp.permission == null || comp.permission.equals("-none-")) ? null : comp.permission) + "\0" + comp.execute + "\0" + comp.help + "\0" + Type.get(comp.type) + "\0"; + data += chain + "\0" + ((comp.permission == null || comp.permission.equals("-none-")) + ? null + : comp.permission) + "\0" + comp.execute + "\0" + comp.help + "\0" + Type.get(comp.type) + "\0"; for (String s : leaves) { data += s; } - }else{ + } else { data += component.getComponentInfo() + " "; } - + return data; } }//@format diff --git a/src/main/java/com/nemez/cmdmgr/EmptyCommand.java b/src/main/java/com/nemez/cmdmgr/EmptyCommand.java index 770ed77..51a4907 100644 --- a/src/main/java/com/nemez/cmdmgr/EmptyCommand.java +++ b/src/main/java/com/nemez/cmdmgr/EmptyCommand.java @@ -1,19 +1,15 @@ package com.nemez.cmdmgr; -import org.bukkit.command.CommandSender; - import com.nemez.cmdmgr.util.Executable; +import org.bukkit.command.CommandSender; -public class EmptyCommand extends Executable -{ - public EmptyCommand(String name) - { +public class EmptyCommand extends Executable { + public EmptyCommand(String name) { super(name, null, ""); } - + @Override - public boolean execute(CommandSender sender, String name, String[] args_) - { + public boolean execute(CommandSender sender, String name, String[] args_) { sender.sendMessage("§cCommand no longer Exists. Use §e/help§c, §e/plugins§c or ask a mod."); return true; } diff --git a/src/main/java/com/nemez/cmdmgr/component/ArgumentComponent.java b/src/main/java/com/nemez/cmdmgr/component/ArgumentComponent.java index 939d9cb..80a9319 100644 --- a/src/main/java/com/nemez/cmdmgr/component/ArgumentComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/ArgumentComponent.java @@ -3,7 +3,7 @@ package com.nemez.cmdmgr.component; public abstract class ArgumentComponent implements ICommandComponent { public String argName; - public int position; + public int position; @Override public String argName() { diff --git a/src/main/java/com/nemez/cmdmgr/component/BooleanComponent.java b/src/main/java/com/nemez/cmdmgr/component/BooleanComponent.java index 8290fc5..715ae57 100644 --- a/src/main/java/com/nemez/cmdmgr/component/BooleanComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/BooleanComponent.java @@ -1,7 +1,7 @@ package com.nemez.cmdmgr.component; public class BooleanComponent extends ArgumentComponent { - + @Override public Object get(String input) { if (input.toLowerCase().equals("true") || input.toLowerCase().equals("yes")) { @@ -12,14 +12,16 @@ public class BooleanComponent extends ArgumentComponent { @Override public boolean valid(String input) { - if (input.toLowerCase().equals("true") || input.toLowerCase().equals("false") || input.toLowerCase().equals("yes") || input.toLowerCase().equals("no")) { + if (input.toLowerCase().equals("true") || input.toLowerCase().equals("false") || input.toLowerCase().equals("yes") || input + .toLowerCase() + .equals("no")) { return true; } return false; } - + @Override public String getComponentInfo() { - return "<" + argName + ":bool>"; + return "<" + argName + ":bool>"; } } diff --git a/src/main/java/com/nemez/cmdmgr/component/ByteComponent.java b/src/main/java/com/nemez/cmdmgr/component/ByteComponent.java index f0e8d74..9c4a163 100644 --- a/src/main/java/com/nemez/cmdmgr/component/ByteComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/ByteComponent.java @@ -1,7 +1,7 @@ package com.nemez.cmdmgr.component; public class ByteComponent extends ArgumentComponent { - + @Override public Object get(String input) { try { @@ -20,9 +20,9 @@ public class ByteComponent extends ArgumentComponent { return false; } } - + @Override public String getComponentInfo() { - return "<" + argName + ":i8>"; + return "<" + argName + ":i8>"; } } diff --git a/src/main/java/com/nemez/cmdmgr/component/ChainComponent.java b/src/main/java/com/nemez/cmdmgr/component/ChainComponent.java index 691a85d..72e4cd5 100644 --- a/src/main/java/com/nemez/cmdmgr/component/ChainComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/ChainComponent.java @@ -1,22 +1,22 @@ package com.nemez.cmdmgr.component; -import java.util.ArrayList; - import com.nemez.cmdmgr.util.Type; +import java.util.ArrayList; + public class ChainComponent implements ICommandComponent { + public String permission; + public String help; + public String execute; + public Type type; + public ArrayList aliases = new ArrayList(); private ArrayList components; - public String permission; - public String help; - public String execute; - public Type type; - public ArrayList aliases = new ArrayList(); - + public ChainComponent() { components = new ArrayList(); } - + public void append(ICommandComponent comp) { components.add(comp); } @@ -35,21 +35,21 @@ public class ChainComponent implements ICommandComponent { public String argName() { return null; } - + @Override public String getComponentInfo() { return "chain[" + components.size() + "]"; } - + public int capacity() { return components.size(); } - + public ArrayList getComponents() { return components; } - + public ArrayList getAliases() { - return aliases; - } + return aliases; + } } diff --git a/src/main/java/com/nemez/cmdmgr/component/ConstantComponent.java b/src/main/java/com/nemez/cmdmgr/component/ConstantComponent.java index 00e255e..205c424 100644 --- a/src/main/java/com/nemez/cmdmgr/component/ConstantComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/ConstantComponent.java @@ -3,11 +3,11 @@ package com.nemez.cmdmgr.component; public class ConstantComponent implements ICommandComponent { private String component; - + public ConstantComponent(String comp) { component = comp; } - + @Override public Object get(String input) { if (input.equals(component)) { @@ -25,7 +25,7 @@ public class ConstantComponent implements ICommandComponent { public String argName() { return null; } - + @Override public String getComponentInfo() { return component; diff --git a/src/main/java/com/nemez/cmdmgr/component/DoubleComponent.java b/src/main/java/com/nemez/cmdmgr/component/DoubleComponent.java index 28a5398..19c3f3c 100644 --- a/src/main/java/com/nemez/cmdmgr/component/DoubleComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/DoubleComponent.java @@ -20,7 +20,7 @@ public class DoubleComponent extends ArgumentComponent { return false; } } - + @Override public String getComponentInfo() { return "<" + argName + ":fp64>"; diff --git a/src/main/java/com/nemez/cmdmgr/component/EmptyComponent.java b/src/main/java/com/nemez/cmdmgr/component/EmptyComponent.java index 35e4d26..cec7c04 100644 --- a/src/main/java/com/nemez/cmdmgr/component/EmptyComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/EmptyComponent.java @@ -11,7 +11,7 @@ public class EmptyComponent extends ArgumentComponent { public boolean valid(String input) { return true; } - + @Override public String getComponentInfo() { return ""; diff --git a/src/main/java/com/nemez/cmdmgr/component/FloatComponent.java b/src/main/java/com/nemez/cmdmgr/component/FloatComponent.java index 039378a..e9c0ce6 100644 --- a/src/main/java/com/nemez/cmdmgr/component/FloatComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/FloatComponent.java @@ -20,7 +20,7 @@ public class FloatComponent extends ArgumentComponent { return false; } } - + @Override public String getComponentInfo() { return "<" + argName + ":fp32>"; diff --git a/src/main/java/com/nemez/cmdmgr/component/ICommandComponent.java b/src/main/java/com/nemez/cmdmgr/component/ICommandComponent.java index 5dbb17b..b236fc3 100644 --- a/src/main/java/com/nemez/cmdmgr/component/ICommandComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/ICommandComponent.java @@ -3,7 +3,10 @@ package com.nemez.cmdmgr.component; public interface ICommandComponent { public Object get(String input); + public boolean valid(String input); + public String argName(); + public String getComponentInfo(); } diff --git a/src/main/java/com/nemez/cmdmgr/component/IntegerComponent.java b/src/main/java/com/nemez/cmdmgr/component/IntegerComponent.java index aafab8d..cdf670f 100644 --- a/src/main/java/com/nemez/cmdmgr/component/IntegerComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/IntegerComponent.java @@ -20,7 +20,7 @@ public class IntegerComponent extends ArgumentComponent { return false; } } - + @Override public String getComponentInfo() { return "<" + argName + ":i32>"; diff --git a/src/main/java/com/nemez/cmdmgr/component/LongComponent.java b/src/main/java/com/nemez/cmdmgr/component/LongComponent.java index d97f1bb..16dc524 100644 --- a/src/main/java/com/nemez/cmdmgr/component/LongComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/LongComponent.java @@ -20,7 +20,7 @@ public class LongComponent extends ArgumentComponent { return false; } } - + @Override public String getComponentInfo() { return "<" + argName + ":i64>"; diff --git a/src/main/java/com/nemez/cmdmgr/component/OptionalComponent.java b/src/main/java/com/nemez/cmdmgr/component/OptionalComponent.java index 1d1c839..33ef302 100644 --- a/src/main/java/com/nemez/cmdmgr/component/OptionalComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/OptionalComponent.java @@ -1,7 +1,7 @@ package com.nemez.cmdmgr.component; public class OptionalComponent extends ArgumentComponent { - + @Override public Object get(String input) { return input.equals(argName); diff --git a/src/main/java/com/nemez/cmdmgr/component/ShortComponent.java b/src/main/java/com/nemez/cmdmgr/component/ShortComponent.java index cad6719..cce4b19 100644 --- a/src/main/java/com/nemez/cmdmgr/component/ShortComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/ShortComponent.java @@ -20,7 +20,7 @@ public class ShortComponent extends ArgumentComponent { return false; } } - + @Override public String getComponentInfo() { return "<" + argName + ":i16>"; diff --git a/src/main/java/com/nemez/cmdmgr/component/StringComponent.java b/src/main/java/com/nemez/cmdmgr/component/StringComponent.java index 9b7a717..e871c5b 100644 --- a/src/main/java/com/nemez/cmdmgr/component/StringComponent.java +++ b/src/main/java/com/nemez/cmdmgr/component/StringComponent.java @@ -3,7 +3,7 @@ package com.nemez.cmdmgr.component; public class StringComponent extends ArgumentComponent { public boolean infinite = false; - + @Override public Object get(String input) { return input; @@ -13,7 +13,7 @@ public class StringComponent extends ArgumentComponent { public boolean valid(String input) { return true; } - + @Override public String getComponentInfo() { return "<" + (infinite ? "..." : "") + argName + ":str>"; diff --git a/src/main/java/com/nemez/cmdmgr/util/AsyncExecutableDefinition.java b/src/main/java/com/nemez/cmdmgr/util/AsyncExecutableDefinition.java index 7e97705..eab856a 100644 --- a/src/main/java/com/nemez/cmdmgr/util/AsyncExecutableDefinition.java +++ b/src/main/java/com/nemez/cmdmgr/util/AsyncExecutableDefinition.java @@ -1,29 +1,23 @@ package com.nemez.cmdmgr.util; -import java.lang.reflect.Method; -import java.util.ArrayList; - +import com.nemez.cmdmgr.component.ICommandComponent; import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; -import com.nemez.cmdmgr.component.ICommandComponent; +import java.lang.reflect.Method; +import java.util.ArrayList; -public class AsyncExecutableDefinition extends ExecutableDefinition -{ +public class AsyncExecutableDefinition extends ExecutableDefinition { public AsyncExecutableDefinition(ArrayList cmd, ArrayList paramLinks, String perm, - Method method, Object methodContainer, Type type) - { + Method method, Object methodContainer, Type type) { super(cmd, paramLinks, perm, method, methodContainer, type); } - + @Override - public boolean invoke(Object[] args, CommandSender sender, JavaPlugin plugin) - { - Thread t = new Thread(new Runnable() - { + public boolean invoke(Object[] args, CommandSender sender, JavaPlugin plugin) { + Thread t = new Thread(new Runnable() { @Override - public void run() - { + public void run() { invokeFromThread(args, sender, plugin); } }); @@ -31,9 +25,8 @@ public class AsyncExecutableDefinition extends ExecutableDefinition t.start(); return true; } - - private final void invokeFromThread(Object[] args, CommandSender sender, JavaPlugin plugin) - { + + private final void invokeFromThread(Object[] args, CommandSender sender, JavaPlugin plugin) { super.invoke(args, sender, plugin); } } diff --git a/src/main/java/com/nemez/cmdmgr/util/BranchStack.java b/src/main/java/com/nemez/cmdmgr/util/BranchStack.java index f89094f..95457fc 100644 --- a/src/main/java/com/nemez/cmdmgr/util/BranchStack.java +++ b/src/main/java/com/nemez/cmdmgr/util/BranchStack.java @@ -1,21 +1,21 @@ package com.nemez.cmdmgr.util; -import java.util.ArrayList; - import com.nemez.cmdmgr.component.ChainComponent; +import java.util.ArrayList; + public class BranchStack { private ArrayList components; - + public BranchStack() { components = new ArrayList(); } - + public void push(ChainComponent comp) { components.add(comp); } - + public ChainComponent pop() { if (components.size() > 0) { ChainComponent toPop = components.remove(components.size() - 1); @@ -23,7 +23,7 @@ public class BranchStack { } return null; } - + public ChainComponent get() { if (components.size() > 0) { return components.get(components.size() - 1); diff --git a/src/main/java/com/nemez/cmdmgr/util/Executable.java b/src/main/java/com/nemez/cmdmgr/util/Executable.java index 9f39100..d7549b2 100644 --- a/src/main/java/com/nemez/cmdmgr/util/Executable.java +++ b/src/main/java/com/nemez/cmdmgr/util/Executable.java @@ -1,13 +1,10 @@ //@noformat package com.nemez.cmdmgr.util; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; -import java.util.logging.Level; - +import com.nemez.cmdmgr.Command; +import com.nemez.cmdmgr.Command.AsyncType; +import com.nemez.cmdmgr.CommandManager; +import com.nemez.cmdmgr.component.*; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandMap; @@ -15,29 +12,21 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import com.nemez.cmdmgr.Command; -import com.nemez.cmdmgr.Command.AsyncType; -import com.nemez.cmdmgr.CommandManager; -import com.nemez.cmdmgr.component.BooleanComponent; -import com.nemez.cmdmgr.component.ByteComponent; -import com.nemez.cmdmgr.component.ConstantComponent; -import com.nemez.cmdmgr.component.DoubleComponent; -import com.nemez.cmdmgr.component.FloatComponent; -import com.nemez.cmdmgr.component.ICommandComponent; -import com.nemez.cmdmgr.component.IntegerComponent; -import com.nemez.cmdmgr.component.LongComponent; -import com.nemez.cmdmgr.component.OptionalComponent; -import com.nemez.cmdmgr.component.ShortComponent; -import com.nemez.cmdmgr.component.StringComponent; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; public class Executable extends org.bukkit.command.Command { private ArrayList commands; - private ArrayList help; - private String name; - private String methodContainerName; - private JavaPlugin plugin; - + private ArrayList help; + private String name; + private String methodContainerName; + private JavaPlugin plugin; + public Executable(String name, ArrayList help, String methodContainerName) { super(name); this.help = help; @@ -45,43 +34,43 @@ public class Executable extends org.bukkit.command.Command { this.commands = new ArrayList(); this.methodContainerName = methodContainerName; } - + public String getMethodContainerName() { return methodContainerName; } - + public void register(ArrayList methods, JavaPlugin plugin, Object methodContainer, ArrayList aliases) { methodContainerName = methodContainer.getClass().getSimpleName().toLowerCase(); for (HelpPageCommand[] page : help) { for (HelpPageCommand cmd : page) { if (cmd != null) { processLine(cmd.usage.split("\\ "), cmd.permission, cmd.method, methods, methodContainer, plugin, cmd.type); - String newUsage = ""; - String buffer = ""; - String typeBuffer = ""; - boolean ignore = false; - boolean toBuffer = false; + String newUsage = ""; + String buffer = ""; + String typeBuffer = ""; + boolean ignore = false; + boolean toBuffer = false; for (char c : cmd.usage.toCharArray()) { if (c == '<') { toBuffer = true; - }else if (c == ':') { + } else if (c == ':') { toBuffer = false; ignore = true; - }else if (c == '>') { + } else if (c == '>') { ignore = false; if (typeBuffer.equals("flag")) { newUsage += '[' + buffer + (CommandManager.debugHelpMenu ? ':' + typeBuffer : "") + ']'; - }else{ + } else { newUsage += '<' + buffer + (CommandManager.debugHelpMenu ? ':' + typeBuffer : "") + '>'; } buffer = ""; typeBuffer = ""; - }else{ + } else { if (toBuffer) { buffer += c; - }else if (ignore) { + } else if (ignore) { typeBuffer += c; - }else{ + } else { newUsage += c; } } @@ -90,37 +79,38 @@ public class Executable extends org.bukkit.command.Command { } } } - + this.plugin = plugin; try { final Field cmdMap = Bukkit.getServer().getClass().getDeclaredField("commandMap"); cmdMap.setAccessible(true); - CommandMap map = (CommandMap) cmdMap.get(Bukkit.getServer()); + CommandMap map = (CommandMap) cmdMap.get(Bukkit.getServer()); final Field knownCommandsField = map.getClass().getSuperclass().getDeclaredField("knownCommands"); knownCommandsField.setAccessible(true); - @SuppressWarnings("unchecked") + @SuppressWarnings ("unchecked") Map knownCommands = (Map) knownCommandsField.get(map); knownCommands.remove(name); map.register(methodContainerName, this); for (String alias : aliases) { - Executable cmd = new Executable(alias, this.help, methodContainerName); - cmd.commands = this.commands; - cmd.plugin = this.plugin; - knownCommands.remove(alias); - map.register(methodContainerName, cmd); + Executable cmd = new Executable(alias, this.help, methodContainerName); + cmd.commands = this.commands; + cmd.plugin = this.plugin; + knownCommands.remove(alias); + map.register(methodContainerName, cmd); } } catch (Exception e) { plugin.getLogger().log(Level.SEVERE, "Failed to register command '" + name + "'!"); e.printStackTrace(); } - + if (CommandManager.errors) { plugin.getLogger().log(Level.WARNING, "There were parser errors, some commands may not function properly!"); CommandManager.errors = false; } } - - private void processLine(String[] line, String permission, String method, ArrayList methods, Object methodContainer, JavaPlugin plugin, Type etype) { + + private void processLine(String[] line, String permission, String method, ArrayList methods, Object methodContainer, JavaPlugin plugin, + Type etype) { ArrayList command = new ArrayList(); if (method == null && line[1].equals("help")) { command.add(new ConstantComponent("help")); @@ -133,75 +123,75 @@ public class Executable extends org.bukkit.command.Command { } HashMap methodParams = new HashMap(); method = method.trim() + " "; - String[] methodArray = method.split(" "); - Method target = null; - ArrayList links = new ArrayList(); - + String[] methodArray = method.split(" "); + Method target = null; + ArrayList links = new ArrayList(); + for (String s : line) { if (s.contains("/")) { continue; } if (s.contains(":")) { - String[] type = s.split(":"); - String paramName = ""; + String[] type = s.split(":"); + String paramName = ""; switch (type[1].substring(0, type[1].length() - 1)) { - case "i8": - ByteComponent comp1 = new ByteComponent(); - comp1.argName = type[0].substring(1); - paramName = comp1.argName; - command.add(comp1); - break; - case "i16": - ShortComponent comp2 = new ShortComponent(); - comp2.argName = type[0].substring(1); - paramName = comp2.argName; - command.add(comp2); - break; - case "i32": - IntegerComponent comp3 = new IntegerComponent(); - comp3.argName = type[0].substring(1); - paramName = comp3.argName; - command.add(comp3); - break; - case "i64": - LongComponent comp4 = new LongComponent(); - comp4.argName = type[0].substring(1); - paramName = comp4.argName; - command.add(comp4); - break; - case "fp32": - FloatComponent comp5 = new FloatComponent(); - comp5.argName = type[0].substring(1); - paramName = comp5.argName; - command.add(comp5); - break; - case "fp64": - DoubleComponent comp6 = new DoubleComponent(); - comp6.argName = type[0].substring(1); - paramName = comp6.argName; - command.add(comp6); - break; - case "str": - StringComponent comp7 = new StringComponent(); - comp7.argName = type[0].substring(1).replace("...", ""); - comp7.infinite = type[0].substring(1).contains("..."); - paramName = comp7.argName; - command.add(comp7); - break; - case "bool": - BooleanComponent comp8 = new BooleanComponent(); - comp8.argName = type[0].substring(1); - paramName = comp8.argName; - command.add(comp8); - break; - case "flag": - OptionalComponent comp9 = new OptionalComponent(); - comp9.argName = type[0].substring(1); - paramName = comp9.argName; - command.add(comp9); - break; - default: - return; + case "i8": + ByteComponent comp1 = new ByteComponent(); + comp1.argName = type[0].substring(1); + paramName = comp1.argName; + command.add(comp1); + break; + case "i16": + ShortComponent comp2 = new ShortComponent(); + comp2.argName = type[0].substring(1); + paramName = comp2.argName; + command.add(comp2); + break; + case "i32": + IntegerComponent comp3 = new IntegerComponent(); + comp3.argName = type[0].substring(1); + paramName = comp3.argName; + command.add(comp3); + break; + case "i64": + LongComponent comp4 = new LongComponent(); + comp4.argName = type[0].substring(1); + paramName = comp4.argName; + command.add(comp4); + break; + case "fp32": + FloatComponent comp5 = new FloatComponent(); + comp5.argName = type[0].substring(1); + paramName = comp5.argName; + command.add(comp5); + break; + case "fp64": + DoubleComponent comp6 = new DoubleComponent(); + comp6.argName = type[0].substring(1); + paramName = comp6.argName; + command.add(comp6); + break; + case "str": + StringComponent comp7 = new StringComponent(); + comp7.argName = type[0].substring(1).replace("...", ""); + comp7.infinite = type[0].substring(1).contains("..."); + paramName = comp7.argName; + command.add(comp7); + break; + case "bool": + BooleanComponent comp8 = new BooleanComponent(); + comp8.argName = type[0].substring(1); + paramName = comp8.argName; + command.add(comp8); + break; + case "flag": + OptionalComponent comp9 = new OptionalComponent(); + comp9.argName = type[0].substring(1); + paramName = comp9.argName; + command.add(comp9); + break; + default: + return; } int index = 0; for (int i = 1; i < methodArray.length; i++) { @@ -214,29 +204,29 @@ public class Executable extends org.bukkit.command.Command { index++; } } - }else{ + } else { if (s.equals("")) { - - }else{ + + } else { command.add(new ConstantComponent(s)); } } } - + for (Method m : methods) { Command[] annotations = m.getAnnotationsByType(Command.class); if (annotations == null || annotations.length != 1) { plugin.getLogger().log(Level.WARNING, "Invalid method (" + methodArray[0] + ")"); CommandManager.errors = true; return; - }else{ + } else { if (annotations[0].hook().equals(methodArray[0])) { Class[] params = m.getParameterTypes(); - if (params.length -1 != methodParams.size()) { + if (params.length - 1 != methodParams.size()) { plugin.getLogger().log(Level.WARNING, "Invalid method (" + methodArray[0] + "): Arguments don't match"); CommandManager.errors = true; return; - }else{ + } else { for (int i = 0; i < params.length; i++) { if (i == 0) { if (params[0] != CommandSender.class) { @@ -244,27 +234,27 @@ public class Executable extends org.bukkit.command.Command { CommandManager.errors = true; return; } - }else{ + } else { ICommandComponent comp = methodParams.get(i - 1); if (comp instanceof ByteComponent && params[i] == byte.class) { - - }else if (comp instanceof ShortComponent && params[i] == short.class) { - - }else if (comp instanceof IntegerComponent && params[i] == int.class) { - - }else if (comp instanceof LongComponent && params[i] == long.class) { - - }else if (comp instanceof FloatComponent && params[i] == float.class) { - - }else if (comp instanceof DoubleComponent && params[i] == double.class) { - - }else if (comp instanceof StringComponent && params[i] == String.class) { - - }else if (comp instanceof BooleanComponent && params[i] == boolean.class) { - - }else if (comp instanceof OptionalComponent && params[i] == boolean.class) { - - }else{ + + } else if (comp instanceof ShortComponent && params[i] == short.class) { + + } else if (comp instanceof IntegerComponent && params[i] == int.class) { + + } else if (comp instanceof LongComponent && params[i] == long.class) { + + } else if (comp instanceof FloatComponent && params[i] == float.class) { + + } else if (comp instanceof DoubleComponent && params[i] == double.class) { + + } else if (comp instanceof StringComponent && params[i] == String.class) { + + } else if (comp instanceof BooleanComponent && params[i] == boolean.class) { + + } else if (comp instanceof OptionalComponent && params[i] == boolean.class) { + + } else { plugin.getLogger().log(Level.WARNING, "Invalid method (" + methodArray[0] + "): Invalid method arguments"); CommandManager.errors = true; return; @@ -286,7 +276,7 @@ public class Executable extends org.bukkit.command.Command { etype = Type.BOTH; } ExecutableDefinition def; - AsyncType type = target.getAnnotation(Command.class).async(); + AsyncType type = target.getAnnotation(Command.class).async(); if (type == AsyncType.ALWAYS) def = new AsyncExecutableDefinition(command, links, permission, target, methodContainer, etype); else @@ -295,27 +285,27 @@ public class Executable extends org.bukkit.command.Command { if (def instanceof AsyncExecutableDefinition) CommandManager.asyncExecutables.add(this); } - + @Override public boolean execute(CommandSender sender, String name, String[] args_) { String[] args; if (args_.length == 0) { args = new String[0]; - }else{ + } else { ArrayList tempArgs = new ArrayList(); - String temp = ""; - int counter = 0; + String temp = ""; + int counter = 0; for (String s : args_) { if (s.endsWith("\\")) { if ((s.length() > 1 && s.charAt(s.length() - 2) == '\\') || counter + 1 == args_.length) { // escaped \ tempArgs.add(temp + s.replace("\\\\", "\\")); temp = ""; - }else{ + } else { // unescaped \ temp += s.substring(0, s.length() - 1).replace("\\\\", "\\") + " "; } - }else{ + } else { tempArgs.add(temp + s); temp = ""; } @@ -327,7 +317,7 @@ public class Executable extends org.bukkit.command.Command { } } ArrayList defs = new ArrayList(); - + if (args.length == 0) { for (ExecutableDefinition d : commands) { if (d.getLength(0) == 0) { @@ -335,9 +325,10 @@ public class Executable extends org.bukkit.command.Command { break; } } - }else{ + } else { defs.addAll(commands); - defLoop: for (int j = 0; j < defs.size(); j++) { + defLoop: + for (int j = 0; j < defs.size(); j++) { if (defs.get(j).getLength(args.length) == 0) { defs.remove(j); j--; @@ -350,7 +341,7 @@ public class Executable extends org.bukkit.command.Command { defs.remove(j); j--; continue defLoop; - }else{ + } else { i--; continue; } @@ -364,7 +355,7 @@ public class Executable extends org.bukkit.command.Command { } if (defs.size() == 0) { printPage(sender, 1); - }else{ + } else { ExecutableDefinition def = defs.get(0); for (ExecutableDefinition d : defs) { if (d.isHelp() && args[0].equals("help")) { @@ -378,20 +369,24 @@ public class Executable extends org.bukkit.command.Command { } } if (def.getPermission() != null && !def.getPermission().equals("null") && !sender.hasPermission(def.getPermission())) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandManager.noPermissionFormatting + "You do not have permission to execute this command.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', + CommandManager.noPermissionFormatting + "You do not have permission to execute this command." + )); return true; } if (def.getExecType() == Type.PLAYER) { if (!(sender instanceof Player)) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandManager.notAllowedFormatting + "Only players are allowed to run this command.")); + sender.sendMessage( + ChatColor.translateAlternateColorCodes('&', CommandManager.notAllowedFormatting + "Only players are allowed to run this command.")); return true; } - }else if (def.getExecType() == Type.CONSOLE) { + } else if (def.getExecType() == Type.CONSOLE) { if (sender instanceof Player) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandManager.notAllowedFormatting + "Only console is allowed to run this command.")); + sender.sendMessage( + ChatColor.translateAlternateColorCodes('&', CommandManager.notAllowedFormatting + "Only console is allowed to run this command.")); return true; } - }else if (def.getExecType() == Type.NOBODY) { + } else if (def.getExecType() == Type.NOBODY) { sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandManager.notAllowedFormatting + "Nobody can run this command.")); return true; } @@ -400,7 +395,7 @@ public class Executable extends org.bukkit.command.Command { if (def.isArgument(j)) { if (def.valid(j, args[i])) { arguments.add(def.get(j, args[i])); - }else if (def.isOptional(j)) { + } else if (def.isOptional(j)) { arguments.add(false); i--; } @@ -411,7 +406,7 @@ public class Executable extends org.bukkit.command.Command { int link = def.getLink(i) + 1; if (linkedArgs[link] != null) { linkedArgs[link] = linkedArgs[link].toString() + " " + arguments.get(i).toString(); - }else{ + } else { linkedArgs[link] = arguments.get(i); } } @@ -421,14 +416,19 @@ public class Executable extends org.bukkit.command.Command { } return true; } - + private void printPage(CommandSender sender, int page) { page--; if (page < 0 || page >= help.size()) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandManager.helpInvalidPageFormatting + "Non-existant page (" + (page + 1) + ").\nThere are " + help.size() + " pages.")); - }else{ + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', + CommandManager.helpInvalidPageFormatting + "Non-existant page (" + (page + 1) + ").\nThere are " + help + .size() + " pages." + )); + } else { HelpPageCommand[] pageData = help.get(page); - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandManager.helpPageHeaderFormatting + "### Help Page " + (page + 1) + "/" + (help.size()) + " ###")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', + CommandManager.helpPageHeaderFormatting + "### Help Page " + (page + 1) + "/" + (help.size()) + " ###" + )); for (HelpPageCommand c : pageData) { if (c != null) { if (c.type == null || c.type == Type.BOTH || (c.type == Type.CONSOLE && !(sender instanceof Player)) || (c.type == Type.PLAYER && sender instanceof Player)) { diff --git a/src/main/java/com/nemez/cmdmgr/util/ExecutableDefinition.java b/src/main/java/com/nemez/cmdmgr/util/ExecutableDefinition.java index 4e00e9d..53e659b 100644 --- a/src/main/java/com/nemez/cmdmgr/util/ExecutableDefinition.java +++ b/src/main/java/com/nemez/cmdmgr/util/ExecutableDefinition.java @@ -1,29 +1,29 @@ package com.nemez.cmdmgr.util; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.logging.Level; - -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.plugin.java.JavaPlugin; - import com.nemez.cmdmgr.CommandManager; import com.nemez.cmdmgr.component.ArgumentComponent; import com.nemez.cmdmgr.component.ICommandComponent; import com.nemez.cmdmgr.component.OptionalComponent; import com.nemez.cmdmgr.component.StringComponent; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.java.JavaPlugin; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.logging.Level; public class ExecutableDefinition { private ArrayList components; - private String permission; - private Method target; - private Object methodContainer; - private Type type; - private ArrayList paramLinks; - - public ExecutableDefinition(ArrayList cmd, ArrayList paramLinks, String perm, Method method, Object methodContainer, Type type) { + private String permission; + private Method target; + private Object methodContainer; + private Type type; + private ArrayList paramLinks; + + public ExecutableDefinition(ArrayList cmd, ArrayList paramLinks, String perm, Method method, Object methodContainer, + Type type) { this.components = cmd; this.permission = perm; this.target = method; @@ -31,7 +31,7 @@ public class ExecutableDefinition { this.type = type; this.paramLinks = paramLinks; } - + public boolean valid(int index, String arg) { if (index < 0) { return false; @@ -41,10 +41,10 @@ public class ExecutableDefinition { StringComponent strComp = (StringComponent) components.get(components.size() - 1); if (strComp.infinite) { return strComp.valid(arg); - }else{ + } else { return false; } - }else{ + } else { return false; } } @@ -60,16 +60,16 @@ public class ExecutableDefinition { StringComponent strComp = (StringComponent) components.get(components.size() - 1); if (strComp.infinite) { return strComp.get(arg); - }else{ + } else { return null; } - }else{ + } else { return null; } } return components.get(index).get(arg); } - + public boolean isArgument(int index) { if (index < 0) { return false; @@ -79,35 +79,35 @@ public class ExecutableDefinition { StringComponent strComp = (StringComponent) components.get(components.size() - 1); if (strComp.infinite) { return true; - }else{ + } else { return false; } - }else{ + } else { return false; } } return components.get(index) instanceof ArgumentComponent; } - + public boolean isOptional(int index) { if (index < 0 || index >= components.size()) { return false; } return components.get(index) instanceof OptionalComponent; } - + public boolean isHelp() { return target == null && components.get(0).valid("help") && components.get(1).getComponentInfo().equals(""); } - + public String getPermission() { return permission; } - + public Type getExecType() { return type; } - + public int getLength(int argSize) { if (components.size() == 0) { return 0; @@ -122,7 +122,7 @@ public class ExecutableDefinition { } return components.size(); } - + public int getNumOfArgs() { int counter = 0; for (ICommandComponent c : components) { @@ -132,7 +132,7 @@ public class ExecutableDefinition { } return counter; } - + public int getLink(int i) { if (i < 0) { return i; @@ -142,16 +142,16 @@ public class ExecutableDefinition { StringComponent strComp = (StringComponent) components.get(components.size() - 1); if (strComp.infinite) { return paramLinks.get(paramLinks.size() - 1); - }else{ + } else { return i; } - }else{ + } else { return i; } } return paramLinks.get(i); } - + public boolean invoke(Object[] args, CommandSender sender, JavaPlugin plugin) { if (target == null) { return false; @@ -161,11 +161,13 @@ public class ExecutableDefinition { if (target.getReturnType() == void.class) { target.invoke(methodContainer, args); return true; - }else if (target.getReturnType() == boolean.class) { + } else if (target.getReturnType() == boolean.class) { return (boolean) target.invoke(methodContainer, args); } } catch (Exception e) { - sender.sendMessage(ChatColor.translateAlternateColorCodes('&', CommandManager.helpInvalidPageFormatting + "An internal error occured, please contact the server administrator and/or report a bug.")); + sender.sendMessage(ChatColor.translateAlternateColorCodes('&', + CommandManager.helpInvalidPageFormatting + "An internal error occured, please contact the server administrator and/or report a bug." + )); plugin.getLogger().log(Level.WARNING, "Runtime Error: invalid method"); e.printStackTrace(); return true; diff --git a/src/main/java/com/nemez/cmdmgr/util/HelpPageCommand.java b/src/main/java/com/nemez/cmdmgr/util/HelpPageCommand.java index 2229672..ee277ef 100644 --- a/src/main/java/com/nemez/cmdmgr/util/HelpPageCommand.java +++ b/src/main/java/com/nemez/cmdmgr/util/HelpPageCommand.java @@ -6,8 +6,8 @@ public class HelpPageCommand { public String usage; public String description; public String method; - public Type type; - + public Type type; + public HelpPageCommand(String perm, String usage, String description, String method, Type type) { this.permission = perm; this.usage = usage.replaceAll("", ""); diff --git a/src/main/java/com/nemez/cmdmgr/util/Property.java b/src/main/java/com/nemez/cmdmgr/util/Property.java index 4d681b0..02ff16d 100644 --- a/src/main/java/com/nemez/cmdmgr/util/Property.java +++ b/src/main/java/com/nemez/cmdmgr/util/Property.java @@ -3,5 +3,5 @@ package com.nemez.cmdmgr.util; public enum Property { NONE, PERMISSION, HELP, EXECUTE, TYPE; - + } diff --git a/src/main/java/com/nemez/cmdmgr/util/Type.java b/src/main/java/com/nemez/cmdmgr/util/Type.java index f2fc37b..4f766b3 100644 --- a/src/main/java/com/nemez/cmdmgr/util/Type.java +++ b/src/main/java/com/nemez/cmdmgr/util/Type.java @@ -3,34 +3,34 @@ package com.nemez.cmdmgr.util; public enum Type { BOTH, PLAYER, CONSOLE, NOBODY; - + public static Type parse(String string) { if (string.equals("both")) { return BOTH; - }else if (string.equals("player")) { + } else if (string.equals("player")) { return PLAYER; - }else if (string.equals("console")) { + } else if (string.equals("console")) { return CONSOLE; - }else if (string.equals("nobody")) { + } else if (string.equals("nobody")) { return NOBODY; - }else{ + } else { return null; } } - + public static String get(Type t) { if (t == null) { return "null"; } switch (t) { - case BOTH: - return "both"; - case PLAYER: - return "player"; - case CONSOLE: - return "console"; - case NOBODY: - return "nobody"; + case BOTH: + return "both"; + case PLAYER: + return "player"; + case CONSOLE: + return "console"; + case NOBODY: + return "nobody"; } return "null"; } -- cgit v1.2.3