package net.minecraft.nbt; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class NBTTagList extends NBTBase { /** The array list containing the tags encapsulated in this list. */ private List tagList = new ArrayList(); /** * The type byte for the tags in the list - they must all be of the same type. */ private byte tagType; public NBTTagList() { super(""); } public NBTTagList(String par1Str) { super(par1Str); } /** * Write the actual data contents of the tag, implemented in NBT extension classes */ void write(DataOutput par1DataOutput) throws IOException { if (!this.tagList.isEmpty()) { this.tagType = ((NBTBase)this.tagList.get(0)).getId(); } else { this.tagType = 1; } par1DataOutput.writeByte(this.tagType); par1DataOutput.writeInt(this.tagList.size()); for (int var2 = 0; var2 < this.tagList.size(); ++var2) { ((NBTBase)this.tagList.get(var2)).write(par1DataOutput); } } /** * Read the actual data contents of the tag, implemented in NBT extension classes */ void load(DataInput par1DataInput) throws IOException { this.tagType = par1DataInput.readByte(); int var2 = par1DataInput.readInt(); this.tagList = new ArrayList(); for (int var3 = 0; var3 < var2; ++var3) { NBTBase var4 = NBTBase.newTag(this.tagType, (String)null); var4.load(par1DataInput); this.tagList.add(var4); } } /** * Gets the type byte for the tag. */ public byte getId() { return (byte)9; } public String toString() { return "" + this.tagList.size() + " entries of type " + NBTBase.getTagName(this.tagType); } /** * Adds the provided tag to the end of the list. There is no check to verify this tag is of the same type as any * previous tag. */ public void appendTag(NBTBase par1NBTBase) { this.tagType = par1NBTBase.getId(); this.tagList.add(par1NBTBase); } @SideOnly(Side.CLIENT) /** * Removes a tag at the given index. */ public NBTBase removeTag(int par1) { return (NBTBase)this.tagList.remove(par1); } /** * Retrieves the tag at the specified index from the list. */ public NBTBase tagAt(int par1) { return (NBTBase)this.tagList.get(par1); } /** * Returns the number of tags in the list. */ public int tagCount() { return this.tagList.size(); } /** * Creates a clone of the tag. */ public NBTBase copy() { NBTTagList var1 = new NBTTagList(this.getName()); var1.tagType = this.tagType; Iterator var2 = this.tagList.iterator(); while (var2.hasNext()) { NBTBase var3 = (NBTBase)var2.next(); NBTBase var4 = var3.copy(); var1.tagList.add(var4); } return var1; } public boolean equals(Object par1Obj) { if (super.equals(par1Obj)) { NBTTagList var2 = (NBTTagList)par1Obj; if (this.tagType == var2.tagType) { return this.tagList.equals(var2.tagList); } } return false; } public int hashCode() { return super.hashCode() ^ this.tagList.hashCode(); } }