Example #1
0
 public override void WritePayload(Stream stream, INamedBinaryTag iTag)
 {
     TagInt tag = iTag as TagInt;
     byte[] data = BitConverter.GetBytes(tag.Value);
     data = data.ReverseIfLittleEndian();
     stream.Write(data, 0, 4);
 }
Example #2
0
        public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagList list = iTag as TagList;

            byte generic_b = stream.ReadSingleByte();
            ETagType generic = (ETagType)generic_b;
            list.GenericType = generic;

            //if (generic == ETagType.End)
            //{
            //	throw new Exception("TagList cannot consist End tags.");
            //}

            byte[] count_b = new byte[4];
            stream.Read(count_b, 0, 4);
            count_b = count_b.ReverseIfLittleEndian();
            int count = BitConverter.ToInt32(count_b, 0);

            TagParserBase parser = Parsers[generic];

            for (int i = 0; i < count; i++)
            {
                INamedBinaryTag tag = generic.MakeTag(null);
                parser.ParsePayload(stream, tag);
                list.Add(tag);
            }

            return list.Children;
        }
Example #3
0
        public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagCompound tag = iTag as TagCompound;

            while (true)
            {
                byte b = stream.ReadSingleByte();
                ETagType type = (ETagType)b;

                if (type == ETagType.End)
                {
                    break;
                }

                string key = ParseName(stream);
                INamedBinaryTag inner = type.MakeTag(key);

                TagParserBase parser = Parsers[type];
                parser.ParsePayload(stream, inner);

                tag.Set(key, inner);
            }

            return tag.Values;
        }
Example #4
0
        public override void WritePayload(Stream stream, INamedBinaryTag itag)
        {
            TagByte tag = itag as TagByte;
            byte datum = unchecked((byte)tag.Value);

            stream.WriteByte(datum);
        }
Example #5
0
        // probably shouldn't override this.
        public virtual INamedBinaryTag Parse(Stream stream)
        {
            byte     b    = stream.ReadSingleByte();
            ETagType type = (ETagType)b;

            string          name   = ParseName(stream);
            INamedBinaryTag result = type.MakeTag(name);

            ParsePayload(stream, result);

            return(result);
        }
Example #6
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagString tag = iTag as TagString;
            byte[] data = Encoding.UTF8.GetBytes(tag.Text);

            short len = (short)data.Length;
            byte[] count_b = BitConverter.GetBytes(len);
            count_b = count_b.ReverseIfLittleEndian();
            stream.Write(count_b, 0, 2);

            stream.Write(data, 0, len);
        }
Example #7
0
        public override object ParsePayload(Stream stream, INamedBinaryTag tagBase)
        {
            byte datum = stream.ReadSingleByte();
            sbyte val = (sbyte)datum;
            TagByte tag = tagBase as TagByte;
            if (tag == null)
            {
                throw new InvalidCastException("Wrong NBT type! Expected TagByte, found " + tagBase.GetType().Name);
            }

            tag.Value = val;
            return val;
        }
Example #8
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagByteArray tag = iTag as TagByteArray;
            byte[] count_b = BitConverter.GetBytes(tag.Count);
            count_b = count_b.ReverseIfLittleEndian();
            stream.Write(count_b, 0, 4);

            foreach (sbyte sb in tag)
            {
                byte b = unchecked((byte)sb);
                stream.WriteByte(b);
            }
        }
Example #9
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagString tag = iTag as TagString;

            byte[] data = Encoding.UTF8.GetBytes(tag.Text);

            short len = (short)data.Length;

            byte[] count_b = BitConverter.GetBytes(len);
            count_b = count_b.ReverseIfLittleEndian();
            stream.Write(count_b, 0, 2);

            stream.Write(data, 0, len);
        }
Example #10
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagIntArray tag = iTag as TagIntArray;
            byte[] count_bin = BitConverter.GetBytes(tag.Count);
            count_bin = count_bin.ReverseIfLittleEndian();
            stream.Write(count_bin, 0, 4);

            foreach (int n in tag)
            {
                byte[] num_bin = BitConverter.GetBytes(n);
                num_bin = num_bin.ReverseIfLittleEndian();
                stream.Write(num_bin, 0, 4);
            }
        }
Example #11
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagByteArray tag = iTag as TagByteArray;

            byte[] count_b = BitConverter.GetBytes(tag.Count);
            count_b = count_b.ReverseIfLittleEndian();
            stream.Write(count_b, 0, 4);

            foreach (sbyte sb in tag)
            {
                byte b = unchecked ((byte)sb);
                stream.WriteByte(b);
            }
        }
Example #12
0
        public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagString tag = iTag as TagString;
            byte[] count_b = new byte[2];
            stream.Read(count_b, 0, 2);
            count_b = count_b.ReverseIfLittleEndian();
            short len = BitConverter.ToInt16(count_b, 0);

            byte[] data = new byte[len];
            stream.Read(data, 0, len);
            tag.Text = Encoding.UTF8.GetString(data);

            return tag.Text;
        }
Example #13
0
        public override object ParsePayload(Stream stream, INamedBinaryTag tagBase)
        {
            byte    datum = stream.ReadSingleByte();
            sbyte   val   = (sbyte)datum;
            TagByte tag   = tagBase as TagByte;

            if (tag == null)
            {
                throw new InvalidCastException("Wrong NBT type! Expected TagByte, found " + tagBase.GetType().Name);
            }

            tag.Value = val;
            return(val);
        }
Example #14
0
        public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagString tag = iTag as TagString;

            byte[] count_b = new byte[2];
            stream.Read(count_b, 0, 2);
            count_b = count_b.ReverseIfLittleEndian();
            short len = BitConverter.ToInt16(count_b, 0);

            byte[] data = new byte[len];
            stream.Read(data, 0, len);
            tag.Text = Encoding.UTF8.GetString(data);

            return(tag.Text);
        }
Example #15
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagIntArray tag = iTag as TagIntArray;

            byte[] count_bin = BitConverter.GetBytes(tag.Count);
            count_bin = count_bin.ReverseIfLittleEndian();
            stream.Write(count_bin, 0, 4);

            foreach (int n in tag)
            {
                byte[] num_bin = BitConverter.GetBytes(n);
                num_bin = num_bin.ReverseIfLittleEndian();
                stream.Write(num_bin, 0, 4);
            }
        }
Example #16
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagList list = iTag as TagList;
            byte generic = (byte)list.GenericType;
            stream.WriteByte(generic);

            byte[] data = BitConverter.GetBytes(list.Count);
            data = data.ReverseIfLittleEndian();
            stream.Write(data, 0, 4);

            foreach (INamedBinaryTag tag in list)
            {
                TagParserBase parser = Parsers[tag.TagType];
                parser.WritePayload(stream, tag);
            }
        }
Example #17
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagList list    = iTag as TagList;
            byte    generic = (byte)list.GenericType;

            stream.WriteByte(generic);

            byte[] data = BitConverter.GetBytes(list.Count);
            data = data.ReverseIfLittleEndian();
            stream.Write(data, 0, 4);

            foreach (INamedBinaryTag tag in list)
            {
                TagParserBase parser = Parsers[tag.TagType];
                parser.WritePayload(stream, tag);
            }
        }
Example #18
0
        public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagByteArray tag = iTag as TagByteArray;
            byte[] count_b = new byte[4];
            stream.Read(count_b, 0, 4);
            count_b = count_b.ReverseIfLittleEndian();
            int count = BitConverter.ToInt32(count_b, 0);

            for (int i = 0; i < count; i++)
            {
                byte b = stream.ReadSingleByte();
                sbyte sb = unchecked((sbyte)b);
                tag.Add(sb);
            }

            return tag.Values;
        }
Example #19
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagCompound tag = iTag as TagCompound;

            foreach (KeyValuePair <string, INamedBinaryTag> kvp in tag.Values)
            {
                if (kvp.Key != kvp.Value.Name)
                {
                    throw new InvalidDataException(string.Format(
                                                       "Dictionary name ({0}) does not match tag name ({1})!", kvp.Key, kvp.Value.Name));
                }

                TagParserBase parser = Parsers[kvp.Value.TagType];
                parser.WriteFullTag(stream, kvp.Value);
            }

            WriteTag(stream, new TagEnd());
        }
Example #20
0
        public override void WritePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagCompound tag = iTag as TagCompound;

            foreach (KeyValuePair<string, INamedBinaryTag> kvp in tag.Values)
            {
                if (kvp.Key != kvp.Value.Name)
                {
                    throw new InvalidDataException(string.Format(
                        "Dictionary name ({0}) does not match tag name ({1})!", kvp.Key, kvp.Value.Name));
                }

                TagParserBase parser = Parsers[kvp.Value.TagType];
                parser.WriteFullTag(stream, kvp.Value);
            }

            WriteTag(stream, new TagEnd());
        }
Example #21
0
        public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagByteArray tag = iTag as TagByteArray;

            byte[] count_b = new byte[4];
            stream.Read(count_b, 0, 4);
            count_b = count_b.ReverseIfLittleEndian();
            int count = BitConverter.ToInt32(count_b, 0);

            for (int i = 0; i < count; i++)
            {
                byte  b  = stream.ReadSingleByte();
                sbyte sb = unchecked ((sbyte)b);
                tag.Add(sb);
            }

            return(tag.Values);
        }
Example #22
0
        public override object ParsePayload(Stream stream, INamedBinaryTag tagBase)
        {
            byte[] data = new byte[4];
            if (stream.Read(data, 0, 4) < 4)
            {
                throw new EndOfStreamException("End of stream reached inside of tag. Put those bytes back!");
            }

            data = data.ReverseIfLittleEndian();
            int val = BitConverter.ToInt32(data, 0);

            TagInt tag = tagBase as TagInt;
            if (tag == null)
            {
                throw new InvalidCastException("Wrong NBT type! Expected TagInt, found " + tagBase.GetType().Name);
            }
            tag.Value = val;
            return val;
        }
Example #23
0
        public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagIntArray tag = iTag as TagIntArray;
            byte[] count_bin = new byte[4];
            stream.Read(count_bin, 0, 4);
            count_bin = count_bin.ReverseIfLittleEndian();
            int num_count = BitConverter.ToInt32(count_bin, 0);
            int byte_count = num_count * 4;

            for (int i = 0; i < num_count; i++)
            {
                byte[] num_bin = new byte[4];
                stream.Read(num_bin, 0, 4);
                num_bin = num_bin.ReverseIfLittleEndian();
                int num = BitConverter.ToInt32(num_bin, 0);
                tag.Add(num);
            }

            return tag.Values;
        }
Example #24
0
        public override object ParsePayload(Stream stream, INamedBinaryTag tagBase)
        {
            byte[] data = new byte[2];
            if (stream.Read(data, 0, 2) < 2)
            {
                throw new EndOfStreamException("End of stream reached inside of tag. Put those bytes back!");
            }

            data = data.ReverseIfLittleEndian();
            short val = BitConverter.ToInt16(data, 0);

            TagShort tag = tagBase as TagShort;

            if (tag == null)
            {
                throw new InvalidCastException("Wrong NBT type! Expected TagShort, found " + tagBase.GetType().Name);
            }
            tag.Value = val;
            return(val);
        }
Example #25
0
        public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
        {
            TagIntArray tag = iTag as TagIntArray;

            byte[] count_bin = new byte[4];
            stream.Read(count_bin, 0, 4);
            count_bin = count_bin.ReverseIfLittleEndian();
            int num_count  = BitConverter.ToInt32(count_bin, 0);
            int byte_count = num_count * 4;

            for (int i = 0; i < num_count; i++)
            {
                byte[] num_bin = new byte[4];
                stream.Read(num_bin, 0, 4);
                num_bin = num_bin.ReverseIfLittleEndian();
                int num = BitConverter.ToInt32(num_bin, 0);
                tag.Add(num);
            }

            return(tag.Values);
        }
Example #26
0
        public virtual void WriteHeader(Stream stream, INamedBinaryTag tag)
        {
            stream.WriteByte((byte)tag.TagType);

            byte[] namebytes = new byte[0];
            short  namelen   = 0;

            if (tag.TagType != ETagType.End)
            {
                namebytes = Encoding.UTF8.GetBytes(tag.Name);
                namelen   = (short)namebytes.Length;
            }
            byte[] namelenbytes = BitConverter.GetBytes(namelen);
            namelenbytes = namelenbytes.ReverseIfLittleEndian();

            stream.Write(namelenbytes, 0, 2);

            if (tag.TagType != ETagType.End)
            {
                stream.Write(namebytes, 0, namelen);
            }
        }
Example #27
0
 public abstract void WritePayload(Stream stream, INamedBinaryTag iTag);
Example #28
0
 public override void WritePayload(Stream stream, INamedBinaryTag iTag)
 {
 }
Example #29
0
 // returned object is payload, which should be attached to tag.
 public abstract object ParsePayload(Stream stream, INamedBinaryTag iTag);
Example #30
0
 public virtual void WriteFullTag(Stream stream, INamedBinaryTag tag)
 {
     WriteHeader(stream, tag);
     WritePayload(stream, tag);
 }
Example #31
0
 // returned object is payload, which should be attached to tag.
 public abstract object ParsePayload(Stream stream, INamedBinaryTag iTag);
Example #32
0
 public static void SerializeTag(JsonWriter writer, INamedBinaryTag tag)
 {
     switch (tag.TagType)
     {
     case ETagType.Byte:
         writer.WritePropertyName(tag.Name, false);
         writer.WriteValue((tag as TagByte).Value);
         break;
     case ETagType.Short:
         writer.WritePropertyName(tag.Name, false);
         writer.WriteValue((tag as TagShort).Value);
         break;
     case ETagType.Int:
         writer.WritePropertyName(tag.Name, false);
         writer.WriteValue((tag as TagInt).Value);
         break;
     case ETagType.Long:
         writer.WritePropertyName(tag.Name, false);
         writer.WriteValue((tag as TagLong).Value);
         break;
     case ETagType.Float:
         writer.WritePropertyName(tag.Name, false);
         writer.WriteValue((tag as TagFloat).Value);
         break;
     case ETagType.Double:
         writer.WritePropertyName(tag.Name, false);
         writer.WriteValue((tag as TagDouble).Value);
         break;
     case ETagType.Byte_Array:
         break;
     case ETagType.String:
         writer.WritePropertyName(tag.Name, false);
         writer.WriteValue((tag as TagString).Text);
         break;
     case ETagType.List:
         Serialize(writer, tag as TagList);
         break;
     case ETagType.Compound:
         Serialize(writer, tag as TagCompound);
         break;
     case ETagType.Int_Array:
         break;
     }
 }
Example #33
0
 public override void WritePayload(Stream stream, INamedBinaryTag iTag)
 {
 }
Example #34
0
 public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
 {
     return null;
 }
Example #35
0
 public static void WriteToStream(Stream stream, INamedBinaryTag nbt)
 {
     TagParserBase.WriteTag(stream, nbt);
 }
Example #36
0
 public abstract void WritePayload(Stream stream, INamedBinaryTag iTag);
Example #37
0
 public static void WriteTag(Stream stream, INamedBinaryTag tag)
 {
     Parsers[tag.TagType].WriteFullTag(stream, tag);
 }
Example #38
0
 public static void WriteTag(Stream stream, INamedBinaryTag tag)
 {
     Parsers[tag.TagType].WriteFullTag(stream, tag);
 }
Example #39
0
        public override void WriteHeader(Stream stream, INamedBinaryTag tag)
        {
            stream.WriteByte((byte)tag.TagType);

            // no name length or name
        }
Example #40
0
 public override object ParsePayload(Stream stream, INamedBinaryTag iTag)
 {
     return(null);
 }
Example #41
0
 public virtual void WriteFullTag(Stream stream, INamedBinaryTag tag)
 {
     WriteHeader(stream, tag);
     WritePayload(stream, tag);
 }
Example #42
0
        public override void WriteHeader(Stream stream, INamedBinaryTag tag)
        {
            stream.WriteByte((byte)tag.TagType);

            // no name length or name
        }
Example #43
0
 private void HandleComplexEntities(int x, short y, int z, INamedBinaryTag nbt)
 {
     if (OnComplexEntity != null)
         OnComplexEntity(this, new ComplexEntitiesEventArgs(x, y, z, nbt));
 }
Example #44
0
        public virtual void WriteHeader(Stream stream, INamedBinaryTag tag)
        {
            stream.WriteByte((byte)tag.TagType);

            byte[] namebytes = new byte[0];
            short namelen = 0;
            if (tag.TagType != ETagType.End)
            {
                namebytes = Encoding.UTF8.GetBytes(tag.Name);
                namelen = (short)namebytes.Length;
            }
            byte[] namelenbytes = BitConverter.GetBytes(namelen);
            namelenbytes = namelenbytes.ReverseIfLittleEndian();

            stream.Write(namelenbytes, 0, 2);

            if (tag.TagType != ETagType.End)
            {
                stream.Write(namebytes, 0, namelen);
            }
        }