Beispiel #1
0
        /// <summary>
        /// Reads from the given tag list and fills the slots in the inventory with the correct items.
        /// </summary>
        public virtual void ReadFromNBT(NBTTagList par1NBTTagList)
        {
            MainInventory  = new ItemStack[36];
            ArmorInventory = new ItemStack[4];

            for (int i = 0; i < par1NBTTagList.TagCount(); i++)
            {
                NBTTagCompound nbttagcompound = (NBTTagCompound)par1NBTTagList.TagAt(i);
                int            j         = nbttagcompound.GetByte("Slot") & 0xff;
                ItemStack      itemstack = ItemStack.LoadItemStackFromNBT(nbttagcompound);

                if (itemstack == null)
                {
                    continue;
                }

                if (j >= 0 && j < MainInventory.Length)
                {
                    MainInventory[j] = itemstack;
                }

                if (j >= 100 && j < ArmorInventory.Length + 100)
                {
                    ArmorInventory[j - 100] = itemstack;
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Writes the inventory out as a list of compound tags. This is where the slot indices are used (+100 for armor, +80
        /// for crafting).
        /// </summary>
        public virtual NBTTagList WriteToNBT(NBTTagList par1NBTTagList)
        {
            for (int i = 0; i < MainInventory.Length; i++)
            {
                if (MainInventory[i] != null)
                {
                    NBTTagCompound nbttagcompound = new NBTTagCompound();
                    nbttagcompound.SetByte("Slot", (byte)i);
                    MainInventory[i].WriteToNBT(nbttagcompound);
                    par1NBTTagList.AppendTag(nbttagcompound);
                }
            }

            for (int j = 0; j < ArmorInventory.Length; j++)
            {
                if (ArmorInventory[j] != null)
                {
                    NBTTagCompound nbttagcompound1 = new NBTTagCompound();
                    nbttagcompound1.SetByte("Slot", (byte)(j + 100));
                    ArmorInventory[j].WriteToNBT(nbttagcompound1);
                    par1NBTTagList.AppendTag(nbttagcompound1);
                }
            }

            return(par1NBTTagList);
        }
Beispiel #3
0
        public NBTTagList writeToNBT(NBTTagList nbttaglist)
        {
            for (int i = 0; i < mainInventory.Length; i++)
            {
                if (mainInventory[i] != null)
                {
                    var nbttagcompound = new NBTTagCompound();
                    nbttagcompound.setByte("Slot", (byte)i);
                    mainInventory[i].writeToNBT(nbttagcompound);
                    nbttaglist.setTag(nbttagcompound);
                }
            }

            for (int j = 0; j < armorInventory.Length; j++)
            {
                if (armorInventory[j] != null)
                {
                    var nbttagcompound1 = new NBTTagCompound();
                    nbttagcompound1.setByte("Slot", (byte)(j + 100));
                    armorInventory[j].writeToNBT(nbttagcompound1);
                    nbttaglist.setTag(nbttagcompound1);
                }
            }

            return(nbttaglist);
        }
Beispiel #4
0
        /// <summary>Writes the nbt's content to the <see cref="Stream"/></summary>
        /// <param name="tag">The tag to write to the <see cref="Stream"/></param>
        /// <param name="Context">The context to write to</param>
        public void WriteContent(NBTTagList tag, SerializationContext Context)
        {
            NBTTagType SubTagType = tag.SubType;
            ITagWriter Writer     = NBTWriter.GetWriter(SubTagType);

            if (Writer == null)
            {
                throw new Exception($"Cannot find writer for {SubTagType}");
            }

            Int32 Count = tag.Count;

            if (SubTagType == NBTTagType.List)
            {
                /*SubTag = new NBTTagList(SubTagType);
                 * SubTag.SetInformation(NBTTagInformation.ListSubtype, (NBTTagType)Context.Stream.ReadByte());
                 * SubTag.SetInformation(NBTTagInformation.ListSize, Context.ReadInt32());
                 * Reader.ReadContent(SubTag, Context);
                 * tag[I] = SubTag;*/
                Context.Stream.WriteByte((Byte)tag.GetInformation(NBTTagInformation.ListSubtype));
                Context.WriteInt32((Int32)tag.GetInformation(NBTTagInformation.ListSize));
            }
            else
            {
                for (Int32 I = 0; I < Count; I++)
                {
                    Writer.WriteContent(tag[I], Context);
                }
            }
        }
Beispiel #5
0
        /// <summary>Adds a new sub <see cref="NBTTagList"/> to the collection</summary>
        /// <param name="Name">The name of the tag to add to the collection</param>
        /// <param name="SubType">The subtype of the tags inside the list</param>
        /// <param name="Capacity">The capacity to start the list with</param>
        /// <returns>Adds a new sub <see cref="NBTTagList"/> to the collection</returns>
        public ListBuilder AddSubList(String Name, NBTTagType SubType, Int32 Capacity = 10)
        {
            var Tag     = new NBTTagList(Name, SubType, Capacity);
            var Builder = new ListBuilder(Tag);

            this._Tag.Add(Tag);
            return(Builder);
        }
Beispiel #6
0
        /// <summary>Writes the nbt's header to the <see cref="Stream"/></summary>
        /// <param name="tag">The tag to write to the <see cref="Stream"/></param>
        /// <param name="Context">The context to write to</param>
        public void WriteHeader(NBTTagList tag, SerializationContext Context)
        {
            Context.Stream.WriteByte((Byte)tag.Type);

            NBTWriter.WriteString(Context, tag.Name);

            Context.Stream.WriteByte((Byte)tag.SubType);
            Context.WriteInt32((Int32)tag.Count);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="Tags"></param>
        /// <returns></returns>
        public static NBTTagList ToNBT(this ITag[] Tags)
        {
            Int32 Count = Tags.Length;
            var   Out   = new NBTTagList(NBTTagType.Compound, Count);

            for (Int32 I = 0; I < Count; I++)
            {
                Out.Add(Tags[I]);
            }

            return(Out);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="Tags"></param>
        /// <returns></returns>
        public static NBTTagList ToNBT <T>(this List <T> Tags, String Name) where T : ITag
        {
            Int32 Count = Tags.Count;
            var   Out   = new NBTTagList(Name, NBTTagType.Compound, Count);

            for (Int32 I = 0; I < Count; I++)
            {
                Out.Add(Tags[I]);
            }

            return(Out);
        }
Beispiel #9
0
        public override void readFromNBT(NBTTagCompound nbttagcompound)
        {
            base.readFromNBT(nbttagcompound);
            NBTTagList nbttaglist = nbttagcompound.getTagList("Items");

            chestContents = new ItemStack[getSizeInventory()];
            for (int i = 0; i < nbttaglist.tagCount(); i++)
            {
                var nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i);
                int j = nbttagcompound1.getByte("Slot") & 0xff;
                if (j >= 0 && j < chestContents.Length)
                {
                    chestContents[j] = new ItemStack(nbttagcompound1);
                }
            }
        }
        /// <summary>
        /// Reads a tile entity from NBT.
        /// </summary>
        public override void ReadFromNBT(NBTTagCompound par1NBTTagCompound)
        {
            base.ReadFromNBT(par1NBTTagCompound);
            NBTTagList nbttaglist = par1NBTTagCompound.GetTagList("Items");

            ChestContents = new ItemStack[GetSizeInventory()];

            for (int i = 0; i < nbttaglist.TagCount(); i++)
            {
                NBTTagCompound nbttagcompound = (NBTTagCompound)nbttaglist.TagAt(i);
                int            j = nbttagcompound.GetByte("Slot") & 0xff;

                if (j >= 0 && j < ChestContents.Length)
                {
                    ChestContents[j] = ItemStack.LoadItemStackFromNBT(nbttagcompound);
                }
            }
        }
Beispiel #11
0
        public override void writeToNBT(NBTTagCompound nbttagcompound)
        {
            base.writeToNBT(nbttagcompound);
            var nbttaglist = new NBTTagList();

            for (int i = 0; i < chestContents.Length; i++)
            {
                if (chestContents[i] != null)
                {
                    var nbttagcompound1 = new NBTTagCompound();
                    nbttagcompound1.setByte("Slot", (byte)i);
                    chestContents[i].writeToNBT(nbttagcompound1);
                    nbttaglist.setTag(nbttagcompound1);
                }
            }

            nbttagcompound.setTag("Items", nbttaglist);
        }
        /// <summary>
        /// Writes a tile entity to NBT.
        /// </summary>
        public override void WriteToNBT(NBTTagCompound par1NBTTagCompound)
        {
            base.WriteToNBT(par1NBTTagCompound);
            NBTTagList nbttaglist = new NBTTagList();

            for (int i = 0; i < ChestContents.Length; i++)
            {
                if (ChestContents[i] != null)
                {
                    NBTTagCompound nbttagcompound = new NBTTagCompound();
                    nbttagcompound.SetByte("Slot", (byte)i);
                    ChestContents[i].WriteToNBT(nbttagcompound);
                    nbttaglist.AppendTag(nbttagcompound);
                }
            }

            par1NBTTagCompound.SetTag("Items", nbttaglist);
        }
        /// <summary>
        /// Writes a tile entity to NBT.
        /// </summary>
        public override void WriteToNBT(NBTTagCompound par1NBTTagCompound)
        {
            base.WriteToNBT(par1NBTTagCompound);
            par1NBTTagCompound.SetShort("BurnTime", (short)FurnaceBurnTime);
            par1NBTTagCompound.SetShort("CookTime", (short)FurnaceCookTime);
            NBTTagList nbttaglist = new NBTTagList();

            for (int i = 0; i < FurnaceItemStacks.Length; i++)
            {
                if (FurnaceItemStacks[i] != null)
                {
                    NBTTagCompound nbttagcompound = new NBTTagCompound();
                    nbttagcompound.SetByte("Slot", (byte)i);
                    FurnaceItemStacks[i].WriteToNBT(nbttagcompound);
                    nbttaglist.AppendTag(nbttagcompound);
                }
            }

            par1NBTTagCompound.SetTag("Items", nbttaglist);
        }
Beispiel #14
0
        public override void readFromNBT(NBTTagCompound nbttagcompound)
        {
            base.readFromNBT(nbttagcompound);
            NBTTagList nbttaglist = nbttagcompound.getTagList("Items");

            furnaceItemStacks = new ItemStack[getSizeInventory()];
            for (int i = 0; i < nbttaglist.tagCount(); i++)
            {
                var  nbttagcompound1 = (NBTTagCompound)nbttaglist.tagAt(i);
                byte byte0           = nbttagcompound1.getByte("Slot");
                if (byte0 >= 0 && byte0 < furnaceItemStacks.Length)
                {
                    furnaceItemStacks[byte0] = new ItemStack(nbttagcompound1);
                }
            }

            furnaceBurnTime     = nbttagcompound.getShort("BurnTime");
            furnaceCookTime     = nbttagcompound.getShort("CookTime");
            currentItemBurnTime = getItemBurnTime(furnaceItemStacks[1]);
        }
Beispiel #15
0
        public override void writeToNBT(NBTTagCompound nbttagcompound)
        {
            base.writeToNBT(nbttagcompound);
            nbttagcompound.setShort("BurnTime", (short)furnaceBurnTime);
            nbttagcompound.setShort("CookTime", (short)furnaceCookTime);
            var nbttaglist = new NBTTagList();

            for (int i = 0; i < furnaceItemStacks.Length; i++)
            {
                if (furnaceItemStacks[i] != null)
                {
                    var nbttagcompound1 = new NBTTagCompound();
                    nbttagcompound1.setByte("Slot", (byte)i);
                    furnaceItemStacks[i].writeToNBT(nbttagcompound1);
                    nbttaglist.setTag(nbttagcompound1);
                }
            }

            nbttagcompound.setTag("Items", nbttaglist);
        }
        /// <summary>Reads the nbt's content from the <see cref="Stream"/></summary>
        /// <param name="tag">The tag to read from the <see cref="Stream"/></param>
        /// <param name="Context">The context to read from</param>
        public void ReadContent(ITag tag, SerializationContext Context)
        {
            ITag   SubTag;
            Object O = tag.GetInformation(NBTTagInformation.ListSubtype);

            if (O == null)
            {
                throw new Exception("List returned no subtype");
            }

            var        SubTagType = (NBTTagType)O;
            ITagReader Reader     = NBTReader.GetReader(SubTagType);

            if (Reader == null)
            {
                throw new Exception($"No reader for type: {SubTagType}");
            }

            if (SubTagType == NBTTagType.List)
            {
                for (Int32 I = 0; I < tag.Count; I++)
                {
                    SubTag = new NBTTagList(SubTagType);
                    SubTag.SetInformation(NBTTagInformation.ListSubtype, (NBTTagType)Context.Stream.ReadByte());
                    SubTag.SetInformation(NBTTagInformation.ListSize, Context.ReadInt32());
                    Reader.ReadContent(SubTag, Context);
                    tag[I] = SubTag;
                }
            }
            else
            {
                for (Int32 I = 0; I < tag.Count; I++)
                {
                    SubTag = NBTTagFactory.Create(SubTagType);
                    tag[I] = SubTag;
                    Reader.ReadContent(SubTag, Context);
                }
            }
        }
        /// <summary>
        /// Reads a tile entity from NBT.
        /// </summary>
        public override void ReadFromNBT(NBTTagCompound par1NBTTagCompound)
        {
            base.ReadFromNBT(par1NBTTagCompound);
            NBTTagList nbttaglist = par1NBTTagCompound.GetTagList("Items");

            FurnaceItemStacks = new ItemStack[GetSizeInventory()];

            for (int i = 0; i < nbttaglist.TagCount(); i++)
            {
                NBTTagCompound nbttagcompound = (NBTTagCompound)nbttaglist.TagAt(i);
                byte           byte0          = nbttagcompound.GetByte("Slot");

                if (byte0 >= 0 && byte0 < FurnaceItemStacks.Length)
                {
                    FurnaceItemStacks[byte0] = ItemStack.LoadItemStackFromNBT(nbttagcompound);
                }
            }

            FurnaceBurnTime     = par1NBTTagCompound.GetShort("BurnTime");
            FurnaceCookTime     = par1NBTTagCompound.GetShort("CookTime");
            CurrentItemBurnTime = GetItemBurnTime(FurnaceItemStacks[1]);
        }
Beispiel #18
0
 public void readFromNBT(NBTTagList nbttaglist)
 {
     mainInventory  = new ItemStack[36];
     armorInventory = new ItemStack[4];
     for (int i = 0; i < nbttaglist.tagCount(); i++)
     {
         var nbttagcompound = (NBTTagCompound)nbttaglist.tagAt(i);
         int j         = nbttagcompound.getByte("Slot") & 0xff;
         var itemstack = new ItemStack(nbttagcompound);
         if (itemstack.getItem() == null)
         {
             continue;
         }
         if (j >= 0 && j < mainInventory.Length)
         {
             mainInventory[j] = itemstack;
         }
         if (j >= 100 && j < armorInventory.Length + 100)
         {
             armorInventory[j - 100] = itemstack;
         }
     }
 }
Beispiel #19
0
        public static void ConvertToAnvilFormat(AnvilConverterData par0AnvilConverterData, NBTTagCompound par1NBTTagCompound, WorldChunkManager par2WorldChunkManager)
        {
            par1NBTTagCompound.SetInteger("xPos", par0AnvilConverterData.x);
            par1NBTTagCompound.SetInteger("zPos", par0AnvilConverterData.z);
            par1NBTTagCompound.SetLong("LastUpdate", par0AnvilConverterData.LastUpdated);
            int[] ai = new int[par0AnvilConverterData.Heightmap.Length];

            for (int i = 0; i < par0AnvilConverterData.Heightmap.Length; i++)
            {
                ai[i] = par0AnvilConverterData.Heightmap[i];
            }

            par1NBTTagCompound.Func_48183_a("HeightMap", ai);
            par1NBTTagCompound.Setbool("TerrainPopulated", par0AnvilConverterData.TerrainPopulated);
            NBTTagList nbttaglist = new NBTTagList("Sections");

            for (int j = 0; j < 8; j++)
            {
                bool flag = true;

                for (int l = 0; l < 16 && flag; l++)
                {
label0:

                    for (int j1 = 0; j1 < 16 && flag; j1++)
                    {
                        int k1 = 0;

                        do
                        {
                            if (k1 >= 16)
                            {
                                goto label0;
                            }

                            int  l1    = l << 11 | k1 << 7 | j1 + (j << 4);
                            byte byte0 = par0AnvilConverterData.Blocks[l1];

                            if (byte0 != 0)
                            {
                                flag = false;
                                goto label0;
                            }

                            k1++;
                        }while (true);
                    }
                }

                if (flag)
                {
                    continue;
                }

                byte[]      abyte1       = new byte[4096];
                NibbleArray nibblearray  = new NibbleArray(abyte1.Length, 4);
                NibbleArray nibblearray1 = new NibbleArray(abyte1.Length, 4);
                NibbleArray nibblearray2 = new NibbleArray(abyte1.Length, 4);

                for (int i2 = 0; i2 < 16; i2++)
                {
                    for (int j2 = 0; j2 < 16; j2++)
                    {
                        for (int k2 = 0; k2 < 16; k2++)
                        {
                            int  l2    = i2 << 11 | k2 << 7 | j2 + (j << 4);
                            byte byte1 = par0AnvilConverterData.Blocks[l2];
                            abyte1[j2 << 8 | k2 << 4 | i2] = (byte)(byte1 & 0xff);
                            nibblearray.Set(i2, j2, k2, par0AnvilConverterData.Data.Get(i2, j2 + (j << 4), k2));
                            nibblearray1.Set(i2, j2, k2, par0AnvilConverterData.SkyLight.Get(i2, j2 + (j << 4), k2));
                            nibblearray2.Set(i2, j2, k2, par0AnvilConverterData.BlockLight.Get(i2, j2 + (j << 4), k2));
                        }
                    }
                }

                NBTTagCompound nbttagcompound = new NBTTagCompound();
                nbttagcompound.SetByte("Y", (byte)(j & 0xff));
                nbttagcompound.SetByteArray("Blocks", abyte1);
                nbttagcompound.SetByteArray("Data", nibblearray.Data);
                nbttagcompound.SetByteArray("SkyLight", nibblearray1.Data);
                nbttagcompound.SetByteArray("BlockLight", nibblearray2.Data);
                nbttaglist.AppendTag(nbttagcompound);
            }

            par1NBTTagCompound.SetTag("Sections", nbttaglist);
            byte[] abyte0 = new byte[256];

            for (int k = 0; k < 16; k++)
            {
                for (int i1 = 0; i1 < 16; i1++)
                {
                    abyte0[i1 << 4 | k] = (byte)(par2WorldChunkManager.GetBiomeGenAt(par0AnvilConverterData.x << 4 | k, par0AnvilConverterData.z << 4 | i1).BiomeID & 0xff);
                }
            }

            par1NBTTagCompound.SetByteArray("Biomes", abyte0);
            par1NBTTagCompound.SetTag("Entities", par0AnvilConverterData.Entities);
            par1NBTTagCompound.SetTag("TileEntities", par0AnvilConverterData.TileEntities);

            if (par0AnvilConverterData.TileTicks != null)
            {
                par1NBTTagCompound.SetTag("TileTicks", par0AnvilConverterData.TileTicks);
            }
        }
 /// <summary>Creates a new instance of <see cref="ListBuilder"/></summary>
 /// <param name="Base">FILL IN</param>
 public ListBuilder(NBTTagList Base)
 {
     this._Tag = Base;
 }
Beispiel #21
0
        public override void writeToNBT(NBTTagCompound nbttagcompound)
        {
            base.writeToNBT(nbttagcompound);
            var nbttaglist = new NBTTagList();
            for (int i = 0; i < chestContents.Length; i++)
            {
                if (chestContents[i] != null)
                {
                    var nbttagcompound1 = new NBTTagCompound();
                    nbttagcompound1.setByte("Slot", (byte) i);
                    chestContents[i].writeToNBT(nbttagcompound1);
                    nbttaglist.setTag(nbttagcompound1);
                }
            }

            nbttagcompound.setTag("Items", nbttaglist);
        }
Beispiel #22
0
        public override void writeToNBT(NBTTagCompound nbttagcompound)
        {
            base.writeToNBT(nbttagcompound);
            nbttagcompound.setShort("BurnTime", (short) furnaceBurnTime);
            nbttagcompound.setShort("CookTime", (short) furnaceCookTime);
            var nbttaglist = new NBTTagList();
            for (int i = 0; i < furnaceItemStacks.Length; i++)
            {
                if (furnaceItemStacks[i] != null)
                {
                    var nbttagcompound1 = new NBTTagCompound();
                    nbttagcompound1.setByte("Slot", (byte) i);
                    furnaceItemStacks[i].writeToNBT(nbttagcompound1);
                    nbttaglist.setTag(nbttagcompound1);
                }
            }

            nbttagcompound.setTag("Items", nbttaglist);
        }