From 95993348bd73492ff61ae18be5caf1c172ee8341 Mon Sep 17 00:00:00 2001 From: fullwall Date: Sun, 4 Jan 2015 19:59:33 +0800 Subject: [PATCH] Add /npc sheep --- .../citizensnpcs/commands/NPCCommands.java | 96 +++++++++++-------- .../citizensnpcs/editor/SheepEquipper.java | 4 +- .../npc/CitizensTraitFactory.java | 4 +- .../java/net/citizensnpcs/trait/Sheared.java | 43 --------- .../net/citizensnpcs/trait/SheepTrait.java | 53 ++++++++++ 5 files changed, 115 insertions(+), 85 deletions(-) delete mode 100644 src/main/java/net/citizensnpcs/trait/Sheared.java create mode 100644 src/main/java/net/citizensnpcs/trait/SheepTrait.java diff --git a/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 9f104d4a1..54ad57429 100644 --- a/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -48,6 +48,7 @@ import net.citizensnpcs.trait.Poses; import net.citizensnpcs.trait.Powered; import net.citizensnpcs.trait.RabbitType; import net.citizensnpcs.trait.RabbitType.RabbitTypes; +import net.citizensnpcs.trait.SheepTrait; import net.citizensnpcs.trait.SlimeSize; import net.citizensnpcs.trait.VillagerProfession; import net.citizensnpcs.trait.WolfModifiers; @@ -271,7 +272,7 @@ public class NPCCommands { } CommandSenderCreateNPCEvent event = sender instanceof Player ? new PlayerCreateNPCEvent((Player) sender, copy) - : new CommandSenderCreateNPCEvent(sender, copy); + : new CommandSenderCreateNPCEvent(sender, copy); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { event.getNPC().destroy(); @@ -347,7 +348,7 @@ public class NPCCommands { spawnLoc = args.getSenderLocation(); } CommandSenderCreateNPCEvent event = sender instanceof Player ? new PlayerCreateNPCEvent((Player) sender, npc) - : new CommandSenderCreateNPCEvent(sender, npc); + : new CommandSenderCreateNPCEvent(sender, npc); Bukkit.getPluginManager().callEvent(event); if (event.isCancelled()) { npc.destroy(); @@ -1024,7 +1025,7 @@ public class NPCCommands { @Requirements(selected = true, ownership = true, types = { EntityType.CREEPER }) public void power(CommandContext args, CommandSender sender, NPC npc) { Messaging - .sendTr(sender, npc.getTrait(Powered.class).toggle() ? Messages.POWERED_SET : Messages.POWERED_STOPPED); + .sendTr(sender, npc.getTrait(Powered.class).toggle() ? Messages.POWERED_SET : Messages.POWERED_STOPPED); } @Command( @@ -1040,14 +1041,29 @@ public class NPCCommands { String profession = args.getString(1); Profession parsed = Util.matchEnum(Profession.values(), profession.toUpperCase()); if (parsed == null) { - throw new CommandException(Messages.INVALID_PROFESSION,args.getString(1),StringUtils.join(Profession.values(), ",")); + throw new CommandException(Messages.INVALID_PROFESSION, args.getString(1), StringUtils.join( + Profession.values(), ",")); } npc.getTrait(VillagerProfession.class).setProfession(parsed); Messaging.sendTr(sender, Messages.PROFESSION_SET, npc.getName(), profession); } + @Command(aliases = { "npc" }, usage = "rabbittype [type]", desc = "Set the Type of a Rabbit NPC", modifiers = { + "rabbittype", "rbtype" }, min = 2, permission = "citizens.npc.rabbittype") + @Requirements(selected = true, ownership = true, types = { EntityType.RABBIT }) + public void rabbitType(CommandContext args, CommandSender sender, NPC npc) throws CommandException { + RabbitTypes type; + try { + type = RabbitTypes.valueOf(args.getString(1).toUpperCase()); + } catch (IllegalArgumentException ex) { + throw new CommandException(Messages.INVALID_RABBIT_TYPE, StringUtils.join(RabbitTypes.values(), ",")); + } + npc.getTrait(RabbitType.class).setType(type); + Messaging.sendTr(sender, Messages.RABBIT_TYPE_SET, npc.getName(), type.name()); + } + @Command(aliases = { "npc" }, usage = "remove|rem (all|id|name)", desc = "Remove a NPC", modifiers = { "remove", - "rem" }, min = 1, max = 2) + "rem" }, min = 1, max = 2) @Requirements public void remove(final CommandContext args, final CommandSender sender, NPC npc) throws CommandException { if (args.argsLength() == 2) { @@ -1085,25 +1101,6 @@ public class NPCCommands { Messaging.sendTr(sender, Messages.NPC_REMOVED, npc.getName()); } - @Command( - aliases = { "npc" }, - usage = "rabbittype [type]", - desc = "Set the Type of a Rabbit NPC", - modifiers = { "rabbittype","rbtype" }, - min = 2, - permission = "citizens.npc.rabbittype") - @Requirements(selected = true, ownership = true, types = { EntityType.RABBIT }) - public void rabbitType(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - RabbitTypes type; - try { - type = RabbitTypes.valueOf(args.getString(1).toUpperCase()); - } catch (IllegalArgumentException ex) { - throw new CommandException(Messages.INVALID_RABBIT_TYPE,StringUtils.join(RabbitTypes.values(), ",")); - } - npc.getTrait(RabbitType.class).setType(type); - Messaging.sendTr(sender, Messages.RABBIT_TYPE_SET, npc.getName(), type.name()); - } - @Command( aliases = { "npc" }, usage = "rename [name]", @@ -1194,16 +1191,38 @@ public class NPCCommands { } } + @Command( + aliases = { "npc" }, + usage = "sheep (--color [color]) (--sheared [sheared])", + desc = "Sets sheep modifiers", + modifiers = { "sheep" }, + min = 1, + max = 1, + permission = "citizens.npc.sheep") + @Requirements(selected = true, ownership = true, types = { EntityType.SHEEP }) + public void sheep(CommandContext args, CommandSender sender, NPC npc) { + SheepTrait trait = npc.getTrait(SheepTrait.class); + if (args.hasValueFlag("sheared")) { + trait.setSheared(Boolean.valueOf(args.getFlag("sheared"))); + } + if (args.hasValueFlag("color")) { + DyeColor color = Util.matchEnum(DyeColor.values(), args.getFlag("color")); + if (color != null) { + trait.setColor(color); + } + } + } + @Command(aliases = { "npc" }, usage = "skeletontype [type]", desc = "Sets the NPC's skeleton type", modifiers = { "skeletontype", "sktype" }, min = 2, max = 2, permission = "citizens.npc.skeletontype") @Requirements(selected = true, ownership = true, types = EntityType.SKELETON) public void skeletonType(CommandContext args, CommandSender sender, NPC npc) throws CommandException { - SkeletonType type; - try { - type = SkeletonType.valueOf(args.getString(1).toUpperCase()); - } catch (IllegalArgumentException ex) { - throw new CommandException(Messages.INVALID_SKELETON_TYPE,StringUtils.join(SkeletonType.values(), ",")); - } + SkeletonType type; + try { + type = SkeletonType.valueOf(args.getString(1).toUpperCase()); + } catch (IllegalArgumentException ex) { + throw new CommandException(Messages.INVALID_SKELETON_TYPE, StringUtils.join(SkeletonType.values(), ",")); + } npc.getTrait(NPCSkeletonType.class).setType(type); Messaging.sendTr(sender, Messages.SKELETON_TYPE_SET, npc.getName(), type); } @@ -1586,18 +1605,19 @@ public class NPCCommands { try { color = DyeColor.valueOf(unparsed.toUpperCase().replace(' ', '_')); } catch (IllegalArgumentException e) { - try { - int rgb = Integer.parseInt(unparsed.replace("#", ""), 16); - color = DyeColor.getByColor(org.bukkit.Color.fromRGB(rgb)); - } catch (NumberFormatException ex) { - throw new CommandException(Messages.COLLAR_COLOUR_NOT_RECOGNISED,unparsed); - } + try { + int rgb = Integer.parseInt(unparsed.replace("#", ""), 16); + color = DyeColor.getByColor(org.bukkit.Color.fromRGB(rgb)); + } catch (NumberFormatException ex) { + throw new CommandException(Messages.COLLAR_COLOUR_NOT_RECOGNISED, unparsed); + } } if (color == null) - throw new CommandException(Messages.COLLAR_COLOUR_NOT_SUPPORTED,unparsed); + throw new CommandException(Messages.COLLAR_COLOUR_NOT_SUPPORTED, unparsed); trait.setCollarColor(color); } - Messaging.sendTr(sender, Messages.WOLF_TRAIT_UPDATED, npc.getName(), args.hasFlag('a'), args.hasFlag('s'), args.hasFlag('t'),trait.getCollarColor().name()); + Messaging.sendTr(sender, Messages.WOLF_TRAIT_UPDATED, npc.getName(), args.hasFlag('a'), args.hasFlag('s'), + args.hasFlag('t'), trait.getCollarColor().name()); } @Command( diff --git a/src/main/java/net/citizensnpcs/editor/SheepEquipper.java b/src/main/java/net/citizensnpcs/editor/SheepEquipper.java index bf0735114..06916d4a9 100644 --- a/src/main/java/net/citizensnpcs/editor/SheepEquipper.java +++ b/src/main/java/net/citizensnpcs/editor/SheepEquipper.java @@ -2,7 +2,7 @@ package net.citizensnpcs.editor; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.util.Messaging; -import net.citizensnpcs.trait.Sheared; +import net.citizensnpcs.trait.SheepTrait; import net.citizensnpcs.trait.WoolColor; import net.citizensnpcs.util.Messages; @@ -19,7 +19,7 @@ public class SheepEquipper implements Equipper { ItemStack hand = equipper.getItemInHand(); Sheep sheep = (Sheep) toEquip.getEntity(); if (hand.getType() == Material.SHEARS) { - Messaging.sendTr(equipper, toEquip.getTrait(Sheared.class).toggle() ? Messages.SHEARED_SET + Messaging.sendTr(equipper, toEquip.getTrait(SheepTrait.class).toggleSheared() ? Messages.SHEARED_SET : Messages.SHEARED_STOPPED, toEquip.getName()); } else if (hand.getType() == Material.INK_SACK) { Dye dye = (Dye) hand.getData(); diff --git a/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java b/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java index 4690a67a1..107a5f47e 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensTraitFactory.java @@ -30,7 +30,7 @@ import net.citizensnpcs.trait.Poses; import net.citizensnpcs.trait.Powered; import net.citizensnpcs.trait.RabbitType; import net.citizensnpcs.trait.Saddle; -import net.citizensnpcs.trait.Sheared; +import net.citizensnpcs.trait.SheepTrait; import net.citizensnpcs.trait.SlimeSize; import net.citizensnpcs.trait.VillagerProfession; import net.citizensnpcs.trait.WolfModifiers; @@ -64,7 +64,7 @@ public class CitizensTraitFactory implements TraitFactory { registerTrait(TraitInfo.create(Powered.class).withName("powered")); registerTrait(TraitInfo.create(RabbitType.class).withName("rabbittype")); registerTrait(TraitInfo.create(Saddle.class).withName("saddle")); - registerTrait(TraitInfo.create(Sheared.class).withName("sheared")); + registerTrait(TraitInfo.create(SheepTrait.class).withName("sheeptrait")); registerTrait(TraitInfo.create(NPCSkeletonType.class).withName("skeletontype")); registerTrait(TraitInfo.create(SlimeSize.class).withName("slimesize")); registerTrait(TraitInfo.create(Spawned.class).withName("spawned")); diff --git a/src/main/java/net/citizensnpcs/trait/Sheared.java b/src/main/java/net/citizensnpcs/trait/Sheared.java deleted file mode 100644 index 9ac028095..000000000 --- a/src/main/java/net/citizensnpcs/trait/Sheared.java +++ /dev/null @@ -1,43 +0,0 @@ -package net.citizensnpcs.trait; - -import net.citizensnpcs.api.CitizensAPI; -import net.citizensnpcs.api.persistence.Persist; -import net.citizensnpcs.api.trait.Trait; - -import org.bukkit.entity.Sheep; -import org.bukkit.event.EventHandler; -import org.bukkit.event.player.PlayerShearEntityEvent; - -public class Sheared extends Trait implements Toggleable { - @Persist("") - private boolean sheared; - - public Sheared() { - super("sheared"); - } - - @EventHandler - public void onPlayerShearEntityEvent(PlayerShearEntityEvent event) { - if (npc.equals(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()))) - event.setCancelled(true); - } - - @Override - public void onSpawn() { - if (npc.getEntity() instanceof Sheep) - ((Sheep) npc.getEntity()).setSheared(sheared); - } - - @Override - public boolean toggle() { - sheared = !sheared; - if (npc.getEntity() instanceof Sheep) - ((Sheep) npc.getEntity()).setSheared(sheared); - return sheared; - } - - @Override - public String toString() { - return "Sheared{" + sheared + "}"; - } -} \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/trait/SheepTrait.java b/src/main/java/net/citizensnpcs/trait/SheepTrait.java new file mode 100644 index 000000000..20173d9a8 --- /dev/null +++ b/src/main/java/net/citizensnpcs/trait/SheepTrait.java @@ -0,0 +1,53 @@ +package net.citizensnpcs.trait; + +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.persistence.Persist; +import net.citizensnpcs.api.trait.Trait; + +import org.bukkit.DyeColor; +import org.bukkit.entity.Sheep; +import org.bukkit.event.EventHandler; +import org.bukkit.event.player.PlayerShearEntityEvent; + +public class SheepTrait extends Trait { + @Persist("color") + private DyeColor color; + @Persist("sheared") + private boolean sheared; + + public SheepTrait() { + super("sheeptrait"); + } + + @EventHandler + public void onPlayerShearEntityEvent(PlayerShearEntityEvent event) { + if (npc != null && npc.equals(CitizensAPI.getNPCRegistry().getNPC(event.getEntity()))) { + event.setCancelled(true); + } + } + + @Override + public void onSpawn() { + } + + @Override + public void run() { + if (npc.getEntity() instanceof Sheep) { + Sheep sheep = (Sheep) npc.getEntity(); + sheep.setSheared(sheared); + sheep.setColor(color); + } + } + + public void setColor(DyeColor color) { + this.color = color; + } + + public void setSheared(boolean sheared) { + this.sheared = sheared; + } + + public boolean toggleSheared() { + return sheared = !sheared; + } +}