Exemplo n.º 1
0
 private void OnSaving(object sender, SavingEventArgs e)
 {
     if (Config.IsEnableFavoriteItems)
     {
         ConvenientInventory.SaveFavoriteItemSlots();
     }
 }
Exemplo n.º 2
0
        private void OnButtonPressed(object sender, ButtonPressedEventArgs e)
        {
            // Handle favorite items hotkey being pressed
            if (Config.IsEnableFavoriteItems &&
                Context.IsWorldReady &&
                (e.Button == Config.FavoriteItemsKeyboardHotkey || e.Button == Config.FavoriteItemsControllerHotkey))
            {
                ConvenientInventory.IsFavoriteItemsHotkeyDown = true;
            }

            // Handle quick stack hotkey being pressed
            if (Config.IsEnableQuickStackHotkey &&
                Context.IsWorldReady &&
                StardewValley.Game1.CurrentEvent is null &&
                (e.Button == Config.QuickStackKeyboardHotkey || e.Button == Config.QuickStackControllerHotkey))
            {
                ConvenientInventory.OnQuickStackHotkeyPressed();
            }
        }
Exemplo n.º 3
0
        public static bool StackToNearbyChests(int range, InventoryPage inventoryPage)
        {
            if (inventoryPage == null)
            {
                return(false);
            }

            bool   movedAtLeastOneTotal = false;
            Farmer who = Game1.player;

            List <Chest> chests = GetChestsAroundFarmer(who, range, true);

            foreach (Chest chest in chests)
            {
                List <Item> stackOverflowItems = new List <Item>();

                Netcode.NetObjectList <Item> chestItems = (chest.SpecialChestType == Chest.SpecialChestTypes.MiniShippingBin || chest.SpecialChestType == Chest.SpecialChestTypes.JunimoChest)
                        ? chest.GetItemsForPlayer(who.UniqueMultiplayerID)
                        : chest.items;

                // Fill chest stacks with player inventory items
                foreach (Item chestItem in chestItems)
                {
                    if (chestItem is null)
                    {
                        continue;
                    }

                    IList <Item> playerInventory = inventoryPage.inventory.actualInventory;

                    foreach (Item playerItem in playerInventory)
                    {
                        if (playerItem is null || !playerItem.canStackWith(chestItem))
                        {
                            continue;
                        }

                        if (ModEntry.Config.IsEnableFavoriteItems && ConvenientInventory.FavoriteItemSlots[playerInventory.IndexOf(playerItem)])
                        {
                            // Skip favorited items
                            continue;
                        }

                        int beforeStack = playerItem.Stack;
                        playerItem.Stack = chestItem.addToStack(playerItem);
                        bool movedAtLeastOne = beforeStack != playerItem.Stack;

                        movedAtLeastOneTotal = movedAtLeastOneTotal || movedAtLeastOne;

                        if (movedAtLeastOne)
                        {
                            ClickableComponent inventoryComponent = inventoryPage.inventory.inventory[playerInventory.IndexOf(playerItem)];

                            ConvenientInventory.AddTransferredItemSprite(new TransferredItemSprite(
                                                                             playerItem.getOne(), inventoryComponent.bounds.X, inventoryComponent.bounds.Y)
                                                                         );

                            if (playerItem.Stack == 0)
                            {
                                who.removeItemFromInventory(playerItem);
                            }
                        }

                        if (chestItem.Stack == chestItem.maximumStackSize())
                        {
                            if (ModEntry.Config.IsQuickStackOverflowItems)
                            {
                                stackOverflowItems.Add(chestItem.getOne());
                            }

                            inventoryPage.inventory.ShakeItem(playerItem);
                            break;
                        }
                    }
                }

                // Add overflow stacks to chest when applicable
                if (ModEntry.Config.IsQuickStackOverflowItems && chestItems.Count < chest.GetActualCapacity())
                {
                    IList <Item> playerInventory = inventoryPage.inventory.actualInventory;

                    foreach (Item stackOverflowItem in stackOverflowItems)
                    {
                        if (stackOverflowItem is null)
                        {
                            continue;
                        }

                        foreach (Item playerItem in playerInventory)
                        {
                            if (playerItem is null || !playerItem.canStackWith(stackOverflowItem))
                            {
                                continue;
                            }

                            if (ModEntry.Config.IsEnableFavoriteItems && ConvenientInventory.FavoriteItemSlots[playerInventory.IndexOf(playerItem)])
                            {
                                // Skip favorited items
                                continue;
                            }

                            int  beforeStack     = playerItem.Stack;
                            Item leftoverItem    = chest.addItem(playerItem);
                            bool movedAtLeastOne = leftoverItem is null || beforeStack != leftoverItem.Stack;

                            movedAtLeastOneTotal = movedAtLeastOneTotal || movedAtLeastOne;

                            if (movedAtLeastOne)
                            {
                                ClickableComponent inventoryComponent = inventoryPage.inventory.inventory[playerInventory.IndexOf(playerItem)];

                                ConvenientInventory.AddTransferredItemSprite(new TransferredItemSprite(
                                                                                 playerItem.getOne(), inventoryComponent.bounds.X, inventoryComponent.bounds.Y)
                                                                             );
                            }

                            if (leftoverItem is null)
                            {
                                who.removeItemFromInventory(playerItem);
                            }
                            else
                            {
                                inventoryPage.inventory.ShakeItem(playerItem);
                            }
                        }
                    }
                }
            }

            Game1.playSound(movedAtLeastOneTotal ? "Ship" : "cancel");

            return(movedAtLeastOneTotal);
        }