public override void writeData(BinaryWriter writer) { writer.Write(tagId); Util.writeData(writer, BitConverter.GetBytes(list.Count)); foreach (object obj in list) { switch (tagId) { case 1: writer.Write((sbyte)obj); break; case 2: short shortnum = (short)obj; Util.writeData(writer, BitConverter.GetBytes(shortnum)); break; case 3: int intnum = (int)obj; Util.writeData(writer, BitConverter.GetBytes(intnum)); break; case 4: long longnum = (long)obj; Util.writeData(writer, BitConverter.GetBytes(longnum)); break; case 5: float floatnum = (float)obj; Util.writeData(writer, BitConverter.GetBytes(floatnum)); break; case 6: double doublenum = (double)obj; Util.writeData(writer, BitConverter.GetBytes(doublenum)); break; case 7: byte[] array = (byte[])obj; for (int a = 0; a < array.Length; a++) { writer.Write(array[a]); } break; case 8: Util.writeUTF8String(writer, (string)obj); break; case 9: TagList writeList = (TagList)obj; writeList.write(writer); break; case 10: TagCompound compound = (TagCompound)obj; List <Tag> tagList = compound.tags; foreach (Tag tag in tagList) { tag.write(writer); } //tag compound ends with a zero byte writer.Write((byte)0); break; } } }