コード例 #1
0
        public bool Add(IItemStack itemStackToAdd)
        {
            IHasItemStack firstOpenStack = null;

            foreach (var stack in _stacks)
            {
                var itemStack = stack.GetItemStack();
                if (firstOpenStack == null &&
                    (itemStack == null ||
                     itemStack.GetCount() == 0))
                {
                    firstOpenStack = stack;
                    continue;
                }

                if (itemStack != null &&
                    itemStack.GetItemName() == itemStackToAdd.GetItemName() &&
                    itemStack.Merge(itemStackToAdd))
                {
                    return(true);
                }
            }

            if (firstOpenStack != null)
            {
                firstOpenStack.SetItemStack(itemStackToAdd);
                return(true);
            }

            return(false);
        }
コード例 #2
0
        public bool Merge(IItemStack itemStack)
        {
            if (itemStack == null)
            {
                return(false);
            }
            if (_items.Count > 0 &&
                _itemName != itemStack.GetItemName())
            {
                return(false);
            }
            var count     = itemStack.GetCount();
            var wasMerged = false;

            for (var i = 0; i < count; i++)
            {
                var removed = itemStack.RemoveOne();
                if (Add(removed))
                {
                    wasMerged = true;
                }
                else
                {
                    //add it back to the other stack
                    itemStack.Add(removed);
                    break;
                }
            }

            return(wasMerged);
        }