internal override bool ReadTag(NbtBinaryReader readStream) { if (readStream.Selector != null && !readStream.Selector(this)) { readStream.ReadInt64(); return false; } Value = readStream.ReadInt64(); return true; }
internal override bool ReadTag(NbtBinaryReader readStream) { int length = readStream.ReadInt32(); if (length < 0) { throw new NbtFormatException("Negative length given in TAG_Byte_Array"); } if (readStream.Selector != null && !readStream.Selector(this)) { readStream.Skip(length); return(false); } Value = readStream.ReadBytes(length); return(true); }
static string GetRootNameInternal([NotNull] Stream stream, bool bigEndian) { Debug.Assert(stream != null); int firstByte = stream.ReadByte(); if (firstByte < 0) { throw new EndOfStreamException(); } else if (firstByte != (int)NbtTagType.Compound) { throw new NbtFormatException("Given NBT stream does not start with a TAG_Compound"); } var reader = new NbtBinaryReader(stream, bigEndian); return(reader.ReadString()); }
internal override void ReadTag(NbtBinaryReader readStream) { ListType = readStream.ReadTagType(); int length = readStream.ReadInt32(); if (length < 0) { throw new NbtFormatException("Negative list size given."); } for (int i = 0; i < length; i++) { NbtTag newTag = NbtTag.Construct(ListType); newTag.ReadTag(readStream); Tags.Add(newTag); } }
/// <summary> Initializes a new instance of the NbtReader class. </summary> /// <param name="stream"> Stream to read from. </param> /// <param name="bigEndian"> Whether NBT data is in Big-Endian encoding. </param> /// <exception cref="ArgumentNullException"> <paramref name="stream"/> is <c>null</c>. </exception> /// <exception cref="ArgumentException"> <paramref name="stream"/> is not readable. </exception> public NbtReader([NotNull] Stream stream, bool bigEndian) { if (stream == null) { throw new ArgumentNullException(nameof(stream)); } SkipEndTags = true; CacheTagValues = false; ParentTagType = NbtTagType.Unknown; TagType = NbtTagType.Unknown; canSeekStream = stream.CanSeek; if (canSeekStream) { streamStartOffset = stream.Position; } reader = new NbtBinaryReader(stream, bigEndian); }
internal override bool ReadTag(NbtBinaryReader readStream) { int length = readStream.ReadInt32(); if (length < 0) { throw new NbtFormatException("Negative length given in TAG_Int_Array"); } if (readStream.Selector != null && !readStream.Selector(this)) { readStream.Skip(length * sizeof(int)); return(false); } Value = new int[length]; for (int i = 0; i < length; i++) { Value[i] = readStream.ReadInt32(); } return(true); }
void LoadFromStreamInternal([NotNull] Stream stream, [CanBeNull] TagSelector tagSelector) { if (stream == null) { throw new ArgumentNullException("stream"); } // Make sure the first byte in this file is the tag for a TAG_Compound if (stream.ReadByte() != (int)NbtTagType.Compound) { throw new NbtFormatException("Given NBT stream does not start with a TAG_Compound"); } NbtBinaryReader reader = new NbtBinaryReader(stream, BigEndian) { Selector = tagSelector }; var rootCompound = new NbtCompound(reader.ReadString()); rootCompound.ReadTag(reader); RootTag = rootCompound; }
void LoadFromStreamInternal(Stream stream, TagSelector tagSelector) { // Make sure the first byte in this file is the tag for a TAG_Compound int firstByte = stream.ReadByte(); if (firstByte < 0) { throw new EndOfStreamException(); } if (firstByte != (int)NbtTagType.Compound) { throw new NbtFormatException("Given NBT stream does not start with a TAG_Compound"); } var reader = new NbtBinaryReader(stream, BigEndian) { Selector = tagSelector }; var rootCompound = new NbtCompound(reader.ReadString()); rootCompound.ReadTag(reader); RootTag = rootCompound; }
internal abstract void ReadTag(NbtBinaryReader reader);
internal override void SkipTag(NbtBinaryReader readStream) { readStream.SkipString(); }
internal override void SkipTag(NbtBinaryReader readStream) { int length = readStream.ReadInt32(); if (length < 0) { throw new NbtFormatException("Negative length given in TAG_Int_Array"); } readStream.Skip(length*sizeof(int)); }
internal override void SkipTag(NbtBinaryReader readStream) { readStream.ReadInt64(); }
internal static NbtTag ReadUnknownTag(NbtBinaryReader readStream) { NbtTagType nextTag = readStream.ReadTagType(); NbtTag newTag; switch (nextTag) { case NbtTagType.End: throw new EndOfStreamException(); //case NbtTagType.Byte: // newTag = new NbtByte(); // break; //case NbtTagType.Short: // newTag = new NbtShort(); // break; //case NbtTagType.Int: // newTag = new NbtInt(); // break; //case NbtTagType.Long: // newTag = new NbtLong(); // break; //case NbtTagType.Float: // newTag = new NbtFloat(); // break; //case NbtTagType.Double: // newTag = new NbtDouble(); // break; //case NbtTagType.ByteArray: // newTag = new NbtByteArray(); // break; //case NbtTagType.String: // newTag = new NbtString(); // break; case NbtTagType.List: newTag = new NbtList(); break; case NbtTagType.Compound: newTag = new NbtCompound(); break; //case NbtTagType.IntArray: // newTag = new NbtIntArray(); // break; //case NbtTagType.LongArray: // newTag = new NbtLongArray(); // break; default: throw new NbtFormatException("Unsupported tag type found in NBT_Tag: " + nextTag); } newTag.Name = readStream.ReadString(); if (newTag.ReadTag(readStream)) { return(newTag); } throw new NbtFormatException("Given NBT stream does not start with a proper TAG"); }
void LoadFromStreamInternal([NotNull] Stream stream, [CanBeNull] TagSelector tagSelector) { // Make sure the first byte in this file is the tag for a TAG_Compound if (stream.ReadByte() != (int)NbtTagType.Compound) { throw new NbtFormatException("Given NBT stream does not start with a TAG_Compound"); } var reader = new NbtBinaryReader(stream, BigEndian) { Selector = tagSelector }; var rootCompound = new NbtCompound(reader.ReadString()); rootCompound.ReadTag(reader); RootTag = rootCompound; }
internal override void SkipTag(NbtBinaryReader readStream) { // read list type, and make sure it's defined ListType = readStream.ReadTagType(); int length = readStream.ReadInt32(); if (length < 0) { throw new NbtFormatException("Negative list size given."); } switch (ListType) { case NbtTagType.Byte: readStream.Skip(length); break; case NbtTagType.Short: readStream.Skip(length * sizeof(short)); break; case NbtTagType.Int: readStream.Skip(length * sizeof(int)); break; case NbtTagType.Long: readStream.Skip(length * sizeof(long)); break; case NbtTagType.Float: readStream.Skip(length * sizeof(float)); break; case NbtTagType.Double: readStream.Skip(length * sizeof(double)); break; default: for (int i = 0; i < length; i++) { switch (listType) { case NbtTagType.ByteArray: new NbtByteArray().SkipTag(readStream); break; case NbtTagType.String: readStream.SkipString(); break; case NbtTagType.List: new NbtList().SkipTag(readStream); break; case NbtTagType.Compound: new NbtCompound().SkipTag(readStream); break; case NbtTagType.IntArray: new NbtIntArray().SkipTag(readStream); break; } } break; } }
internal override bool ReadTag(NbtBinaryReader readStream) { if (readStream.Selector != null && !readStream.Selector(this)) { SkipTag(readStream); return(false); } ListType = readStream.ReadTagType(); int length = readStream.ReadInt32(); if (length < 0) { throw new NbtFormatException("Negative list size given."); } for (int i = 0; i < length; i++) { NbtTag newTag; switch (ListType) { case NbtTagType.Byte: newTag = new NbtByte(); break; case NbtTagType.Short: newTag = new NbtShort(); break; case NbtTagType.Int: newTag = new NbtInt(); break; case NbtTagType.Long: newTag = new NbtLong(); break; case NbtTagType.Float: newTag = new NbtFloat(); break; case NbtTagType.Double: newTag = new NbtDouble(); break; case NbtTagType.ByteArray: newTag = new NbtByteArray(); break; case NbtTagType.String: newTag = new NbtString(); break; case NbtTagType.List: newTag = new NbtList(); break; case NbtTagType.Compound: newTag = new NbtCompound(); break; case NbtTagType.IntArray: newTag = new NbtIntArray(); break; default: // should never happen, since ListType is checked beforehand throw new NbtFormatException("Unsupported tag type found in a list: " + ListType); } newTag.Parent = this; if (newTag.ReadTag(readStream)) { tags.Add(newTag); } } return(true); }
internal override void SkipTag(NbtBinaryReader readStream) { while (true) { NbtTagType nextTag = readStream.ReadTagType(); NbtTag newTag; switch (nextTag) { case NbtTagType.End: return; case NbtTagType.Byte: newTag = new NbtByte(); break; case NbtTagType.Short: newTag = new NbtShort(); break; case NbtTagType.Int: newTag = new NbtInt(); break; case NbtTagType.Long: newTag = new NbtLong(); break; case NbtTagType.Float: newTag = new NbtFloat(); break; case NbtTagType.Double: newTag = new NbtDouble(); break; case NbtTagType.ByteArray: newTag = new NbtByteArray(); break; case NbtTagType.String: newTag = new NbtString(); break; case NbtTagType.List: newTag = new NbtList(); break; case NbtTagType.Compound: newTag = new NbtCompound(); break; case NbtTagType.IntArray: newTag = new NbtIntArray(); break; case NbtTagType.LongArray: newTag = new NbtLongArray(); break; default: throw new NbtFormatException("Unsupported tag type found in NBT_Compound: " + nextTag); } readStream.SkipString(); newTag.SkipTag(readStream); } }
internal override bool ReadTag(NbtBinaryReader readStream) { if (Parent != null && readStream.Selector != null && !readStream.Selector(this)) { SkipTag(readStream); return(false); } while (true) { NbtTagType nextTag = readStream.ReadTagType(); NbtTag newTag; switch (nextTag) { case NbtTagType.End: return(true); case NbtTagType.Byte: newTag = new NbtByte(); break; case NbtTagType.Short: newTag = new NbtShort(); break; case NbtTagType.Int: newTag = new NbtInt(); break; case NbtTagType.Long: newTag = new NbtLong(); break; case NbtTagType.Float: newTag = new NbtFloat(); break; case NbtTagType.Double: newTag = new NbtDouble(); break; case NbtTagType.ByteArray: newTag = new NbtByteArray(); break; case NbtTagType.String: newTag = new NbtString(); break; case NbtTagType.List: newTag = new NbtList(); break; case NbtTagType.Compound: newTag = new NbtCompound(); break; case NbtTagType.IntArray: newTag = new NbtIntArray(); break; case NbtTagType.LongArray: newTag = new NbtLongArray(); break; default: throw new NbtFormatException("Unsupported tag type found in NBT_Compound: " + nextTag); } newTag.Parent = this; newTag.Name = readStream.ReadString(); if (newTag.ReadTag(readStream)) { // ReSharper disable AssignNullToNotNullAttribute // newTag.Name is never null tags.Add(newTag.Name, newTag); // ReSharper restore AssignNullToNotNullAttribute } } }
internal override void SkipTag( NbtBinaryReader readStream ) { readStream.SkipString(); }
static string GetRootNameInternal([NotNull] Stream stream, bool bigEndian) { Debug.Assert(stream != null); int firstByte = stream.ReadByte(); if (firstByte < 0) { throw new EndOfStreamException(); } else if (firstByte != (int)NbtTagType.Compound) { throw new NbtFormatException("Given NBT stream does not start with a TAG_Compound"); } var reader = new NbtBinaryReader(stream, bigEndian); return reader.ReadString(); }
internal override bool ReadTag( NbtBinaryReader readStream ) { int length = readStream.ReadInt32(); if( length < 0 ) { throw new NbtFormatException( "Negative length given in TAG_Byte_Array" ); } if( readStream.Selector != null && !readStream.Selector( this ) ) { readStream.Skip( length ); return false; } Value = readStream.ReadBytes( length ); return true; }
internal override void SkipTag(NbtBinaryReader readStream) { readStream.ReadDouble(); }
static string GetRootNameInternal([NotNull] Stream stream, bool bigEndian) { if (stream == null) throw new ArgumentNullException("stream"); if (stream.ReadByte() != (int)NbtTagType.Compound) { throw new NbtFormatException("Given NBT stream does not start with a TAG_Compound"); } var reader = new NbtBinaryReader(stream, bigEndian); return reader.ReadString(); }
internal abstract void SkipTag( NbtBinaryReader readStream );
internal abstract bool ReadTag([NotNull] NbtBinaryReader readStream);
internal override void ReadTag(NbtBinaryReader reader) { Value = reader.ReadString(); }
internal override void ReadTag(NbtBinaryReader reader) { Value = reader.ReadInt16(); }
internal override void ReadTag(NbtBinaryReader readStream) { Value = readStream.ReadByte(); }
internal abstract bool ReadTag( NbtBinaryReader readStream );
internal abstract bool ReadTag(NbtBinaryReader readStream);
internal abstract void SkipTag(NbtBinaryReader readStream);
internal override bool ReadTag(NbtBinaryReader readStream) { int length = readStream.ReadInt32(); if (length < 0) { throw new NbtFormatException("Negative length given in TAG_Int_Array"); } if (readStream.Selector != null && !readStream.Selector(this)) { readStream.Skip(length*sizeof(int)); return false; } Value = new int[length]; for (int i = 0; i < length; i++) { Value[i] = readStream.ReadInt32(); } return true; }
internal abstract void SkipTag([NotNull] NbtBinaryReader readStream);
internal override void ReadTag(NbtBinaryReader reader) { Value = reader.ReadDouble(); }