public void AddNode <T>(string name, T value) { NbtNode node = null; if (typeof(T) == typeof(string)) { node = new NbtString { Value = (string)(object)value } } ; if (typeof(T) == typeof(byte)) { node = new NbtByte { Value = (byte)(object)value } } ; if (typeof(T) == typeof(int)) { node = new NbtInt { Value = (int)(object)value } } ; if (typeof(T) == typeof(byte[])) { node = new NbtBytes { Value = (byte[])(object)value } } ; if (typeof(T) == typeof(double)) { node = new NbtDouble { Value = (double)(object)value } } ; if (typeof(T) == typeof(float)) { node = new NbtFloat { Value = (float)(object)value } } ; if (typeof(T) == typeof(int[])) { node = new NbtInts { Value = (int[])(object)value } } ; if (typeof(T) == typeof(long)) { node = new NbtLong { Value = (long)(object)value } } ; if (typeof(T) == typeof(short)) { node = new NbtShort { Value = (short)(object)value } } ; if (typeof(T) == typeof(NbtList)) { node = (NbtNode)(object)value; } if (typeof(T) == typeof(NbtCompound)) { node = (NbtNode)(object)value; } if (node == null) { throw new Exception("Wrong Typ: " + typeof(T)); } node.Name = name; Childs.Add(node); } }
private NbtNode ReadNode(BigEndianStream zipped) { byte type = (byte)zipped.ReadByte(); NbtNode node = null; switch (type) { case 0: return(new NbtStop()); case 1: node = new NbtByte { Name = zipped.ReadString8(), Value = zipped.ReadByte() }; break; case 2: node = new NbtShort { Name = zipped.ReadString8(), Value = zipped.ReadInt16() }; break; case 3: node = new NbtInt { Name = zipped.ReadString8(), Value = zipped.ReadInt32() }; break; case 4: node = new NbtLong { Name = zipped.ReadString8(), Value = zipped.ReadInt64() }; break; case 5: node = new NbtFloat { Name = zipped.ReadString8(), Value = zipped.ReadSingle() }; break; case 6: node = new NbtDouble { Name = zipped.ReadString8(), Value = zipped.ReadDouble() }; break; case 7: node = new NbtBytes { Name = zipped.ReadString8(), Value = zipped.ReadBytes(zipped.ReadInt32()) }; break; case 8: node = new NbtString { Name = zipped.ReadString8(), Value = zipped.ReadString8() }; break; case 9: node = new NbtList(); ((NbtList)node).Name = zipped.ReadString8(); ((NbtList)node).Childs = new List <object>(); byte tagId = zipped.ReadByte(); ((NbtList)node).TagId = tagId; int length = zipped.ReadInt32(); for (int i = 0; i < length; i++) { ((NbtList)node).Childs.Add(ReadRaw(zipped, tagId)); } break; case 10: node = new NbtCompound(); ((NbtCompound)node).Name = zipped.ReadString8(); ((NbtCompound)node).Childs = new List <NbtNode>(); NbtNode subNode; while ((subNode = ReadNode(zipped)).Type != 0) { ((NbtCompound)node).Childs.Add(subNode); } break; case 11: node = new NbtInts { Name = zipped.ReadString8(), Value = ByteToIntArray(zipped.ReadBytes(zipped.ReadInt32() * sizeof(int))) }; break; } //string str = zipped.ReadString8(100); if (node == null) { throw new Exception(); } return(node); }