Ejemplo n.º 1
0
        internal override void ReadTag(Stream readStream, bool readName)
        {
            // First read the name of this tag
            Name = "";
            if (readName)
            {
                var name = new NbtString();
                name.ReadTag(readStream, false);

                Name = name.Value;
            }

            var tagId = new NbtByte();

            tagId.ReadTag(readStream, false);
            Type     = (NbtTagType)tagId.Value;
            ListType = Type;

            var length = new NbtInt();

            length.ReadTag(readStream, false);

            Tags.Clear();
            for (int idx = 0; idx < length.Value; idx++)
            {
                switch ((NbtTagType)tagId.Value)
                {
                case NbtTagType.TAG_Byte:
                    var nextByte = new NbtByte();
                    nextByte.ReadTag(readStream, false);
                    Tags.Add(nextByte);
                    break;

                case NbtTagType.TAG_Short:
                    var nextShort = new NbtShort();
                    nextShort.ReadTag(readStream, false);
                    Tags.Add(nextShort);
                    break;

                case NbtTagType.TAG_Int:
                    var nextInt = new NbtInt();
                    nextInt.ReadTag(readStream, false);
                    Tags.Add(nextInt);
                    break;

                case NbtTagType.TAG_Long:
                    var nextLong = new NbtLong();
                    nextLong.ReadTag(readStream, false);
                    Tags.Add(nextLong);
                    break;

                case NbtTagType.TAG_Float:
                    var nextFloat = new NbtFloat();
                    nextFloat.ReadTag(readStream, false);
                    Tags.Add(nextFloat);
                    break;

                case NbtTagType.TAG_Double:
                    var nextDouble = new NbtDouble();
                    nextDouble.ReadTag(readStream, false);
                    Tags.Add(nextDouble);
                    break;

                case NbtTagType.TAG_Byte_Array:
                    var nextByteArray = new NbtByteArray();
                    nextByteArray.ReadTag(readStream, false);
                    Tags.Add(nextByteArray);
                    break;

                case NbtTagType.TAG_String:
                    var nextString = new NbtString();
                    nextString.ReadTag(readStream, false);
                    Tags.Add(nextString);
                    break;

                case NbtTagType.TAG_List:
                    var nextList = new NbtList();
                    nextList.ReadTag(readStream, false);
                    Tags.Add(nextList);
                    break;

                case NbtTagType.TAG_Compound:
                    var nextCompound = new NbtCompound();
                    nextCompound.ReadTag(readStream, false);
                    Tags.Add(nextCompound);
                    break;
                }
            }
        }