mirror of
https://github.com/CitizensDev/Citizens2.git
synced 2025-02-03 14:02:01 +01:00
initial mob type NPCs implementation
This commit is contained in:
parent
4c8ccdcba2
commit
9029ea29ec
1
TODO
1
TODO
@ -1,7 +1,6 @@
|
|||||||
-Citizens2 TODO List-
|
-Citizens2 TODO List-
|
||||||
|
|
||||||
-Add proper color parsing for names
|
-Add proper color parsing for names
|
||||||
-Properly implement commands
|
|
||||||
-Add NPC templates
|
-Add NPC templates
|
||||||
-Finish pathfinding API
|
-Finish pathfinding API
|
||||||
-Add database support (MySQL and/or SQLite)
|
-Add database support (MySQL and/or SQLite)
|
Binary file not shown.
@ -35,6 +35,7 @@ import net.citizensnpcs.npc.CitizensNPCManager;
|
|||||||
import net.citizensnpcs.storage.DatabaseStorage;
|
import net.citizensnpcs.storage.DatabaseStorage;
|
||||||
import net.citizensnpcs.storage.Storage;
|
import net.citizensnpcs.storage.Storage;
|
||||||
import net.citizensnpcs.storage.YamlStorage;
|
import net.citizensnpcs.storage.YamlStorage;
|
||||||
|
import net.citizensnpcs.trait.LookClose;
|
||||||
import net.citizensnpcs.util.Messaging;
|
import net.citizensnpcs.util.Messaging;
|
||||||
import net.citizensnpcs.util.StringHelper;
|
import net.citizensnpcs.util.StringHelper;
|
||||||
|
|
||||||
@ -43,6 +44,7 @@ import org.bukkit.ChatColor;
|
|||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.craftbukkit.CraftServer;
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
|
import org.bukkit.entity.CreatureType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.permissions.Permission;
|
import org.bukkit.permissions.Permission;
|
||||||
import org.bukkit.permissions.PermissionDefault;
|
import org.bukkit.permissions.PermissionDefault;
|
||||||
@ -164,6 +166,13 @@ public class Citizens extends JavaPlugin {
|
|||||||
registerCommands();
|
registerCommands();
|
||||||
registerPermissions();
|
registerPermissions();
|
||||||
|
|
||||||
|
traitManager.register("location", SpawnLocation.class);
|
||||||
|
traitManager.register("owner", Owner.class);
|
||||||
|
traitManager.register("spawned", Spawned.class);
|
||||||
|
traitManager.register("look-close", LookClose.class);
|
||||||
|
|
||||||
|
Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new NPCUpdater(npcManager), 0, 1);
|
||||||
|
|
||||||
Messaging.log("v" + getDescription().getVersion() + " enabled.");
|
Messaging.log("v" + getDescription().getVersion() + " enabled.");
|
||||||
|
|
||||||
// Setup NPCs after all plugins have been enabled (allows for multiworld
|
// Setup NPCs after all plugins have been enabled (allows for multiworld
|
||||||
@ -190,16 +199,18 @@ public class Citizens extends JavaPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setupNPCs() throws NPCLoadException {
|
private void setupNPCs() throws NPCLoadException {
|
||||||
traitManager.register("location", SpawnLocation.class);
|
|
||||||
traitManager.register("owner", Owner.class);
|
|
||||||
traitManager.register("spawned", Spawned.class);
|
|
||||||
|
|
||||||
int created = 0, spawned = 0;
|
int created = 0, spawned = 0;
|
||||||
for (DataKey key : saves.getKey("npc").getIntegerSubKeys()) {
|
for (DataKey key : saves.getKey("npc").getIntegerSubKeys()) {
|
||||||
int id = Integer.parseInt(key.name());
|
int id = Integer.parseInt(key.name());
|
||||||
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(id, key.getString("name"), null);
|
|
||||||
|
// TODO better trait exception handling
|
||||||
|
String type = key.getString("traits.type");
|
||||||
|
NPC npc = npcManager.createNPC(
|
||||||
|
type.equalsIgnoreCase("DEFAULT") ? CreatureType.MONSTER : CreatureType.valueOf(key.getString(
|
||||||
|
"traits.type").toUpperCase()), id, key.getString("name"), null);
|
||||||
|
|
||||||
npc.load(key);
|
npc.load(key);
|
||||||
++created;
|
++created;
|
||||||
if (npc.isSpawned())
|
if (npc.isSpawned())
|
||||||
|
22
src/net/citizensnpcs/NPCUpdater.java
Normal file
22
src/net/citizensnpcs/NPCUpdater.java
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package net.citizensnpcs;
|
||||||
|
|
||||||
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
|
import net.citizensnpcs.npc.CitizensNPC;
|
||||||
|
import net.citizensnpcs.npc.CitizensNPCManager;
|
||||||
|
import net.citizensnpcs.npc.entity.CitizensHumanNPC;
|
||||||
|
|
||||||
|
public class NPCUpdater implements Runnable {
|
||||||
|
private CitizensNPCManager npcManager;
|
||||||
|
|
||||||
|
public NPCUpdater(CitizensNPCManager npcManager) {
|
||||||
|
this.npcManager = npcManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (NPC npc : npcManager)
|
||||||
|
// For now only do this for human NPCs
|
||||||
|
if (((CitizensNPC) npc) instanceof CitizensHumanNPC)
|
||||||
|
((CitizensHumanNPC) npc).tick();
|
||||||
|
}
|
||||||
|
}
|
@ -4,6 +4,7 @@ import net.citizensnpcs.Settings.Setting;
|
|||||||
import net.citizensnpcs.api.npc.NPC;
|
import net.citizensnpcs.api.npc.NPC;
|
||||||
import net.citizensnpcs.api.npc.trait.Character;
|
import net.citizensnpcs.api.npc.trait.Character;
|
||||||
import net.citizensnpcs.api.npc.trait.DefaultInstanceFactory;
|
import net.citizensnpcs.api.npc.trait.DefaultInstanceFactory;
|
||||||
|
import net.citizensnpcs.api.npc.trait.trait.MobType;
|
||||||
import net.citizensnpcs.api.npc.trait.trait.Owner;
|
import net.citizensnpcs.api.npc.trait.trait.Owner;
|
||||||
import net.citizensnpcs.api.npc.trait.trait.Spawned;
|
import net.citizensnpcs.api.npc.trait.trait.Spawned;
|
||||||
import net.citizensnpcs.command.CommandContext;
|
import net.citizensnpcs.command.CommandContext;
|
||||||
@ -12,10 +13,12 @@ import net.citizensnpcs.command.annotation.Permission;
|
|||||||
import net.citizensnpcs.command.annotation.Requirements;
|
import net.citizensnpcs.command.annotation.Requirements;
|
||||||
import net.citizensnpcs.npc.CitizensNPC;
|
import net.citizensnpcs.npc.CitizensNPC;
|
||||||
import net.citizensnpcs.npc.CitizensNPCManager;
|
import net.citizensnpcs.npc.CitizensNPCManager;
|
||||||
|
import net.citizensnpcs.trait.LookClose;
|
||||||
import net.citizensnpcs.util.Messaging;
|
import net.citizensnpcs.util.Messaging;
|
||||||
import net.citizensnpcs.util.StringHelper;
|
import net.citizensnpcs.util.StringHelper;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.CreatureType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause;
|
||||||
|
|
||||||
@ -31,33 +34,42 @@ public class NPCCommands {
|
|||||||
|
|
||||||
@Command(
|
@Command(
|
||||||
aliases = { "npc" },
|
aliases = { "npc" },
|
||||||
usage = "create [name] (character)",
|
usage = "create [name] [type] (character)",
|
||||||
desc = "Create a new NPC",
|
desc = "Create a new NPC",
|
||||||
modifiers = { "create" },
|
modifiers = { "create" },
|
||||||
min = 2,
|
min = 3,
|
||||||
max = 3)
|
max = 4)
|
||||||
@Permission("npc.create")
|
@Permission("npc.create")
|
||||||
@Requirements
|
@Requirements
|
||||||
public void createNPC(CommandContext args, Player player, NPC npc) {
|
public void createNPC(CommandContext args, Player player, NPC npc) {
|
||||||
CitizensNPC create = (CitizensNPC) npcManager.createNPC(args.getString(1));
|
CreatureType type = CreatureType.MONSTER; // Default human type
|
||||||
|
try {
|
||||||
|
type = CreatureType.valueOf(args.getString(2).toUpperCase().replace('-', '_'));
|
||||||
|
} catch (IllegalArgumentException ex) {
|
||||||
|
Messaging.sendError(player, "'" + args.getString(2) + "' is not a valid mob type. Using default NPC.");
|
||||||
|
}
|
||||||
|
|
||||||
|
CitizensNPC create = (CitizensNPC) npcManager.createNPC(type, args.getString(1));
|
||||||
String successMsg = ChatColor.GREEN + "You created " + StringHelper.wrap(create.getName());
|
String successMsg = ChatColor.GREEN + "You created " + StringHelper.wrap(create.getName());
|
||||||
boolean success = true;
|
boolean success = true;
|
||||||
if (args.argsLength() == 3) {
|
if (args.argsLength() == 4) {
|
||||||
if (characterManager.getInstance(args.getString(2), create) == null) {
|
if (characterManager.getInstance(args.getString(3), create) == null) {
|
||||||
Messaging.sendError(player,
|
Messaging.sendError(player,
|
||||||
"The character '" + args.getString(2) + "' does not exist. " + create.getName()
|
"The character '" + args.getString(3) + "' does not exist. " + create.getName()
|
||||||
+ " was created at your location without a character.");
|
+ " was created at your location without a character.");
|
||||||
success = false;
|
success = false;
|
||||||
} else {
|
} else {
|
||||||
create.setCharacter(characterManager.getInstance(args.getString(2), create));
|
create.setCharacter(characterManager.getInstance(args.getString(3), create));
|
||||||
successMsg += " with the character " + StringHelper.wrap(args.getString(2));
|
successMsg += " with the character " + StringHelper.wrap(args.getString(3));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
successMsg += " at your location.";
|
successMsg += " at your location.";
|
||||||
|
|
||||||
// Set the owner
|
// Set the owner
|
||||||
create.addTrait(new Owner(player.getName()));
|
create.addTrait(new Owner(player.getName()));
|
||||||
create.getTrait(Owner.class).setOwner(player.getName());
|
|
||||||
|
// Set the mob type
|
||||||
|
create.addTrait(new MobType(type == CreatureType.MONSTER ? "DEFAULT" : type.toString()));
|
||||||
|
|
||||||
create.spawn(player.getLocation());
|
create.spawn(player.getLocation());
|
||||||
npcManager.selectNPC(player, create);
|
npcManager.selectNPC(player, create);
|
||||||
@ -160,4 +172,22 @@ public class NPCCommands {
|
|||||||
player.teleport(npc.getBukkitEntity(), TeleportCause.COMMAND);
|
player.teleport(npc.getBukkitEntity(), TeleportCause.COMMAND);
|
||||||
Messaging.send(player, ChatColor.GREEN + "You teleported to " + StringHelper.wrap(npc.getName()) + ".");
|
Messaging.send(player, ChatColor.GREEN + "You teleported to " + StringHelper.wrap(npc.getName()) + ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Command(
|
||||||
|
aliases = { "npc" },
|
||||||
|
usage = "lookclose",
|
||||||
|
desc = "Toggle an NPC's look-close state",
|
||||||
|
modifiers = { "lookclose", "look", "rotate" },
|
||||||
|
min = 1,
|
||||||
|
max = 1)
|
||||||
|
@Permission("npc.look-close")
|
||||||
|
public void toggleNPCLookClose(CommandContext args, Player player, NPC npc) {
|
||||||
|
npc.getTrait(LookClose.class).setLookClose(!npc.getTrait(LookClose.class).shouldLookClose());
|
||||||
|
String msg = StringHelper.wrap(npc.getName()) + " will ";
|
||||||
|
if (npc.getTrait(LookClose.class).shouldLookClose())
|
||||||
|
msg += "now rotate";
|
||||||
|
else
|
||||||
|
msg += "no longer";
|
||||||
|
Messaging.send(player, msg += " when a player is nearby.");
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,5 +1,8 @@
|
|||||||
package net.citizensnpcs.npc;
|
package net.citizensnpcs.npc;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import net.citizensnpcs.api.event.NPCDespawnEvent;
|
import net.citizensnpcs.api.event.NPCDespawnEvent;
|
||||||
import net.citizensnpcs.api.event.NPCSpawnEvent;
|
import net.citizensnpcs.api.event.NPCSpawnEvent;
|
||||||
import net.citizensnpcs.api.npc.AbstractNPC;
|
import net.citizensnpcs.api.npc.AbstractNPC;
|
||||||
@ -7,20 +10,39 @@ import net.citizensnpcs.api.npc.ai.Navigator;
|
|||||||
import net.citizensnpcs.api.npc.trait.trait.SpawnLocation;
|
import net.citizensnpcs.api.npc.trait.trait.SpawnLocation;
|
||||||
import net.citizensnpcs.api.npc.trait.trait.Spawned;
|
import net.citizensnpcs.api.npc.trait.trait.Spawned;
|
||||||
import net.citizensnpcs.npc.ai.CitizensNavigator;
|
import net.citizensnpcs.npc.ai.CitizensNavigator;
|
||||||
import net.citizensnpcs.resource.lib.CraftNPC;
|
import net.citizensnpcs.trait.LookClose;
|
||||||
import net.citizensnpcs.util.Messaging;
|
import net.citizensnpcs.util.Messaging;
|
||||||
|
import net.minecraft.server.EntityLiving;
|
||||||
|
import net.minecraft.server.EntityTypes;
|
||||||
|
import net.minecraft.server.MinecraftServer;
|
||||||
|
import net.minecraft.server.WorldServer;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.Server;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.craftbukkit.CraftServer;
|
||||||
|
import org.bukkit.craftbukkit.CraftWorld;
|
||||||
|
import org.bukkit.entity.Entity;
|
||||||
|
|
||||||
public class CitizensNPC extends AbstractNPC {
|
public class CitizensNPC extends AbstractNPC {
|
||||||
private CraftNPC mcEntity;
|
protected EntityLiving mcEntity;
|
||||||
private final CitizensNPCManager manager;
|
protected final CitizensNPCManager manager;
|
||||||
|
|
||||||
public CitizensNPC(CitizensNPCManager manager, int id, String name) {
|
private Map<Integer, Class<? extends net.minecraft.server.Entity>> intToClass;
|
||||||
|
private Map<Class<? extends net.minecraft.server.Entity>, Integer> classToInt;
|
||||||
|
private Class<? extends EntityLiving> entityClass;
|
||||||
|
private double lookRange = 5;
|
||||||
|
|
||||||
|
protected CitizensNPC(CitizensNPCManager manager, int id, String name, Class<? extends EntityLiving> entityClass) {
|
||||||
super(id, name);
|
super(id, name);
|
||||||
this.manager = manager;
|
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
|
@Override
|
||||||
@ -39,11 +61,11 @@ public class CitizensNPC extends AbstractNPC {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Player getBukkitEntity() {
|
public Entity getBukkitEntity() {
|
||||||
return getHandle().getBukkitEntity();
|
return getHandle().getBukkitEntity();
|
||||||
}
|
}
|
||||||
|
|
||||||
public CraftNPC getHandle() {
|
public EntityLiving getHandle() {
|
||||||
return mcEntity;
|
return mcEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,21 +98,92 @@ public class CitizensNPC extends AbstractNPC {
|
|||||||
if (spawnEvent.isCancelled())
|
if (spawnEvent.isCancelled())
|
||||||
return false;
|
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
|
// Set the location
|
||||||
// TODO: do this automatically (default traits?)
|
addTrait(new SpawnLocation(loc));
|
||||||
// TODO: is spawned as a trait needed? Takes up memory
|
// Set the spawned state
|
||||||
if (!hasTrait(SpawnLocation.class))
|
addTrait(new Spawned(true));
|
||||||
addTrait(new SpawnLocation(loc));
|
|
||||||
else
|
|
||||||
getTrait(SpawnLocation.class).setLocation(loc);
|
|
||||||
|
|
||||||
if (!hasTrait(Spawned.class))
|
|
||||||
addTrait(new Spawned(true));
|
|
||||||
else
|
|
||||||
getTrait(Spawned.class).setSpawned(true);
|
|
||||||
|
|
||||||
return 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<? extends net.minecraft.server.Entity> 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<Integer, Class<? extends net.minecraft.server.Entity>>) field.get(null);
|
||||||
|
field = EntityTypes.class.getDeclaredField("e");
|
||||||
|
field.setAccessible(true);
|
||||||
|
classToInt = (Map<Class<? extends net.minecraft.server.Entity>, 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -9,19 +9,12 @@ import net.citizensnpcs.api.npc.NPC;
|
|||||||
import net.citizensnpcs.api.npc.NPCManager;
|
import net.citizensnpcs.api.npc.NPCManager;
|
||||||
import net.citizensnpcs.api.npc.trait.Character;
|
import net.citizensnpcs.api.npc.trait.Character;
|
||||||
import net.citizensnpcs.api.npc.trait.trait.SpawnLocation;
|
import net.citizensnpcs.api.npc.trait.trait.SpawnLocation;
|
||||||
import net.citizensnpcs.resource.lib.CraftNPC;
|
|
||||||
import net.citizensnpcs.storage.Storage;
|
import net.citizensnpcs.storage.Storage;
|
||||||
import net.citizensnpcs.util.ByIdArray;
|
import net.citizensnpcs.util.ByIdArray;
|
||||||
|
import net.citizensnpcs.util.NPCBuilder;
|
||||||
|
|
||||||
import net.minecraft.server.ItemInWorldManager;
|
import org.bukkit.entity.CreatureType;
|
||||||
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.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -32,26 +25,27 @@ public class CitizensNPCManager implements NPCManager {
|
|||||||
private final ByIdArray<NPC> npcs = new ByIdArray<NPC>();
|
private final ByIdArray<NPC> npcs = new ByIdArray<NPC>();
|
||||||
private final SetMultimap<Integer, String> selected = HashMultimap.create();
|
private final SetMultimap<Integer, String> selected = HashMultimap.create();
|
||||||
private final Storage saves;
|
private final Storage saves;
|
||||||
|
private final NPCBuilder npcBuilder = new NPCBuilder();
|
||||||
|
|
||||||
public CitizensNPCManager(Storage saves) {
|
public CitizensNPCManager(Storage saves) {
|
||||||
this.saves = saves;
|
this.saves = saves;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NPC createNPC(String name) {
|
public NPC createNPC(CreatureType type, String name) {
|
||||||
return createNPC(name, null);
|
return createNPC(type, name, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NPC createNPC(String name, Character character) {
|
public NPC createNPC(CreatureType type, String name, Character character) {
|
||||||
return createNPC(generateUniqueId(), name, 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))
|
if (npcs.contains(id))
|
||||||
throw new IllegalArgumentException("An NPC already has the ID '" + 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);
|
npc.setCharacter(character);
|
||||||
npcs.put(npc.getId(), npc);
|
npcs.put(npc.getId(), npc);
|
||||||
return npc;
|
return npc;
|
||||||
@ -68,10 +62,6 @@ public class CitizensNPCManager implements NPCManager {
|
|||||||
return npcs.iterator();
|
return npcs.iterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
private MinecraftServer getMinecraftServer(Server server) {
|
|
||||||
return ((CraftServer) server).getServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NPC getNPC(Entity entity) {
|
public NPC getNPC(Entity entity) {
|
||||||
for (NPC npc : npcs)
|
for (NPC npc : npcs)
|
||||||
@ -101,10 +91,6 @@ public class CitizensNPCManager implements NPCManager {
|
|||||||
return count - 1;
|
return count - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private WorldServer getWorldServer(World world) {
|
|
||||||
return ((CraftWorld) world).getHandle();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isNPC(Entity entity) {
|
public boolean isNPC(Entity entity) {
|
||||||
return getNPC(entity) != null;
|
return getNPC(entity) != null;
|
||||||
@ -118,17 +104,6 @@ public class CitizensNPCManager implements NPCManager {
|
|||||||
selected.removeAll(npc.getId());
|
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) {
|
public void selectNPC(Player player, NPC npc) {
|
||||||
// Remove existing selection if any
|
// Remove existing selection if any
|
||||||
NPC existing = getSelectedNPC(player);
|
NPC existing = getSelectedNPC(player);
|
||||||
|
12
src/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensBlazeNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensCaveSpiderNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensChickenNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensChickenNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensCowNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensCowNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensCreeperNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensEnderDragonNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensEndermanNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensGhastNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensGhastNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensGiantNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensGiantNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
32
src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java
Normal file
32
src/net/citizensnpcs/npc/entity/CitizensHumanNPC.java
Normal file
@ -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;
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensMagmaCubeNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensMushroomCowNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensPigNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensPigNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensPigZombieNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensSheepNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensSheepNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensSilverfishNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensSkeletonNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensSlimeNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensSnowmanNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensSpiderNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensSquidNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensSquidNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensVillagerNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensWolfNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensWolfNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
12
src/net/citizensnpcs/npc/entity/CitizensZombieNPC.java
Normal file
12
src/net/citizensnpcs/npc/entity/CitizensZombieNPC.java
Normal file
@ -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);
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntityBlazeNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntityBlazeNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntityCowNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntityCowNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntityGhastNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntityGhastNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntityGiantNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntityGiantNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
74
src/net/citizensnpcs/resource/lib/entity/EntityHumanNPC.java
Normal file
74
src/net/citizensnpcs/resource/lib/entity/EntityHumanNPC.java
Normal file
@ -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<String, CraftPlayer> players;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
Field f = CraftEntity.class.getDeclaredField("players");
|
||||||
|
f.setAccessible(true);
|
||||||
|
players = (Map<String, CraftPlayer>) f.get(null);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Messaging.log("Unable to fetch player map from CraftEntity: " + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntityPigNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntityPigNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntitySheepNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntitySheepNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntitySlimeNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntitySlimeNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntitySquidNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntitySquidNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
15
src/net/citizensnpcs/resource/lib/entity/EntityWolfNPC.java
Normal file
15
src/net/citizensnpcs/resource/lib/entity/EntityWolfNPC.java
Normal file
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
@ -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_() {
|
||||||
|
}
|
||||||
|
}
|
43
src/net/citizensnpcs/trait/LookClose.java
Normal file
43
src/net/citizensnpcs/trait/LookClose.java
Normal file
@ -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 + "}";
|
||||||
|
}
|
||||||
|
}
|
75
src/net/citizensnpcs/util/NPCBuilder.java
Normal file
75
src/net/citizensnpcs/util/NPCBuilder.java
Normal file
@ -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<CreatureType, Class<? extends CitizensNPC>> types = new HashMap<CreatureType, Class<? extends CitizensNPC>>();
|
||||||
|
|
||||||
|
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<? extends CitizensNPC> 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;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user