From 7c9c8dd546920fc386270e83b2fa9282d2db600f Mon Sep 17 00:00:00 2001 From: aPunch Date: Wed, 8 Feb 2012 09:22:42 -0600 Subject: [PATCH] added some commands, fixed bug where NPCs that despawned via chunk loading were deselected --- lib/CitizensAPI.jar | Bin 23702 -> 24046 bytes plugin.yml | 1 + src/net/citizensnpcs/Citizens.java | 2 ++ .../command/command/AdminCommands.java | 26 +++++++++++++++- .../command/command/HelpCommands.java | 8 ++--- .../command/command/NPCCommands.java | 29 ++++++++++++++++-- src/net/citizensnpcs/npc/CitizensNPC.java | 8 ++++- .../citizensnpcs/npc/CitizensNPCManager.java | 7 +++-- src/net/citizensnpcs/npc/NPCInventory.java | 6 +++- src/net/citizensnpcs/trait/Inventory.java | 2 +- src/net/citizensnpcs/trait/LookClose.java | 2 +- src/net/citizensnpcs/util/StringHelper.java | 4 +++ 12 files changed, 81 insertions(+), 14 deletions(-) diff --git a/lib/CitizensAPI.jar b/lib/CitizensAPI.jar index 95400e3fceb2ead497caaf2cc13c7d524991ab9e..47e75d31d3d2fe1763e617ef9edc4302f678ac2a 100644 GIT binary patch delta 9551 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 F{|A65bP@mn delta 9272 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ℑP4*BJ7+2PKWwki@XvTkbK9G^dihkyNLmu7lh z=wmvQ>7w{l%i5dU>wRS0e zSf3D_lhNp12``ArU5`V4AW6_#h3f57ViN6rt6br$2>$HI>5`$K{wW6^%*aPXZ*32% zisBaimhiSZ5`QE#fvB*UClSktmi--`I6;nE>7mAS(Y#B-t-%RO`CZze`7z+4UhilE zZ888h=(N!!^RR1FG8u^&<=90bg!xO%d>9lh__+f@!(hYyw?{$bpS=qIb09%IPc>c+ zNQVmfKYJG-TPngY3ILTV>kDeC0$(se^<^spWKmV><(yni?gbsyBwnyyP5NIy5rh!* zCszTa^5V+^slMPjNbv>5)ph>()s0>dT0`#zjWpC>utDQb98**O<=jQn813&}3y^h9 zIkNvxll!0BddB>~a!SZgO(KZ77S2lzKP@5{4Vo8M04+Mx|9vWdw7sBFlLVA!NhACD zNA*{o1KO7)6m7hh1`!oxDW{(aRL?}3zlgl_FGOPo0K`@s^`%iCZ6atzh^RIxM2Q6x z62XWE`Sx$*NSg?Tg83yuo`nb^tn(*9NrwpLHS3GJ(*OY?#P%AJ_HU^4ImFENU&xsQ z5Avjg^>R&ifUM4t=TVjTdD1BN*ENZ<|E~l_NPzC2W}7p-iXIURD)7J1XFc+lI;f6hLYvR|%FlHe|Ed!$_#gR9 z5C4Vym#Fj?xmoBxvaJ4}f8Z~5<}Y%a@V{i#XR(IhrSgAE(&rBj+h1fd@&Cxn5-9)Q n3-Q-P{IA3$secnOAhrgCFRlFbS^JBeA^$I#9zjI;pUD3K^Eq4* diff --git a/plugin.yml b/plugin.yml index 65cbaa9d2..310b62454 100644 --- a/plugin.yml +++ b/plugin.yml @@ -2,6 +2,7 @@ name: Citizens authors: [aPunch, fullwall] version: 2.0 main: net.citizensnpcs.Citizens +website: http://www.citizensnpcs.net commands: citizens: description: Administration commands diff --git a/src/net/citizensnpcs/Citizens.java b/src/net/citizensnpcs/Citizens.java index 65e64cf5e..f410ff9e9 100644 --- a/src/net/citizensnpcs/Citizens.java +++ b/src/net/citizensnpcs/Citizens.java @@ -20,6 +20,7 @@ import net.citizensnpcs.api.npc.trait.trait.SpawnLocation; import net.citizensnpcs.api.npc.trait.trait.Spawned; import net.citizensnpcs.command.CommandManager; import net.citizensnpcs.command.Injector; +import net.citizensnpcs.command.command.AdminCommands; import net.citizensnpcs.command.command.HelpCommands; import net.citizensnpcs.command.command.NPCCommands; import net.citizensnpcs.command.exception.CommandUsageException; @@ -242,6 +243,7 @@ public class Citizens extends JavaPlugin { cmdManager.setInjector(new Injector(this)); // Register command classes + cmdManager.register(AdminCommands.class); cmdManager.register(NPCCommands.class); cmdManager.register(HelpCommands.class); } diff --git a/src/net/citizensnpcs/command/command/AdminCommands.java b/src/net/citizensnpcs/command/command/AdminCommands.java index 6c5717cc9..81d0164c8 100644 --- a/src/net/citizensnpcs/command/command/AdminCommands.java +++ b/src/net/citizensnpcs/command/command/AdminCommands.java @@ -1,9 +1,33 @@ package net.citizensnpcs.command.command; -import net.citizensnpcs.Citizens; +import org.bukkit.entity.Player; +import net.citizensnpcs.Citizens; +import net.citizensnpcs.api.npc.NPC; +import net.citizensnpcs.command.CommandContext; +import net.citizensnpcs.command.annotation.Command; +import net.citizensnpcs.command.annotation.Requirements; +import net.citizensnpcs.util.Messaging; +import net.citizensnpcs.util.StringHelper; + +@Requirements public class AdminCommands { + private final Citizens plugin; public AdminCommands(Citizens plugin) { + this.plugin = plugin; + } + + @Command( + aliases = { "citizens" }, + desc = "Shows basic plugin information", + max = 0, + permission = "admin") + @Requirements + public void citizens(CommandContext args, Player player, NPC npc) { + Messaging.send(player, " " + StringHelper.wrapHeader("Citizens v" + plugin.getDescription().getVersion())); + Messaging.send(player, " <7>-- Written by fullwall and aPunch"); + Messaging.send(player, " <7>-- Source: http://github.com/CitizensDev"); + Messaging.send(player, " <7>-- Website: " + plugin.getDescription().getWebsite()); } } \ No newline at end of file diff --git a/src/net/citizensnpcs/command/command/HelpCommands.java b/src/net/citizensnpcs/command/command/HelpCommands.java index 27d098abf..6adf9daf0 100644 --- a/src/net/citizensnpcs/command/command/HelpCommands.java +++ b/src/net/citizensnpcs/command/command/HelpCommands.java @@ -67,9 +67,9 @@ public class HelpCommands { Messaging.send( player, - StringHelper.parseColors("=====[ " + StringHelper.wrapHeader("" + (baseCommand.equalsIgnoreCase("npc") ? "NPC" : StringHelper.capitalize(baseCommand - .toLowerCase())) + " Help " + page + "/" + pages + " ]=====")); + .toLowerCase())) + " Help " + page + "/" + pages)); if (lines.size() < endIndex) endIndex = lines.size() - 1; @@ -85,8 +85,8 @@ public class HelpCommands { for (Command cmd : cmdManager.getCommands(baseCommand)) { if (cmds.contains(cmd) || !player.hasPermission("citizens." + cmd.permission())) continue; - lines.add(StringHelper.parseColors("<7>/" + cmd.aliases()[0] + " " + cmd.usage() + " <7>- " - + cmd.desc())); + lines.add(StringHelper.parseColors("<7>/" + cmd.aliases()[0] + + (cmd.usage().isEmpty() ? "" : " " + cmd.usage()) + " <7>- " + cmd.desc())); if (cmd.modifiers().length > 1) cmds.add(cmd); } diff --git a/src/net/citizensnpcs/command/command/NPCCommands.java b/src/net/citizensnpcs/command/command/NPCCommands.java index 359993fe5..9758640aa 100644 --- a/src/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/net/citizensnpcs/command/command/NPCCommands.java @@ -109,6 +109,25 @@ public class NPCCommands { Messaging.send(player, ChatColor.GREEN + "You despawned " + StringHelper.wrap(npc.getName()) + "."); } + @Command( + aliases = { "npc" }, + usage = "rename [name]", + desc = "Rename an NPC", + modifiers = { "rename" }, + min = 2, + max = 2, + permission = "npc.rename") + public void renameNPC(CommandContext args, Player player, NPC npc) { + String oldName = npc.getName(); + npc.setName(args.getString(1)); + // Must reselect NPC after it is despawned + npcManager.selectNPC(player, npc); + Messaging.send( + player, + ChatColor.GREEN + "You renamed " + StringHelper.wrap(oldName) + " to " + + StringHelper.wrap(args.getString(1)) + "."); + } + @Command( aliases = { "npc" }, usage = "select [id]", @@ -189,8 +208,14 @@ public class NPCCommands { 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") + @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) { LookClose trait = npc.getTrait(LookClose.class); trait.toggle(); diff --git a/src/net/citizensnpcs/npc/CitizensNPC.java b/src/net/citizensnpcs/npc/CitizensNPC.java index 19992e9e8..cbe409634 100644 --- a/src/net/citizensnpcs/npc/CitizensNPC.java +++ b/src/net/citizensnpcs/npc/CitizensNPC.java @@ -39,7 +39,7 @@ public abstract class CitizensNPC extends AbstractNPC { Bukkit.getPluginManager().callEvent(new NPCDespawnEvent(this)); - manager.despawn(this); + manager.despawn(this, getTrait(Spawned.class).shouldSpawn()); mcEntity = null; return true; @@ -113,4 +113,10 @@ public abstract class CitizensNPC extends AbstractNPC { super.update(); ai.update(); } + + @Override + public void setName(String name) { + super.setName(name); + inventory.setName(name); + } } \ No newline at end of file diff --git a/src/net/citizensnpcs/npc/CitizensNPCManager.java b/src/net/citizensnpcs/npc/CitizensNPCManager.java index 48073d7e8..fe9264eb9 100644 --- a/src/net/citizensnpcs/npc/CitizensNPCManager.java +++ b/src/net/citizensnpcs/npc/CitizensNPCManager.java @@ -50,9 +50,10 @@ public class CitizensNPCManager implements NPCManager { return createNPC(type, generateUniqueId(), name, character); } - public void despawn(NPC npc) { + public void despawn(NPC npc, boolean deselect) { npc.getTrait(SpawnLocation.class).setLocation(npc.getBukkitEntity().getLocation()); - selected.removeAll(npc.getId()); + if (deselect) + selected.removeAll(npc.getId()); npc.getBukkitEntity().remove(); } @@ -111,7 +112,7 @@ public class CitizensNPCManager implements NPCManager { public void remove(NPC npc) { if (npc.isSpawned()) - despawn(npc); + despawn(npc, true); npcs.remove(npc.getId()); saves.getKey("npc").removeKey("" + npc.getId()); selected.removeAll(npc.getId()); diff --git a/src/net/citizensnpcs/npc/NPCInventory.java b/src/net/citizensnpcs/npc/NPCInventory.java index 822537a1d..877735ab0 100644 --- a/src/net/citizensnpcs/npc/NPCInventory.java +++ b/src/net/citizensnpcs/npc/NPCInventory.java @@ -15,9 +15,9 @@ import org.bukkit.inventory.Inventory; public class NPCInventory implements IInventory { private final int size = 36; private final NPC npc; - private final String name; private final ItemStack[] contents; private final Inventory inventory = new CraftInventory(this); + private String name; public NPCInventory(NPC npc) { this.npc = npc; @@ -103,4 +103,8 @@ public class NPCInventory implements IInventory { public void show(Player player) { ((CraftPlayer) player).getHandle().a(this); } + + public void setName(String name) { + this.name = StringHelper.parseColors(name); + } } \ No newline at end of file diff --git a/src/net/citizensnpcs/trait/Inventory.java b/src/net/citizensnpcs/trait/Inventory.java index 844b0894f..1f154677c 100644 --- a/src/net/citizensnpcs/trait/Inventory.java +++ b/src/net/citizensnpcs/trait/Inventory.java @@ -13,7 +13,7 @@ import org.bukkit.enchantments.Enchantment; import org.bukkit.inventory.ItemStack; @SaveId("inventory") -public class Inventory implements Trait { +public class Inventory extends Trait { private ItemStack[] contents; public Inventory() { diff --git a/src/net/citizensnpcs/trait/LookClose.java b/src/net/citizensnpcs/trait/LookClose.java index a2875e3ed..1eaaae964 100644 --- a/src/net/citizensnpcs/trait/LookClose.java +++ b/src/net/citizensnpcs/trait/LookClose.java @@ -12,7 +12,7 @@ import net.citizensnpcs.npc.CitizensNPC; import net.minecraft.server.EntityLiving; @SaveId("look-close") -public class LookClose implements Trait, Runnable { +public class LookClose extends Trait implements Runnable { private final NPC npc; private boolean shouldLookClose; diff --git a/src/net/citizensnpcs/util/StringHelper.java b/src/net/citizensnpcs/util/StringHelper.java index 293989b11..3a6f1d2a8 100644 --- a/src/net/citizensnpcs/util/StringHelper.java +++ b/src/net/citizensnpcs/util/StringHelper.java @@ -73,4 +73,8 @@ public class StringHelper { return capitalize.replaceFirst(String.valueOf(capitalize.charAt(0)), String.valueOf(Character.toUpperCase(capitalize.charAt(0)))); } + + public static String wrapHeader(Object string) { + return ChatColor.GREEN + "=====[ " + string.toString() + ChatColor.GREEN + " ]====="; + } } \ No newline at end of file