summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/bukkit/ChatColor.java22
-rw-r--r--src/test/java/org/bukkit/ChatColorTest.java10
2 files changed, 22 insertions, 10 deletions
diff --git a/src/main/java/org/bukkit/ChatColor.java b/src/main/java/org/bukkit/ChatColor.java
index 6b3f35fb..fcaa04ef 100644
--- a/src/main/java/org/bukkit/ChatColor.java
+++ b/src/main/java/org/bukkit/ChatColor.java
@@ -218,19 +218,21 @@ public enum ChatColor {
*/
public static String getLastColors(String input) {
String result = "";
- int lastIndex = -1;
int length = input.length();
- while ((lastIndex = input.indexOf(COLOR_CHAR, lastIndex + 1)) != -1) {
- if (lastIndex < length - 1) {
- char c = input.charAt(lastIndex + 1);
- ChatColor col = getByChar(c);
+ // Search backwards from the end as it is faster
+ for (int index = length - 1; index > -1; index--) {
+ char section = input.charAt(index);
+ if (section == COLOR_CHAR && index < length - 1) {
+ char c = input.charAt(index + 1);
+ ChatColor color = getByChar(c);
- if (col != null) {
- if (col.isColor()) {
- result = col.toString();
- } else if (col.isFormat()) {
- result += col.toString();
+ if (color != null) {
+ result = color.toString() + result;
+
+ // Once we find a color or reset we can stop searching
+ if (color.isColor() || color.equals(RESET)) {
+ break;
}
}
}
diff --git a/src/test/java/org/bukkit/ChatColorTest.java b/src/test/java/org/bukkit/ChatColorTest.java
index ed700020..80108a5d 100644
--- a/src/test/java/org/bukkit/ChatColorTest.java
+++ b/src/test/java/org/bukkit/ChatColorTest.java
@@ -70,4 +70,14 @@ public class ChatColorTest {
String u = ChatColor.BLACK.toString() + ChatColor.DARK_BLUE + ChatColor.DARK_GREEN + ChatColor.DARK_AQUA + ChatColor.DARK_RED + ChatColor.DARK_PURPLE + ChatColor.GOLD + ChatColor.GRAY + ChatColor.DARK_GRAY + ChatColor.BLUE + ChatColor.GREEN + ChatColor.GREEN + ChatColor.AQUA + ChatColor.AQUA + ChatColor.RED + ChatColor.RED + ChatColor.LIGHT_PURPLE + ChatColor.LIGHT_PURPLE + ChatColor.YELLOW + ChatColor.YELLOW + ChatColor.WHITE + ChatColor.WHITE + ChatColor.MAGIC + ChatColor.MAGIC + " & more";
assertThat(t, is(u));
}
+
+ @Test
+ public void getChatColors() {
+ String s = String.format("%c%ctest%c%ctest%c", ChatColor.COLOR_CHAR, ChatColor.RED.getChar(), ChatColor.COLOR_CHAR, ChatColor.ITALIC.getChar(), ChatColor.COLOR_CHAR);
+ String expected = ChatColor.RED.toString() + ChatColor.ITALIC;
+ assertThat(ChatColor.getLastColors(s), is(expected));
+
+ s = String.format("%c%ctest%c%ctest", ChatColor.COLOR_CHAR, ChatColor.RED.getChar(), ChatColor.COLOR_CHAR, ChatColor.BLUE.getChar());
+ assertThat(ChatColor.getLastColors(s), is(ChatColor.BLUE.toString()));
+ }
}