diff --git a/src/main/java/org/bukkit/craftbukkit/TextWrapper.java b/src/main/java/org/bukkit/craftbukkit/TextWrapper.java index 015ea8575..61384ae15 100644 --- a/src/main/java/org/bukkit/craftbukkit/TextWrapper.java +++ b/src/main/java/org/bukkit/craftbukkit/TextWrapper.java @@ -1,88 +1,25 @@ package org.bukkit.craftbukkit; +import java.util.ArrayList; +import java.util.List; +import org.bukkit.ChatColor; + public class TextWrapper { - private static final int[] characterWidths = new int[] { - 1, 9, 9, 8, 8, 8, 8, 7, 9, 8, 9, 9, 8, 9, 9, 9, - 8, 8, 8, 8, 9, 9, 8, 9, 8, 8, 8, 8, 8, 9, 9, 9, - 4, 2, 5, 6, 6, 6, 6, 3, 5, 5, 5, 6, 2, 6, 2, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 2, 2, 5, 6, 5, 6, - 7, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 4, 6, 6, - 3, 6, 6, 6, 6, 6, 5, 6, 6, 2, 6, 5, 3, 6, 6, 6, - 6, 6, 6, 6, 4, 6, 6, 6, 6, 6, 6, 5, 2, 5, 7, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, 3, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 4, 6, - 6, 3, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 2, 6, 6, - 8, 9, 9, 6, 6, 6, 8, 8, 6, 8, 8, 8, 8, 8, 6, 6, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 6, 9, 9, 9, 5, 9, 9, - 8, 7, 7, 8, 7, 8, 8, 8, 7, 8, 8, 7, 9, 9, 6, 7, - 7, 7, 7, 7, 9, 6, 7, 8, 7, 6, 6, 9, 7, 6, 7, 1 - }; - private static final char COLOR_CHAR = '\u00A7'; - private static final int CHAT_WINDOW_WIDTH = 320; - private static final int CHAT_STRING_LENGTH = 119; - private static final String allowedChars = net.minecraft.server.SharedConstants.allowedCharacters; + public static List wrapText(final String text) { + ArrayList output = new ArrayList(); + String[] lines = text.split("\n"); + String lastColor = null; - public static String[] wrapText(final String text) { - final StringBuilder out = new StringBuilder(); - char colorChar = 'f'; - int lineWidth = 0; - int lineLength = 0; - - // Go over the message char by char. - for (int i = 0; i < text.length(); i++) { - char ch = text.charAt(i); - - // Get the color - if (ch == COLOR_CHAR && i < text.length() - 1) { - // We might need a linebreak ... so ugly ;( - if (lineLength + 2 > CHAT_STRING_LENGTH) { - out.append('\n'); - lineLength = 0; - if (colorChar != 'f' && colorChar != 'F') { - out.append(COLOR_CHAR).append(colorChar); - lineLength += 2; - } - } - colorChar = text.charAt(++i); - out.append(COLOR_CHAR).append(colorChar); - lineLength += 2; - continue; + for (int i = 0; i < lines.length; i++) { + String line = lines[i]; + if (lastColor != null) { + line = lastColor + line; } - // Figure out if it's allowed - int index = allowedChars.indexOf(ch); - if (index == -1) { - // Invalid character .. skip it. - continue; - } else { - // Sadly needed as the allowedChars string misses the first - index += 32; - } - - // Find the width - final int width = characterWidths[index]; - - // See if we need a linebreak - if (lineLength + 1 > CHAT_STRING_LENGTH || lineWidth + width >= CHAT_WINDOW_WIDTH) { - out.append('\n'); - lineLength = 0; - - // Re-apply the last color if it isn't the default - if (colorChar != 'f' && colorChar != 'F') { - out.append(COLOR_CHAR).append(colorChar); - lineLength += 2; - } - lineWidth = width; - } else { - lineWidth += width; - } - out.append(ch); - lineLength++; + output.add(line); + lastColor = ChatColor.getLastColors(line); } - // Return it split - return out.toString().split("\n"); + return output; } } \ No newline at end of file