public bool MergeWith(TreeAttribute blockEntityAttributes) { InventoryGeneric otherinv = new InventoryGeneric(1, BlockCode, null, null, null); otherinv.FromTreeAttributes(blockEntityAttributes.GetTreeAttribute("inventory")); otherinv.Api = Api; otherinv.ResolveBlocksOrItems(); if (!inventory[0].Empty && otherinv[0].Itemstack.Equals(Api.World, inventory[0].Itemstack, GlobalConstants.IgnoredStackAttributes)) { int quantityToMove = Math.Min(otherinv[0].StackSize, Math.Max(0, MaxStackSize - inventory[0].StackSize)); inventory[0].Itemstack.StackSize += quantityToMove; otherinv[0].TakeOut(quantityToMove); if (otherinv[0].StackSize > 0) { BlockPos uppos = Pos.UpCopy(); Block upblock = Api.World.BlockAccessor.GetBlock(uppos); if (upblock.Replaceable > 6000) { ((IBlockItemPile)Block).Construct(otherinv[0], Api.World, uppos, null); } } MarkDirty(true); TriggerPileChanged(); } return(true); }