From 6ff7b9b21af686a3418bb11afdb1af1288581465 Mon Sep 17 00:00:00 2001 From: aPunch Date: Fri, 3 Feb 2012 03:20:48 -0600 Subject: [PATCH] initial mob type NPCs implementation --- TODO | 1 - lib/CitizensAPI.jar | Bin 20615 -> 21927 bytes src/net/citizensnpcs/Citizens.java | 21 ++- src/net/citizensnpcs/NPCUpdater.java | 22 +++ .../command/command/NPCCommands.java | 50 +++++-- src/net/citizensnpcs/npc/CitizensNPC.java | 133 +++++++++++++++--- .../citizensnpcs/npc/CitizensNPCManager.java | 45 ++---- .../npc/entity/CitizensBlazeNPC.java | 12 ++ .../npc/entity/CitizensCaveSpiderNPC.java | 12 ++ .../npc/entity/CitizensChickenNPC.java | 12 ++ .../npc/entity/CitizensCowNPC.java | 12 ++ .../npc/entity/CitizensCreeperNPC.java | 12 ++ .../npc/entity/CitizensEnderDragonNPC.java | 12 ++ .../npc/entity/CitizensEndermanNPC.java | 12 ++ .../npc/entity/CitizensGhastNPC.java | 12 ++ .../npc/entity/CitizensGiantNPC.java | 12 ++ .../npc/entity/CitizensHumanNPC.java | 32 +++++ .../npc/entity/CitizensMagmaCubeNPC.java | 12 ++ .../npc/entity/CitizensMushroomCowNPC.java | 12 ++ .../npc/entity/CitizensPigNPC.java | 12 ++ .../npc/entity/CitizensPigZombieNPC.java | 12 ++ .../npc/entity/CitizensSheepNPC.java | 12 ++ .../npc/entity/CitizensSilverfishNPC.java | 12 ++ .../npc/entity/CitizensSkeletonNPC.java | 12 ++ .../npc/entity/CitizensSlimeNPC.java | 12 ++ .../npc/entity/CitizensSnowmanNPC.java | 12 ++ .../npc/entity/CitizensSpiderNPC.java | 12 ++ .../npc/entity/CitizensSquidNPC.java | 12 ++ .../npc/entity/CitizensVillagerNPC.java | 12 ++ .../npc/entity/CitizensWolfNPC.java | 12 ++ .../npc/entity/CitizensZombieNPC.java | 12 ++ .../resource/lib/entity/EntityBlazeNPC.java | 15 ++ .../lib/entity/EntityCaveSpiderNPC.java | 15 ++ .../resource/lib/entity/EntityChickenNPC.java | 15 ++ .../resource/lib/entity/EntityCowNPC.java | 15 ++ .../resource/lib/entity/EntityCreeperNPC.java | 15 ++ .../lib/entity/EntityEnderDragonNPC.java | 15 ++ .../lib/entity/EntityEndermanNPC.java | 15 ++ .../resource/lib/entity/EntityGhastNPC.java | 15 ++ .../resource/lib/entity/EntityGiantNPC.java | 15 ++ .../resource/lib/entity/EntityHumanNPC.java | 74 ++++++++++ .../lib/entity/EntityMagmaCubeNPC.java | 15 ++ .../lib/entity/EntityMushroomCowNPC.java | 15 ++ .../resource/lib/entity/EntityPigNPC.java | 15 ++ .../lib/entity/EntityPigZombieNPC.java | 15 ++ .../resource/lib/entity/EntitySheepNPC.java | 15 ++ .../lib/entity/EntitySilverfishNPC.java | 15 ++ .../lib/entity/EntitySkeletonNPC.java | 15 ++ .../resource/lib/entity/EntitySlimeNPC.java | 15 ++ .../resource/lib/entity/EntitySnowmanNPC.java | 15 ++ .../resource/lib/entity/EntitySpiderNPC.java | 15 ++ .../resource/lib/entity/EntitySquidNPC.java | 15 ++ .../lib/entity/EntityVillagerNPC.java | 15 ++ .../resource/lib/entity/EntityWolfNPC.java | 15 ++ .../resource/lib/entity/EntityZombieNPC.java | 15 ++ src/net/citizensnpcs/trait/LookClose.java | 43 ++++++ src/net/citizensnpcs/util/NPCBuilder.java | 75 ++++++++++ 57 files changed, 1046 insertions(+), 71 deletions(-) create mode 100644 src/net/citizensnpcs/NPCUpdater.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensChickenNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensCowNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensGhastNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensGiantNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensPigNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensSheepNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensSquidNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensWolfNPC.java create mode 100644 src/net/citizensnpcs/npc/entity/CitizensZombieNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityBlazeNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityCaveSpiderNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityChickenNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityCowNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityCreeperNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityEnderDragonNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityEndermanNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityGhastNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityGiantNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityHumanNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityMagmaCubeNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityMushroomCowNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityPigNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityPigZombieNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntitySheepNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntitySilverfishNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntitySkeletonNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntitySlimeNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntitySnowmanNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntitySpiderNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntitySquidNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityVillagerNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityWolfNPC.java create mode 100644 src/net/citizensnpcs/resource/lib/entity/EntityZombieNPC.java create mode 100644 src/net/citizensnpcs/trait/LookClose.java create mode 100644 src/net/citizensnpcs/util/NPCBuilder.java diff --git a/TODO b/TODO index 1c848be86..966c7c65e 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,6 @@ -Citizens2 TODO List- -Add proper color parsing for names --Properly implement commands -Add NPC templates -Finish pathfinding API -Add database support (MySQL and/or SQLite) \ No newline at end of file diff --git a/lib/CitizensAPI.jar b/lib/CitizensAPI.jar index ba7c39bc0a0f745a45ce466e46a1a2e862e0b5b4..154cf5606bbee616df478fc55701de2e320492ff 100644 GIT binary patch delta 6731 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 delta 5456 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 intToClass; + private Map, Integer> classToInt; + private Class entityClass; + private double lookRange = 5; + + protected CitizensNPC(CitizensNPCManager manager, int id, String name, Class entityClass) { super(id, name); this.manager = manager; + if (intToClass == null || classToInt == null) + createMaps(); + this.entityClass = entityClass; + // No need to register entity class for normal human NPC entity + if (entityClass != null) + registerEntityClass(entityClass); } @Override @@ -39,11 +61,11 @@ public class CitizensNPC extends AbstractNPC { } @Override - public Player getBukkitEntity() { + public Entity getBukkitEntity() { return getHandle().getBukkitEntity(); } - public CraftNPC getHandle() { + public EntityLiving getHandle() { return mcEntity; } @@ -76,21 +98,92 @@ public class CitizensNPC extends AbstractNPC { if (spawnEvent.isCancelled()) return false; - mcEntity = manager.spawn(this, loc); + if (entityClass != null) { + mcEntity = createEntityFromClass(getWorldServer(loc.getWorld())); + mcEntity.setPosition(loc.getX(), loc.getY(), loc.getZ()); + mcEntity.world.addEntity(mcEntity); + } // Set the location - // TODO: do this automatically (default traits?) - // TODO: is spawned as a trait needed? Takes up memory - if (!hasTrait(SpawnLocation.class)) - addTrait(new SpawnLocation(loc)); - else - getTrait(SpawnLocation.class).setLocation(loc); - - if (!hasTrait(Spawned.class)) - addTrait(new Spawned(true)); - else - getTrait(Spawned.class).setSpawned(true); - + addTrait(new SpawnLocation(loc)); + // Set the spawned state + addTrait(new Spawned(true)); return true; } + + protected WorldServer getWorldServer(World world) { + return ((CraftWorld) world).getHandle(); + } + + protected MinecraftServer getMinecraftServer(Server server) { + return ((CraftServer) server).getServer(); + } + + public void tick() { + if (mcEntity != null) + if (getTrait(LookClose.class).shouldLookClose() + && mcEntity.world.findNearbyPlayer(mcEntity, lookRange) != null) + faceEntity(mcEntity.world.findNearbyPlayer(mcEntity, lookRange).getBukkitEntity()); + } + + protected void faceEntity(Entity target) { + if (getBukkitEntity().getWorld() != target.getWorld()) + return; + Location loc = getBukkitEntity().getLocation(); + Location targetLoc = target.getLocation(); + + double xDiff = targetLoc.getX() - loc.getX(); + double yDiff = targetLoc.getY() - loc.getY(); + double zDiff = targetLoc.getZ() - loc.getZ(); + + double distanceXZ = Math.sqrt(xDiff * xDiff + zDiff * zDiff); + double distanceY = Math.sqrt(distanceXZ * distanceXZ + yDiff * yDiff); + + double yaw = (Math.acos(xDiff / distanceXZ) * 180 / Math.PI); + double pitch = (Math.acos(yDiff / distanceY) * 180 / Math.PI) - 90; + if (zDiff < 0.0) { + yaw = yaw + (Math.abs(180 - yaw) * 2); + } + + mcEntity.yaw = (float) yaw - 90; + mcEntity.pitch = (float) pitch; + } + + private void registerEntityClass(Class clazz) { + if (classToInt == null || intToClass == null) + return; + Class search = clazz; + while ((search = search.getSuperclass()) != null && net.minecraft.server.Entity.class.isAssignableFrom(search)) { + if (!classToInt.containsKey(search)) + continue; + int code = classToInt.get(search); + intToClass.put(code, clazz); + classToInt.put(clazz, code); + return; + } + throw new IllegalArgumentException("unable to find valid entity superclass"); + } + + @SuppressWarnings("unchecked") + private void createMaps() { + try { + Field field = EntityTypes.class.getDeclaredField("d"); + field.setAccessible(true); + intToClass = (Map>) field.get(null); + field = EntityTypes.class.getDeclaredField("e"); + field.setAccessible(true); + classToInt = (Map, Integer>) field.get(null); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + private EntityLiving createEntityFromClass(net.minecraft.server.World world) { + try { + return entityClass.getConstructor(net.minecraft.server.World.class).newInstance(world); + } catch (Exception ex) { + ex.printStackTrace(); + return null; + } + } } \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/CitizensNPCManager.java b/src/net/citizensnpcs/npc/CitizensNPCManager.java index a0122c0ba..e06f8af1d 100644 --- a/src/net/citizensnpcs/npc/CitizensNPCManager.java +++ b/src/net/citizensnpcs/npc/CitizensNPCManager.java @@ -9,19 +9,12 @@ import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.api.npc.NPCManager; import net.citizensnpcs.api.npc.trait.Character; import net.citizensnpcs.api.npc.trait.trait.SpawnLocation; -import net.citizensnpcs.resource.lib.CraftNPC; + import net.citizensnpcs.storage.Storage; import net.citizensnpcs.util.ByIdArray; +import net.citizensnpcs.util.NPCBuilder; -import net.minecraft.server.ItemInWorldManager; -import net.minecraft.server.MinecraftServer; -import net.minecraft.server.WorldServer; - -import org.bukkit.Location; -import org.bukkit.Server; -import org.bukkit.World; -import org.bukkit.craftbukkit.CraftServer; -import org.bukkit.craftbukkit.CraftWorld; +import org.bukkit.entity.CreatureType; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; @@ -32,26 +25,27 @@ public class CitizensNPCManager implements NPCManager { private final ByIdArray npcs = new ByIdArray(); private final SetMultimap selected = HashMultimap.create(); private final Storage saves; + private final NPCBuilder npcBuilder = new NPCBuilder(); public CitizensNPCManager(Storage saves) { this.saves = saves; } @Override - public NPC createNPC(String name) { - return createNPC(name, null); + public NPC createNPC(CreatureType type, String name) { + return createNPC(type, name, null); } @Override - public NPC createNPC(String name, Character character) { - return createNPC(generateUniqueId(), name, character); + public NPC createNPC(CreatureType type, String name, Character character) { + return createNPC(type, generateUniqueId(), name, character); } - public NPC createNPC(int id, String name, Character character) { + public NPC createNPC(CreatureType type, int id, String name, Character character) { if (npcs.contains(id)) throw new IllegalArgumentException("An NPC already has the ID '" + id + "'."); - CitizensNPC npc = new CitizensNPC(this, id, name); + CitizensNPC npc = npcBuilder.getByType(type, this, id, name); npc.setCharacter(character); npcs.put(npc.getId(), npc); return npc; @@ -68,10 +62,6 @@ public class CitizensNPCManager implements NPCManager { return npcs.iterator(); } - private MinecraftServer getMinecraftServer(Server server) { - return ((CraftServer) server).getServer(); - } - @Override public NPC getNPC(Entity entity) { for (NPC npc : npcs) @@ -101,10 +91,6 @@ public class CitizensNPCManager implements NPCManager { return count - 1; } - private WorldServer getWorldServer(World world) { - return ((CraftWorld) world).getHandle(); - } - @Override public boolean isNPC(Entity entity) { return getNPC(entity) != null; @@ -118,17 +104,6 @@ public class CitizensNPCManager implements NPCManager { selected.removeAll(npc.getId()); } - public CraftNPC spawn(NPC npc, Location loc) { - WorldServer ws = getWorldServer(loc.getWorld()); - CraftNPC mcEntity = new CraftNPC(getMinecraftServer(ws.getServer()), ws, npc.getFullName(), - new ItemInWorldManager(ws)); - mcEntity.removeFromPlayerMap(npc.getFullName()); - mcEntity.setPositionRotation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); - ws.addEntity(mcEntity); - ws.players.remove(mcEntity); - return mcEntity; - } - public void selectNPC(Player player, NPC npc) { // Remove existing selection if any NPC existing = getSelectedNPC(player); diff --git a/src/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java b/src/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java new file mode 100644 index 000000000..91de8137f --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityBlazeNPC; + +public class CitizensBlazeNPC extends CitizensNPC { + + public CitizensBlazeNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityBlazeNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java b/src/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java new file mode 100644 index 000000000..9c219174e --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityCaveSpiderNPC; + +public class CitizensCaveSpiderNPC extends CitizensNPC { + + public CitizensCaveSpiderNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityCaveSpiderNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensChickenNPC.java b/src/net/citizensnpcs/npc/entity/CitizensChickenNPC.java new file mode 100644 index 000000000..0e3a7f17c --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensChickenNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityChickenNPC; + +public class CitizensChickenNPC extends CitizensNPC { + + public CitizensChickenNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityChickenNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensCowNPC.java b/src/net/citizensnpcs/npc/entity/CitizensCowNPC.java new file mode 100644 index 000000000..38b5e71bd --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensCowNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityCowNPC; + +public class CitizensCowNPC extends CitizensNPC { + + public CitizensCowNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityCowNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java b/src/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java new file mode 100644 index 000000000..e8be511e0 --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityCreeperNPC; + +public class CitizensCreeperNPC extends CitizensNPC { + + public CitizensCreeperNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityCreeperNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java b/src/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java new file mode 100644 index 000000000..b076c2ead --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityEnderDragonNPC; + +public class CitizensEnderDragonNPC extends CitizensNPC { + + public CitizensEnderDragonNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityEnderDragonNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java b/src/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java new file mode 100644 index 000000000..a1695d415 --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityEndermanNPC; + +public class CitizensEndermanNPC extends CitizensNPC { + + public CitizensEndermanNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityEndermanNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensGhastNPC.java b/src/net/citizensnpcs/npc/entity/CitizensGhastNPC.java new file mode 100644 index 000000000..ec8e0235b --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensGhastNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityGhastNPC; + +public class CitizensGhastNPC extends CitizensNPC { + + public CitizensGhastNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityGhastNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensGiantNPC.java b/src/net/citizensnpcs/npc/entity/CitizensGiantNPC.java new file mode 100644 index 000000000..2cb845d31 --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensGiantNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityGiantNPC; + +public class CitizensGiantNPC extends CitizensNPC { + + public CitizensGiantNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityGiantNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java b/src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java new file mode 100644 index 000000000..6bf5bf2fe --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java @@ -0,0 +1,32 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityHumanNPC; + +import net.minecraft.server.ItemInWorldManager; +import net.minecraft.server.WorldServer; + +import org.bukkit.Location; + +public class CitizensHumanNPC extends CitizensNPC { + + public CitizensHumanNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, null); + } + + @Override + public boolean spawn(Location loc) { + if (super.spawn(loc)) { + WorldServer ws = getWorldServer(loc.getWorld()); + mcEntity = new EntityHumanNPC(getMinecraftServer(ws.getServer()), ws, getFullName(), + new ItemInWorldManager(ws)); + ((EntityHumanNPC) mcEntity).removeFromPlayerMap(getFullName()); + mcEntity.setPositionRotation(loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch()); + ws.addEntity(mcEntity); + ws.players.remove(mcEntity); + return true; + } + return false; + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java b/src/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java new file mode 100644 index 000000000..ea69ce1aa --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityMagmaCubeNPC; + +public class CitizensMagmaCubeNPC extends CitizensNPC { + + public CitizensMagmaCubeNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityMagmaCubeNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java b/src/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java new file mode 100644 index 000000000..6180970a4 --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityMushroomCowNPC; + +public class CitizensMushroomCowNPC extends CitizensNPC { + + public CitizensMushroomCowNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityMushroomCowNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensPigNPC.java b/src/net/citizensnpcs/npc/entity/CitizensPigNPC.java new file mode 100644 index 000000000..51b65a56e --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensPigNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityPigNPC; + +public class CitizensPigNPC extends CitizensNPC { + + public CitizensPigNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityPigNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java b/src/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java new file mode 100644 index 000000000..1234c2739 --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityPigZombieNPC; + +public class CitizensPigZombieNPC extends CitizensNPC { + + public CitizensPigZombieNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityPigZombieNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensSheepNPC.java b/src/net/citizensnpcs/npc/entity/CitizensSheepNPC.java new file mode 100644 index 000000000..3f14a9875 --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensSheepNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntitySheepNPC; + +public class CitizensSheepNPC extends CitizensNPC { + + public CitizensSheepNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntitySheepNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java b/src/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java new file mode 100644 index 000000000..7b1022ffd --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntitySilverfishNPC; + +public class CitizensSilverfishNPC extends CitizensNPC { + + public CitizensSilverfishNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntitySilverfishNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java b/src/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java new file mode 100644 index 000000000..a18114f5b --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntitySkeletonNPC; + +public class CitizensSkeletonNPC extends CitizensNPC { + + public CitizensSkeletonNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntitySkeletonNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java b/src/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java new file mode 100644 index 000000000..c270509ef --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntitySlimeNPC; + +public class CitizensSlimeNPC extends CitizensNPC { + + public CitizensSlimeNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntitySlimeNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java b/src/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java new file mode 100644 index 000000000..8a2cc8128 --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntitySnowmanNPC; + +public class CitizensSnowmanNPC extends CitizensNPC { + + public CitizensSnowmanNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntitySnowmanNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java b/src/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java new file mode 100644 index 000000000..331f94ebc --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntitySpiderNPC; + +public class CitizensSpiderNPC extends CitizensNPC { + + public CitizensSpiderNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntitySpiderNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensSquidNPC.java b/src/net/citizensnpcs/npc/entity/CitizensSquidNPC.java new file mode 100644 index 000000000..7b9d52f0a --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensSquidNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntitySquidNPC; + +public class CitizensSquidNPC extends CitizensNPC { + + public CitizensSquidNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntitySquidNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java b/src/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java new file mode 100644 index 000000000..da95a58aa --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityVillagerNPC; + +public class CitizensVillagerNPC extends CitizensNPC { + + public CitizensVillagerNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityVillagerNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensWolfNPC.java b/src/net/citizensnpcs/npc/entity/CitizensWolfNPC.java new file mode 100644 index 000000000..24186913f --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensWolfNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityWolfNPC; + +public class CitizensWolfNPC extends CitizensNPC { + + public CitizensWolfNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityWolfNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/entity/CitizensZombieNPC.java b/src/net/citizensnpcs/npc/entity/CitizensZombieNPC.java new file mode 100644 index 000000000..78fc5437a --- /dev/null +++ b/src/net/citizensnpcs/npc/entity/CitizensZombieNPC.java @@ -0,0 +1,12 @@ +package net.citizensnpcs.npc.entity; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.resource.lib.entity.EntityZombieNPC; + +public class CitizensZombieNPC extends CitizensNPC { + + public CitizensZombieNPC(CitizensNPCManager manager, int id, String name) { + super(manager, id, name, EntityZombieNPC.class); + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityBlazeNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityBlazeNPC.java new file mode 100644 index 000000000..59b632223 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityBlazeNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityBlaze; +import net.minecraft.server.World; + +public class EntityBlazeNPC extends EntityBlaze { + + public EntityBlazeNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityCaveSpiderNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityCaveSpiderNPC.java new file mode 100644 index 000000000..37c1418b7 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityCaveSpiderNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityCaveSpider; +import net.minecraft.server.World; + +public class EntityCaveSpiderNPC extends EntityCaveSpider { + + public EntityCaveSpiderNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityChickenNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityChickenNPC.java new file mode 100644 index 000000000..bd2ec2d8a --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityChickenNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityChicken; +import net.minecraft.server.World; + +public class EntityChickenNPC extends EntityChicken { + + public EntityChickenNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityCowNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityCowNPC.java new file mode 100644 index 000000000..bbbb4a401 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityCowNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityCow; +import net.minecraft.server.World; + +public class EntityCowNPC extends EntityCow { + + public EntityCowNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityCreeperNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityCreeperNPC.java new file mode 100644 index 000000000..db04aa97d --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityCreeperNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityCreeper; +import net.minecraft.server.World; + +public class EntityCreeperNPC extends EntityCreeper { + + public EntityCreeperNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityEnderDragonNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityEnderDragonNPC.java new file mode 100644 index 000000000..a8d568612 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityEnderDragonNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityEnderDragon; +import net.minecraft.server.World; + +public class EntityEnderDragonNPC extends EntityEnderDragon { + + public EntityEnderDragonNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityEndermanNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityEndermanNPC.java new file mode 100644 index 000000000..bec2aea14 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityEndermanNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityEnderman; +import net.minecraft.server.World; + +public class EntityEndermanNPC extends EntityEnderman { + + public EntityEndermanNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityGhastNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityGhastNPC.java new file mode 100644 index 000000000..aa0a48e5a --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityGhastNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityGhast; +import net.minecraft.server.World; + +public class EntityGhastNPC extends EntityGhast { + + public EntityGhastNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityGiantNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityGiantNPC.java new file mode 100644 index 000000000..c93d0a65f --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityGiantNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityGiantZombie; +import net.minecraft.server.World; + +public class EntityGiantNPC extends EntityGiantZombie { + + public EntityGiantNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityHumanNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityHumanNPC.java new file mode 100644 index 000000000..73056702c --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityHumanNPC.java @@ -0,0 +1,74 @@ +package net.citizensnpcs.resource.lib.entity; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.Map; + +import net.citizensnpcs.resource.lib.NPCNetHandler; +import net.citizensnpcs.resource.lib.NPCNetworkManager; +import net.citizensnpcs.resource.lib.NPCSocket; +import net.citizensnpcs.util.Messaging; +import net.minecraft.server.EntityPlayer; +import net.minecraft.server.ItemInWorldManager; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.NetHandler; +import net.minecraft.server.NetworkManager; +import net.minecraft.server.World; + +import org.bukkit.craftbukkit.entity.CraftEntity; +import org.bukkit.craftbukkit.entity.CraftPlayer; + +@SuppressWarnings("unchecked") +public class EntityHumanNPC extends EntityPlayer { + + public EntityHumanNPC(MinecraftServer minecraftServer, World world, String string, + ItemInWorldManager itemInWorldManager) { + super(minecraftServer, world, string, itemInWorldManager); + itemInWorldManager.setGameMode(0); + + NPCSocket socket = new NPCSocket(); + NetworkManager netMgr = new NPCNetworkManager(socket, "npc mgr", new NetHandler() { + @Override + public boolean c() { + return false; + } + }); + netServerHandler = new NPCNetHandler(minecraftServer, netMgr, this); + netMgr.a(netServerHandler); + + try { + socket.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + + @Override + public CraftPlayer getBukkitEntity() { + if (bukkitEntity == null) { + super.getBukkitEntity(); + removeFromPlayerMap(name); + // Bukkit uses a map of player names to CraftPlayer instances to + // solve a reconnect issue, so NPC names will conflict with ordinary + // player names. Workaround. + } + return super.getBukkitEntity(); + } + + public void removeFromPlayerMap(String name) { + if (players != null) + players.remove(name); + } + + private static Map players; + + static { + try { + Field f = CraftEntity.class.getDeclaredField("players"); + f.setAccessible(true); + players = (Map) f.get(null); + } catch (Exception ex) { + Messaging.log("Unable to fetch player map from CraftEntity: " + ex.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityMagmaCubeNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityMagmaCubeNPC.java new file mode 100644 index 000000000..e92c04ec9 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityMagmaCubeNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityMagmaCube; +import net.minecraft.server.World; + +public class EntityMagmaCubeNPC extends EntityMagmaCube { + + public EntityMagmaCubeNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityMushroomCowNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityMushroomCowNPC.java new file mode 100644 index 000000000..f9d3133bb --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityMushroomCowNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityMushroomCow; +import net.minecraft.server.World; + +public class EntityMushroomCowNPC extends EntityMushroomCow { + + public EntityMushroomCowNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityPigNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityPigNPC.java new file mode 100644 index 000000000..21b72c877 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityPigNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityPig; +import net.minecraft.server.World; + +public class EntityPigNPC extends EntityPig { + + public EntityPigNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityPigZombieNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityPigZombieNPC.java new file mode 100644 index 000000000..15c03b87b --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityPigZombieNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityPigZombie; +import net.minecraft.server.World; + +public class EntityPigZombieNPC extends EntityPigZombie { + + public EntityPigZombieNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntitySheepNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntitySheepNPC.java new file mode 100644 index 000000000..a0a123f43 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntitySheepNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntitySheep; +import net.minecraft.server.World; + +public class EntitySheepNPC extends EntitySheep { + + public EntitySheepNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntitySilverfishNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntitySilverfishNPC.java new file mode 100644 index 000000000..983b619c7 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntitySilverfishNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntitySilverfish; +import net.minecraft.server.World; + +public class EntitySilverfishNPC extends EntitySilverfish { + + public EntitySilverfishNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntitySkeletonNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntitySkeletonNPC.java new file mode 100644 index 000000000..a07edd725 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntitySkeletonNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntitySkeleton; +import net.minecraft.server.World; + +public class EntitySkeletonNPC extends EntitySkeleton { + + public EntitySkeletonNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntitySlimeNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntitySlimeNPC.java new file mode 100644 index 000000000..c23214dc3 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntitySlimeNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntitySlime; +import net.minecraft.server.World; + +public class EntitySlimeNPC extends EntitySlime { + + public EntitySlimeNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntitySnowmanNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntitySnowmanNPC.java new file mode 100644 index 000000000..c514b8703 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntitySnowmanNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntitySnowman; +import net.minecraft.server.World; + +public class EntitySnowmanNPC extends EntitySnowman { + + public EntitySnowmanNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntitySpiderNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntitySpiderNPC.java new file mode 100644 index 000000000..6cf1cf1dd --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntitySpiderNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntitySpider; +import net.minecraft.server.World; + +public class EntitySpiderNPC extends EntitySpider { + + public EntitySpiderNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntitySquidNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntitySquidNPC.java new file mode 100644 index 000000000..cf9d03aa4 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntitySquidNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntitySquid; +import net.minecraft.server.World; + +public class EntitySquidNPC extends EntitySquid { + + public EntitySquidNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityVillagerNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityVillagerNPC.java new file mode 100644 index 000000000..2423df4d2 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityVillagerNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityVillager; +import net.minecraft.server.World; + +public class EntityVillagerNPC extends EntityVillager { + + public EntityVillagerNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityWolfNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityWolfNPC.java new file mode 100644 index 000000000..df5e46fac --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityWolfNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityWolf; +import net.minecraft.server.World; + +public class EntityWolfNPC extends EntityWolf { + + public EntityWolfNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/resource/lib/entity/EntityZombieNPC.java b/src/net/citizensnpcs/resource/lib/entity/EntityZombieNPC.java new file mode 100644 index 000000000..ed4fd2383 --- /dev/null +++ b/src/net/citizensnpcs/resource/lib/entity/EntityZombieNPC.java @@ -0,0 +1,15 @@ +package net.citizensnpcs.resource.lib.entity; + +import net.minecraft.server.EntityZombie; +import net.minecraft.server.World; + +public class EntityZombieNPC extends EntityZombie { + + public EntityZombieNPC(World world) { + super(world); + } + + @Override + public void m_() { + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/trait/LookClose.java b/src/net/citizensnpcs/trait/LookClose.java new file mode 100644 index 000000000..2e4158c2c --- /dev/null +++ b/src/net/citizensnpcs/trait/LookClose.java @@ -0,0 +1,43 @@ +package net.citizensnpcs.trait; + +import net.citizensnpcs.api.DataKey; +import net.citizensnpcs.api.npc.trait.Trait; + +public class LookClose implements Trait { + private boolean shouldLookClose; + + public LookClose() { + } + + public LookClose(boolean shouldLookClose) { + this.shouldLookClose = shouldLookClose; + } + + @Override + public String getName() { + return "look-close"; + } + + @Override + public void load(DataKey key) { + shouldLookClose = key.getBoolean(""); + } + + @Override + public void save(DataKey key) { + key.setBoolean("", shouldLookClose); + } + + public boolean shouldLookClose() { + return shouldLookClose; + } + + public void setLookClose(boolean shouldLookClose) { + this.shouldLookClose = shouldLookClose; + } + + @Override + public String toString() { + return "LookClose{" + shouldLookClose + "}"; + } +} \ No newline at end of file diff --git a/src/net/citizensnpcs/util/NPCBuilder.java b/src/net/citizensnpcs/util/NPCBuilder.java new file mode 100644 index 000000000..416e3e8d6 --- /dev/null +++ b/src/net/citizensnpcs/util/NPCBuilder.java @@ -0,0 +1,75 @@ +package net.citizensnpcs.util; + +import java.util.HashMap; +import java.util.Map; + +import org.bukkit.entity.CreatureType; + +import net.citizensnpcs.npc.CitizensNPC; +import net.citizensnpcs.npc.CitizensNPCManager; +import net.citizensnpcs.npc.entity.CitizensBlazeNPC; +import net.citizensnpcs.npc.entity.CitizensCaveSpiderNPC; +import net.citizensnpcs.npc.entity.CitizensChickenNPC; +import net.citizensnpcs.npc.entity.CitizensCowNPC; +import net.citizensnpcs.npc.entity.CitizensCreeperNPC; +import net.citizensnpcs.npc.entity.CitizensEnderDragonNPC; +import net.citizensnpcs.npc.entity.CitizensEndermanNPC; +import net.citizensnpcs.npc.entity.CitizensGhastNPC; +import net.citizensnpcs.npc.entity.CitizensGiantNPC; +import net.citizensnpcs.npc.entity.CitizensHumanNPC; +import net.citizensnpcs.npc.entity.CitizensMagmaCubeNPC; +import net.citizensnpcs.npc.entity.CitizensMushroomCowNPC; +import net.citizensnpcs.npc.entity.CitizensPigNPC; +import net.citizensnpcs.npc.entity.CitizensPigZombieNPC; +import net.citizensnpcs.npc.entity.CitizensSheepNPC; +import net.citizensnpcs.npc.entity.CitizensSilverfishNPC; +import net.citizensnpcs.npc.entity.CitizensSkeletonNPC; +import net.citizensnpcs.npc.entity.CitizensSlimeNPC; +import net.citizensnpcs.npc.entity.CitizensSnowmanNPC; +import net.citizensnpcs.npc.entity.CitizensSpiderNPC; +import net.citizensnpcs.npc.entity.CitizensSquidNPC; +import net.citizensnpcs.npc.entity.CitizensVillagerNPC; +import net.citizensnpcs.npc.entity.CitizensWolfNPC; +import net.citizensnpcs.npc.entity.CitizensZombieNPC; + +public class NPCBuilder { + private final Map> types = new HashMap>(); + + public NPCBuilder() { + types.put(CreatureType.BLAZE, CitizensBlazeNPC.class); + types.put(CreatureType.CAVE_SPIDER, CitizensCaveSpiderNPC.class); + types.put(CreatureType.CHICKEN, CitizensChickenNPC.class); + types.put(CreatureType.COW, CitizensCowNPC.class); + types.put(CreatureType.CREEPER, CitizensCreeperNPC.class); + types.put(CreatureType.ENDER_DRAGON, CitizensEnderDragonNPC.class); + types.put(CreatureType.ENDERMAN, CitizensEndermanNPC.class); + types.put(CreatureType.GHAST, CitizensGhastNPC.class); + types.put(CreatureType.GIANT, CitizensGiantNPC.class); + types.put(CreatureType.MAGMA_CUBE, CitizensMagmaCubeNPC.class); + types.put(CreatureType.MONSTER, CitizensHumanNPC.class); + types.put(CreatureType.MUSHROOM_COW, CitizensMushroomCowNPC.class); + types.put(CreatureType.PIG, CitizensPigNPC.class); + types.put(CreatureType.PIG_ZOMBIE, CitizensPigZombieNPC.class); + types.put(CreatureType.SHEEP, CitizensSheepNPC.class); + types.put(CreatureType.SILVERFISH, CitizensSilverfishNPC.class); + types.put(CreatureType.SKELETON, CitizensSkeletonNPC.class); + types.put(CreatureType.SLIME, CitizensSlimeNPC.class); + types.put(CreatureType.SNOWMAN, CitizensSnowmanNPC.class); + types.put(CreatureType.SPIDER, CitizensSpiderNPC.class); + types.put(CreatureType.SQUID, CitizensSquidNPC.class); + types.put(CreatureType.VILLAGER, CitizensVillagerNPC.class); + types.put(CreatureType.WOLF, CitizensWolfNPC.class); + types.put(CreatureType.ZOMBIE, CitizensZombieNPC.class); + } + + public CitizensNPC getByType(CreatureType type, CitizensNPCManager npcManager, int id, String name) { + Class npcClass = types.get(type); + try { + return npcClass.getConstructor(CitizensNPCManager.class, int.class, String.class).newInstance(npcManager, + id, name); + } catch (Exception ex) { + ex.printStackTrace(); + } + return null; + } +} \ No newline at end of file