You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
5.6 KiB
Java
182 lines
5.6 KiB
Java
package net.minecraft.util;
|
|
|
|
import com.google.common.base.Function;
|
|
import com.google.common.collect.Iterators;
|
|
import com.google.common.collect.Lists;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
|
|
public abstract class ChatComponentStyle implements IChatComponent
|
|
{
|
|
/**
|
|
* The later siblings of this component. If this component turns the text bold, that will apply to all the siblings
|
|
* until a later sibling turns the text something else.
|
|
*/
|
|
protected List siblings = Lists.newArrayList();
|
|
private ChatStyle style;
|
|
private static final String __OBFID = "CL_00001257";
|
|
|
|
/**
|
|
* Appends the given component to the end of this one.
|
|
*/
|
|
public IChatComponent appendSibling(IChatComponent component)
|
|
{
|
|
component.getChatStyle().setParentStyle(this.getChatStyle());
|
|
this.siblings.add(component);
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Gets the sibling components of this one.
|
|
*/
|
|
public List getSiblings()
|
|
{
|
|
return this.siblings;
|
|
}
|
|
|
|
/**
|
|
* Appends the given text to the end of this component.
|
|
*/
|
|
public IChatComponent appendText(String text)
|
|
{
|
|
return this.appendSibling(new ChatComponentText(text));
|
|
}
|
|
|
|
public IChatComponent setChatStyle(ChatStyle style)
|
|
{
|
|
this.style = style;
|
|
Iterator iterator = this.siblings.iterator();
|
|
|
|
while (iterator.hasNext())
|
|
{
|
|
IChatComponent ichatcomponent = (IChatComponent)iterator.next();
|
|
ichatcomponent.getChatStyle().setParentStyle(this.getChatStyle());
|
|
}
|
|
|
|
return this;
|
|
}
|
|
|
|
public ChatStyle getChatStyle()
|
|
{
|
|
if (this.style == null)
|
|
{
|
|
this.style = new ChatStyle();
|
|
Iterator iterator = this.siblings.iterator();
|
|
|
|
while (iterator.hasNext())
|
|
{
|
|
IChatComponent ichatcomponent = (IChatComponent)iterator.next();
|
|
ichatcomponent.getChatStyle().setParentStyle(this.style);
|
|
}
|
|
}
|
|
|
|
return this.style;
|
|
}
|
|
|
|
public Iterator iterator()
|
|
{
|
|
return Iterators.concat(Iterators.forArray(new ChatComponentStyle[] {this}), createDeepCopyIterator(this.siblings));
|
|
}
|
|
|
|
/**
|
|
* Gets the text of this component, without any special formatting codes added. TODO: why is this two different
|
|
* methods?
|
|
*/
|
|
public final String getUnformattedText()
|
|
{
|
|
StringBuilder stringbuilder = new StringBuilder();
|
|
Iterator iterator = this.iterator();
|
|
|
|
while (iterator.hasNext())
|
|
{
|
|
IChatComponent ichatcomponent = (IChatComponent)iterator.next();
|
|
stringbuilder.append(ichatcomponent.getUnformattedTextForChat());
|
|
}
|
|
|
|
return stringbuilder.toString();
|
|
}
|
|
|
|
/**
|
|
* Gets the text of this component, with formatting codes added for rendering.
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
public final String getFormattedText()
|
|
{
|
|
StringBuilder stringbuilder = new StringBuilder();
|
|
Iterator iterator = this.iterator();
|
|
|
|
while (iterator.hasNext())
|
|
{
|
|
IChatComponent ichatcomponent = (IChatComponent)iterator.next();
|
|
stringbuilder.append(ichatcomponent.getChatStyle().getFormattingCode());
|
|
stringbuilder.append(ichatcomponent.getUnformattedTextForChat());
|
|
stringbuilder.append(EnumChatFormatting.RESET);
|
|
}
|
|
|
|
return stringbuilder.toString();
|
|
}
|
|
|
|
/**
|
|
* Creates an iterator that iterates over the given components, returning deep copies of each component in turn so
|
|
* that the properties of the returned objects will remain externally consistent after being returned.
|
|
*/
|
|
public static Iterator createDeepCopyIterator(Iterable components)
|
|
{
|
|
Iterator iterator = Iterators.concat(Iterators.transform(components.iterator(), new Function()
|
|
{
|
|
private static final String __OBFID = "CL_00001258";
|
|
public Iterator apply(IChatComponent p_apply_1_)
|
|
{
|
|
return p_apply_1_.iterator();
|
|
}
|
|
public Object apply(Object p_apply_1_)
|
|
{
|
|
return this.apply((IChatComponent)p_apply_1_);
|
|
}
|
|
}));
|
|
iterator = Iterators.transform(iterator, new Function()
|
|
{
|
|
private static final String __OBFID = "CL_00001259";
|
|
public IChatComponent apply(IChatComponent p_apply_1_)
|
|
{
|
|
IChatComponent ichatcomponent1 = p_apply_1_.createCopy();
|
|
ichatcomponent1.setChatStyle(ichatcomponent1.getChatStyle().createDeepCopy());
|
|
return ichatcomponent1;
|
|
}
|
|
public Object apply(Object p_apply_1_)
|
|
{
|
|
return this.apply((IChatComponent)p_apply_1_);
|
|
}
|
|
});
|
|
return iterator;
|
|
}
|
|
|
|
public boolean equals(Object p_equals_1_)
|
|
{
|
|
if (this == p_equals_1_)
|
|
{
|
|
return true;
|
|
}
|
|
else if (!(p_equals_1_ instanceof ChatComponentStyle))
|
|
{
|
|
return false;
|
|
}
|
|
else
|
|
{
|
|
ChatComponentStyle chatcomponentstyle = (ChatComponentStyle)p_equals_1_;
|
|
return this.siblings.equals(chatcomponentstyle.siblings) && this.getChatStyle().equals(chatcomponentstyle.getChatStyle());
|
|
}
|
|
}
|
|
|
|
public int hashCode()
|
|
{
|
|
return 31 * this.style.hashCode() + this.siblings.hashCode();
|
|
}
|
|
|
|
public String toString()
|
|
{
|
|
return "BaseComponent{style=" + this.style + ", siblings=" + this.siblings + '}';
|
|
}
|
|
} |