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); }
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); }