diff --git a/src/main/java/net/citizensnpcs/editor/Editor.java b/src/main/java/net/citizensnpcs/editor/Editor.java index 643a8e0b9..1866d1e6a 100644 --- a/src/main/java/net/citizensnpcs/editor/Editor.java +++ b/src/main/java/net/citizensnpcs/editor/Editor.java @@ -10,12 +10,12 @@ import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; public abstract class Editor implements Listener { + private static final Map editing = new HashMap(); + public abstract void begin(); public abstract void end(); - private static final Map editing = new HashMap(); - private static void enter(Player player, Editor editor) { editor.begin(); player.getServer().getPluginManager() diff --git a/src/main/java/net/citizensnpcs/editor/EquipmentEditor.java b/src/main/java/net/citizensnpcs/editor/EquipmentEditor.java index 9faac4a9e..a1f83aaa3 100644 --- a/src/main/java/net/citizensnpcs/editor/EquipmentEditor.java +++ b/src/main/java/net/citizensnpcs/editor/EquipmentEditor.java @@ -25,9 +25,6 @@ public class EquipmentEditor extends Editor { public void begin() { Messaging.send(player, "Entered the equipment editor!"); Messaging.send(player, "Right click to equip the NPC!"); - Messaging.send(player, "Right click with an empty hand to reset all items."); - Messaging.send(player, - "If the NPC is human, right click while crouching to equip armor its hand."); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index ac4b258e2..c4b656f1b 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -49,10 +49,9 @@ public abstract class CitizensNPC extends AbstractNPC { if (traits.containsKey(trait.getClass())) runnables.remove(traits.get(trait.getClass())); } - if (trait instanceof Listener) { - Bukkit.getPluginManager().registerEvents((Listener) trait, null); + if (trait instanceof Listener) // TODO: insert plugin instance somehow - } + Bukkit.getPluginManager().registerEvents((Listener) trait, Bukkit.getPluginManager().getPlugin("Citizens")); traits.put(trait.getClass(), trait); } diff --git a/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java b/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java index cf31f0a45..913a2559e 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java @@ -17,7 +17,9 @@ import net.citizensnpcs.api.trait.trait.Spawned; import net.citizensnpcs.trait.CurrentLocation; import net.citizensnpcs.trait.LookClose; import net.citizensnpcs.trait.Powered; +import net.citizensnpcs.trait.Sheared; import net.citizensnpcs.trait.VillagerProfession; +import net.citizensnpcs.trait.WoolColor; import net.citizensnpcs.trait.text.Text; import net.citizensnpcs.trait.waypoint.Waypoints; @@ -27,17 +29,19 @@ public class CitizensTraitManager implements TraitManager { public CitizensTraitManager() { // Register Citizens traits + registerTrait(new TraitFactory(CurrentLocation.class).withName("location")); registerTrait(new TraitFactory(Equipment.class).withName("equipment")); registerTrait(new TraitFactory(Inventory.class).withName("inventory")); registerTrait(new TraitFactory(LookClose.class).withName("look-close")); registerTrait(new TraitFactory(MobType.class).withName("type")); registerTrait(new TraitFactory(Owner.class).withName("owner")); registerTrait(new TraitFactory(Powered.class).withName("powered")); + registerTrait(new TraitFactory(Sheared.class).withName("sheared")); registerTrait(new TraitFactory(Spawned.class).withName("spawned")); - registerTrait(new TraitFactory(CurrentLocation.class).withName("location")); registerTrait(new TraitFactory(Text.class).withName("text")); registerTrait(new TraitFactory(VillagerProfession.class).withName("profession")); registerTrait(new TraitFactory(Waypoints.class).withName("waypoints")); + registerTrait(new TraitFactory(WoolColor.class).withName("wool-color")); } @Override diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java index e34939995..1f56a19bc 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java @@ -26,7 +26,7 @@ public class CitizensBlazeNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityBlazeNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java index 9fd3f5026..d91f91765 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java @@ -26,7 +26,7 @@ public class CitizensCaveSpiderNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityCaveSpiderNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensChickenNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensChickenNPC.java index f25b91029..f64c393ce 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensChickenNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensChickenNPC.java @@ -26,7 +26,7 @@ public class CitizensChickenNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityChickenNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensCowNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensCowNPC.java index 4d0da468b..497f4ea04 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensCowNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensCowNPC.java @@ -26,7 +26,7 @@ public class CitizensCowNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityCowNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java index 16db04915..4a3b18cb5 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java @@ -27,7 +27,7 @@ public class CitizensCreeperNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityCreeperNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java index 7955267d6..edad30f29 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java @@ -26,7 +26,7 @@ public class CitizensEnderDragonNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityEnderDragonNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java index 3277cb039..bdf94938c 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java @@ -64,7 +64,7 @@ public class CitizensEndermanNPC extends CitizensMobNPC implements Equipable { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityEndermanNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensGhastNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensGhastNPC.java index d19fc4967..ea1b820f9 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensGhastNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensGhastNPC.java @@ -26,7 +26,7 @@ public class CitizensGhastNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityGhastNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensGiantNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensGiantNPC.java index 32e2363bd..c42ec60ef 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensGiantNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensGiantNPC.java @@ -26,7 +26,7 @@ public class CitizensGiantNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityGiantNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensIronGolemNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensIronGolemNPC.java index 1c6738b79..035de857c 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensIronGolemNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensIronGolemNPC.java @@ -26,7 +26,7 @@ public class CitizensIronGolemNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityIronGolemNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java index 8d774adc8..59cd13d25 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java @@ -26,7 +26,7 @@ public class CitizensMagmaCubeNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityMagmaCubeNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java index a8eb1a413..97ec35f1a 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java @@ -26,7 +26,7 @@ public class CitizensMushroomCowNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityMushroomCowNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensOcelotNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensOcelotNPC.java index e6e2ae73b..93637c0e4 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensOcelotNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensOcelotNPC.java @@ -26,7 +26,7 @@ public class CitizensOcelotNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityOcelotNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java index 9d7ffdf8e..24b714384 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigNPC.java @@ -27,7 +27,7 @@ public class CitizensPigNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityPigNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java index bdbdcb589..7dcbf1166 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java @@ -26,7 +26,7 @@ public class CitizensPigZombieNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityPigZombieNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java index 13f6e9002..a94b5bbd3 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSheepNPC.java @@ -1,16 +1,25 @@ package net.citizensnpcs.npc.entity; import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.editor.Equipable; import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.ai.NPCHandle; +import net.citizensnpcs.trait.Sheared; +import net.citizensnpcs.trait.WoolColor; +import net.citizensnpcs.util.Messaging; +import net.citizensnpcs.util.StringHelper; import net.minecraft.server.EntitySheep; import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.World; +import org.bukkit.DyeColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; import org.bukkit.entity.Sheep; +import org.bukkit.inventory.ItemStack; -public class CitizensSheepNPC extends CitizensMobNPC { +public class CitizensSheepNPC extends CitizensMobNPC implements Equipable { public CitizensSheepNPC(CitizensNPCManager manager, int id, String name) { super(manager, id, name, EntitySheepNPC.class); @@ -21,12 +30,40 @@ public class CitizensSheepNPC extends CitizensMobNPC { return (Sheep) getHandle().getBukkitEntity(); } + @Override + public void equip(Player equipper) { + ItemStack hand = equipper.getItemInHand(); + if (hand.getType() == Material.SHEARS) { + Messaging.send(equipper, StringHelper.wrap(getName()) + " is " + + (getTrait(Sheared.class).toggle() ? "now" : "no longer") + " sheared."); + } else if (hand.getType() == Material.INK_SACK) { + if (getBukkitEntity().getColor() == DyeColor.getByData((byte) (15 - hand.getData().getData()))) + return; + + DyeColor color = DyeColor.getByData((byte) (15 - hand.getData().getData())); + getTrait(WoolColor.class).setColor(color); + Messaging.send( + equipper, + StringHelper.wrap(getName()) + " is now " + + StringHelper.wrap(color.name().toLowerCase().replace("_", " ")) + "."); + + if (hand.getAmount() > 1) + hand.setAmount(hand.getAmount() - 1); + else + hand = null; + equipper.setItemInHand(hand); + } else { + getTrait(WoolColor.class).setColor(DyeColor.WHITE); + Messaging.send(equipper, StringHelper.wrap(getName()) + " is now " + StringHelper.wrap("white") + "."); + } + } + public static class EntitySheepNPC extends EntitySheep implements NPCHandle { private final NPC npc; @Override public NPC getNPC() { - return this.npc; + return npc; } public EntitySheepNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java index 1b45e7dce..fcab71863 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java @@ -26,7 +26,7 @@ public class CitizensSilverfishNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntitySilverfishNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java index ea2414bdd..01df39e28 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java @@ -26,7 +26,7 @@ public class CitizensSkeletonNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntitySkeletonNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java index 4561b66ca..0e659be27 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java @@ -26,7 +26,7 @@ public class CitizensSlimeNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntitySlimeNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java index 1823b7ae3..00595c979 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java @@ -26,7 +26,7 @@ public class CitizensSnowmanNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntitySnowmanNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java index 3af73739d..0c6cee45f 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java @@ -26,7 +26,7 @@ public class CitizensSpiderNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntitySpiderNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensSquidNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensSquidNPC.java index b3c44c535..13963d461 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensSquidNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensSquidNPC.java @@ -26,7 +26,7 @@ public class CitizensSquidNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntitySquidNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java index be7cea715..9b4c467f0 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java @@ -26,7 +26,7 @@ public class CitizensVillagerNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityVillagerNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensWolfNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensWolfNPC.java index acc467346..7537c387b 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensWolfNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensWolfNPC.java @@ -26,7 +26,7 @@ public class CitizensWolfNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityWolfNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensZombieNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensZombieNPC.java index a8407a648..cef6b3dcb 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensZombieNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensZombieNPC.java @@ -26,7 +26,7 @@ public class CitizensZombieNPC extends CitizensMobNPC { @Override public NPC getNPC() { - return this.npc; + return npc; } public EntityZombieNPC(World world, NPC npc) { diff --git a/src/main/java/net/citizensnpcs/trait/Powered.java b/src/main/java/net/citizensnpcs/trait/Powered.java index 3ce053d8f..a4972dc78 100644 --- a/src/main/java/net/citizensnpcs/trait/Powered.java +++ b/src/main/java/net/citizensnpcs/trait/Powered.java @@ -33,8 +33,7 @@ public class Powered extends Trait implements Toggleable { @Override public boolean toggle() { powered = !powered; - if (npc.getBukkitEntity() instanceof Creeper) - ((Creeper) npc.getBukkitEntity()).setPowered(powered); + ((Creeper) npc.getBukkitEntity()).setPowered(powered); return powered; } diff --git a/src/main/java/net/citizensnpcs/trait/Sheared.java b/src/main/java/net/citizensnpcs/trait/Sheared.java new file mode 100644 index 000000000..69a1b6cd8 --- /dev/null +++ b/src/main/java/net/citizensnpcs/trait/Sheared.java @@ -0,0 +1,58 @@ +package net.citizensnpcs.trait; + +import org.bukkit.entity.Sheep; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerShearEntityEvent; + +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.exception.NPCLoadException; +import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.api.trait.Trait; +import net.citizensnpcs.api.util.DataKey; + +public class Sheared extends Trait implements Toggleable, Listener { + private boolean sheared; + private final NPC npc; + + public Sheared(NPC npc) { + this.npc = npc; + } + + @Override + public void load(DataKey key) throws NPCLoadException { + sheared = key.getBoolean(""); + } + + @Override + public void save(DataKey key) { + key.setBoolean("", sheared); + } + + @Override + public void onNPCSpawn() { + // TODO Get rid of instanceof's, add + // TraitFactory.withTypes(EntityType...) or similar + if (npc.getBukkitEntity() instanceof Sheep) + ((Sheep) npc.getBukkitEntity()).setSheared(sheared); + } + + @Override + public boolean toggle() { + sheared = !sheared; + ((Sheep) npc.getBukkitEntity()).setSheared(sheared); + return sheared; + } + + @EventHandler + public void onPlayerShearEntityEvent(PlayerShearEntityEvent event) { + // TODO: Complete trait/plugin system + if (CitizensAPI.getNPCManager().isNPC(event.getEntity())) + event.setCancelled(true); + } + + @Override + public String toString() { + return "Sheared{" + sheared + "}"; + } +} \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/trait/WoolColor.java b/src/main/java/net/citizensnpcs/trait/WoolColor.java new file mode 100644 index 000000000..e0ec26dd6 --- /dev/null +++ b/src/main/java/net/citizensnpcs/trait/WoolColor.java @@ -0,0 +1,59 @@ +package net.citizensnpcs.trait; + +import org.bukkit.DyeColor; +import org.bukkit.entity.Sheep; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.SheepDyeWoolEvent; + +import net.citizensnpcs.api.CitizensAPI; +import net.citizensnpcs.api.exception.NPCLoadException; +import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.api.trait.Trait; +import net.citizensnpcs.api.util.DataKey; + +public class WoolColor extends Trait implements Listener { + private DyeColor color = DyeColor.WHITE; + private final NPC npc; + + public WoolColor(NPC npc) { + this.npc = npc; + } + + @Override + public void load(DataKey key) throws NPCLoadException { + try { + color = DyeColor.valueOf(key.getString("")); + } catch (Exception ex) { + color = DyeColor.WHITE; + } + } + + @Override + public void onNPCSpawn() { + if (npc.getBukkitEntity() instanceof Sheep) + ((Sheep) npc.getBukkitEntity()).setColor(color); + } + + @Override + public void save(DataKey key) { + key.setString("", color.name()); + } + + @EventHandler + public void onSheepDyeWool(SheepDyeWoolEvent event) { + // TODO: Complete trait/plugin system + if (CitizensAPI.getNPCManager().isNPC(event.getEntity())) + event.setCancelled(true); + } + + public void setColor(DyeColor color) { + this.color = color; + ((Sheep) npc.getBukkitEntity()).setColor(color); + } + + @Override + public String toString() { + return "WoolColor{" + color.name() + "}"; + } +} \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/util/StringHelper.java b/src/main/java/net/citizensnpcs/util/StringHelper.java index 2b6513015..d55c86b35 100644 --- a/src/main/java/net/citizensnpcs/util/StringHelper.java +++ b/src/main/java/net/citizensnpcs/util/StringHelper.java @@ -71,10 +71,6 @@ public class StringHelper { return ChatColor.YELLOW + string.toString() + ChatColor.GREEN; } - public static String wrap(Object string, ChatColor after) { - return ChatColor.YELLOW + string.toString() + after; - } - public static String wrapHeader(Object string) { return "=====[ " + string.toString() + " ]====="; }