From 7ba26f3be9834421046aa62c0d3110e6233ae3ea Mon Sep 17 00:00:00 2001 From: David Cernat Date: Tue, 4 Jun 2013 14:57:22 +0300 Subject: [PATCH] Make Equip command work with armor and streamline its usage. New example usage: - equip hand:iron_sword head:iron_helmet boots:iron_boots --- .../scripts/commands/CommandRegistry.java | 4 +- .../scripts/commands/core/EquipCommand.java | 109 ++++++++++++------ .../commands/core/FireworkCommand.java | 6 +- .../denizen/utilities/arguments/aH.java | 2 +- 4 files changed, 77 insertions(+), 44 deletions(-) diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java index c6805b8a08..385e3ca26e 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/CommandRegistry.java @@ -95,10 +95,10 @@ public void registerCoreMembers() { "ENGAGE", "engage (duration:#) (npcid:#)", 0); registerCoreMember(EngraveCommand.class, - "ENGRAVE", "engrave (SET|REMOVE) (TARGET:player_name)", 0); + "ENGRAVE", "engrave (set|remove) (target:player_name)", 0); registerCoreMember(EquipCommand.class, - "EQUIP", "equip ({HAND}|BOOTS|LEGS|CHEST|HEAD) [item:#(:#)|item:material(:#)]", 1); + "EQUIP", "equip (hand:[#|material](:#)) (head:[#|material](:#)) (chest:[#|material](:#)) (legs:[#|material](:#)) (boots:[#|material](:#))", 1); registerCoreMember(ExecuteCommand.class, "EXECUTE", "execute [as_player|as_op|as_npc|as_server] [\"Bukkit command\"]", 2); diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/core/EquipCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/core/EquipCommand.java index 656b2c85ab..297340985b 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/core/EquipCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/core/EquipCommand.java @@ -6,68 +6,103 @@ import net.aufdemrand.denizen.scripts.commands.AbstractCommand; import net.aufdemrand.denizen.utilities.arguments.dItem; import net.aufdemrand.denizen.utilities.arguments.aH; +import net.aufdemrand.denizen.utilities.arguments.aH.ArgumentType; import net.aufdemrand.denizen.utilities.debugging.dB; import net.aufdemrand.denizen.utilities.debugging.dB.Messages; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.trait.trait.Equipment; public class EquipCommand extends AbstractCommand{ - public enum EquipType { HAND, BOOTS, LEGS, CHEST, HEAD } @Override public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException { - EquipType equipType = EquipType.HAND; - dItem item = null; + dItem hand = null; + dItem head = null; + dItem chest = null; + dItem legs = null; + dItem boots = null; for (String arg : scriptEntry.getArguments()) { - if (aH.matchesItem(arg)) { - item = aH.getItemFrom(arg); - dB.echoDebug(Messages.DEBUG_SET_ITEM, arg); - } else if (aH.matchesArg("ITEMINHAND, HAND, HOLDING", arg)) { - try { - equipType = EquipType.valueOf(arg); - dB.echoDebug("... equipping for " + equipType.name()); - } catch (Exception e) { throw new InvalidArgumentsException(Messages.ERROR_UNKNOWN_ARGUMENT, arg); } - } + + if (aH.matchesValueArg("ITEMINHAND, HAND, HOLDING", arg, ArgumentType.String)) { + + arg = "ITEM:" + arg.split(":")[1]; + + if (aH.matchesItem(arg)) { + hand = aH.getItemFrom(arg); + } + } + else if (aH.matchesValueArg("HEAD, HELMET", arg, ArgumentType.String)) { + + arg = "ITEM:" + arg.split(":")[1]; + + if (aH.matchesItem(arg)) { + head = aH.getItemFrom(arg); + } + } + else if (aH.matchesValueArg("CHEST, CHESTPLATE", arg, ArgumentType.String)) { + + arg = "ITEM:" + arg.split(":")[1]; + + if (aH.matchesItem(arg)) { + chest = aH.getItemFrom(arg); + } + } + else if (aH.matchesValueArg("LEGS, LEGGINGS", arg, ArgumentType.String)) { + + arg = "ITEM:" + arg.split(":")[1]; + + if (aH.matchesItem(arg)) { + legs = aH.getItemFrom(arg); + } + } + else if (aH.matchesValueArg("BOOTS", arg, ArgumentType.String)) { + + arg = "ITEM:" + arg.split(":")[1]; + + if (aH.matchesItem(arg)) { + boots = aH.getItemFrom(arg); + } + } } - - if (item == null) { - dB.echoError("...no item specified to equip!"); - } - - scriptEntry.addObject("item", item) - .addObject("equipType", equipType); + + scriptEntry.addObject("hand", hand) + .addObject("head", head) + .addObject("chest", chest) + .addObject("legs", legs) + .addObject("boots", boots); } @Override public void execute(ScriptEntry scriptEntry) throws CommandExecutionException { - EquipType equipType = (EquipType) scriptEntry.getObject("equipType"); - dItem item = (dItem) scriptEntry.getObject("item"); + dItem hand = (dItem) scriptEntry.getObject("hand"); + dItem head = (dItem) scriptEntry.getObject("head"); + dItem chest = (dItem) scriptEntry.getObject("chest"); + dItem legs = (dItem) scriptEntry.getObject("legs"); + dItem boots = (dItem) scriptEntry.getObject("boots"); NPC npc = scriptEntry.getNPC().getCitizen(); if (!npc.hasTrait(Equipment.class)) npc.addTrait(Equipment.class); Equipment trait = npc.getTrait(Equipment.class); - switch (equipType) { - case BOOTS: - trait.set(4, item.getItemStack()); - break; - case CHEST: - trait.set(2, item.getItemStack()); - break; - case HAND: - trait.set(0, item.getItemStack()); - break; - case HEAD: - trait.set(1, item.getItemStack()); - break; - case LEGS: - trait.set(3, item.getItemStack()); - break; + if (hand != null) { + trait.set(0, hand.getItemStack()); + } + if (head != null) { + trait.set(1, head.getItemStack()); + } + if (chest != null) { + trait.set(2, chest.getItemStack()); + } + if (legs != null) { + trait.set(3, legs.getItemStack()); + } + if (boots != null) { + trait.set(4, boots.getItemStack()); } } diff --git a/src/main/java/net/aufdemrand/denizen/scripts/commands/core/FireworkCommand.java b/src/main/java/net/aufdemrand/denizen/scripts/commands/core/FireworkCommand.java index 5d1fa6d78c..9178c05b02 100644 --- a/src/main/java/net/aufdemrand/denizen/scripts/commands/core/FireworkCommand.java +++ b/src/main/java/net/aufdemrand/denizen/scripts/commands/core/FireworkCommand.java @@ -50,8 +50,6 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException for (FireworkEffect.Type typeValue : FireworkEffect.Type.values()) { - dB.echoApproval("Checking if " + typeValue.name() + " matches " + arg.split(":", 2)[1].toUpperCase()); - if (arg.split(":", 2)[1].toUpperCase().matches(typeValue.name())) { type = typeValue; @@ -82,7 +80,7 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException primary.add(aH.getColorFrom(element)); } else { - dB.echoError("Invalid color" + element + "!"); + dB.echoError("Invalid color " + element + "!"); } } } else if (aH.matchesValueArg("FADE", arg, ArgumentType.String)) { @@ -93,7 +91,7 @@ public void parseArgs(ScriptEntry scriptEntry) throws InvalidArgumentsException fade.add(aH.getColorFrom(element)); } else { - dB.echoError("Invalid color" + element + "!"); + dB.echoError("Invalid color " + element + "!"); } } } else throw new InvalidArgumentsException(Messages.ERROR_UNKNOWN_ARGUMENT, arg); diff --git a/src/main/java/net/aufdemrand/denizen/utilities/arguments/aH.java b/src/main/java/net/aufdemrand/denizen/utilities/arguments/aH.java index 1766628b2c..40663bb2ee 100644 --- a/src/main/java/net/aufdemrand/denizen/utilities/arguments/aH.java +++ b/src/main/java/net/aufdemrand/denizen/utilities/arguments/aH.java @@ -391,7 +391,7 @@ else if (entityGroupUpper.startsWith("NPC.") } else if (entityGroupUpper.startsWith("PLAYER.") - || entityGroupUpper.startsWith("P@.")) { + || entityGroupUpper.startsWith("P@")) { LivingEntity returnable = getPlayerFrom(entityGroup.split("\\.")[1]); if (returnable != null) return returnable; else dB.echoError("Invalid Player! '" + entityGroup + "' could not be found. Has the player logged off?");