From e940a9e0e9a53c5dbe35351f88092832ac5609e0 Mon Sep 17 00:00:00 2001 From: libraryaddict Date: Sat, 14 Jun 2014 20:55:28 +1200 Subject: [PATCH] Allow boolean params to not require a argument to be true --- .../utilities/BaseDisguiseCommand.java | 177 +++++++++--------- 1 file changed, 91 insertions(+), 86 deletions(-) diff --git a/src/me/libraryaddict/disguise/utilities/BaseDisguiseCommand.java b/src/me/libraryaddict/disguise/utilities/BaseDisguiseCommand.java index 144b79ea..8b38f1cd 100644 --- a/src/me/libraryaddict/disguise/utilities/BaseDisguiseCommand.java +++ b/src/me/libraryaddict/disguise/utilities/BaseDisguiseCommand.java @@ -335,10 +335,7 @@ public abstract class BaseDisguiseCommand implements CommandExecutor { args = newArgs; for (int i = 0; i < args.length; i += 2) { String methodName = args[i]; - if (i + 1 >= args.length) { - throw new Exception(ChatColor.RED + "No value was given for the option " + methodName); - } - String valueString = args[i + 1]; + String valueString = (args.length - 1 == i ? null : args[i + 1]); Method methodToUse = null; Object value = null; for (Method method : disguise.getWatcher().getClass().getMethods()) { @@ -355,92 +352,100 @@ public abstract class BaseDisguiseCommand implements CommandExecutor { Class[] types = methodToUse.getParameterTypes(); if (types.length == 1) { Class param = types[0]; - if (int.class == param) { - // Parse to integer - if (isNumeric(valueString)) { - value = (int) Integer.parseInt(valueString); - } else { - throw parseToException("number", valueString, methodName); - } - } else if (float.class == param || double.class == param) { - // Parse to number - if (isDouble(valueString)) { - float obj = Float.parseFloat(valueString); - if (param == float.class) { - value = (float) obj; - } else if (param == double.class) { - value = (double) obj; - } - } else { - throw parseToException("number.0", valueString, methodName); - } - } else if (boolean.class == param) { + if (boolean.class == param) { // Parse to boolean - if (!("true".equalsIgnoreCase(valueString) || "false".equalsIgnoreCase(valueString))) - throw parseToException("true/false", valueString, methodName); - value = (boolean) "true".equalsIgnoreCase(valueString); - } else if (param == String.class) { - // Parse to string - value = ChatColor.translateAlternateColorCodes('&', valueString); - } else if (param == AnimalColor.class) { - // Parse to animal color - try { - value = AnimalColor.valueOf(valueString.toUpperCase()); - } catch (Exception ex) { - throw parseToException("animal color", valueString, methodName); - } - } else if (param == ItemStack.class) { - // Parse to itemstack - try { - value = parseToItemstack(valueString); - } catch (Exception ex) { - throw new Exception(String.format(ex.getMessage(), methodName)); - } - } else if (param == ItemStack[].class) { - // Parse to itemstack array - ItemStack[] items = new ItemStack[4]; - String[] split = valueString.split(","); - if (split.length == 4) { - for (int a = 0; a < 4; a++) { - try { - items[a] = parseToItemstack(split[a]); - } catch (Exception ex) { - throw parseToException("item ID,ID,ID,ID" + ChatColor.RED + " or " + ChatColor.GREEN - + "ID:Data,ID:Data,ID:Data,ID:Data combo", valueString, methodName); - } - } + if (valueString == null || !("true".equalsIgnoreCase(valueString) || "false".equalsIgnoreCase(valueString))) { + value = true; + i--; } else { - throw parseToException("item ID,ID,ID,ID" + ChatColor.RED + " or " + ChatColor.GREEN - + "ID:Data,ID:Data,ID:Data,ID:Data combo", valueString, methodName); + value = "true".equalsIgnoreCase(valueString); } - value = items; - } else if (param.getSimpleName().equals("Color")) { - // Parse to horse color - value = callValueOf(param, valueString, methodName, "a horse color"); - } else if (param.getSimpleName().equals("Style")) { - // Parse to horse style - value = callValueOf(param, valueString, methodName, "a horse style"); - } else if (param.getSimpleName().equals("Profession")) { - // Parse to villager profession - value = callValueOf(param, valueString, methodName, "a villager profession"); - } else if (param.getSimpleName().equals("Art")) { - // Parse to art type - value = callValueOf(param, valueString, methodName, "a painting art"); - } else if (param.getSimpleName().equals("Type")) { - // Parse to ocelot type - value = callValueOf(param, valueString, methodName, "a ocelot type"); - } else if (param == PotionEffectType.class) { - // Parse to potion effect - try { - PotionEffectType potionType = PotionEffectType.getByName(valueString.toUpperCase()); - if (potionType == null && isNumeric(valueString)) { - potionType = PotionEffectType.getById(Integer.parseInt(valueString)); + } else { + if (valueString == null) { + throw new Exception(ChatColor.RED + "No value was given for the option " + methodName); + } + if (int.class == param) { + // Parse to integer + if (isNumeric(valueString)) { + value = (int) Integer.parseInt(valueString); + } else { + throw parseToException("number", valueString, methodName); + } + } else if (float.class == param || double.class == param) { + // Parse to number + if (isDouble(valueString)) { + float obj = Float.parseFloat(valueString); + if (param == float.class) { + value = (float) obj; + } else if (param == double.class) { + value = (double) obj; + } + } else { + throw parseToException("number.0", valueString, methodName); + } + } else if (param == String.class) { + // Parse to string + value = ChatColor.translateAlternateColorCodes('&', valueString); + } else if (param == AnimalColor.class) { + // Parse to animal color + try { + value = AnimalColor.valueOf(valueString.toUpperCase()); + } catch (Exception ex) { + throw parseToException("animal color", valueString, methodName); + } + } else if (param == ItemStack.class) { + // Parse to itemstack + try { + value = parseToItemstack(valueString); + } catch (Exception ex) { + throw new Exception(String.format(ex.getMessage(), methodName)); + } + } else if (param == ItemStack[].class) { + // Parse to itemstack array + ItemStack[] items = new ItemStack[4]; + String[] split = valueString.split(","); + if (split.length == 4) { + for (int a = 0; a < 4; a++) { + try { + items[a] = parseToItemstack(split[a]); + } catch (Exception ex) { + throw parseToException("item ID,ID,ID,ID" + ChatColor.RED + " or " + ChatColor.GREEN + + "ID:Data,ID:Data,ID:Data,ID:Data combo", valueString, methodName); + } + } + } else { + throw parseToException("item ID,ID,ID,ID" + ChatColor.RED + " or " + ChatColor.GREEN + + "ID:Data,ID:Data,ID:Data,ID:Data combo", valueString, methodName); + } + value = items; + } else if (param.getSimpleName().equals("Color")) { + // Parse to horse color + value = callValueOf(param, valueString, methodName, "a horse color"); + } else if (param.getSimpleName().equals("Style")) { + // Parse to horse style + value = callValueOf(param, valueString, methodName, "a horse style"); + } else if (param.getSimpleName().equals("Profession")) { + // Parse to villager profession + value = callValueOf(param, valueString, methodName, "a villager profession"); + } else if (param.getSimpleName().equals("Art")) { + // Parse to art type + value = callValueOf(param, valueString, methodName, "a painting art"); + } else if (param.getSimpleName().equals("Type")) { + // Parse to ocelot type + value = callValueOf(param, valueString, methodName, "a ocelot type"); + } else if (param == PotionEffectType.class) { + // Parse to potion effect + try { + PotionEffectType potionType = PotionEffectType.getByName(valueString.toUpperCase()); + if (potionType == null && isNumeric(valueString)) { + potionType = PotionEffectType.getById(Integer.parseInt(valueString)); + } + if (potionType == null) + throw new Exception(); + value = potionType; + } catch (Exception ex) { + throw parseToException("a potioneffect type", valueString, methodName); } - if (potionType == null) - throw new Exception(); - value = potionType; - } catch (Exception ex) { - throw parseToException("a potioneffect type", valueString, methodName); } } }