示例#1
0
文件: Tag.cs 项目: mblaine/NbtViewer
 public TAG_List(TAG[] payload, Byte tagId)
     : this()
 {
     TagId = new TAG_Byte(tagId);
     Length = new TAG_Int(payload.Length);
     Payload = payload;
 }
示例#2
0
文件: Tag.cs 项目: mblaine/NbtViewer
 public TAG_List(TAG[] payload, Byte tagId, String name)
     : this(payload, tagId)
 {
     if (name != null && name.Length > 0)
     {
         Name = new TAG_String(name);
         IsNamed = true;
     }
 }
示例#3
0
文件: Tag.cs 项目: mblaine/NbtViewer
 public TAG_Compound()
 {
     IsRoot = false;
     Parent = null;
     Payload = null;
     Type = TYPE.TAG_Compound;
 }
示例#4
0
文件: Tag.cs 项目: mblaine/NbtViewer
 internal TAG_Compound(Stream data, TAG parent)
     : this()
 {
     Parent = parent;
     Read(data);
 }
示例#5
0
 public override bool TryGetValue(String key, out TAG value)
 {
     if (IsRoot && (!IsNamed || Name.Length.Payload == 0) && Payload.Count == 1)
     {
         var temp = Payload.GetEnumerator();
         temp.MoveNext();
         if (temp.Current.Value is TAG_Compound)
         {
             return temp.Current.Value.TryGetValue(key, out value);
         }
     }
     return Payload.TryGetValue(key, out value);
 }
示例#6
0
 public virtual bool TryGetValue(String key, out TAG value)
 {
     throw new NotImplementedException("Indexing only possible with TAG_Compound");
 }
示例#7
0
 internal TAG_Compound(Stream data, TAG parent)
     : this()
 {
     Parent = parent;
     Read(data);
 }
示例#8
0
 public virtual bool TryGetValue(String key, out TAG value)
 {
     throw new NotImplementedException("Indexing only possible with TAG_Compound");
 }
示例#9
0
        public override void Read(Stream data)
        {
            Payload = new Dictionary <String, TAG>();
            while (true)
            {
                if (data.Position >= data.Length)
                {
                    break;
                }
                TAG_Byte tagType = new TAG_Byte(data);
                if (tagType.Payload == (SByte)TYPE.TAG_End)
                {
                    break;
                }
                TAG_String name    = new TAG_String(data);
                TAG        nextTag = null;
                switch ((TYPE)tagType.Payload)
                {
                case TYPE.TAG_Byte:
                    nextTag = (TAG) new TAG_Byte(data);
                    break;

                case TYPE.TAG_Short:
                    nextTag = (TAG) new TAG_Short(data);
                    break;

                case TYPE.TAG_Int:
                    nextTag = (TAG) new TAG_Int(data);
                    break;

                case TYPE.TAG_Long:
                    nextTag = (TAG) new TAG_Long(data);
                    break;

                case TYPE.TAG_Float:
                    nextTag = (TAG) new TAG_Float(data);
                    break;

                case TYPE.TAG_Double:
                    nextTag = (TAG) new TAG_Double(data);
                    break;

                case TYPE.TAG_Byte_Array:
                    nextTag = (TAG) new TAG_Byte_Array(data);
                    break;

                case TYPE.TAG_String:
                    nextTag = (TAG) new TAG_String(data);
                    break;

                case TYPE.TAG_List:
                    nextTag = (TAG) new TAG_List(data);
                    break;

                case TYPE.TAG_Compound:
                    nextTag = (TAG) new TAG_Compound(data, this);
                    break;

                case TYPE.TAG_Int_Array:
                    nextTag = (TAG) new TAG_Int_Array(data);
                    break;

                default:
                    throw new Exception("Unrecognized tag type.");
                }
                nextTag.Name    = name;
                nextTag.IsNamed = true;
                Payload.Add(name.PayloadString, nextTag);
            }
        }