package net.minecraft.util; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.regex.Pattern; public enum EnumChatFormatting { BLACK('0'), DARK_BLUE('1'), DARK_GREEN('2'), DARK_AQUA('3'), DARK_RED('4'), DARK_PURPLE('5'), GOLD('6'), GRAY('7'), DARK_GRAY('8'), BLUE('9'), GREEN('a'), AQUA('b'), RED('c'), LIGHT_PURPLE('d'), YELLOW('e'), WHITE('f'), OBFUSCATED('k', true), BOLD('l', true), STRIKETHROUGH('m', true), UNDERLINE('n', true), ITALIC('o', true), RESET('r'); /** Maps a formatting code (e.g., 'f') to its corresponding enum value (e.g., WHITE). */ private static final Map formattingCodeMapping = new HashMap(); /** Maps a name (e.g., 'underline') to its corresponding enum value (e.g., UNDERLINE). */ private static final Map nameMapping = new HashMap(); /** * Matches formatting codes that indicate that the client should treat the following text as bold, recolored, * obfuscated, etc. */ private static final Pattern formattingCodePattern = Pattern.compile("(?i)" + String.valueOf('\u00a7') + "[0-9A-FK-OR]"); /** The formatting code that produces this format. */ private final char formattingCode; private final boolean fancyStyling; /** * The control string (section sign + formatting code) that can be inserted into client-side text to display * subsequent text in this format. */ private final String controlString; private static final String __OBFID = "CL_00000342"; private EnumChatFormatting(char p_i1336_3_) { this(p_i1336_3_, false); } private EnumChatFormatting(char p_i1337_3_, boolean p_i1337_4_) { this.formattingCode = p_i1337_3_; this.fancyStyling = p_i1337_4_; this.controlString = "\u00a7" + p_i1337_3_; } /** * Gets the formatting code that produces this format. */ public char getFormattingCode() { return this.formattingCode; } /** * False if this is just changing the color or resetting; true otherwise. */ public boolean isFancyStyling() { return this.fancyStyling; } /** * Checks if this is a color code. */ public boolean isColor() { return !this.fancyStyling && this != RESET; } /** * Gets the friendly name of this value. */ public String getFriendlyName() { return this.name().toLowerCase(); } public String toString() { return this.controlString; } /** * Returns a copy of the given string, with formatting codes stripped away. */ @SideOnly(Side.CLIENT) public static String getTextWithoutFormattingCodes(String p_110646_0_) { return p_110646_0_ == null ? null : formattingCodePattern.matcher(p_110646_0_).replaceAll(""); } /** * Gets a value by its friendly name; null if the given name does not map to a defined value. */ public static EnumChatFormatting getValueByName(String p_96300_0_) { return p_96300_0_ == null ? null : (EnumChatFormatting)nameMapping.get(p_96300_0_.toLowerCase()); } /** * Gets all the valid values. Args: @param par0: Whether or not to include color values. @param par1: Whether or not * to include fancy-styling values (anything that isn't a color value or the "reset" value). */ public static Collection getValidValues(boolean p_96296_0_, boolean p_96296_1_) { ArrayList arraylist = new ArrayList(); EnumChatFormatting[] aenumchatformatting = values(); int i = aenumchatformatting.length; for (int j = 0; j < i; ++j) { EnumChatFormatting enumchatformatting = aenumchatformatting[j]; if ((!enumchatformatting.isColor() || p_96296_0_) && (!enumchatformatting.isFancyStyling() || p_96296_1_)) { arraylist.add(enumchatformatting.getFriendlyName()); } } return arraylist; } static { EnumChatFormatting[] var0 = values(); int var1 = var0.length; for (int var2 = 0; var2 < var1; ++var2) { EnumChatFormatting var3 = var0[var2]; formattingCodeMapping.put(Character.valueOf(var3.getFormattingCode()), var3); nameMapping.put(var3.getFriendlyName(), var3); } } }