diff --git a/src/main/java/net/citizensnpcs/Citizens.java b/src/main/java/net/citizensnpcs/Citizens.java index 27923b6ce..36f2ad25b 100644 --- a/src/main/java/net/citizensnpcs/Citizens.java +++ b/src/main/java/net/citizensnpcs/Citizens.java @@ -52,7 +52,7 @@ public class Citizens extends JavaPlugin { private Settings config; private boolean compatible; private final CitizensCharacterManager characterManager = new CitizensCharacterManager(); - private final CitizensTraitManager traitManager = new CitizensTraitManager(); + private CitizensTraitManager traitManager; private CitizensNPCManager npcManager; private Storage saves; // TODO: refactor this into an NPCStore (remove // dependency on Storage). @@ -159,6 +159,7 @@ public class Citizens extends JavaPlugin { // Register API managers npcManager = new CitizensNPCManager(this, saves); + traitManager = new CitizensTraitManager(this); CitizensAPI.setNPCManager(npcManager); CitizensAPI.setCharacterManager(characterManager); CitizensAPI.setTraitManager(traitManager); @@ -248,8 +249,8 @@ public class Citizens extends JavaPlugin { if (!key.keyExists("name")) throw new NPCLoadException("Could not find a name for the NPC with ID '" + id + "'."); - NPC npc = npcManager.createNPC(EntityType.valueOf(key.getString("traits.type").toUpperCase()), id, key - .getString("name"), null); + NPC npc = npcManager.createNPC(EntityType.valueOf(key.getString("traits.type").toUpperCase()), id, + key.getString("name"), null); try { ((CitizensNPC) npc).load(key); } catch (NPCException ex) { diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 7032f13a0..f38aef44f 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -53,7 +53,6 @@ public abstract class CitizensNPC extends AbstractNPC { runnables.remove(traits.get(trait.getClass())); } if (trait instanceof Listener) - // TODO: insert plugin instance somehow Bukkit.getPluginManager().registerEvents((Listener) trait, trait.getPlugin()); Map, Trait> map = traits.get(trait.getPlugin()); @@ -119,8 +118,9 @@ public abstract class CitizensNPC extends AbstractNPC { if (traits.get(plugin).containsKey(clazz)) trait = traits.get(plugin).get(clazz); if (trait == null) - addTrait(traitManager.getTrait(clazz, this)); + trait = traitManager.getTrait(clazz, this); + addTrait(trait); return trait != null ? clazz.cast(trait) : null; } diff --git a/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java b/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java index 7a3987445..6781e0bb2 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensTraitManager.java @@ -5,9 +5,9 @@ import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; -import org.bukkit.Bukkit; import org.bukkit.plugin.Plugin; +import net.citizensnpcs.Citizens; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.trait.Trait; import net.citizensnpcs.api.trait.TraitFactory; @@ -27,14 +27,15 @@ import net.citizensnpcs.trait.VillagerProfession; import net.citizensnpcs.trait.WoolColor; import net.citizensnpcs.trait.text.Text; import net.citizensnpcs.trait.waypoint.Waypoints; +import net.citizensnpcs.util.Messaging; public class CitizensTraitManager implements TraitManager { private final Map>> registered = new HashMap>>(); private final Map, Constructor> CACHED_CTORS = new HashMap, Constructor>(); - public CitizensTraitManager() { + public CitizensTraitManager(Citizens plugin) { // Register Citizens traits - Plugin plugin = Bukkit.getPluginManager().getPlugin("Citizens"); + Messaging.log("Plugin: " + plugin); registerTrait(new TraitFactory(Age.class).withName("age").withPlugin(plugin)); registerTrait(new TraitFactory(CurrentLocation.class).withName("location").withPlugin(plugin)); @@ -84,10 +85,10 @@ public class CitizensTraitManager implements TraitManager { for (Entry> subEntry : entry.getValue().entrySet()) { if (!subEntry.getValue().equals(clazz)) continue; - Trait t = create(subEntry.getValue(), npc); - t.setName(subEntry.getKey()); - t.setPlugin(entry.getKey()); - return (T) t; + Trait trait = create(subEntry.getValue(), npc); + trait.setName(subEntry.getKey()); + trait.setPlugin(entry.getKey()); + return (T) trait; } } return null; diff --git a/src/main/java/net/citizensnpcs/trait/Saddle.java b/src/main/java/net/citizensnpcs/trait/Saddle.java index 9487fcce7..01a2e02e0 100644 --- a/src/main/java/net/citizensnpcs/trait/Saddle.java +++ b/src/main/java/net/citizensnpcs/trait/Saddle.java @@ -44,7 +44,6 @@ public class Saddle extends Trait implements Toggleable, Listener { @EventHandler public void onPlayerInteractEntity(PlayerInteractEntityEvent event) { - // TODO: Complete trait/plugin system if (CitizensAPI.getNPCManager().isNPC(event.getRightClicked())) event.setCancelled(true); } diff --git a/src/main/java/net/citizensnpcs/trait/Sheared.java b/src/main/java/net/citizensnpcs/trait/Sheared.java index 69a1b6cd8..bb5c86aa0 100644 --- a/src/main/java/net/citizensnpcs/trait/Sheared.java +++ b/src/main/java/net/citizensnpcs/trait/Sheared.java @@ -31,8 +31,6 @@ public class Sheared extends Trait implements Toggleable, Listener { @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); } @@ -46,7 +44,6 @@ public class Sheared extends Trait implements Toggleable, Listener { @EventHandler public void onPlayerShearEntityEvent(PlayerShearEntityEvent event) { - // TODO: Complete trait/plugin system if (CitizensAPI.getNPCManager().isNPC(event.getEntity())) event.setCancelled(true); } diff --git a/src/main/java/net/citizensnpcs/trait/WoolColor.java b/src/main/java/net/citizensnpcs/trait/WoolColor.java index e0ec26dd6..8ff3b3d46 100644 --- a/src/main/java/net/citizensnpcs/trait/WoolColor.java +++ b/src/main/java/net/citizensnpcs/trait/WoolColor.java @@ -42,7 +42,6 @@ public class WoolColor extends Trait implements Listener { @EventHandler public void onSheepDyeWool(SheepDyeWoolEvent event) { - // TODO: Complete trait/plugin system if (CitizensAPI.getNPCManager().isNPC(event.getEntity())) event.setCancelled(true); }