public int GetAvailableQuantity(Farmer who, IList <Item?>?items, IList <IInventory>?inventories, int max_quality)
    {
        int amount = 0;

        if (who != null)
        {
            foreach (var item in who.Items)
            {
                int quality = item is SObject obj ? obj.Quality : 0;
                if (quality <= max_quality && InventoryHelper.DoesItemMatchID(Index, item))
                {
                    amount += item.Stack;
                }
            }
        }

        if (items != null)
        {
            foreach (var item in items)
            {
                if (item is null)
                {
                    continue;
                }

                int quality = item is SObject obj ? obj.Quality : 0;
                if (quality <= max_quality && InventoryHelper.DoesItemMatchID(Index, item))
                {
                    amount += item.Stack;
                }
            }
        }

        return(amount);
    }