internal void ProcessRequest(PortObject requestor, PortFilter request)
        {
            if (requestor.AttachedChest == null)
            {
                return;
            }

            int amountHave   = requestor.AmountMatching(request);
            int amountNeeded = request.RequestAmount - amountHave;

            if (amountNeeded <= 0)
            {
                return;
            }

            foreach (PortObject provider in Ports)
            {
                if (provider == requestor)
                {
                    continue;
                }
                requestor.RequestFrom(provider, request, ref amountNeeded);
                if (amountNeeded <= 0)
                {
                    break;
                }
            }
        }
        internal PortFilterComponent(PortFilter filter, PortFilterType type, PortDeleteFilter onDeleted)
        {
            this.Filter = filter;

            int selected = 0;

            if (ItemCategories.NumToName.TryGetValue(this.Filter.Category, out string category))
            {
                selected = ItemCategories.Names.IndexOf(category);
            }

            this.Dropdown = new DropdownComponent(ItemCategories.Names, "", 300)
            {
                visible = true, SelectionIndex = selected
            };
            this.Dropdown.DropDownOptionSelected += DropDownOptionSelected;

            this.DeleteButton = new ButtonComponent("", Sprites.Icons.Sheet, Sprites.Icons.Clear, 2, true)
            {
                visible = true, HoverText = "Delete"
            };
            this.DeleteButton.ButtonPressed += () => onDeleted(Filter);

            if (type == PortFilterType.REQUESTS)
            {
                BuildSlider();
            }
        }
        internal void AddFilter()
        {
            PortFilter filter = new PortFilter();

            Filters.Add(filter);
            Components.Add(new PortFilterComponent(filter, Type, DeleteFilter));
            OnChanged();
        }
        internal void DeleteFilter(PortFilter filter)
        {
            int index = Filters.IndexOf(filter);

            Filters.RemoveAt(index);
            Components.RemoveAt(index);
            OnChanged();
            Game1.playSound("hammer");
        }