示例#1
0
        // Add Item by Meta
        public int Add(ItemMeta itemMeta, int amount)
        {
            if (itemMeta == null || amount == 0)
            {
                return(0);
            }
            int maxStackSize = itemMeta.GetItemType().MaxStackSize;

            foreach (ItemStack itemStack in itemStacks)
            {
                if (itemStack.IsEmpty())
                {
                    continue;
                }

                if (!itemMeta.Equals(itemStack.GetItemMeta()))
                {
                    continue;
                }

                if (itemStack.GetAmount() == maxStackSize)
                {
                    continue;
                }

                if (itemStack.GetAmount() + amount <= maxStackSize)
                {
                    itemStack.SetAmount(itemStack.GetAmount() + amount);
                    amount = 0;
                    break;
                }
                else
                {
                    amount -= itemStack.GetAmount() + amount - maxStackSize;
                    itemStack.SetAmount(maxStackSize);
                }
            }

            if (amount > 0)
            {
                int firstEmpty = FindEmpty();

                if (firstEmpty != -1 && firstEmpty < itemStacks.Length)
                {
                    ItemStack itemStack = itemStacks[firstEmpty];

                    if (itemStack == null || !itemStack.IsEmpty())
                    {
                        return(amount);
                    }

                    if (amount <= maxStackSize)
                    {
                        itemStack.SetItemStack(itemMeta, amount);
                        amount = 0;
                    }
                    else
                    {
                        amount -= maxStackSize;
                        itemStack.SetItemStack(itemMeta, maxStackSize);
                        Add(itemMeta, amount);
                    }
                }
            }
            return(amount);
        }