From 7b624765bf933c5c75c4f57702588544a3fc1d08 Mon Sep 17 00:00:00 2001 From: fullwall Date: Thu, 15 Mar 2012 19:38:10 +0800 Subject: [PATCH] Fix for CITIZENS-31 --- .../command/command/NPCCommands.java | 209 +++++++++--------- .../net/citizensnpcs/npc/CitizensNPC.java | 1 + .../npc/entity/CitizensHumanNPC.java | 2 +- 3 files changed, 107 insertions(+), 105 deletions(-) diff --git a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java index 2558c27b1..11a8f7d29 100644 --- a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java @@ -43,12 +43,12 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "character [character]", - desc = "Set the character of a NPC", - modifiers = { "character" }, - min = 2, - max = 2) + aliases = { "npc" }, + usage = "character [character]", + desc = "Set the character of a NPC", + modifiers = { "character" }, + min = 2, + max = 2) public void character(CommandContext args, Player player, NPC npc) throws CommandException { String name = args.getString(1).toLowerCase(); Character character = characterManager.getCharacter(name); @@ -66,19 +66,19 @@ public class NPCCommands { Messaging.sendError(player, "This NPC cannot be given the character '" + character.getName() + "'."); return; } - Messaging.send(player, StringHelper.wrap(npc.getName() + "'s") + " character is now '" - + StringHelper.wrap(name) + "'."); + Messaging.send(player, + StringHelper.wrap(npc.getName() + "'s") + " character is now '" + StringHelper.wrap(name) + "'."); npc.setCharacter(character); } @Command( - aliases = { "npc" }, - usage = "create [name] (--type (type) --char (char))", - desc = "Create a new NPC", - modifiers = { "create" }, - min = 2, - max = 5, - permission = "npc.create") + aliases = { "npc" }, + usage = "create [name] (--type (type) --char (char))", + desc = "Create a new NPC", + modifiers = { "create" }, + min = 2, + max = 5, + permission = "npc.create") @Requirements public void create(CommandContext args, Player player, NPC npc) { String name = args.getString(1); @@ -94,8 +94,8 @@ public class NPCCommands { Messaging.sendError(player, "'" + args.getFlag("type") + "' is not a valid mob type. Using default NPC."); } - NPC create = npcManager.createNPC(type, name); - String msg = ChatColor.GREEN + "You created " + StringHelper.wrap(create.getName()); + npc = npcManager.createNPC(type, name); + String msg = ChatColor.GREEN + "You created " + StringHelper.wrap(npc.getName()); if (args.hasValueFlag("char")) { String character = args.getFlag("char").toLowerCase(); if (characterManager.getCharacter(character) == null) { @@ -106,34 +106,34 @@ public class NPCCommands { if (!set.getValidTypes().isEmpty() && !set.getValidTypes().contains(type)) { Messaging.sendError(player, "The character '" + set.getName() + "' cannot be given the mob type '" + type.name().toLowerCase() + "'."); - create.remove(); + npc.remove(); return; } - create.setCharacter(characterManager.getCharacter(character)); + npc.setCharacter(characterManager.getCharacter(character)); msg += " with the character " + StringHelper.wrap(character); } } msg += " at your location."; // Initialize necessary traits - create.getTrait(Owner.class).setOwner(player.getName()); - create.getTrait(MobType.class).setType(type.toString()); - create.addTrait(traitManager.getTrait(LookClose.class, create)); - create.addTrait(traitManager.getTrait(Text.class, create)); + npc.getTrait(Owner.class).setOwner(player.getName()); + npc.getTrait(MobType.class).setType(type.toString()); + npc.addTrait(traitManager.getTrait(LookClose.class, npc)); + npc.addTrait(traitManager.getTrait(Text.class, npc)); - create.spawn(player.getLocation()); - npcManager.selectNPC(player, create); + npc.spawn(player.getLocation()); + npcManager.selectNPC(player, npc); Messaging.send(player, msg); } @Command( - aliases = { "npc" }, - usage = "despawn", - desc = "Despawn a NPC", - modifiers = { "despawn" }, - min = 1, - max = 1, - permission = "npc.despawn") + aliases = { "npc" }, + usage = "despawn", + desc = "Despawn a NPC", + modifiers = { "despawn" }, + min = 1, + max = 1, + permission = "npc.despawn") public void despawn(CommandContext args, Player player, NPC npc) { npc.getTrait(Spawned.class).setSpawned(false); npc.despawn(); @@ -141,14 +141,14 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "list (page) ((-a) --owner (owner) --type (type) --char (char))", - desc = "List NPCs", - flags = "a", - modifiers = { "list" }, - min = 1, - max = 2, - permission = "npc.list") + aliases = { "npc" }, + usage = "list (page) ((-a) --owner (owner) --type (type) --char (char))", + desc = "List NPCs", + flags = "a", + modifiers = { "list" }, + min = 1, + max = 2, + permission = "npc.list") @Requirements public void list(CommandContext args, Player player, NPC npc) throws CommandException { List npcs = new ArrayList(); @@ -213,13 +213,13 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "lookclose", - desc = "Toggle whether a NPC will look when a player is near", - modifiers = { "lookclose", "look", "rotate" }, - min = 1, - max = 1, - permission = "npc.lookclose") + aliases = { "npc" }, + usage = "lookclose", + desc = "Toggle whether a NPC will look when a player is near", + modifiers = { "lookclose", "look", "rotate" }, + min = 1, + max = 1, + permission = "npc.lookclose") public void lookClose(CommandContext args, Player player, NPC npc) { String msg = StringHelper.wrap(npc.getName()) + " will " + (npc.getTrait(LookClose.class).toggle() ? "now rotate" : "no longer rotate"); @@ -236,13 +236,13 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "owner [name]", - desc = "Set the owner of an NPC", - modifiers = { "owner" }, - min = 2, - max = 2, - permission = "npc.owner") + aliases = { "npc" }, + usage = "owner [name]", + desc = "Set the owner of an NPC", + modifiers = { "owner" }, + min = 2, + max = 2, + permission = "npc.owner") public void owner(CommandContext args, Player player, NPC npc) throws CommandException { String name = args.getString(1); if (npc.getTrait(Owner.class).getOwner().equals(name)) @@ -253,12 +253,12 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "remove (all)", - desc = "Remove a NPC", - modifiers = { "remove" }, - min = 1, - max = 2) + aliases = { "npc" }, + usage = "remove (all)", + desc = "Remove a NPC", + modifiers = { "remove" }, + min = 1, + max = 2) @Requirements public void remove(CommandContext args, Player player, NPC npc) throws CommandException { if (args.argsLength() == 2) { @@ -281,13 +281,13 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "rename [name]", - desc = "Rename a NPC", - modifiers = { "rename" }, - min = 2, - max = 2, - permission = "npc.rename") + aliases = { "npc" }, + usage = "rename [name]", + desc = "Rename a NPC", + modifiers = { "rename" }, + min = 2, + max = 2, + permission = "npc.rename") public void rename(CommandContext args, Player player, NPC npc) { String oldName = npc.getName(); String newName = args.getString(1); @@ -296,18 +296,19 @@ public class NPCCommands { newName = newName.substring(0, 15); } npc.setName(newName); - Messaging.send(player, ChatColor.GREEN + "You renamed " + StringHelper.wrap(oldName) + " to " - + StringHelper.wrap(newName) + "."); + Messaging.send(player, + ChatColor.GREEN + "You renamed " + StringHelper.wrap(oldName) + " to " + StringHelper.wrap(newName) + + "."); } @Command( - aliases = { "npc" }, - usage = "select [id]", - desc = "Select a NPC with the given ID", - modifiers = { "select" }, - min = 2, - max = 2, - permission = "npc.select") + aliases = { "npc" }, + usage = "select [id]", + desc = "Select a NPC with the given ID", + modifiers = { "select" }, + min = 2, + max = 2, + permission = "npc.select") @Requirements(ownership = true) public void select(CommandContext args, Player player, NPC npc) throws CommandException { NPC toSelect = npcManager.getNPC(args.getInteger(1)); @@ -320,13 +321,13 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "spawn [id]", - desc = "Spawn an existing NPC", - modifiers = { "spawn" }, - min = 2, - max = 2, - permission = "npc.spawn") + aliases = { "npc" }, + usage = "spawn [id]", + desc = "Spawn an existing NPC", + modifiers = { "spawn" }, + min = 2, + max = 2, + permission = "npc.spawn") @Requirements public void spawn(CommandContext args, Player player, NPC npc) throws CommandException { NPC respawn = npcManager.getNPC(args.getInteger(1)); @@ -346,13 +347,13 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "tp", - desc = "Teleport to a NPC", - modifiers = { "tp", "teleport" }, - min = 1, - max = 1, - permission = "npc.tp") + aliases = { "npc" }, + usage = "tp", + desc = "Teleport to a NPC", + modifiers = { "tp", "teleport" }, + min = 1, + max = 1, + permission = "npc.tp") public void tp(CommandContext args, Player player, NPC npc) { // Spawn the NPC if it isn't spawned to prevent NPEs if (!npc.isSpawned()) @@ -362,13 +363,13 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "tphere", - desc = "Teleport a NPC to your location", - modifiers = { "tphere" }, - min = 1, - max = 1, - permission = "npc.tphere") + aliases = { "npc" }, + usage = "tphere", + desc = "Teleport a NPC to your location", + modifiers = { "tphere" }, + min = 1, + max = 1, + permission = "npc.tphere") public void tphere(CommandContext args, Player player, NPC npc) { // Spawn the NPC if it isn't spawned to prevent NPEs if (!npc.isSpawned()) @@ -378,13 +379,13 @@ public class NPCCommands { } @Command( - aliases = { "npc" }, - usage = "power", - desc = "Toggle a creeper NPC as powered", - modifiers = { "power" }, - min = 1, - max = 1, - permission = "npc.power") + aliases = { "npc" }, + usage = "power", + desc = "Toggle a creeper NPC as powered", + modifiers = { "power" }, + min = 1, + max = 1, + permission = "npc.power") @Requirements(selected = true, ownership = true, types = { EntityType.CREEPER }) public void power(CommandContext args, Player player, NPC npc) { String msg = StringHelper.wrap(npc.getName()) + " will " diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index ddaa8f07c..ac4b258e2 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -146,6 +146,7 @@ public abstract class CitizensNPC extends AbstractNPC { return false; mcEntity = createHandle(loc); + mcEntity.world.addEntity(mcEntity); mcEntity.world.players.remove(mcEntity); diff --git a/src/main/java/net/citizensnpcs/npc/entity/CitizensHumanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/CitizensHumanNPC.java index fa7580fa8..e380cc992 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/CitizensHumanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/CitizensHumanNPC.java @@ -60,7 +60,7 @@ public class CitizensHumanNPC extends CitizensNPC implements Equipable { @Override public void update() { super.update(); - if (mcEntity != null) { + if (isSpawned() && getBukkitEntity().getLocation().getChunk().isLoaded()) { mcEntity.move(0, -0.1, 0); // gravity! also works around an entity.onGround not updating issue // (onGround is normally updated by the client)