private void OnSaving(object sender, SavingEventArgs e) { if (Config.IsEnableFavoriteItems) { ConvenientInventory.SaveFavoriteItemSlots(); } }
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(); } }
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); }