diff --git a/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java b/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java index 38dbd10..c3bf583 100644 --- a/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java +++ b/src/main/java/com/wimbli/WorldBorder/BorderCheckTask.java @@ -144,7 +144,7 @@ public class BorderCheckTask implements Runnable Config.LogWarn("New position in world \"" + newLoc.getWorld().getName() + "\" at X: " + Config.coord.format(newLoc.getX()) + " Y: " + Config.coord.format(newLoc.getY()) + " Z: " + Config.coord.format(newLoc.getZ())); if (notify) - player.sendMessage(ChatColor.RED + Config.Message()); + player.sendMessage(Config.Message()); return newLoc; } diff --git a/src/main/java/com/wimbli/WorldBorder/Config.java b/src/main/java/com/wimbli/WorldBorder/Config.java index 27bc89a..a2dff6e 100644 --- a/src/main/java/com/wimbli/WorldBorder/Config.java +++ b/src/main/java/com/wimbli/WorldBorder/Config.java @@ -36,7 +36,9 @@ public class Config // actual configuration values which can be changed private static boolean shapeRound = true; private static Map borders = Collections.synchronizedMap(new LinkedHashMap()); - private static String message; + private static String message; // raw message without color code formatting + private static String messageFmt; // message with color code formatting ("&" changed to funky sort-of-double-dollar-sign for legitimate color/formatting codes) + private static String messageClean; // message cleaned of formatting codes private static boolean DEBUG = false; private static double knockBack = 3.0; private static int timerTicks = 4; @@ -162,15 +164,30 @@ public class Config public static void setMessage(String msg) { - message = msg; - Log("Border message is now set to: " + msg); + updateMessage(msg); + Log("Border message is now set to: " + MessageRaw()); save(true); } + public static void updateMessage(String msg) + { + message = msg; + messageFmt = replaceAmpColors(msg); + messageClean = stripAmpColors(msg); + } + public static String Message() + { + return messageFmt; + } + public static String MessageRaw() { return message; } + public static String MessageClean() + { + return messageClean; + } public static void setShape(boolean round) { @@ -426,6 +443,17 @@ public class Config } + // adapted from code posted by Sleaker + public static String replaceAmpColors (String message) + { + return message.replaceAll("(?i)&([a-fk-or0-9])", "\u00A7$1"); + } + public static String stripAmpColors (String message) + { + return message.replaceAll("(?i)&([a-fk-or0-9])", ""); + } + + private static final String logName = "WorldBorder"; public static void Log(Level lvl, String text) { @@ -445,7 +473,7 @@ public class Config } - private static final int currentCfgVersion = 7; + private static final int currentCfgVersion = 8; public static void load(WorldBorder master, boolean logIt) { // load config from file @@ -456,7 +484,7 @@ public class Config int cfgVersion = cfg.getInt("cfg-version", currentCfgVersion); - message = cfg.getString("message"); + String msg = cfg.getString("message"); shapeRound = cfg.getBoolean("round-border", true); DEBUG = cfg.getBoolean("debug-mode", false); whooshEffect = cfg.getBoolean("whoosh-effect", false); @@ -473,13 +501,21 @@ public class Config borders.clear(); - if (message == null || message.isEmpty()) + // if empty border message, assume no config + if (msg == null || msg.isEmpty()) { // store defaults LogConfig("Configuration not present, creating new file."); - message = "You have reached the edge of this world."; + msg = "&cYou have reached the edge of this world."; + updateMessage(msg); save(false); return; } + // if loading older config which didn't support color codes in border message, make sure default red color code is added at start of it + else if (cfgVersion < 8 && !(msg.substring(0, 1).equals("&"))) + updateMessage("&c" + msg); + // otherwise just set border message + else + updateMessage(msg); ConfigurationSection worlds = cfg.getConfigurationSection("worlds"); if (worlds != null) diff --git a/src/main/java/com/wimbli/WorldBorder/WBCommand.java b/src/main/java/com/wimbli/WorldBorder/WBCommand.java index 48de1c7..a90f15d 100644 --- a/src/main/java/com/wimbli/WorldBorder/WBCommand.java +++ b/src/main/java/com/wimbli/WorldBorder/WBCommand.java @@ -343,7 +343,9 @@ public class WBCommand implements CommandExecutor if (!Config.HasPermission(player, "getmsg")) return true; sender.sendMessage("Border message is currently set to:"); - sender.sendMessage(clrErr + Config.Message()); + sender.sendMessage(Config.MessageRaw()); + sender.sendMessage("Formatted border message:"); + sender.sendMessage(Config.Message()); } // "setmsg" command from player or console @@ -364,7 +366,9 @@ public class WBCommand implements CommandExecutor if (player != null) { sender.sendMessage("Border message is now set to:"); - sender.sendMessage(clrErr + Config.Message()); + sender.sendMessage(Config.MessageRaw()); + sender.sendMessage("Formatted border message:"); + sender.sendMessage(Config.Message()); } }