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 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;
private String insertion;
/**
* 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";
public EnumChatFormatting getColor()
{
return null;
}
public boolean getBold()
{
return false;
}
public boolean getItalic()
{
return false;
}
public boolean getStrikethrough()
{
return false;
}
public boolean getUnderlined()
{
return false;
}
public boolean getObfuscated()
{
return false;
}
public ClickEvent getChatClickEvent()
{
return null;
}
public HoverEvent getChatHoverEvent()
{
return null;
}
public String getInsertion()
{
return null;
}
public ChatStyle setColor(EnumChatFormatting color)
{
throw new UnsupportedOperationException();
}
public ChatStyle setBold(Boolean p_150227_1_)
{
throw new UnsupportedOperationException();
}
public ChatStyle setItalic(Boolean italic)
{
throw new UnsupportedOperationException();
}
public ChatStyle setStrikethrough(Boolean strikethrough)
{
throw new UnsupportedOperationException();
}
public ChatStyle setUnderlined(Boolean underlined)
{
throw new UnsupportedOperationException();
}
public ChatStyle setObfuscated(Boolean obfuscated)
{
throw new UnsupportedOperationException();
}
public ChatStyle setChatClickEvent(ClickEvent event)
{
throw new UnsupportedOperationException();
}
public ChatStyle setChatHoverEvent(HoverEvent event)
{
throw new UnsupportedOperationException();
}
public ChatStyle setParentStyle(ChatStyle parent)
{
throw new UnsupportedOperationException();
}
public String toString()
{
return "Style.ROOT";
}
public ChatStyle createShallowCopy()
{
return this;
}
public ChatStyle createDeepCopy()
{
return this;
}
};
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;
}
/**
* Get the text to be inserted into Chat when the component is shift-clicked
*/
public String getInsertion()
{
return this.insertion == null ? this.getParent().getInsertion() : this.insertion;
}
/**
* 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 color)
{
this.color = color;
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 italic)
{
this.italic = italic;
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 strikethrough)
{
this.strikethrough = strikethrough;
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 underlined)
{
this.underlined = underlined;
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 obfuscated)
{
this.obfuscated = obfuscated;
return this;
}
/**
* Sets the event that should be run when text of this ChatStyle is clicked on.
*/
public ChatStyle setChatClickEvent(ClickEvent event)
{
this.chatClickEvent = event;
return this;
}
/**
* Sets the event that should be run when text of this ChatStyle is hovered over.
*/
public ChatStyle setChatHoverEvent(HoverEvent event)
{
this.chatHoverEvent = event;
return this;
}
/**
* Set a text to be inserted into Chat when the component is shift-clicked
*/
public ChatStyle setInsertion(String insertion)
{
this.insertion = insertion;
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 parent)
{
this.parentStyle = parent;
return this;
}
/**
* 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() + ", insertion=" + this.getInsertion() + '}';
}
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 var2 = (ChatStyle)p_equals_1_;
boolean var10000;
if (this.getBold() == var2.getBold() && this.getColor() == var2.getColor() && this.getItalic() == var2.getItalic() && this.getObfuscated() == var2.getObfuscated() && this.getStrikethrough() == var2.getStrikethrough() && this.getUnderlined() == var2.getUnderlined())
{
label65:
{
if (this.getChatClickEvent() != null)
{
if (!this.getChatClickEvent().equals(var2.getChatClickEvent()))
{
break label65;
}
}
else if (var2.getChatClickEvent() != null)
{
break label65;
}
if (this.getChatHoverEvent() != null)
{
if (!this.getChatHoverEvent().equals(var2.getChatHoverEvent()))
{
break label65;
}
}
else if (var2.getChatHoverEvent() != null)
{
break label65;
}
if (this.getInsertion() != null)
{
if (!this.getInsertion().equals(var2.getInsertion()))
{
break label65;
}
}
else if (var2.getInsertion() != null)
{
break label65;
}
var10000 = true;
return var10000;
}
}
var10000 = false;
return var10000;
}
}
public int hashCode()
{
int var1 = this.color.hashCode();
var1 = 31 * var1 + this.bold.hashCode();
var1 = 31 * var1 + this.italic.hashCode();
var1 = 31 * var1 + this.underlined.hashCode();
var1 = 31 * var1 + this.strikethrough.hashCode();
var1 = 31 * var1 + this.obfuscated.hashCode();
var1 = 31 * var1 + this.chatClickEvent.hashCode();
var1 = 31 * var1 + this.chatHoverEvent.hashCode();
var1 = 31 * var1 + this.insertion.hashCode();
return var1;
}
/**
* 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 var1 = new ChatStyle();
var1.bold = this.bold;
var1.italic = this.italic;
var1.strikethrough = this.strikethrough;
var1.underlined = this.underlined;
var1.obfuscated = this.obfuscated;
var1.color = this.color;
var1.chatClickEvent = this.chatClickEvent;
var1.chatHoverEvent = this.chatHoverEvent;
var1.parentStyle = this.parentStyle;
var1.insertion = this.insertion;
return var1;
}
/**
* 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 var1 = new ChatStyle();
var1.setBold(Boolean.valueOf(this.getBold()));
var1.setItalic(Boolean.valueOf(this.getItalic()));
var1.setStrikethrough(Boolean.valueOf(this.getStrikethrough()));
var1.setUnderlined(Boolean.valueOf(this.getUnderlined()));
var1.setObfuscated(Boolean.valueOf(this.getObfuscated()));
var1.setColor(this.getColor());
var1.setChatClickEvent(this.getChatClickEvent());
var1.setChatHoverEvent(this.getChatHoverEvent());
var1.setInsertion(this.getInsertion());
return var1;
}
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 var4 = new ChatStyle();
JsonObject var5 = p_deserialize_1_.getAsJsonObject();
if (var5 == null)
{
return null;
}
else
{
if (var5.has("bold"))
{
var4.bold = Boolean.valueOf(var5.get("bold").getAsBoolean());
}
if (var5.has("italic"))
{
var4.italic = Boolean.valueOf(var5.get("italic").getAsBoolean());
}
if (var5.has("underlined"))
{
var4.underlined = Boolean.valueOf(var5.get("underlined").getAsBoolean());
}
if (var5.has("strikethrough"))
{
var4.strikethrough = Boolean.valueOf(var5.get("strikethrough").getAsBoolean());
}
if (var5.has("obfuscated"))
{
var4.obfuscated = Boolean.valueOf(var5.get("obfuscated").getAsBoolean());
}
if (var5.has("color"))
{
var4.color = (EnumChatFormatting)p_deserialize_3_.deserialize(var5.get("color"), EnumChatFormatting.class);
}
if (var5.has("insertion"))
{
var4.insertion = var5.get("insertion").getAsString();
}
JsonObject var6;
JsonPrimitive var7;
if (var5.has("clickEvent"))
{
var6 = var5.getAsJsonObject("clickEvent");
if (var6 != null)
{
var7 = var6.getAsJsonPrimitive("action");
ClickEvent.Action var8 = var7 == null ? null : ClickEvent.Action.getValueByCanonicalName(var7.getAsString());
JsonPrimitive var9 = var6.getAsJsonPrimitive("value");
String var10 = var9 == null ? null : var9.getAsString();
if (var8 != null && var10 != null && var8.shouldAllowInChat())
{
var4.chatClickEvent = new ClickEvent(var8, var10);
}
}
}
if (var5.has("hoverEvent"))
{
var6 = var5.getAsJsonObject("hoverEvent");
if (var6 != null)
{
var7 = var6.getAsJsonPrimitive("action");
HoverEvent.Action var11 = var7 == null ? null : HoverEvent.Action.getValueByCanonicalName(var7.getAsString());
IChatComponent var12 = (IChatComponent)p_deserialize_3_.deserialize(var6.get("value"), IChatComponent.class);
if (var11 != null && var12 != null && var11.shouldAllowInChat())
{
var4.chatHoverEvent = new HoverEvent(var11, var12);
}
}
}
return var4;
}
}
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 var4 = new JsonObject();
if (p_serialize_1_.bold != null)
{
var4.addProperty("bold", p_serialize_1_.bold);
}
if (p_serialize_1_.italic != null)
{
var4.addProperty("italic", p_serialize_1_.italic);
}
if (p_serialize_1_.underlined != null)
{
var4.addProperty("underlined", p_serialize_1_.underlined);
}
if (p_serialize_1_.strikethrough != null)
{
var4.addProperty("strikethrough", p_serialize_1_.strikethrough);
}
if (p_serialize_1_.obfuscated != null)
{
var4.addProperty("obfuscated", p_serialize_1_.obfuscated);
}
if (p_serialize_1_.color != null)
{
var4.add("color", p_serialize_3_.serialize(p_serialize_1_.color));
}
if (p_serialize_1_.insertion != null)
{
var4.add("insertion", p_serialize_3_.serialize(p_serialize_1_.insertion));
}
JsonObject var5;
if (p_serialize_1_.chatClickEvent != null)
{
var5 = new JsonObject();
var5.addProperty("action", p_serialize_1_.chatClickEvent.getAction().getCanonicalName());
var5.addProperty("value", p_serialize_1_.chatClickEvent.getValue());
var4.add("clickEvent", var5);
}
if (p_serialize_1_.chatHoverEvent != null)
{
var5 = new JsonObject();
var5.addProperty("action", p_serialize_1_.chatHoverEvent.getAction().getCanonicalName());
var5.add("value", p_serialize_3_.serialize(p_serialize_1_.chatHoverEvent.getValue()));
var4.add("hoverEvent", var5);
}
return var4;
}
}
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_);
}
}
}