From 0d56317bc0fa9d417877a0a091a9f2c07515164b Mon Sep 17 00:00:00 2001 From: fullwall Date: Fri, 16 Nov 2012 23:42:52 +0800 Subject: [PATCH] Optimise StringHelper#parseColors, fix an NPE --- .../command/command/NPCCommands.java | 7 ++++--- .../net/citizensnpcs/util/StringHelper.java | 20 ++++++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java index cc4bcf044..a43930583 100644 --- a/src/main/java/net/citizensnpcs/command/command/NPCCommands.java +++ b/src/main/java/net/citizensnpcs/command/command/NPCCommands.java @@ -972,9 +972,10 @@ public class NPCCommands { "tphere", "tph", "move" }, 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()) - npc.spawn(npc.getTrait(CurrentLocation.class).getLocation()); - npc.getBukkitEntity().teleport(player, TeleportCause.COMMAND); + if (!npc.isSpawned()) { + npc.spawn(player.getLocation()); + } else + npc.getBukkitEntity().teleport(player, TeleportCause.COMMAND); Messaging.sendTr(player, Messages.NPC_TELEPORTED, npc.getName()); } diff --git a/src/main/java/net/citizensnpcs/util/StringHelper.java b/src/main/java/net/citizensnpcs/util/StringHelper.java index 6bb6b586a..2efc90ce5 100644 --- a/src/main/java/net/citizensnpcs/util/StringHelper.java +++ b/src/main/java/net/citizensnpcs/util/StringHelper.java @@ -1,5 +1,7 @@ package net.citizensnpcs.util; +import java.util.regex.Pattern; + import net.citizensnpcs.Settings.Setting; import org.bukkit.ChatColor; @@ -60,13 +62,8 @@ public class StringHelper { return p[n]; } - public static String parseColors(Object string) { - String parsed = string.toString(); - for (ChatColor color : ChatColor.values()) { - parsed = parsed.replace("<" + color.getChar() + ">", color.toString()); - } - parsed = ChatColor.translateAlternateColorCodes('&', parsed); - return parsed; + public static String parseColors(String parsed) { + return COLOR_MATCHER.matcher(parsed).replaceAll(ChatColor.COLOR_CHAR + "$1"); } public static String wrap(Object string) { @@ -85,4 +82,13 @@ public class StringHelper { String highlight = Setting.HIGHLIGHT_COLOUR.asString(); return highlight + "=====[ " + string.toString() + highlight + " ]====="; } + + private static Pattern COLOR_MATCHER; + static { + String colors = ""; + for (ChatColor color : ChatColor.values()) + colors += color.getChar(); + COLOR_MATCHER = Pattern.compile("[&<]([COLORS])[>]?".replace("COLORS", colors), + Pattern.CASE_INSENSITIVE); + } } \ No newline at end of file