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 | +} |