package net.minecraft.util; import com.google.gson.JsonDeserializationContext; import com.google.gson.JsonDeserializer; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.lang.reflect.Type; import net.minecraft.event.ClickEvent; import net.minecraft.event.HoverEvent; public class ChatStyle { /** The parent of this ChatStyle. Used for looking up values that this instance does not override. */ private ChatStyle parentStyle; private EnumChatFormatting color; private Boolean bold; private Boolean italic; private Boolean underlined; private Boolean strikethrough; private Boolean obfuscated; private ClickEvent chatClickEvent; private HoverEvent chatHoverEvent; /** The base of the ChatStyle hierarchy. All ChatStyle instances are implicitly children of this. */ private static final ChatStyle rootStyle = new ChatStyle() { private static final String __OBFID = "CL_00001267"; /** * Gets the effective color of this ChatStyle. */ public EnumChatFormatting getColor() { return null; } /** * Whether or not text of this ChatStyle should be in bold. */ public boolean getBold() { return false; } /** * Whether or not text of this ChatStyle should be italicized. */ public boolean getItalic() { return false; } /** * Whether or not to format text of this ChatStyle using strikethrough. */ public boolean getStrikethrough() { return false; } /** * Whether or not text of this ChatStyle should be underlined. */ public boolean getUnderlined() { return false; } /** * Whether or not text of this ChatStyle should be obfuscated. */ public boolean getObfuscated() { return false; } /** * The effective chat click event. */ public ClickEvent getChatClickEvent() { return null; } /** * The effective chat hover event. */ public HoverEvent getChatHoverEvent() { return null; } /** * Sets the color for this ChatStyle to the given value. Only use color values for this; set other values using * the specific methods. */ public ChatStyle setColor(EnumChatFormatting colorIn) { throw new UnsupportedOperationException(); } /** * Sets whether or not text of this ChatStyle should be in bold. Set to false if, e.g., the parent style is * bold and you want text of this style to be unbolded. */ public ChatStyle setBold(Boolean p_150227_1_) { throw new UnsupportedOperationException(); } /** * Sets whether or not text of this ChatStyle should be italicized. Set to false if, e.g., the parent style is * italicized and you want to override that for this style. */ public ChatStyle setItalic(Boolean p_150217_1_) { throw new UnsupportedOperationException(); } /** * Sets whether or not to format text of this ChatStyle using strikethrough. Set to false if, e.g., the parent * style uses strikethrough and you want to override that for this style. */ public ChatStyle setStrikethrough(Boolean p_150225_1_) { throw new UnsupportedOperationException(); } /** * Sets whether or not text of this ChatStyle should be underlined. Set to false if, e.g., the parent style is * underlined and you want to override that for this style. */ public ChatStyle setUnderlined(Boolean p_150228_1_) { throw new UnsupportedOperationException(); } /** * Sets whether or not text of this ChatStyle should be obfuscated. Set to false if, e.g., the parent style is * obfuscated and you want to override that for this style. */ public ChatStyle setObfuscated(Boolean p_150237_1_) { throw new UnsupportedOperationException(); } /** * Sets the event that should be run when text of this ChatStyle is clicked on. */ public ChatStyle setChatClickEvent(ClickEvent p_150241_1_) { throw new UnsupportedOperationException(); } /** * Sets the event that should be run when text of this ChatStyle is hovered over. */ public ChatStyle setChatHoverEvent(HoverEvent p_150209_1_) { throw new UnsupportedOperationException(); } /** * Sets the fallback ChatStyle to use if this ChatStyle does not override some value. Without a parent, obvious * defaults are used (bold: false, underlined: false, etc). */ public ChatStyle setParentStyle(ChatStyle p_150221_1_) { throw new UnsupportedOperationException(); } public String toString() { return "Style.ROOT"; } /** * Creates a shallow copy of this style. Changes to this instance's values will not be reflected in the copy, * but changes to the parent style's values WILL be reflected in both this instance and the copy, wherever * either does not override a value. */ public ChatStyle createShallowCopy() { return this; } /** * Creates a deep copy of this style. No changes to this instance or its parent style will be reflected in the * copy. */ public ChatStyle createDeepCopy() { return this; } /** * Gets the equivalent text formatting code for this style, without the initial section sign (U+00A7) character. */ @SideOnly(Side.CLIENT) public String getFormattingCode() { return ""; } }; private static final String __OBFID = "CL_00001266"; /** * Gets the effective color of this ChatStyle. */ public EnumChatFormatting getColor() { return this.color == null ? this.getParent().getColor() : this.color; } /** * Whether or not text of this ChatStyle should be in bold. */ public boolean getBold() { return this.bold == null ? this.getParent().getBold() : this.bold.booleanValue(); } /** * Whether or not text of this ChatStyle should be italicized. */ public boolean getItalic() { return this.italic == null ? this.getParent().getItalic() : this.italic.booleanValue(); } /** * Whether or not to format text of this ChatStyle using strikethrough. */ public boolean getStrikethrough() { return this.strikethrough == null ? this.getParent().getStrikethrough() : this.strikethrough.booleanValue(); } /** * Whether or not text of this ChatStyle should be underlined. */ public boolean getUnderlined() { return this.underlined == null ? this.getParent().getUnderlined() : this.underlined.booleanValue(); } /** * Whether or not text of this ChatStyle should be obfuscated. */ public boolean getObfuscated() { return this.obfuscated == null ? this.getParent().getObfuscated() : this.obfuscated.booleanValue(); } /** * Whether or not this style is empty (inherits everything from the parent). */ public boolean isEmpty() { return this.bold == null && this.italic == null && this.strikethrough == null && this.underlined == null && this.obfuscated == null && this.color == null && this.chatClickEvent == null && this.chatHoverEvent == null; } /** * The effective chat click event. */ public ClickEvent getChatClickEvent() { return this.chatClickEvent == null ? this.getParent().getChatClickEvent() : this.chatClickEvent; } /** * The effective chat hover event. */ public HoverEvent getChatHoverEvent() { return this.chatHoverEvent == null ? this.getParent().getChatHoverEvent() : this.chatHoverEvent; } /** * Sets the color for this ChatStyle to the given value. Only use color values for this; set other values using the * specific methods. */ public ChatStyle setColor(EnumChatFormatting colorIn) { this.color = colorIn; return this; } /** * Sets whether or not text of this ChatStyle should be in bold. Set to false if, e.g., the parent style is bold * and you want text of this style to be unbolded. */ public ChatStyle setBold(Boolean p_150227_1_) { this.bold = p_150227_1_; return this; } /** * Sets whether or not text of this ChatStyle should be italicized. Set to false if, e.g., the parent style is * italicized and you want to override that for this style. */ public ChatStyle setItalic(Boolean p_150217_1_) { this.italic = p_150217_1_; return this; } /** * Sets whether or not to format text of this ChatStyle using strikethrough. Set to false if, e.g., the parent * style uses strikethrough and you want to override that for this style. */ public ChatStyle setStrikethrough(Boolean p_150225_1_) { this.strikethrough = p_150225_1_; return this; } /** * Sets whether or not text of this ChatStyle should be underlined. Set to false if, e.g., the parent style is * underlined and you want to override that for this style. */ public ChatStyle setUnderlined(Boolean p_150228_1_) { this.underlined = p_150228_1_; return this; } /** * Sets whether or not text of this ChatStyle should be obfuscated. Set to false if, e.g., the parent style is * obfuscated and you want to override that for this style. */ public ChatStyle setObfuscated(Boolean p_150237_1_) { this.obfuscated = p_150237_1_; return this; } /** * Sets the event that should be run when text of this ChatStyle is clicked on. */ public ChatStyle setChatClickEvent(ClickEvent p_150241_1_) { this.chatClickEvent = p_150241_1_; return this; } /** * Sets the event that should be run when text of this ChatStyle is hovered over. */ public ChatStyle setChatHoverEvent(HoverEvent p_150209_1_) { this.chatHoverEvent = p_150209_1_; return this; } /** * Sets the fallback ChatStyle to use if this ChatStyle does not override some value. Without a parent, obvious * defaults are used (bold: false, underlined: false, etc). */ public ChatStyle setParentStyle(ChatStyle p_150221_1_) { this.parentStyle = p_150221_1_; return this; } /** * Gets the equivalent text formatting code for this style, without the initial section sign (U+00A7) character. */ @SideOnly(Side.CLIENT) public String getFormattingCode() { if (this.isEmpty()) { return this.parentStyle != null ? this.parentStyle.getFormattingCode() : ""; } else { StringBuilder stringbuilder = new StringBuilder(); if (this.getColor() != null) { stringbuilder.append(this.getColor()); } if (this.getBold()) { stringbuilder.append(EnumChatFormatting.BOLD); } if (this.getItalic()) { stringbuilder.append(EnumChatFormatting.ITALIC); } if (this.getUnderlined()) { stringbuilder.append(EnumChatFormatting.UNDERLINE); } if (this.getObfuscated()) { stringbuilder.append(EnumChatFormatting.OBFUSCATED); } if (this.getStrikethrough()) { stringbuilder.append(EnumChatFormatting.STRIKETHROUGH); } return stringbuilder.toString(); } } /** * Gets the immediate parent of this ChatStyle. */ private ChatStyle getParent() { return this.parentStyle == null ? rootStyle : this.parentStyle; } public String toString() { return "Style{hasParent=" + (this.parentStyle != null) + ", color=" + this.color + ", bold=" + this.bold + ", italic=" + this.italic + ", underlined=" + this.underlined + ", obfuscated=" + this.obfuscated + ", clickEvent=" + this.getChatClickEvent() + ", hoverEvent=" + this.getChatHoverEvent() + '}'; } public boolean equals(Object p_equals_1_) { if (this == p_equals_1_) { return true; } else if (!(p_equals_1_ instanceof ChatStyle)) { return false; } else { ChatStyle chatstyle = (ChatStyle)p_equals_1_; boolean flag; if (this.getBold() == chatstyle.getBold() && this.getColor() == chatstyle.getColor() && this.getItalic() == chatstyle.getItalic() && this.getObfuscated() == chatstyle.getObfuscated() && this.getStrikethrough() == chatstyle.getStrikethrough() && this.getUnderlined() == chatstyle.getUnderlined()) { label56: { if (this.getChatClickEvent() != null) { if (!this.getChatClickEvent().equals(chatstyle.getChatClickEvent())) { break label56; } } else if (chatstyle.getChatClickEvent() != null) { break label56; } if (this.getChatHoverEvent() != null) { if (!this.getChatHoverEvent().equals(chatstyle.getChatHoverEvent())) { break label56; } } else if (chatstyle.getChatHoverEvent() != null) { break label56; } flag = true; return flag; } } flag = false; return flag; } } public int hashCode() { int i = this.color.hashCode(); i = 31 * i + this.bold.hashCode(); i = 31 * i + this.italic.hashCode(); i = 31 * i + this.underlined.hashCode(); i = 31 * i + this.strikethrough.hashCode(); i = 31 * i + this.obfuscated.hashCode(); i = 31 * i + this.chatClickEvent.hashCode(); i = 31 * i + this.chatHoverEvent.hashCode(); return i; } /** * Creates a shallow copy of this style. Changes to this instance's values will not be reflected in the copy, but * changes to the parent style's values WILL be reflected in both this instance and the copy, wherever either does * not override a value. */ public ChatStyle createShallowCopy() { ChatStyle chatstyle = new ChatStyle(); chatstyle.bold = this.bold; chatstyle.italic = this.italic; chatstyle.strikethrough = this.strikethrough; chatstyle.underlined = this.underlined; chatstyle.obfuscated = this.obfuscated; chatstyle.color = this.color; chatstyle.chatClickEvent = this.chatClickEvent; chatstyle.chatHoverEvent = this.chatHoverEvent; chatstyle.parentStyle = this.parentStyle; return chatstyle; } /** * Creates a deep copy of this style. No changes to this instance or its parent style will be reflected in the * copy. */ public ChatStyle createDeepCopy() { ChatStyle chatstyle = new ChatStyle(); chatstyle.setBold(Boolean.valueOf(this.getBold())); chatstyle.setItalic(Boolean.valueOf(this.getItalic())); chatstyle.setStrikethrough(Boolean.valueOf(this.getStrikethrough())); chatstyle.setUnderlined(Boolean.valueOf(this.getUnderlined())); chatstyle.setObfuscated(Boolean.valueOf(this.getObfuscated())); chatstyle.setColor(this.getColor()); chatstyle.setChatClickEvent(this.getChatClickEvent()); chatstyle.setChatHoverEvent(this.getChatHoverEvent()); return chatstyle; } public static class Serializer implements JsonDeserializer, JsonSerializer { private static final String __OBFID = "CL_00001268"; public ChatStyle deserialize(JsonElement p_deserialize_1_, Type p_deserialize_2_, JsonDeserializationContext p_deserialize_3_) { if (p_deserialize_1_.isJsonObject()) { ChatStyle chatstyle = new ChatStyle(); JsonObject jsonobject = p_deserialize_1_.getAsJsonObject(); if (jsonobject == null) { return null; } else { if (jsonobject.has("bold")) { chatstyle.bold = Boolean.valueOf(jsonobject.get("bold").getAsBoolean()); } if (jsonobject.has("italic")) { chatstyle.italic = Boolean.valueOf(jsonobject.get("italic").getAsBoolean()); } if (jsonobject.has("underlined")) { chatstyle.underlined = Boolean.valueOf(jsonobject.get("underlined").getAsBoolean()); } if (jsonobject.has("strikethrough")) { chatstyle.strikethrough = Boolean.valueOf(jsonobject.get("strikethrough").getAsBoolean()); } if (jsonobject.has("obfuscated")) { chatstyle.obfuscated = Boolean.valueOf(jsonobject.get("obfuscated").getAsBoolean()); } if (jsonobject.has("color")) { chatstyle.color = (EnumChatFormatting)p_deserialize_3_.deserialize(jsonobject.get("color"), EnumChatFormatting.class); } JsonObject jsonobject1; JsonPrimitive jsonprimitive; if (jsonobject.has("clickEvent")) { jsonobject1 = jsonobject.getAsJsonObject("clickEvent"); if (jsonobject1 != null) { jsonprimitive = jsonobject1.getAsJsonPrimitive("action"); ClickEvent.Action action = jsonprimitive == null ? null : ClickEvent.Action.getValueByCanonicalName(jsonprimitive.getAsString()); JsonPrimitive jsonprimitive1 = jsonobject1.getAsJsonPrimitive("value"); String s = jsonprimitive1 == null ? null : jsonprimitive1.getAsString(); if (action != null && s != null && action.shouldAllowInChat()) { chatstyle.chatClickEvent = new ClickEvent(action, s); } } } if (jsonobject.has("hoverEvent")) { jsonobject1 = jsonobject.getAsJsonObject("hoverEvent"); if (jsonobject1 != null) { jsonprimitive = jsonobject1.getAsJsonPrimitive("action"); HoverEvent.Action action1 = jsonprimitive == null ? null : HoverEvent.Action.getValueByCanonicalName(jsonprimitive.getAsString()); IChatComponent ichatcomponent = (IChatComponent)p_deserialize_3_.deserialize(jsonobject1.get("value"), IChatComponent.class); if (action1 != null && ichatcomponent != null && action1.shouldAllowInChat()) { chatstyle.chatHoverEvent = new HoverEvent(action1, ichatcomponent); } } } return chatstyle; } } else { return null; } } public JsonElement serialize(ChatStyle p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) { if (p_serialize_1_.isEmpty()) { return null; } else { JsonObject jsonobject = new JsonObject(); if (p_serialize_1_.bold != null) { jsonobject.addProperty("bold", p_serialize_1_.bold); } if (p_serialize_1_.italic != null) { jsonobject.addProperty("italic", p_serialize_1_.italic); } if (p_serialize_1_.underlined != null) { jsonobject.addProperty("underlined", p_serialize_1_.underlined); } if (p_serialize_1_.strikethrough != null) { jsonobject.addProperty("strikethrough", p_serialize_1_.strikethrough); } if (p_serialize_1_.obfuscated != null) { jsonobject.addProperty("obfuscated", p_serialize_1_.obfuscated); } if (p_serialize_1_.color != null) { jsonobject.add("color", p_serialize_3_.serialize(p_serialize_1_.color)); } JsonObject jsonobject1; if (p_serialize_1_.chatClickEvent != null) { jsonobject1 = new JsonObject(); jsonobject1.addProperty("action", p_serialize_1_.chatClickEvent.getAction().getCanonicalName()); jsonobject1.addProperty("value", p_serialize_1_.chatClickEvent.getValue()); jsonobject.add("clickEvent", jsonobject1); } if (p_serialize_1_.chatHoverEvent != null) { jsonobject1 = new JsonObject(); jsonobject1.addProperty("action", p_serialize_1_.chatHoverEvent.getAction().getCanonicalName()); jsonobject1.add("value", p_serialize_3_.serialize(p_serialize_1_.chatHoverEvent.getValue())); jsonobject.add("hoverEvent", jsonobject1); } return jsonobject; } } public JsonElement serialize(Object p_serialize_1_, Type p_serialize_2_, JsonSerializationContext p_serialize_3_) { return this.serialize((ChatStyle)p_serialize_1_, p_serialize_2_, p_serialize_3_); } } }