Commit 7fce24deec88037ecf4a976583ced326dfcdb297
1 parent
c6092c8f
Fix compilation under JDK7 and later
Showing
1 changed file
with
130 additions
and
130 deletions
java/common/com/mumfrey/liteloader/util/ChatUtilities.java
| 1 | -package com.mumfrey.liteloader.util; | ||
| 2 | - | ||
| 3 | -import java.util.List; | ||
| 4 | - | ||
| 5 | -import net.minecraft.util.ChatComponentText; | ||
| 6 | -import net.minecraft.util.ChatStyle; | ||
| 7 | -import net.minecraft.util.EnumChatFormatting; | ||
| 8 | -import net.minecraft.util.IChatComponent; | ||
| 9 | - | ||
| 10 | -/** | ||
| 11 | - * Utility functions for chat | ||
| 12 | - * | ||
| 13 | - * @author Adam Mummery-Smith | ||
| 14 | - */ | ||
| 15 | -public abstract class ChatUtilities | ||
| 16 | -{ | ||
| 17 | - private static String formattingCodeLookup; | ||
| 18 | - | ||
| 19 | - static | ||
| 20 | - { | ||
| 21 | - StringBuilder formattingCodes = new StringBuilder(); | ||
| 22 | - | ||
| 23 | - for (EnumChatFormatting chatFormat : EnumChatFormatting.values()) | ||
| 24 | - { | ||
| 25 | - formattingCodes.append(chatFormat.toString().charAt(1)); | ||
| 26 | - } | ||
| 27 | - | ||
| 28 | - ChatUtilities.formattingCodeLookup = formattingCodes.toString(); | ||
| 29 | - } | ||
| 30 | - | ||
| 31 | - private ChatUtilities() {} | ||
| 32 | - | ||
| 33 | - /** | ||
| 34 | - * Get a chat style from a legacy formatting code | ||
| 35 | - * | ||
| 36 | - * @param code Code | ||
| 37 | - * @return | ||
| 38 | - */ | ||
| 39 | - public static ChatStyle getChatStyleFromCode(char code) | ||
| 40 | - { | ||
| 41 | - int pos = ChatUtilities.formattingCodeLookup.indexOf(code); | ||
| 42 | - if (pos < 0) return null; | ||
| 43 | - EnumChatFormatting format = EnumChatFormatting.values()[pos]; | ||
| 44 | - | ||
| 45 | - ChatStyle style = new ChatStyle(); | ||
| 46 | - if (format.isColor()) | ||
| 47 | - { | ||
| 48 | - style.setColor(format); | ||
| 49 | - } | ||
| 50 | - else if (format.isFancyStyling()) | ||
| 51 | - { | ||
| 52 | - switch (format) | ||
| 53 | - { | ||
| 54 | - case BOLD: style.setBold(true); break; | ||
| 55 | - case ITALIC: style.setItalic(true); break; | ||
| 56 | - case STRIKETHROUGH: style.setStrikethrough(true); break; | ||
| 57 | - case UNDERLINE: style.setUnderlined(true); break; | ||
| 58 | - case OBFUSCATED: style.setObfuscated(true); break; | ||
| 59 | - } | ||
| 60 | - } | ||
| 61 | - | ||
| 62 | - return style; | ||
| 63 | - } | ||
| 64 | - | ||
| 65 | - /** | ||
| 66 | - * Convert a component containing text formatted with legacy codes to a native ChatComponent structure | ||
| 67 | - */ | ||
| 68 | - public static IChatComponent convertLegacyCodes(IChatComponent chat) | ||
| 69 | - { | ||
| 70 | - return ChatUtilities.covertCodesInPlace(chat); | ||
| 71 | - } | ||
| 72 | - | ||
| 73 | - private static List<IChatComponent> covertCodesInPlace(List<IChatComponent> siblings) | ||
| 74 | - { | ||
| 75 | - for (int index = 0; index < siblings.size(); index++) | ||
| 76 | - { | ||
| 77 | - siblings.set(index, ChatUtilities.covertCodesInPlace(siblings.get(index))); | ||
| 78 | - } | ||
| 79 | - | ||
| 80 | - return siblings; | ||
| 81 | - } | ||
| 82 | - | ||
| 83 | - @SuppressWarnings("unchecked") | ||
| 84 | - private static IChatComponent covertCodesInPlace(IChatComponent component) | ||
| 85 | - { | ||
| 86 | - IChatComponent newComponent = null; | ||
| 87 | - if (component instanceof ChatComponentText) | ||
| 88 | - { | ||
| 89 | - ChatComponentText textComponent = (ChatComponentText)component; | ||
| 90 | - ChatStyle style = textComponent.getChatStyle(); | ||
| 91 | - String text = textComponent.getChatComponentText_TextValue(); | ||
| 92 | - | ||
| 93 | - int pos = text.indexOf('\247'); | ||
| 94 | - while (pos > -1 && text != null) | ||
| 95 | - { | ||
| 96 | - if (pos < text.length() - 1) | ||
| 97 | - { | ||
| 98 | - IChatComponent head = new ChatComponentText(pos > 0 ? text.substring(0, pos) : "").setChatStyle(style); | ||
| 99 | - style = ChatUtilities.getChatStyleFromCode(text.charAt(pos + 1)); | ||
| 100 | - text = text.substring(pos + 2); | ||
| 101 | - newComponent = (newComponent == null) ? head : newComponent.appendSibling(head); | ||
| 102 | - pos = text.indexOf('\247'); | ||
| 103 | - } | ||
| 104 | - else | ||
| 105 | - { | ||
| 106 | - text = null; | ||
| 107 | - } | ||
| 108 | - } | ||
| 109 | - | ||
| 110 | - if (text != null) | ||
| 111 | - { | ||
| 112 | - IChatComponent tail = new ChatComponentText(text).setChatStyle(style); | ||
| 113 | - newComponent = (newComponent == null) ? tail : newComponent.appendSibling(tail); | ||
| 114 | - } | ||
| 115 | - } | ||
| 116 | - | ||
| 117 | - if (newComponent == null) | ||
| 118 | - { | ||
| 119 | - ChatUtilities.covertCodesInPlace(component.getSiblings()); | ||
| 120 | - return component; | ||
| 121 | - } | ||
| 122 | - | ||
| 123 | - for (IChatComponent oldSibling : ChatUtilities.covertCodesInPlace(component.getSiblings())) | ||
| 124 | - { | ||
| 125 | - newComponent.appendSibling(oldSibling); | ||
| 126 | - } | ||
| 127 | - | ||
| 128 | - return newComponent; | ||
| 129 | - } | ||
| 130 | -} | 1 | +package com.mumfrey.liteloader.util; |
| 2 | + | ||
| 3 | +import java.util.List; | ||
| 4 | + | ||
| 5 | +import net.minecraft.util.ChatComponentText; | ||
| 6 | +import net.minecraft.util.ChatStyle; | ||
| 7 | +import net.minecraft.util.EnumChatFormatting; | ||
| 8 | +import net.minecraft.util.IChatComponent; | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * Utility functions for chat | ||
| 12 | + * | ||
| 13 | + * @author Adam Mummery-Smith | ||
| 14 | + */ | ||
| 15 | +public abstract class ChatUtilities | ||
| 16 | +{ | ||
| 17 | + private static String formattingCodeLookup; | ||
| 18 | + | ||
| 19 | + static | ||
| 20 | + { | ||
| 21 | + StringBuilder formattingCodes = new StringBuilder(); | ||
| 22 | + | ||
| 23 | + for (EnumChatFormatting chatFormat : EnumChatFormatting.values()) | ||
| 24 | + { | ||
| 25 | + formattingCodes.append(chatFormat.toString().charAt(1)); | ||
| 26 | + } | ||
| 27 | + | ||
| 28 | + ChatUtilities.formattingCodeLookup = formattingCodes.toString(); | ||
| 29 | + } | ||
| 30 | + | ||
| 31 | + private ChatUtilities() {} | ||
| 32 | + | ||
| 33 | + /** | ||
| 34 | + * Get a chat style from a legacy formatting code | ||
| 35 | + * | ||
| 36 | + * @param code Code | ||
| 37 | + * @return | ||
| 38 | + */ | ||
| 39 | + public static ChatStyle getChatStyleFromCode(char code) | ||
| 40 | + { | ||
| 41 | + int pos = ChatUtilities.formattingCodeLookup.indexOf(code); | ||
| 42 | + if (pos < 0) return null; | ||
| 43 | + EnumChatFormatting format = EnumChatFormatting.values()[pos]; | ||
| 44 | + | ||
| 45 | + ChatStyle style = new ChatStyle(); | ||
| 46 | + if (format.isColor()) | ||
| 47 | + { | ||
| 48 | + style.setColor(format); | ||
| 49 | + } | ||
| 50 | + else if (format.isFancyStyling()) | ||
| 51 | + { | ||
| 52 | + switch (format) | ||
| 53 | + { | ||
| 54 | + case BOLD: style.setBold(true); break; | ||
| 55 | + case ITALIC: style.setItalic(true); break; | ||
| 56 | + case STRIKETHROUGH: style.setStrikethrough(true); break; | ||
| 57 | + case UNDERLINE: style.setUnderlined(true); break; | ||
| 58 | + case OBFUSCATED: style.setObfuscated(true); break; | ||
| 59 | + } | ||
| 60 | + } | ||
| 61 | + | ||
| 62 | + return style; | ||
| 63 | + } | ||
| 64 | + | ||
| 65 | + /** | ||
| 66 | + * Convert a component containing text formatted with legacy codes to a native ChatComponent structure | ||
| 67 | + */ | ||
| 68 | + public static IChatComponent convertLegacyCodes(IChatComponent chat) | ||
| 69 | + { | ||
| 70 | + return ChatUtilities.covertCodesInPlace(chat); | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + private static List<IChatComponent> covertCodesInPlace(List<IChatComponent> siblings) | ||
| 74 | + { | ||
| 75 | + for (int index = 0; index < siblings.size(); index++) | ||
| 76 | + { | ||
| 77 | + siblings.set(index, ChatUtilities.covertCodesInPlace(siblings.get(index))); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + return siblings; | ||
| 81 | + } | ||
| 82 | + | ||
| 83 | + @SuppressWarnings("unchecked") | ||
| 84 | + private static IChatComponent covertCodesInPlace(IChatComponent component) | ||
| 85 | + { | ||
| 86 | + IChatComponent newComponent = null; | ||
| 87 | + if (component instanceof ChatComponentText) | ||
| 88 | + { | ||
| 89 | + ChatComponentText textComponent = (ChatComponentText)component; | ||
| 90 | + ChatStyle style = textComponent.getChatStyle(); | ||
| 91 | + String text = textComponent.getChatComponentText_TextValue(); | ||
| 92 | + | ||
| 93 | + int pos = text.indexOf('\247'); | ||
| 94 | + while (pos > -1 && text != null) | ||
| 95 | + { | ||
| 96 | + if (pos < text.length() - 1) | ||
| 97 | + { | ||
| 98 | + IChatComponent head = new ChatComponentText(pos > 0 ? text.substring(0, pos) : "").setChatStyle(style); | ||
| 99 | + style = ChatUtilities.getChatStyleFromCode(text.charAt(pos + 1)); | ||
| 100 | + text = text.substring(pos + 2); | ||
| 101 | + newComponent = (newComponent == null) ? head : newComponent.appendSibling(head); | ||
| 102 | + pos = text.indexOf('\247'); | ||
| 103 | + } | ||
| 104 | + else | ||
| 105 | + { | ||
| 106 | + text = null; | ||
| 107 | + } | ||
| 108 | + } | ||
| 109 | + | ||
| 110 | + if (text != null) | ||
| 111 | + { | ||
| 112 | + IChatComponent tail = new ChatComponentText(text).setChatStyle(style); | ||
| 113 | + newComponent = (newComponent == null) ? tail : newComponent.appendSibling(tail); | ||
| 114 | + } | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + if (newComponent == null) | ||
| 118 | + { | ||
| 119 | + ChatUtilities.covertCodesInPlace(component.getSiblings()); | ||
| 120 | + return component; | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + for (IChatComponent oldSibling : ChatUtilities.covertCodesInPlace((List<IChatComponent>)component.getSiblings())) | ||
| 124 | + { | ||
| 125 | + newComponent.appendSibling(oldSibling); | ||
| 126 | + } | ||
| 127 | + | ||
| 128 | + return newComponent; | ||
| 129 | + } | ||
| 130 | +} |