From 5e5fb2af4ccd0e2fafdb9c8dc07aab6cd980ba98 Mon Sep 17 00:00:00 2001 From: aPunch Date: Mon, 27 Feb 2012 04:59:33 -0600 Subject: [PATCH] added reload command - do not use /reload --- src/main/java/net/citizensnpcs/Citizens.java | 12 ++++++- .../command/command/AdminCommands.java | 34 +++++++++++++++---- .../command/command/NPCCommands.java | 4 +-- .../citizensnpcs/npc/CitizensNPCManager.java | 3 -- .../java/net/citizensnpcs/util/Messaging.java | 20 ++++++----- 5 files changed, 52 insertions(+), 21 deletions(-) diff --git a/src/main/java/net/citizensnpcs/Citizens.java b/src/main/java/net/citizensnpcs/Citizens.java index 2740bde76..58619aed8 100644 --- a/src/main/java/net/citizensnpcs/Citizens.java +++ b/src/main/java/net/citizensnpcs/Citizens.java @@ -138,7 +138,7 @@ public class Citizens extends JavaPlugin { saveNPCs(); for (NPC npc : npcManager) npc.despawn(); - Bukkit.getScheduler().cancelTasks(this); + getServer().getScheduler().cancelTasks(this); } Messaging.log("v" + getDescription().getVersion() + " disabled."); @@ -230,6 +230,16 @@ public class Citizens extends JavaPlugin { }.start(); } + public void reload() throws NPCLoadException { + getServer().getScheduler().cancelTasks(this); + config.load(); + for (NPC npc : npcManager) + npc.despawn(); + + saves.load(); + setupNPCs(); + } + public CitizensNPCManager getNPCManager() { return npcManager; } diff --git a/src/main/java/net/citizensnpcs/command/command/AdminCommands.java b/src/main/java/net/citizensnpcs/command/command/AdminCommands.java index 72a7f3540..fca3bdb53 100644 --- a/src/main/java/net/citizensnpcs/command/command/AdminCommands.java +++ b/src/main/java/net/citizensnpcs/command/command/AdminCommands.java @@ -1,12 +1,15 @@ package net.citizensnpcs.command.command; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import net.citizensnpcs.Citizens; +import net.citizensnpcs.api.exception.NPCLoadException; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.command.Command; import net.citizensnpcs.command.CommandContext; import net.citizensnpcs.command.Requirements; +import net.citizensnpcs.command.ServerCommand; import net.citizensnpcs.util.Messaging; import net.citizensnpcs.util.StringHelper; @@ -18,16 +21,33 @@ public class AdminCommands { this.plugin = plugin; } - @Command( - aliases = { "citizens" }, - desc = "Shows basic plugin information", - max = 0, - permission = "admin") - @Requirements + @Command(aliases = { "citizens" }, desc = "Show basic plugin information", max = 0, permission = "admin") public void citizens(CommandContext args, Player player, NPC npc) { - Messaging.send(player, " " + StringHelper.wrapHeader("Citizens v" + plugin.getDescription().getVersion())); + 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()); } + + @Command( + aliases = { "citizens" }, + usage = "reload", + desc = "Reload Citizens", + modifiers = { "reload" }, + min = 1, + max = 1, + permission = "admin") + @ServerCommand + public void reload(CommandContext args, CommandSender sender, NPC npc) { + // TODO possibly could be made more safe + Messaging.send(sender, "Reloading Citizens..."); + try { + plugin.reload(); + Messaging.send(sender, "Citizens reloaded."); + } catch (NPCLoadException e) { + Messaging.sendError(sender, "Error occured while reloading, see console."); + e.printStackTrace(); + } + } } \ No newline at end of file diff --git a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java index 4592edf81..6bb9edb95 100644 --- a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java @@ -167,7 +167,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, usage = "select [id]", - desc = "Selects an NPC with the given ID", + desc = "Select an NPC with the given ID", modifiers = { "select" }, min = 2, max = 2, @@ -190,7 +190,7 @@ public class NPCCommands { @Command( aliases = { "npc" }, usage = "character [character]", - desc = "Sets the character of an NPC", + desc = "Set the character of an NPC", modifiers = { "character" }, min = 2, max = 2) diff --git a/src/main/java/net/citizensnpcs/npc/CitizensNPCManager.java b/src/main/java/net/citizensnpcs/npc/CitizensNPCManager.java index f3754e6bd..8d14e676f 100644 --- a/src/main/java/net/citizensnpcs/npc/CitizensNPCManager.java +++ b/src/main/java/net/citizensnpcs/npc/CitizensNPCManager.java @@ -32,9 +32,6 @@ public class CitizensNPCManager implements NPCManager { } public NPC createNPC(EntityType type, int id, String name, Character character) { - if (npcs.contains(id)) - throw new IllegalArgumentException("An NPC already has the ID '" + id + "'."); - CitizensNPC npc = npcBuilder.getByType(type, this, id, name); npc.setCharacter(character); npcs.put(npc.getId(), npc); diff --git a/src/main/java/net/citizensnpcs/util/Messaging.java b/src/main/java/net/citizensnpcs/util/Messaging.java index c40859bb4..931526cb1 100644 --- a/src/main/java/net/citizensnpcs/util/Messaging.java +++ b/src/main/java/net/citizensnpcs/util/Messaging.java @@ -8,6 +8,7 @@ import net.citizensnpcs.api.trait.trait.Owner; import org.bukkit.Bukkit; import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.google.common.base.Joiner; @@ -28,23 +29,26 @@ public class Messaging { log(Level.INFO, SPACE.join(msg)); } - public static void send(Player player, Object msg) { - player.sendMessage(StringHelper.parseColors(msg.toString())); + public static void send(CommandSender sender, Object msg) { + sender.sendMessage(StringHelper.parseColors(msg.toString())); } - public static void sendError(Player player, Object msg) { - send(player, ChatColor.RED.toString() + msg); + public static void sendError(CommandSender sender, Object msg) { + send(sender, ChatColor.RED.toString() + msg); } - public static void sendWithNPC(Player player, Object msg, NPC npc) { + public static void sendWithNPC(CommandSender sender, Object msg, NPC npc) { String send = msg.toString(); - send = send.replace("", player.getName()); - send = send.replace("", player.getWorld().getName()); + if (sender instanceof Player) { + Player player = (Player) sender; + send = send.replace("", player.getName()); + send = send.replace("", player.getWorld().getName()); + } send = send.replace("", npc.getTrait(Owner.class).getOwner()); send = send.replace("", npc.getName()); send = send.replace("", Integer.toString(npc.getId())); - send(player, send); + send(sender, send); } } \ No newline at end of file