Make NPC handles accessible from nms Entity (increase speed of NPCManager.getNPC), make Text trait respect despawned state, despawn NPCs on death event

This commit is contained in:
fullwall 2012-03-12 18:45:36 +08:00
parent 15ebeab5a9
commit d0575e3e22
31 changed files with 307 additions and 81 deletions

View File

@ -249,8 +249,8 @@ public class Citizens extends JavaPlugin {
if (!key.keyExists("name")) if (!key.keyExists("name"))
throw new NPCLoadException("Could not find a name for the NPC with ID '" + id + "'."); 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 NPC npc = npcManager.createNPC(EntityType.valueOf(key.getString("traits.type").toUpperCase()), id,
.getString("name"), null); key.getString("name"), null);
try { try {
((CitizensNPC) npc).load(key); ((CitizensNPC) npc).load(key);
} catch (NPCException ex) { } catch (NPCException ex) {

View File

@ -22,6 +22,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityTargetEvent; import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.entity.EntityTargetEvent.TargetReason; import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerChangedWorldEvent;
@ -138,6 +139,14 @@ public class EventListen implements Listener {
npc.getCharacter().onRightClick(npc, player); npc.getCharacter().onRightClick(npc, player);
} }
@EventHandler
public void onEntityDeath(EntityDeathEvent event) {
if (!npcManager.isNPC(event.getEntity()))
return;
NPC npc = npcManager.getNPC(event.getEntity());
npc.despawn();
}
/* /*
* Player events * Player events
*/ */

View File

@ -4,6 +4,7 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Map; import java.util.Map;
import net.citizensnpcs.api.npc.NPC;
import net.minecraft.server.Entity; import net.minecraft.server.Entity;
import net.minecraft.server.EntityLiving; import net.minecraft.server.EntityLiving;
import net.minecraft.server.EntityTypes; import net.minecraft.server.EntityTypes;
@ -19,7 +20,7 @@ public abstract class CitizensMobNPC extends CitizensNPC {
protected CitizensMobNPC(CitizensNPCManager manager, int id, String name, Class<? extends EntityLiving> clazz) { protected CitizensMobNPC(CitizensNPCManager manager, int id, String name, Class<? extends EntityLiving> clazz) {
super(manager, id, name); super(manager, id, name);
try { try {
this.constructor = clazz.getConstructor(World.class); this.constructor = clazz.getConstructor(World.class, NPC.class);
} catch (Exception ex) { } catch (Exception ex) {
throw new IllegalStateException("unable to find an entity constructor"); throw new IllegalStateException("unable to find an entity constructor");
} }
@ -29,7 +30,7 @@ public abstract class CitizensMobNPC extends CitizensNPC {
private EntityLiving createEntityFromClass(World world) { private EntityLiving createEntityFromClass(World world) {
try { try {
return constructor.newInstance(world); return constructor.newInstance(world, this);
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
return null; return null;

View File

@ -13,10 +13,12 @@ import net.citizensnpcs.api.npc.NPCManager;
import net.citizensnpcs.api.npc.character.Character; import net.citizensnpcs.api.npc.character.Character;
import net.citizensnpcs.api.util.Storage; import net.citizensnpcs.api.util.Storage;
import net.citizensnpcs.editor.Editor; import net.citizensnpcs.editor.Editor;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.citizensnpcs.util.ByIdArray; import net.citizensnpcs.util.ByIdArray;
import net.citizensnpcs.util.NPCBuilder; import net.citizensnpcs.util.NPCBuilder;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.entity.CraftEntity;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType; import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -66,9 +68,14 @@ public class CitizensNPCManager implements NPCManager {
@Override @Override
public NPC getNPC(Entity entity) { public NPC getNPC(Entity entity) {
for (NPC npc : npcs) net.minecraft.server.Entity handle = ((CraftEntity) entity).getHandle();
if (npc.isSpawned() && npc.getBukkitEntity().getEntityId() == entity.getEntityId()) if (handle instanceof NPCHandle)
return ((NPCHandle) handle).getNPC();
for (NPC npc : npcs) { // fall back to linear search
if (npc.isSpawned() && npc.getBukkitEntity().getEntityId() == entity.getEntityId()) {
return npc; return npc;
}
}
return null; return null;
} }

View File

@ -0,0 +1,7 @@
package net.citizensnpcs.npc.ai;
import net.citizensnpcs.api.npc.NPC;
public interface NPCHandle {
public NPC getNPC();
}

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityBlaze; import net.minecraft.server.EntityBlaze;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensBlazeNPC extends CitizensMobNPC {
return (Blaze) getHandle().getBukkitEntity(); return (Blaze) getHandle().getBukkitEntity();
} }
public static class EntityBlazeNPC extends EntityBlaze { public static class EntityBlazeNPC extends EntityBlaze implements NPCHandle {
private final NPC npc;
public EntityBlazeNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityBlazeNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityCaveSpider; import net.minecraft.server.EntityCaveSpider;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensCaveSpiderNPC extends CitizensMobNPC {
return (CaveSpider) getHandle().getBukkitEntity(); return (CaveSpider) getHandle().getBukkitEntity();
} }
public static class EntityCaveSpiderNPC extends EntityCaveSpider { public static class EntityCaveSpiderNPC extends EntityCaveSpider implements NPCHandle {
private final NPC npc;
public EntityCaveSpiderNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityCaveSpiderNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityChicken; import net.minecraft.server.EntityChicken;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensChickenNPC extends CitizensMobNPC {
return (Chicken) getHandle().getBukkitEntity(); return (Chicken) getHandle().getBukkitEntity();
} }
public static class EntityChickenNPC extends EntityChicken { public static class EntityChickenNPC extends EntityChicken implements NPCHandle {
private final NPC npc;
public EntityChickenNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityChickenNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityCow; import net.minecraft.server.EntityCow;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensCowNPC extends CitizensMobNPC {
return (Cow) getHandle().getBukkitEntity(); return (Cow) getHandle().getBukkitEntity();
} }
public static class EntityCowNPC extends EntityCow { public static class EntityCowNPC extends EntityCow implements NPCHandle {
private final NPC npc;
public EntityCowNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityCowNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityCreeper; import net.minecraft.server.EntityCreeper;
import net.minecraft.server.EntityWeatherLighting; import net.minecraft.server.EntityWeatherLighting;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
@ -21,10 +22,17 @@ public class CitizensCreeperNPC extends CitizensMobNPC {
return (Creeper) getHandle().getBukkitEntity(); return (Creeper) getHandle().getBukkitEntity();
} }
public static class EntityCreeperNPC extends EntityCreeper { public static class EntityCreeperNPC extends EntityCreeper implements NPCHandle {
private final NPC npc;
public EntityCreeperNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityCreeperNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityEnderDragon; import net.minecraft.server.EntityEnderDragon;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensEnderDragonNPC extends CitizensMobNPC {
return (EnderDragon) getHandle().getBukkitEntity(); return (EnderDragon) getHandle().getBukkitEntity();
} }
public static class EntityEnderDragonNPC extends EntityEnderDragon { public static class EntityEnderDragonNPC extends EntityEnderDragon implements NPCHandle {
private final NPC npc;
public EntityEnderDragonNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityEnderDragonNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,11 +1,12 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.api.trait.trait.Equipment; import net.citizensnpcs.api.trait.trait.Equipment;
import net.citizensnpcs.editor.Equipable; import net.citizensnpcs.editor.Equipable;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.citizensnpcs.util.Messaging; import net.citizensnpcs.util.Messaging;
import net.minecraft.server.EntityEnderman; import net.minecraft.server.EntityEnderman;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -58,10 +59,17 @@ public class CitizensEndermanNPC extends CitizensMobNPC implements Equipable {
getTrait(Equipment.class).set(0, set); getTrait(Equipment.class).set(0, set);
} }
public static class EntityEndermanNPC extends EntityEnderman { public static class EntityEndermanNPC extends EntityEnderman implements NPCHandle {
private final NPC npc;
public EntityEndermanNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityEndermanNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityGhast; import net.minecraft.server.EntityGhast;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensGhastNPC extends CitizensMobNPC {
return (Ghast) getHandle().getBukkitEntity(); return (Ghast) getHandle().getBukkitEntity();
} }
public static class EntityGhastNPC extends EntityGhast { public static class EntityGhastNPC extends EntityGhast implements NPCHandle {
private final NPC npc;
public EntityGhastNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityGhastNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityGiantZombie; import net.minecraft.server.EntityGiantZombie;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensGiantNPC extends CitizensMobNPC {
return (Giant) getHandle().getBukkitEntity(); return (Giant) getHandle().getBukkitEntity();
} }
public static class EntityGiantNPC extends EntityGiantZombie { public static class EntityGiantNPC extends EntityGiantZombie implements NPCHandle {
private final NPC npc;
public EntityGiantNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityGiantNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityIronGolem; import net.minecraft.server.EntityIronGolem;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensIronGolemNPC extends CitizensMobNPC {
return (IronGolem) getHandle().getBukkitEntity(); return (IronGolem) getHandle().getBukkitEntity();
} }
public static class EntityIronGolemNPC extends EntityIronGolem { public static class EntityIronGolemNPC extends EntityIronGolem implements NPCHandle {
private final NPC npc;
public EntityIronGolemNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityIronGolemNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityMagmaCube; import net.minecraft.server.EntityMagmaCube;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensMagmaCubeNPC extends CitizensMobNPC {
return (MagmaCube) getHandle().getBukkitEntity(); return (MagmaCube) getHandle().getBukkitEntity();
} }
public static class EntityMagmaCubeNPC extends EntityMagmaCube { public static class EntityMagmaCubeNPC extends EntityMagmaCube implements NPCHandle {
private final NPC npc;
public EntityMagmaCubeNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityMagmaCubeNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
setSize(3); setSize(3);
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityMushroomCow; import net.minecraft.server.EntityMushroomCow;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensMushroomCowNPC extends CitizensMobNPC {
return (MushroomCow) getHandle().getBukkitEntity(); return (MushroomCow) getHandle().getBukkitEntity();
} }
public static class EntityMushroomCowNPC extends EntityMushroomCow { public static class EntityMushroomCowNPC extends EntityMushroomCow implements NPCHandle {
private final NPC npc;
public EntityMushroomCowNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityMushroomCowNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityOcelot; import net.minecraft.server.EntityOcelot;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensOcelotNPC extends CitizensMobNPC {
return (Ocelot) getHandle().getBukkitEntity(); return (Ocelot) getHandle().getBukkitEntity();
} }
public static class EntityOcelotNPC extends EntityOcelot { public static class EntityOcelotNPC extends EntityOcelot implements NPCHandle {
private final NPC npc;
public EntityOcelotNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityOcelotNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityPig; import net.minecraft.server.EntityPig;
import net.minecraft.server.EntityWeatherLighting; import net.minecraft.server.EntityWeatherLighting;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
@ -21,10 +22,17 @@ public class CitizensPigNPC extends CitizensMobNPC {
return (Pig) getHandle().getBukkitEntity(); return (Pig) getHandle().getBukkitEntity();
} }
public static class EntityPigNPC extends EntityPig { public static class EntityPigNPC extends EntityPig implements NPCHandle {
private final NPC npc;
public EntityPigNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityPigNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityPigZombie; import net.minecraft.server.EntityPigZombie;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensPigZombieNPC extends CitizensMobNPC {
return (PigZombie) getHandle().getBukkitEntity(); return (PigZombie) getHandle().getBukkitEntity();
} }
public static class EntityPigZombieNPC extends EntityPigZombie { public static class EntityPigZombieNPC extends EntityPigZombie implements NPCHandle {
private final NPC npc;
public EntityPigZombieNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityPigZombieNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntitySheep; import net.minecraft.server.EntitySheep;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensSheepNPC extends CitizensMobNPC {
return (Sheep) getHandle().getBukkitEntity(); return (Sheep) getHandle().getBukkitEntity();
} }
public static class EntitySheepNPC extends EntitySheep { public static class EntitySheepNPC extends EntitySheep implements NPCHandle {
private final NPC npc;
public EntitySheepNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntitySheepNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntitySilverfish; import net.minecraft.server.EntitySilverfish;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensSilverfishNPC extends CitizensMobNPC {
return (Silverfish) getHandle().getBukkitEntity(); return (Silverfish) getHandle().getBukkitEntity();
} }
public static class EntitySilverfishNPC extends EntitySilverfish { public static class EntitySilverfishNPC extends EntitySilverfish implements NPCHandle {
private final NPC npc;
public EntitySilverfishNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntitySilverfishNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntitySkeleton; import net.minecraft.server.EntitySkeleton;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensSkeletonNPC extends CitizensMobNPC {
return (Skeleton) getHandle().getBukkitEntity(); return (Skeleton) getHandle().getBukkitEntity();
} }
public static class EntitySkeletonNPC extends EntitySkeleton { public static class EntitySkeletonNPC extends EntitySkeleton implements NPCHandle {
private final NPC npc;
public EntitySkeletonNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntitySkeletonNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntitySlime; import net.minecraft.server.EntitySlime;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensSlimeNPC extends CitizensMobNPC {
return (Slime) getHandle().getBukkitEntity(); return (Slime) getHandle().getBukkitEntity();
} }
public static class EntitySlimeNPC extends EntitySlime { public static class EntitySlimeNPC extends EntitySlime implements NPCHandle {
private final NPC npc;
public EntitySlimeNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntitySlimeNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
setSize(3); setSize(3);
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntitySnowman; import net.minecraft.server.EntitySnowman;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensSnowmanNPC extends CitizensMobNPC {
return (Snowman) getHandle().getBukkitEntity(); return (Snowman) getHandle().getBukkitEntity();
} }
public static class EntitySnowmanNPC extends EntitySnowman { public static class EntitySnowmanNPC extends EntitySnowman implements NPCHandle {
private final NPC npc;
public EntitySnowmanNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntitySnowmanNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntitySpider; import net.minecraft.server.EntitySpider;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensSpiderNPC extends CitizensMobNPC {
return (Spider) getHandle().getBukkitEntity(); return (Spider) getHandle().getBukkitEntity();
} }
public static class EntitySpiderNPC extends EntitySpider { public static class EntitySpiderNPC extends EntitySpider implements NPCHandle {
private final NPC npc;
public EntitySpiderNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntitySpiderNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntitySquid; import net.minecraft.server.EntitySquid;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensSquidNPC extends CitizensMobNPC {
return (Squid) getHandle().getBukkitEntity(); return (Squid) getHandle().getBukkitEntity();
} }
public static class EntitySquidNPC extends EntitySquid { public static class EntitySquidNPC extends EntitySquid implements NPCHandle {
private final NPC npc;
public EntitySquidNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntitySquidNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityVillager; import net.minecraft.server.EntityVillager;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensVillagerNPC extends CitizensMobNPC {
return (Villager) getHandle().getBukkitEntity(); return (Villager) getHandle().getBukkitEntity();
} }
public static class EntityVillagerNPC extends EntityVillager { public static class EntityVillagerNPC extends EntityVillager implements NPCHandle {
private final NPC npc;
public EntityVillagerNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityVillagerNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityWolf; import net.minecraft.server.EntityWolf;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensWolfNPC extends CitizensMobNPC {
return (Wolf) getHandle().getBukkitEntity(); return (Wolf) getHandle().getBukkitEntity();
} }
public static class EntityWolfNPC extends EntityWolf { public static class EntityWolfNPC extends EntityWolf implements NPCHandle {
private final NPC npc;
public EntityWolfNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityWolfNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -1,8 +1,9 @@
package net.citizensnpcs.npc.entity; package net.citizensnpcs.npc.entity;
import net.citizensnpcs.api.npc.NPC;
import net.citizensnpcs.npc.CitizensMobNPC; import net.citizensnpcs.npc.CitizensMobNPC;
import net.citizensnpcs.npc.CitizensNPCManager; import net.citizensnpcs.npc.CitizensNPCManager;
import net.citizensnpcs.npc.ai.NPCHandle;
import net.minecraft.server.EntityZombie; import net.minecraft.server.EntityZombie;
import net.minecraft.server.PathfinderGoalSelector; import net.minecraft.server.PathfinderGoalSelector;
import net.minecraft.server.World; import net.minecraft.server.World;
@ -20,10 +21,17 @@ public class CitizensZombieNPC extends CitizensMobNPC {
return (Zombie) getHandle().getBukkitEntity(); return (Zombie) getHandle().getBukkitEntity();
} }
public static class EntityZombieNPC extends EntityZombie { public static class EntityZombieNPC extends EntityZombie implements NPCHandle {
private final NPC npc;
public EntityZombieNPC(World world) { @Override
public NPC getNPC() {
return this.npc;
}
public EntityZombieNPC(World world, NPC npc) {
super(world); super(world);
this.npc = npc;
goalSelector = new PathfinderGoalSelector(); goalSelector = new PathfinderGoalSelector();
targetSelector = new PathfinderGoalSelector(); targetSelector = new PathfinderGoalSelector();
} }

View File

@ -70,6 +70,8 @@ public class Text extends Trait implements Runnable, Toggleable, ConversationAba
@Override @Override
public void run() { public void run() {
if (!npc.isSpawned())
return;
EntityHuman search = null; EntityHuman search = null;
EntityLiving handle = ((CitizensNPC) npc).getHandle(); EntityLiving handle = ((CitizensNPC) npc).getHandle();
if ((search = handle.world.findNearbyPlayer(handle, 5)) != null && talkClose) { if ((search = handle.world.findNearbyPlayer(handle, 5)) != null && talkClose) {