Make NBT Serialization binary compatible with NBT GUI editors

This commit is contained in:
Tara 2023-01-03 15:46:38 -07:00
parent 724f9aaa8c
commit 60ced631ba
23 changed files with 1101 additions and 279 deletions

View file

@ -35,12 +35,9 @@ namespace LibZNI.Serialization.ZNIFile
return TagType.BOOL;
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
BoolVal = br.ReadBoolean();
return true;
throw new NotImplementedException();
}
public override void Rename(string old, string newName)
@ -48,27 +45,49 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new BoolTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
Folder vFolder = new Folder(Name);
vFolder.Add(new ByteTag("val", (byte)(Value ? 1 : 0)));
vFolder.Add(new ByteTag("_virtcast_", (byte)Type));
if(Parent != null)
{
if(Parent.Type == TagType.LIST)
{
vFolder.Add(new StringTag("name", Name));
}
}
vFolder.WriteTag(bw);
vFolder.WriteData(bw);
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
bw.Write(Value);
}
public override object Clone()
{
return new BoolTag(Name, Value);
}
public override void CastFrom(Folder F)
{
if (!F.HasNamedTag("name"))
Name = F.Name;
else Name = F["name"].StringValue;
int ret = F["val"].IntValue;
if (ret == 1) BoolVal = true;
else BoolVal = false;
}
}
}

View file

@ -35,12 +35,12 @@ namespace LibZNI.Serialization.ZNIFile
return TagType.BYTEARRAY;
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
int count = br.ReadInt32();
BArrVal = br.ReadBytes(count);
if(!(Parent!= null && Parent.Type == TagType.LIST))
Name = br.ReadString();
BArrVal = br.ReadBytes(br.ReadInt32());
return true;
}
@ -49,28 +49,35 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new ByteArrayTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value);
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
bw.Write(Value.Length);
bw.Write(Type);
bw.Write(Value);
}
public override object Clone()
{
return new ByteArrayTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -36,9 +36,11 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
ByteVal = br.ReadByte();
return true;
}
@ -48,27 +50,34 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new ByteTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value);
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
bw.Write(Type);
bw.Write(Value);
}
public override object Clone()
{
return new ByteTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -38,10 +38,10 @@ namespace LibZNI.Serialization.ZNIFile
{
return new DoubleTag(Name, Value);
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
DoubleVal = br.ReadDouble();
return true;
}
@ -51,20 +51,27 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new DoubleTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value);
}
public override void WriteTag(NBTWriter bw)
{
bw.Write(Type);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
public override void WriteTag(BinaryWriter bw)
{
bw.Write(Name);
bw.Write(Value);
}
}
}

View file

@ -35,10 +35,10 @@ namespace LibZNI.Serialization.ZNIFile
return TagType.FLOAT;
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
FloatVal = br.ReadSingle();
return true;
}
@ -48,27 +48,32 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new FloatTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value);
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
bw.Write(Type);
bw.Write(Value);
}
public override object Clone()
{
return new FloatTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -140,27 +140,22 @@ namespace LibZNI.Serialization.ZNIFile
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
if(Parent != null)
{
SkipTag(br);
return false;
}
Name = br.ReadString(); // Per ZNIFile standards, each tag reads its own name!
// Aria: Removed a return on parent not being null because that is how the ZNI Parsing system works.
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
while(true)
while (true)
{
TagType next = (TagType)br.ReadInt32();
TagType next = br.ReadTagType();
Tag _next = null;
switch (next)
{
case TagType.FOLDER:
_next = new Folder();
break;
case TagType.BOOL:
_next = new BoolTag();
break;
case TagType.BYTE:
_next = new ByteTag();
break;
@ -193,37 +188,80 @@ namespace LibZNI.Serialization.ZNIFile
break;
case TagType.END:
return true;
case TagType.SHORT:
_next = new ShortTag();
break;
}
_next.Parent = this;
if (_next.ReadTag(br))
{
if (_next.Type == TagType.FOLDER)
{
Folder NextTag = _next as Folder;
if (NextTag.HasNamedTag("_virtcast_"))
{
ByteTag bt = NextTag["_virtcast_"] as ByteTag;
next = (TagType)bt.Value;
Tag temp = null;
switch (next)
{
case TagType.BOOL:
temp = new BoolTag();
temp.CastFrom(NextTag);
break;
case TagType.ULONG:
temp = new uLongTag();
temp.CastFrom(NextTag);
break;
case TagType.UUID:
temp = new UUIDTag();
temp.CastFrom(NextTag);
break;
}
_next = temp;
}
}
Tags.Add(_next);
}
_next.Parent = this;
}
return true;
}
public bool HasNamedTag(string Name)
{
foreach(Tag t in Tags)
{
if(t.Name == Name) return true;
}
return false;
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new Folder().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
{
throw new NotImplementedException();
}
public override void WriteTag(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
bw.Write(((int)Type)); // Write int (0), folder
bw.Write(Name);
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
foreach (Tag t in Tags)
{
t.WriteTag(bw);
t.WriteData(bw);
}
bw.Write(((int)TagType.END));
bw.Write(TagType.END);
}
public override void WriteTag(NBTWriter bw)
{
bw.Write(Type); // Write int (0), folder
}
IEnumerator IEnumerable.GetEnumerator()
@ -246,5 +284,10 @@ namespace LibZNI.Serialization.ZNIFile
Name = existing.Name;
Tags = new Collection<Tag>(Tags.ToArray());
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -1,52 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
{
public class Header : Serializable
{
public const string SIGNATURE = "ZNIFile";
public Version VERSION = new Version(1,0,0,1,0,0);
public override void load(Folder f)
{
Folder x = f["Header"] as Folder;
if (x == null) return;
if (x["Signature"].StringValue == SIGNATURE)
{
Version ver = new Version();
ver.load(f);
if (VERSION.Compare(ver) == 0)
{
return;
} else throw new VersionNumberDifferentException(VERSION, ver);
}else
{
throw new Exception("Header failed validation");
}
}
public override void save(Folder f)
{
Folder x = new Folder("Header");
x.Add(new StringTag("Signature", SIGNATURE));
VERSION.save(x);
f.Add(x);
}
public static Folder GetHeader()
{
Folder f = new Folder("temp"); // Initialize a temporary header
Header x = new Header();
x.save(f);
return f["Header"] as Folder;
}
}
}

View file

@ -36,16 +36,18 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
int count = br.ReadInt32();
BArrVal = new int[count];
for(int i = 0; i < count; i++)
for (int i = 0; i < count; i++)
{
BArrVal[i] = br.ReadInt32();
}
return true;
}
@ -54,31 +56,38 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new IntArrayTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
}
public override void WriteTag(BinaryWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value.Length);
foreach(int i in Value)
foreach (int i in Value)
{
bw.Write(i);
}
}
public override void WriteTag(NBTWriter bw)
{
bw.Write(Type);
}
public override object Clone()
{
return new IntArrayTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -36,28 +36,31 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
IntVal = br.ReadInt32();
return true;
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new IntTag().ReadTag(br);
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
bw.Write(Value);
bw.Write(Type);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value);
}
public override void Rename(string old, string newName)
{
@ -68,5 +71,10 @@ namespace LibZNI.Serialization.ZNIFile
{
return new IntTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -5,12 +5,13 @@ using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace LibZNI.Serialization.ZNIFile
{
public class ListTag : Tag, IList<Tag>, IList
{
private TagType _subtype;
private TagType _subtype = TagType.INVALID;
private List<Tag> _tags;
public List<Tag> Value
{
@ -105,15 +106,19 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
_subtype = (TagType)br.ReadInt32();
Name = br.ReadString();
while (true)
//_subtype = (TagType)br.ReadInt32();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
_subtype = br.ReadTagType();
int count = br.ReadInt32();
TagType next = _subtype;
for (int i = 0; i < count; i++)
{
TagType next = (TagType)br.ReadInt32();
Tag _next = null;
switch(next)
// read sub-tags
switch (next)
{
case TagType.FOLDER:
_next = new Folder();
@ -151,17 +156,45 @@ namespace LibZNI.Serialization.ZNIFile
case TagType.LONGARRAY:
_next = new LongArrayTag();
break;
case TagType.END:
return true;
}
if (_next.ReadTag(br))
{
_tags.Add(_next);
case TagType.SHORT:
_next = new ShortTag();
break;
}
_next.Parent = this;
if (_next.ReadTag(br))
{
if (_next.Type == TagType.FOLDER)
{
Folder nxt = _next as Folder;
if (nxt.HasNamedTag("_virtcast_"))
{
TagType tag = (TagType)nxt["_virtcast_"].ByteValue;
Tag temp = null;
switch (tag)
{
case TagType.BOOL:
temp = new BoolTag();
temp.CastFrom(nxt);
break;
case TagType.ULONG:
temp = new uLongTag();
temp.CastFrom(nxt);
break;
case TagType.UUID:
temp = new UUIDTag();
temp.CastFrom(nxt);
break;
}
_next = temp;
}
}
_tags.Add(_next);
}
}
return true;
}
public override void Rename(string old, string newName)
@ -169,28 +202,31 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new ListTag(_subtype).ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(_subtype);
bw.Write(_tags.Count);
foreach (Tag x in _tags)
{
x.WriteData(bw);
}
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(((int)_subtype));
bw.Write(Name);
foreach(Tag x in _tags)
{
x.WriteTag(bw);
}
bw.Write(Type);
bw.Write(((int)TagType.END));
//bw.Write(((int)TagType.END));
}
public int Add(object value)
@ -290,5 +326,10 @@ namespace LibZNI.Serialization.ZNIFile
{
return _tags.GetEnumerator();
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -36,10 +36,11 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
int count = br.ReadInt32();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
int count = br.ReadVarInt();
BArrVal = new long[count];
for(int i = 0; i < count; i++)
{
@ -54,31 +55,36 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new LongArrayTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
}
public override void WriteTag(BinaryWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value.Length);
foreach(int i in Value)
foreach (long i in Value)
{
bw.Write(i);
}
}
public override void WriteTag(NBTWriter bw)
{
bw.Write(Type);
}
public override object Clone()
{
return new LongArrayTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -36,9 +36,10 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
LongVal = br.ReadInt64();
return true;
}
@ -48,27 +49,32 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new LongTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
}
public override void WriteTag(BinaryWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value);
}
public override void WriteTag(NBTWriter bw)
{
bw.Write(Type);
}
public override object Clone()
{
return new LongTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -36,9 +36,10 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
FloatVal = br.ReadInt16();
return true;
}
@ -48,27 +49,32 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new ShortTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
}
public override void WriteTag(BinaryWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(Value);
}
public override void WriteTag(NBTWriter bw)
{
bw.Write(Type);
}
public override object Clone()
{
return new ShortTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -37,9 +37,10 @@ namespace LibZNI.Serialization.ZNIFile
StrVal = Val;
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
if (!(Parent != null && Parent.Type == TagType.LIST))
Name = br.ReadString();
StrVal = br.ReadString();
return true;
}
@ -49,27 +50,32 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = br.ReadString();
_ = br.ReadString();
_ = new StringTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
if (!(Parent != null && Parent.Type == TagType.LIST))
bw.Write(Name);
bw.Write(StrVal);
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
bw.Write(Value);
bw.Write(Type);
}
public override object Clone()
{
return new StringTag(Name, Value);
}
public override void CastFrom(Folder F)
{
throw new NotImplementedException();
}
}
}

View file

@ -53,10 +53,12 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public abstract bool ReadTag(BinaryReader br);
public abstract void SkipTag(BinaryReader br);
public abstract void WriteTag(BinaryWriter bw);
public abstract void WriteData(BinaryWriter bw);
public abstract bool ReadTag(NBTReader br);
public abstract void SkipTag(NBTReader br);
public abstract void WriteTag(NBTWriter bw);
public abstract void WriteData(NBTWriter bw);
public abstract void CastFrom(Folder F);
private string Error = "Invalid tag type";
public virtual Tag this[int index]

View file

@ -6,27 +6,28 @@ using System.Threading.Tasks;
namespace LibZNI.Serialization.ZNIFile
{
public enum TagType
// Aria: Changed to a type of byte which keeps it to only one byte when writing out in serializing
public enum TagType : byte
{
END = 0, // Present at the end of a folder or list
BYTE = 1,
SHORT = 2,
INTEGER = 3,
LONG = 4,
FLOAT = 5,
DOUBLE = 6,
BYTEARRAY = 7,
STRING = 8,
LIST = 9, // List can be any valid Tag Type
FOLDER = 10,
INTARRAY = 11,
LONGARRAY = 12,
BOOL = 13,
ULONG=14,
UUID=15,
END = 0x00, // Present at the end of a folder
BYTE = 0x01,
SHORT = 0x02,
INTEGER = 0x03,
LONG = 0x04,
FLOAT = 0x05,
DOUBLE = 0x06,
BYTEARRAY = 0x07,
STRING = 0x08,
LIST = 0x09, // List can be any valid Tag Type
FOLDER = 0x0A,
INTARRAY = 0x0B,
LONGARRAY = 0x0C,
BOOL = 0x0D,
ULONG=0x0E,
UUID=0x0F,
INVALID=99
INVALID=0xFF
}
}

View file

@ -48,11 +48,9 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
LongVal = Guid.Parse(br.ReadString());
return true;
throw new Exception("Must be virtcasted!");
}
public override void Rename(string old, string newName)
@ -60,27 +58,43 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new UUIDTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
Folder vCast = new Folder(Name);
vCast.Add(new ByteTag("_virtcast_", (byte)Type));
vCast.Add(new ByteArrayTag("val", Value.ToByteArray()));
if (Parent != null)
{
if (Parent.Type == TagType.LIST)
{
vCast.Add(new StringTag("name", Name));
}
}
vCast.WriteTag(bw);
vCast.WriteData(bw);
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
bw.Write(Value.ToString());
}
public override object Clone()
{
return new UUIDTag(Name, Value);
}
public override void CastFrom(Folder F)
{
if (!F.HasNamedTag("name"))
Name = F.Name;
else Name = F["name"].StringValue;
ByteArrayTag bat = F["val"] as ByteArrayTag;
LongVal = new Guid(bat.Value);
}
}
}

View file

@ -36,11 +36,9 @@ namespace LibZNI.Serialization.ZNIFile
}
}
public override bool ReadTag(BinaryReader br)
public override bool ReadTag(NBTReader br)
{
Name = br.ReadString();
LongVal = br.ReadUInt64();
return true;
throw new Exception("Not allowed"); // This type must be virtual casted
}
public override void Rename(string old, string newName)
@ -48,27 +46,43 @@ namespace LibZNI.Serialization.ZNIFile
throw new NotImplementedException();
}
public override void SkipTag(BinaryReader br)
public override void SkipTag(NBTReader br)
{
_ = new uLongTag().ReadTag(br);
}
public override void WriteData(BinaryWriter bw)
public override void WriteData(NBTWriter bw)
{
throw new NotImplementedException();
Folder vCast = new Folder(Name);
vCast.Add(new ByteTag("_virtcast_", (byte)Type));
vCast.Add(new StringTag("val", Value.ToString()));
if (Parent != null)
{
if (Parent.Type == TagType.LIST)
{
vCast.Add(new StringTag("name", Name));
}
}
vCast.WriteTag(bw);
vCast.WriteData(bw);
}
public override void WriteTag(BinaryWriter bw)
public override void WriteTag(NBTWriter bw)
{
bw.Write(((int)Type));
bw.Write(Name);
bw.Write(Value);
}
public override object Clone()
{
return new uLongTag(Name, Value);
}
public override void CastFrom(Folder F)
{
if (!F.HasNamedTag("name"))
Name = F.Name;
else Name = F["name"].StringValue;
LongVal = ulong.Parse(F["val"].StringValue);
}
}
}