mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-02 13:31:43 +01:00
Modifications to Traits
This commit is contained in:
parent
09303b9ead
commit
30132872a9
@ -1,5 +1,7 @@
|
||||
package net.citizensnpcs.npc;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.logging.Level;
|
||||
|
||||
import net.citizensnpcs.Settings.Setting;
|
||||
@ -24,6 +26,7 @@ import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.inventory.Inventory;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
|
||||
public abstract class CitizensNPC extends AbstractNPC {
|
||||
private final CitizensAI ai = new CitizensAI(this);
|
||||
@ -51,9 +54,13 @@ public abstract class CitizensNPC extends AbstractNPC {
|
||||
}
|
||||
if (trait instanceof Listener)
|
||||
// TODO: insert plugin instance somehow
|
||||
Bukkit.getPluginManager().registerEvents((Listener) trait, Bukkit.getPluginManager().getPlugin("Citizens"));
|
||||
Bukkit.getPluginManager().registerEvents((Listener) trait, trait.getPlugin());
|
||||
|
||||
traits.put(trait.getClass(), trait);
|
||||
Map<Class<? extends Trait>, Trait> map = traits.get(trait.getPlugin());
|
||||
if (map == null)
|
||||
map = new HashMap<Class<? extends Trait>, Trait>();
|
||||
map.put(trait.getClass(), trait);
|
||||
traits.put(trait.getPlugin(), map);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -107,11 +114,14 @@ public abstract class CitizensNPC extends AbstractNPC {
|
||||
|
||||
@Override
|
||||
public <T extends Trait> T getTrait(Class<T> clazz) {
|
||||
Trait t = traits.get(clazz);
|
||||
if (t == null)
|
||||
Trait trait = null;
|
||||
for (Plugin plugin : traits.keySet())
|
||||
if (traits.get(plugin).containsKey(clazz))
|
||||
trait = traits.get(plugin).get(clazz);
|
||||
if (trait == null)
|
||||
addTrait(traitManager.getTrait(clazz, this));
|
||||
|
||||
return traits.get(clazz) != null ? clazz.cast(traits.get(clazz)) : null;
|
||||
return trait != null ? clazz.cast(trait) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -155,8 +165,9 @@ public abstract class CitizensNPC extends AbstractNPC {
|
||||
getTrait(Spawned.class).setSpawned(true);
|
||||
|
||||
// Modify NPC using traits after the entity has been created
|
||||
for (Trait trait : getTraits())
|
||||
trait.onNPCSpawn();
|
||||
for (Plugin plugin : traits.keySet())
|
||||
for (Trait trait : getTraits(plugin))
|
||||
trait.onNPCSpawn();
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -209,7 +220,8 @@ public abstract class CitizensNPC extends AbstractNPC {
|
||||
}
|
||||
|
||||
// Save all existing traits
|
||||
for (Trait trait : getTraits())
|
||||
trait.save(root.getRelative("traits." + trait.getName()));
|
||||
for (Plugin plugin : traits.keySet())
|
||||
for (Trait trait : getTraits(plugin))
|
||||
trait.save(root.getRelative("traits." + trait.getName()));
|
||||
}
|
||||
}
|
@ -5,6 +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.api.npc.NPC;
|
||||
import net.citizensnpcs.api.trait.Trait;
|
||||
import net.citizensnpcs.api.trait.TraitFactory;
|
||||
@ -26,26 +29,28 @@ import net.citizensnpcs.trait.text.Text;
|
||||
import net.citizensnpcs.trait.waypoint.Waypoints;
|
||||
|
||||
public class CitizensTraitManager implements TraitManager {
|
||||
private final Map<String, Class<? extends Trait>> registered = new HashMap<String, Class<? extends Trait>>();
|
||||
private final Map<Plugin, Map<String, Class<? extends Trait>>> registered = new HashMap<Plugin, Map<String, Class<? extends Trait>>>();
|
||||
private final Map<Class<? extends Trait>, Constructor<? extends Trait>> CACHED_CTORS = new HashMap<Class<? extends Trait>, Constructor<? extends Trait>>();
|
||||
|
||||
public CitizensTraitManager() {
|
||||
// Register Citizens traits
|
||||
registerTrait(new TraitFactory(Age.class).withName("age"));
|
||||
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(Saddle.class).withName("saddle"));
|
||||
registerTrait(new TraitFactory(Sheared.class).withName("sheared"));
|
||||
registerTrait(new TraitFactory(Spawned.class).withName("spawned"));
|
||||
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"));
|
||||
Plugin plugin = Bukkit.getPluginManager().getPlugin("Citizens");
|
||||
|
||||
registerTrait(new TraitFactory(Age.class).withName("age").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(CurrentLocation.class).withName("location").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Equipment.class).withName("equipment").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Inventory.class).withName("inventory").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(LookClose.class).withName("look-close").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(MobType.class).withName("type").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Owner.class).withName("owner").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Powered.class).withName("powered").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Saddle.class).withName("saddle").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Sheared.class).withName("sheared").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Spawned.class).withName("spawned").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Text.class).withName("text").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(VillagerProfession.class).withName("profession").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(Waypoints.class).withName("waypoints").withPlugin(plugin));
|
||||
registerTrait(new TraitFactory(WoolColor.class).withName("wool-color").withPlugin(plugin));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -56,35 +61,47 @@ public class CitizensTraitManager implements TraitManager {
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public <T extends Trait> T getTrait(String name) {
|
||||
if (!registered.containsKey(name))
|
||||
return null;
|
||||
return (T) create(registered.get(name), null);
|
||||
for (Plugin plugin : registered.keySet()) {
|
||||
if (!registered.get(plugin).containsKey(name))
|
||||
return null;
|
||||
return (T) create(registered.get(plugin).get(name), null);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void registerTrait(TraitFactory factory) {
|
||||
registered.put(factory.getName(), factory.getTraitClass());
|
||||
Map<String, Class<? extends Trait>> map = registered.get(factory.getTraitPlugin());
|
||||
if (map == null)
|
||||
map = new HashMap<String, Class<? extends Trait>>();
|
||||
map.put(factory.getTraitName(), factory.getTraitClass());
|
||||
registered.put(factory.getTraitPlugin(), map);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Trait> T getTrait(Class<T> clazz, NPC npc) {
|
||||
for (Entry<String, Class<? extends Trait>> entry : registered.entrySet()) {
|
||||
if (!entry.getValue().equals(clazz))
|
||||
continue;
|
||||
Trait t = create(entry.getValue(), npc);
|
||||
t.setName(entry.getKey());
|
||||
return (T) t;
|
||||
for (Entry<Plugin, Map<String, Class<? extends Trait>>> entry : registered.entrySet()) {
|
||||
for (Entry<String, Class<? extends Trait>> 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;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <T extends Trait> T getTrait(String name, NPC npc) {
|
||||
Class<? extends Trait> clazz = registered.get(name);
|
||||
if (clazz == null)
|
||||
return null;
|
||||
Trait t = getTrait(clazz, npc);
|
||||
return (T) t;
|
||||
for (Plugin plugin : registered.keySet()) {
|
||||
Class<? extends Trait> clazz = registered.get(plugin).get(name);
|
||||
if (clazz == null)
|
||||
continue;
|
||||
return (T) getTrait(clazz, npc);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
Loading…
Reference in New Issue
Block a user