Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
OttoStash
Chests pull nearby items off the ground and out of your inventory. Per-chest rules, groups and favouriting. Craft and build from nearby chests. Reclaim items back into resources at crafting stations.
| Date uploaded | a day ago |
| Version | 3.6.3 |
| Download link | potto007-OttoStash-3.6.3.zip |
| Downloads | 94 |
| Dependency string | potto007-OttoStash-3.6.3 |
This mod requires the following mods to function
denikson-BepInExPack_Valheim
BepInEx pack for Valheim. Preconfigured with the correct entry point for mods and preferred defaults for the community.
Preferred version: 5.4.2350README

OttoStash
Updated for Valheim 1.0
Version 3.6.3, built and Harmony-checked against Valheim 1.0.20.
Maintainer: Paul Otto
Description
OttoStash puts your things away so you can get back to playing. Chests pick up whatever lands on the ground near them, one key empties your inventory into the containers around you, and when you craft or build, the materials you are short on come out of those same chests. It also turns gear back into its resources at a crafting station and lets you mark inventory slots as trash.
Need to know
OttoStash uses ServerSync. When it is installed on the server and on every client, the server's configuration syncs to all of them, and a client running a different OttoStash version cannot join. A client without OttoStash can still join.
The server also watches its config file, so if you edit the file directly on the server instead of through the BepInEx Configuration Manager, the change goes out to every client as soon as you save.
Quick start
- Install it and start a world. Chests pull in items dropped near them, following the rules in
potto007.OttoStash.yml. - Press
.to put your inventory into nearby containers. Favorited items and the YAML rules are respected. - Middle-click an item to store just that one.
- Hold
Yand click an item, or runottostashsearch, to find where you put something. - Edit
potto007.OttoStash.ymlto set each container's range and what it will and will not take. - At a crafting station, open the Reclaim tab to turn an item back into most of its resources.
- Click Reclaim All twice on an open container to reclaim everything in it.
- Hold
Xand click inventory slots to mark them as trash, then middle-click to discard them all. - Edit
potto007.OttoStash.Reclaim.ymlto keep items out of reclaiming and discarding. - Craft and build from what is in nearby chests.
Alt+Oswitches that off and on for you alone. - Every configuration file lives in
BepInEx/config, and the yml files carry their own examples.
Compatibility
- Quick Stack and sorting mods (QuickStackStore, for example) - the UI integration is ordered so the two mods do not grab each other's elements or double up buttons.
- Backpack mods (Smoothbrain's Backpacks, AdventureBackpack and others) - OttoStash can store into backpacks, and
DontStoreToBackpacksturns that off everywhere. - ItemDrawers - both KG's fork and Makail's original work for storing and searching.
- Epic Loot and Jewelcrafting - reclaiming and discarding also return enchanting materials and socketed gems.
- Recycle_N_Reclaim - OttoStash replaces it, and while both are installed, it turns its own reclaiming and trash marking off and leaves them to Recycle_N_Reclaim.
- AzuCraftyBoxes, CraftFromContainers and CFCMod - while any of them is loaded, OttoStash leaves crafting from chests to that mod and logs a warning.
Features
- Storing from the ground. Containers pick up dropped resources within a range you set, per container or through
FallbackRange. PressPauseShortcutto hold off forSecondsToWaitBeforeStoringseconds when you want to pick something up yourself. - Storing from your inventory.
StoreShortcut(default.) moves your inventory into containers withinPlayerRange, andStoreSingleItemShortcut(default middle-click) stores only the item you click. Rules inpotto007.OttoStash.ymldecide which items each container will take. - Search. Hold
SearchModifierKeybind(defaultY) and click an item, or runottostashsearch, and OttoStash pings the nearest container holding it and tells you how many exist./ottostashsearchworks in chat too, and it tab-completes, so/ottostashplus Tab is enough. - Favoriting, from GoldenRevolver. Hold
FavoritingModifierKeybind1(defaultZ), or use the button, then left-click an item to favorite it or right-click a slot to favorite the slot. Storing from your inventory leaves favorites where they are, so nothing you meant to keep ends up in a chest. A colored border marks each favorite, and if GoldenRevolver's mod is installed, OttoStash reads its favoriting file instead of keeping its own. - Craft and build from nearby chests. Crafting and building take whatever you lack from containers within
PullRange(20 m), plus kg drawers and the backpacks and gem bags you carry. The requirement lists showhave/need, the amount flashes when chests cover the difference, and the build menu shows how many of a piece you can build. Private chests you cannot open, carts on the move, and chests another player has open are skipped. Apull:block on a container or crafting station in the yml file keeps items from being pulled, and the end of the example file shows one.LeaveOneItemkeeps the last of each item in every chest, andAlt+Oswitches pulling off for you alone, with a status icon while it is off. Epic Loot's enchanting table can use the chests too. - Armor stand panel. Press Use on an armor stand and your inventory opens with the stand's slots beside it, laid out like a figure - head on top, hands either side of the chest, cape, legs and utility item along the bottom. Drag gear onto a slot or back into your bag, or hold Ctrl and click to move it in one go, and Take All empties the stand into your inventory without dropping anything on the ground. The hotbar keys still attach the vanilla way. The panel waits until the stand is yours to change before it moves anything, so two players cannot pull the same item. Turn
ArmorStandPaneloff to get the vanilla take-and-drop back. - Reclaiming, from Recycle_N_Reclaim. A Reclaim tab sits next to Craft and Upgrade at every crafting station. It lists what you carry that the station could have made, and the craft button turns the selected item back into its resources at
RecyclingRate- half by default, rounded down, with higher quality items returning more. An item that needs a better station, or whose recipe you do not know, shows why it is blocked. PressCtrl+Zwithin 20 seconds to undo the last reclaim, and turn onShowRecycleYieldInTooltipto see the yield in every item tooltip. - Reclaim All. An open container gets a Reclaim All button. Click it twice to reclaim everything in the container, and anything that cannot be reclaimed is listed with the reason. To move the button, hold Left Ctrl and drag it with the right mouse button.
- Discard and trash marking. Drag an item and press
Deleteto destroy it and get its resources back. HoldXand click slots to mark them as trash (red border), then middle-click while still holdingXto discard them all. Both are admin-only by default (Discard.LockToAdmin). - Reclaim rules.
potto007.OttoStash.Reclaim.ymlkeeps items or groups out of reclaiming, out of discarding, or out of Reclaim All for one kind of container, and sets recycle rates per item or per group.
OttoStash is built to be easy on a server. It works on intervals you can configure, moves bulk transfers in chunks, and throttles ownership requests to keep lag and race conditions down. It also has several protections against losing or duplicating items, especially around teleporting, dying, and working with a lot of containers at once.
FAQ
Answers go on the wiki tab at the top of this page as questions come in.
Configuration
Available Configuration Options
General
LockConfiguration [Synced with Server]
- If on, the configuration is locked and can be changed by server admins only.
- Default Value: On
DontStoreToBackpacks [Synced with Server]
- If on, items will not be stored in backpacks.
- Default Value: Off
ChestsPickupFromGround [Synced with Server]
- If on, chests will pick up items from the ground if they are in range. If off, chests will not begin their periodic
checks for items nearby. Reloading zone or logging out might be required.
- Default Value: On
MustHaveExistingItemToPull [Synced with Server]
- If on, the chest must already have the item in its inventory to pull it from the world or player into the chest.
- Default Value: On
PlayerRange [Synced with Server]
- The maximum distance from the player to store items in chests when StoreShortcut is pressed. Follows storage
rules for allowed items.
- Default Value: 5
FallbackRange [Synced with Server]
- The range to use if the container has no range set in the yml file. This will be the fallback range for all
containers.
- Default Value: 10
PlayerIgnoreHotbar [Not Synced with Server]
- If on, the player's hotbar will not be stored when StoreShortcut is pressed.
- Default Value: On
PlayerIgnoreQuickSlots [Not Synced with Server]
- If on, the player's quick slots will not be stored when StoreShortcut is pressed. (Requires Quick Slots mod, turn
on only if you need it!)
- Default Value: Off
PingVFX [Synced with Server]
- The VFX to play when a chest is pinged. Leave blank to disable and only highlight the chest. (Full prefab
list: https://valheim-modding.github.io/Jotunn/data/prefabs/prefab-list.html)
- Default Value: vfx_Potion_health_medium
HighlightContainers [Not Synced with Server]
- If on, the containers will be highlighted when something is stored in them. If off, the containers will not be
highlighted if something is stored in them.
- Default Value: On
PingContainers [Not Synced with Server]
- If on, the containers will be pinged with PingVFX when something is stored in them. If off, the containers will
not be pinged if something is stored in them.
- Default Value: On
SecondsToWaitBeforeStoring [Synced with Server]
- The number of seconds to wait before storing items into chests nearby automatically after you have pressed your hotkey
to pause.
- Default Value: 10
IntervalSeconds [Synced with Server]
- The number of seconds that must pass before the chest will do an automatic check for items nearby, WARNING: Reducing
this will decrease performance!
- Default Value: 10
Fish
FishSuction [Synced with Server]
- Allow auto-storing fish that are still in water, as in boat netting. Off requires fish to be out of the water. On
skips that check.
- Default Value: Off
Shortcuts
StoreSingleItemShortcut [Not Synced with Server]
- Keyboard shortcut/Hotkey to store a single item that you click from your inventory into nearby containers.
- Default Value: Mouse2
StoreShortcut [Not Synced with Server]
- Keyboard shortcut/Hotkey to store your inventory into nearby containers.
- Default Value: Period
PauseShortcut [Not Synced with Server]
- Keyboard shortcut/Hotkey to temporarily stop storing items into chests nearby automatically. Does not override the
player hotkey store.
- Default Value: Period + LeftShift
SearchModifierKeybind [Not Synced with Server]
- While holding this, you can search nearby chests for the prefab you clicked in your inventory.
- Default Value: Y
Favoriting
BorderColorFavoritedItem [Not Synced with Server]
- Color of the border for slots containing favorited items.
- Default Value: FFD800FF
BorderColorFavoritedItemOnFavoritedSlot [Not Synced with Server]
- Color of the border of a favorited slot that also contains a favorited item.
- Default Value: 80AC80FF
BorderColorFavoritedSlot [Not Synced with Server]
- Color of the border for favorited slots.
- Default Value: 0080FFFF
DisplayTooltipHint [Not Synced with Server]
- Whether to add additional info the item tooltip of a favorited or trash flagged item.
- Default Value: true
FavoritingModifierKeybind1 [Not Synced with Server]
- While holding this, left clicking on items or right clicking on slots favorites them, disallowing storing Identical to
FavoritingModifierKeybind2.
- Default Value: Z
FavoritingModifierKeybind2 [Not Synced with Server]
- While holding this, left clicking on items or right clicking on slots favorites them, disallowing storing Identical to
FavoritingModifierKeybind1.
- Default Value: Z
FavoritedItemTooltip [Not Synced with Server]
-
- Default Value: Item is favorited and will not be stored
FavoritedSlotTooltip [Not Synced with Server]
-
- Default Value: Slot is favorited and will not be stored
ItemOnFavoritedSlotTooltip [Not Synced with Server]
-
- Default Value: Item & Slot are favorited and will not be stored
ArmorStands
ArmorStandPanel [Synced with Server]
- If on, Use on an armor stand opens your inventory beside the slots of the stand. Drag gear onto a slot or back out, or hold Ctrl and click to move it in one go. The hotbar keys still attach the vanilla way. If off, Use takes the item and throws it on the ground, as in vanilla.
- Default Value: On
Reclaim
ApplyCraftedBy [Synced with Server]
- If on, you are the crafter of every item that reclaiming or discarding gives back. If off, the crafter is left empty.
- Default Value: On
RecyclingRate [Synced with Server]
- The share of an item's crafting resources that reclaiming returns, from 0 to 1. The amount always rounds down, so 2.5 becomes 2. At 0.5 a quality 1 item returns half of what it cost. Higher quality items return more, because their upgrades cost more. The recycleRates list in potto007.OttoStash.Reclaim.yml overrides this for single items or groups.
- Default Value: 0.5
UnstackableItemsAlwaysReturnAtLeastOneResource [Synced with Server]
- If on, reclaiming an item that does not stack returns at least 1 of each resource that would otherwise round down to 0.
- Default Value: On
RequireExactCraftingStationForRecycling [Synced with Server]
- If on, reclaiming needs the crafting station the item is made at, at the level its quality needs. If off, any station will do.
- Default Value: On
ReturnEnchantedResources [Synced with Server]
- If on and Epic Loot or Jewelcrafting is installed, reclaiming also returns the enchanting materials or socketed gems.
- Default Value: On
PreventZeroResourceYields [Synced with Server]
- If on, an item that would return 0 of any resource cannot be reclaimed, so nothing is lost to rounding.
- Default Value: On
AllowRecyclingUnknownRecipes [Synced with Server]
- If on, you can reclaim items whose recipe you have not learned yet. Off by default, because it skips progression.
- Default Value: Off
ShowRecycleYieldInTooltip [Not Synced with Server]
- If on, an item's tooltip lists what reclaiming it would return.
- Default Value: false
UndoRecycleKeybind [Not Synced with Server]
- Undoes the last reclaim from the Reclaim tab, within the grace period.
- Default Value: Z + LeftControl
UndoRecycleGracePeriodSeconds [Synced with Server]
- Seconds after a reclaim during which it can be undone. 0 turns undo off.
- Default Value: 20
ReclaimUI
ReclaimTabEnabled [Synced with Server]
- If on, crafting stations get a Reclaim tab next to Craft and Upgrade.
- Default Value: On
ContainerRecyclingEnabled [Synced with Server]
- If on, an open container shows a Reclaim All button. Click it twice to reclaim everything in the container.
- Default Value: On
ContainerButtonPosition [Not Synced with Server]
- Where the Reclaim All button sits. Hold Left Ctrl and drag the button with the right mouse button to move it; the new position is saved here.
- Default Value: {"x":496.0,"y":-374.0,"z":-1.0}
NotifyOnSalvagingImpediments [Synced with Server]
- If on, Reclaim All shows a message in the middle of the screen for every item it could not reclaim, and why: not enough free slots, an unknown recipe, or a resource that would return 0.
- Default Value: On
HideRecipesForEquippedItems [Synced with Server]
- If on, items you have equipped are left out of the Reclaim tab.
- Default Value: On
IgnoreItemsOnHotbar [Synced with Server]
- If on, items on your hotbar are left out of the Reclaim tab.
- Default Value: On
RecipeListScrollSpeedMultiplier [Not Synced with Server]
- Multiplies how far the mouse wheel scrolls the crafting and Reclaim recipe lists. Newer Unity reports much smaller wheel steps, which made the vanilla speed crawl. 1 is vanilla speed. Raise it toward 20 if it still crawls, as it can on Linux and Proton.
- Default Value: 10
StationFilterEnabled [Synced with Server]
- If on, items made at the stations in StationFilterList are left out of the Reclaim tab. It keeps food out of the list.
- Default Value: On
StationFilterList [Synced with Server]
- Comma separated prefab names of the crafting stations whose items the Reclaim tab leaves out. The vanilla stations are forge, blackforge, piece_workbench, piece_cauldron, piece_stonecutter, piece_artisanstation and piece_magetable.
- Default Value: piece_cauldron
Discard
Enabled [Synced with Server]
- If on, pressing DiscardHotkey while dragging an item in your inventory destroys it and returns its resources.
- Default Value: On
LockToAdmin [Synced with Server]
- If on, only admins can discard from the inventory or bulk trash marked slots.
- Default Value: On
DiscardHotkey [Not Synced with Server]
- Press while dragging an item to discard it.
- Default Value: Delete
ReturnUnknownResources [Synced with Server]
- If on, discarding returns resources even when you do not know the item's recipe.
- Default Value: Off
ReturnEnchantedResources [Synced with Server]
- If on and Epic Loot or Jewelcrafting is installed, discarding also returns the enchanting materials or socketed gems.
- Default Value: On
ReturnResources [Synced with Server]
- The share of an item's resources that discarding returns, from 0 to 1. 0 destroys the item and returns nothing.
- Default Value: 1
Trash
TrashingModifierKeybind [Not Synced with Server]
- While holding this, left clicking an inventory slot marks or unmarks it as trash. Letting go clears every mark.
- Default Value: X
TrashingKeybind [Not Synced with Server]
- Pressed while holding TrashingModifierKeybind, discards every marked slot. The default is the middle mouse button.
- Default Value: Mouse2
BorderColorTrashedSlot [Not Synced with Server]
- Color of the border on a slot marked as trash.
- Default Value: FF0000FF
DisplayTooltipHint [Not Synced with Server]
- If on, a marked slot's tooltip says it is marked as trash.
- Default Value: true
TrashedSlotTooltip [Not Synced with Server]
- The tooltip line on a slot marked as trash.
- Default Value: Slot is marked as trash and will be discarded
ReclaimDebug
DebugAlwaysDumpAnalysisContext [Synced with Server]
- If on, every reclaim writes a full report to the log. Slow; turn it on only to chase a problem.
- Default Value: Off
DebugAllowSpammyLogs [Synced with Server]
- If on, every yield calculation is written to the log. Very noisy and slow.
- Default Value: Off
CraftFromChests
PullFromChests [Synced with Server]
- If on, crafting and building take the materials you lack from containers within PullRange, and the crafting and build menus count them.
- Default Value: On
PullRange [Synced with Server]
- The maximum distance from the player to a container that crafting and building may take materials from.
- Default Value: 20
LeaveOneItem [Synced with Server]
- If on, pulling leaves one of each item in every container, so the container still has it and keeps storing it.
- Default Value: Off
TogglePullingShortcut [Not Synced with Server]
- Keyboard shortcut/Hotkey that switches pulling off and on for you alone.
- Default Value: O + LeftAlt
TogglePullingMessage, TogglePullingMessageFormat, PullingOffStatusEffect [Not Synced with Server]
- The message above your head after the toggle, its format, and the status icon while pulling is off.
RequirementFormat [Not Synced with Server]
- How requirements read while pulling is on. {0} is what you have, carried and nearby; {1} is what is needed. Empty keeps the vanilla amount.
- Default Value: {0}/{1}
FlashColor, UnflashColor, CanBuildColor, CannotBuildColor [Not Synced with Server]
- The requirement flash colors, and the colors of the build menu's buildable count.
Installation Instructions
Manual installation
On a server you will most likely install by hand, so make sure BepInEx is installed there correctly first.
- Download the latest release of BepInEx.
- Extract the zip into the game's root folder.
- Download the latest release of OttoStash from Thunderstore.io.
- Extract the zip into the
BepInEx/pluginsfolder. - Launch the game.
Installing with r2modman or Thunderstore Mod Manager
-
Install r2modman or Thunderstore Mod Manager.
r2modman also installs from the Thunderstore site.

Thunderstore Mod Manager also installs from the Overwolf app store.

-
Open the mod manager and search for "OttoStash" on the Online tab. The screenshot below shows a search for VikingShip; type OttoStash instead.

- Click Download to install the mod.
- Launch the game.
This entry makes a chest that only picks up and stores food and potions:
piece_chest:
range: 10
exclude:
- All
includeOverride:
- Food
- Potion
Example YAML
# Below you can find example groups. Groups are used to exclude or includeOverride quickly. They are reusable lists!
# Please note that some of these groups/container limitations are kinda pointless but are here for example.
# Make sure to follow the format of the example below. If you have any questions, please ask in my discord.
# Full vanilla prefab name list: https://valheim-modding.github.io/Jotunn/data/prefabs/prefab-list.html
# Item prefab name list: https://valheim-modding.github.io/Jotunn/data/objects/item-list.html
# There are several predefined groups set up for you that are not listed. You can use these just like you would any group you create yourself.
# These are the "All", "Food", "Potion", "Fish", "Swords", "Bows", "Crossbows", "Axes", "Clubs", "Knives", "Pickaxes", "Polearms", "Spears", "Equipment", "Boss Trophy", "Trophy", "Crops", "Seeds", "Ores", "Metals", and "Woods" groups.
# The criteria for these groups are as follows:
# groups:
# Food:
# - Criteria: Both of the following properties must have a value greater than 0.0 on the sharedData property of the ItemDrop script:
# - food
# - foodStamina
# Potion:
# - Criteria: The following properties must meet the specified conditions on the sharedData property of the ItemDrop script:
# - 'food' > 0.0
# - 'foodStamina' == 0.0
# - Any status effect names/categories contain "potion"
# Fish:
# - itemType: Fish
# Swords, Bows, Crossbows, Axes, Clubs, Knives, Pickaxes, Polearms, Spears:
# - itemType: OneHandedWeapon, TwoHandedWeapon, TwoHandedWeaponLeft, Bow
# - Criteria: Items in these groups have a specific skillType on the sharedData property of the ItemDrop script. Each group corresponds to the skillType as follows:
# - Swords: skillType == Skills.SkillType.Swords
# - Bows: skillType == Skills.SkillType.Bows
# - Crossbows: skillType == Skills.SkillType.Crossbows
# - Axes: skillType == Skills.SkillType.Axes
# - Clubs: skillType == Skills.SkillType.Clubs
# - Knives: skillType == Skills.SkillType.Knives
# - Pickaxes: skillType == Skills.SkillType.Pickaxes
# - Polearms: skillType == Skills.SkillType.Polearms
# - Spears: skillType == Skills.SkillType.Spears
# Example: An item with itemType set to OneHandedWeapon and skillType set to Skills.SkillType.Swords would belong to the Swords group.
# Armor:
# - itemType: Chest, Legs, Shoulder, Helmet
# Equipment:
# - itemType: Torch, Bow, OneHandedWeapon, TwoHandedWeapon, TwoHandedWeaponLeft, Helmet, Chest, Legs, Shoulder, Utility, Shield
# Weapons:
# - itemType: OneHandedWeapon, TwoHandedWeapon, TwoHandedWeaponLeft, Bows, Swords, Crossbows, Axes, Clubs, Knives, Pickaxes, Polearms, Spears
# Shield:
# - itemType: Shield
# Round Shield:
# - itemType: Shield
# - Criteria: sharedData.m_timedBlockBonus > 0.0 "round"
# Tower Shield:
# - itemType: Shield
# - Criteria: sharedData.m_timedBlockBonus <= 0.0 "tower"
# Chest:
# - itemType: Chest
# Legs:
# - itemType: Legs
# Shoulder:
# - itemType: Shoulder
# Helmet:
# - itemType: Helmet
# Utility:
# - itemType: Utility
# Trinket:
# - itemType: Trinket
# Ammo:
# - itemType: Ammo
# Arrows:
# - itemType: Ammo
# - Criteria: sharedData.m_ammoType == "$ammo_arrows"
# Bolts:
# - itemType: Ammo
# - Criteria: sharedData.m_ammoType == "$ammo_bolts"
# ElementalMagic:
# - itemType: ElementalMagic
# BloodMagic:
# - itemType: BloodMagic
# Boss Trophy:
# - itemType: Trophy
# - Criteria: sharedData.m_name ends with any of the following boss names:
# - eikthyr, elder, bonemass, dragonqueen, goblinking, SeekerQueen
# Trophy:
# - itemType: Trophy
# - Criteria: sharedData.m_name does not end with any boss names
# Crops:
# - itemType: Material
# - Criteria: Can be cultivated and grown into a pickable object with an amount greater than 1
# Seeds:
# - itemType: Material
# - Criteria: Can be cultivated and grown into a pickable object with an amount equal to 1
# Ores:
# - itemType: Material
# - Criteria: Can be processed by any of the following smelters:
# - smelter
# - blastfurnace
# Metals:
# - itemType: Material
# - Criteria: Is the result of processing an ore in any of the following smelters:
# - smelter
# - blastfurnace
# Woods:
# - itemType: Material
# - Criteria: Can be processed by the charcoal_kiln smelter
# All:
# - Criteria: Item has an ItemDrop script and all needed fields are populated. (all items)
groups:
BronzeGear: # Group name
- ArmorBronzeChest # Item prefab name, note that this is case sensitive and must be the prefab name
- ArmorBronzeLegs
- ArmorBronzeHelmet
Tier 2 Items:
- Bronze
- PickaxeBronze
- ArmorBronzeChest
- ArmorBronzeLegs
# By default, if you don't specify a container below, it will be considered as you want to allow storing all objects into it.
# If you are having issues with a container, please make sure you have the full prefab name of the container. Additionally, make sure you have range and exclude or includeOverride set up correctly.
# Worst case you can define a container like this. This will allow everything to be pulled from the container within a range of 30.
# rk_barrel:
# range: 30
# includeOverride: []
## Please note that the below containers are just examples. You can add as many containers as you want.
## If you want to add a new container, just copy and paste the below example and change the name of the container to the prefab name of the container you want to add.
## The values are set up to include everything by using the includeOverride (aside from things that aren't really a part of vanilla recipes, like Swords or Bows).
## This is to give you examples on how it's done, but still allow everything to be stored into the container.
Player_tombstone: # This is to exclude the tombstone from randomly picking up items that fall near it.
range: 10
exclude:
- All
Player: # This is to exclude backpacks from randomly storing items into them.
range: 10
exclude:
- All
piece_chest:
range: 10 # This is the range that the container will store items. This overrides the global range set in the config.
exclude: # Exclude these items from being able to be stored into the container
#- Food # Exclude all in group
- PickaxeBronze # Allow prefab names as well, in this case we will use something that isn't a food
includeOverride:
# - Food # This would not work, you cannot includeOverride a group that is excluded. You can only override prefabs from that group.
- PickaxeBronze # You can however, be weird, and override a prefab name you have excluded.
# It's highly unlikely that you will need the armor, swords, bows, etc. groups below. These are just in case you want to use them.
# They were also easy ways for me to show you how to use the groups without actually excluding something you might want to always pull by default.
piece_chest_wood:
range: 10
exclude:
- Swords # Exclude all in group
- Tier 2 Items # Exclude all in group
- Bows # Exclude all in group
includeOverride: # If the item is in the groups above, say, you were using a predefined group but want to override just one item to be ignored and allow pulling it
- BowFineWood
- Wood
- Bronze
- PickaxeBronze
- ArmorBronzeChest
- ArmorBronzeLegs
piece_chest_private:
range: 10
exclude:
- All # Exclude everything
piece_chest_blackmetal:
range: 10
exclude:
- Swords # Exclude all in group
- Tier 2 Items # Exclude all in group
- Bows # Exclude all in group
includeOverride: # If the item is in the groups above, say, you were using a predefined group but want to override just one item to be ignored and allow storing it
- BowFineWood
- Wood
- Bronze
rk_cabinet: # rk_ is typically the prefix for containers coming from RockerKitten's mods
range: 10
exclude:
- Food
includeOverride:
- Food
rk_cabinet2:
range: 10
exclude:
- Food
includeOverride:
- Food
rk_barrel:
range: 10
exclude:
- Armor
- Swords
rk_barrel2:
range: 10
exclude:
- Armor
- Swords
rk_crate:
range: 10
exclude:
- Armor
- Swords
rk_crate2:
range: 10
exclude:
- Armor
- Swords
Version information
The full release history is in CHANGELOG.md, which also shows on the Changelog tab of the Thunderstore package page.
Moving over from Azumatt's mods
AzuAutoStore. Your settings carry over. On the first run OttoStash looks for
Azumatt.AzuAutoStore.cfg and Azumatt.AzuAutoStore.yml and copies them to
potto007.OttoStash.cfg and potto007.OttoStash.yml, and it never overwrites an
OttoStash file that already exists.
Recycle_N_Reclaim. OttoStash does everything Recycle_N_Reclaim did - the Reclaim tab,
Reclaim All on containers, inventory discard, trash marking and undo - so remove it once
you have switched. While it stays installed, OttoStash leaves reclaiming and trash marking
to it and only stores, and it copies Azumatt.Recycle_N_Reclaim.cfg into the Reclaim,
ReclaimUI, Discard, Trash and ReclaimDebug sections of potto007.OttoStash.cfg,
and Azumatt.Recycle_N_Reclaim_ExcludeLists.yml into potto007.OttoStash.Reclaim.yml, on
every start. That means a reclaim setting you change in OttoStash gets overwritten with the
Recycle_N_Reclaim value on the next start until you remove it. Neither old file is ever
changed. The settings have PascalCase names now, so EnableExperimentalCraftingTabUI is
ReclaimUI.ReclaimTabEnabled.
AzuCraftyBoxes. OttoStash crafts and builds from nearby chests now. On the first run it
copies the settings in Azumatt.AzuCraftyBoxes.cfg into the CraftFromChests section and
merges the container rules in Azumatt.AzuCraftyBoxes.yml into potto007.OttoStash.yml as
pull: blocks. Remove AzuCraftyBoxes afterwards, because while it is installed OttoStash
leaves crafting from chests to it. Its Use-to-fill on smelters, kilns, fires and other
stations is not part of OttoStash; OttoFuel fuels those.
Credits
OttoStash is maintained by Paul Otto.
Auto store behavior comes from earlier versions of Azumatt's AzuAutoStore, MIT licensed. Reclaiming, discard and trash marking come from Azumatt's Recycle_N_Reclaim, MIT licensed, which grew out of OdinsInventoryDiscard and took contributions from MidnightsFX, Vapok, shudnal and Goldenrevolver. Crafting from chests comes from Azumatt's AzuCraftyBoxes, also MIT licensed, and favoriting comes from GoldenRevolver.
CHANGELOG
Changelog
Versions 3.0.11 and below are AzuAutoStore's release history, kept below exactly as Azumatt wrote it.
3.6.3
- Republished 3.6.2 under a new version number. Nothing else changed.
3.6.2
- Rebuilt against Valheim 1.0.20. Every Harmony patch target still resolves in this build, and nothing else changed.
3.6.1
- Rewrote the README and this changelog. The code is unchanged from 3.6.0, but a server and its clients still have to run the same version, so update them together.
3.6.0
This release brings Recycle_N_Reclaim's reclaiming and AzuCraftyBoxes' crafting from chests into OttoStash.
Setting names
- Every section and setting now uses the PascalCase spelling the new sections use. The
numbered sections lose their numbers, so
1 - Generalis nowGeneral,1.5 - FishisFish,2 - ShortcutsisShortcuts,3 - FavoritingisFavoritingand4 - Armor StandsisArmorStands. Keys lose their spaces, soPlayer Rangeis nowPlayerRange. - Your values carry over. On the first run OttoStash renames the settings in
potto007.OttoStash.cfgbefore it reads them, and a config carried over from AzuAutoStore goes through the same rename. The file is backed up first and put back if the rename fails. - If you ran 3.2.0, your config may hold a setting under both spellings, and OttoStash keeps the spaced one that 3.2.1 through 3.5.1 wrote.
Reclaiming, from Recycle_N_Reclaim
- A Reclaim tab at every crafting station turns items back into their resources at
RecyclingRate, and an item that cannot be reclaimed says why.Ctrl+Zundoes the last reclaim within 20 seconds. - Reclaim All on an open container, inventory discard with
Deletewhile dragging, and trash marking: holdX, click slots, then middle-click to discard them all. Discard and bulk trash are admin-only by default. ShowRecycleYieldInTooltipadds the reclaim yield to item tooltips.- Epic Loot enchanting materials and Jewelcrafting gems come back too.
potto007.OttoStash.Reclaim.ymlholds the reclaim rules, in Recycle_N_Reclaim's exclude-list format.- Coming from Recycle_N_Reclaim: on the first run, its settings are copied into the new
Reclaim,ReclaimUI,Discard,TrashandReclaimDebugsections ofpotto007.OttoStash.cfg, and its exclude lists topotto007.OttoStash.Reclaim.yml. While Recycle_N_Reclaim is still installed, OttoStash leaves reclaiming and trash marking to it and copies its settings and exclude lists again on every start, so a reclaim setting changed in OttoStash is overwritten until Recycle_N_Reclaim is removed. - Changes from Recycle_N_Reclaim 1.4.5:
- Trash marking works again. On Valheim 1.0 the click picked the item up before Recycle_N_Reclaim could mark the slot, so nothing was ever marked.
- Discarding with
Deletenow clears the drag. Before, pressingDeleteagain with nothing dragged could discard the same amount from that stack a second time. - Bulk trashing obeys
Discard.LockToAdminandDiscard.Enabled. It used to return resources even where inventory discard was locked to admins. - Two identical Jewelcrafting gems on one item come back as two gems. They used to fail.
- Discarded resources that do not fit in your inventory and drop to the ground are now separate items, where they used to be one item shared between the drops.
ReclaimTabEnabled(formerlyEnableExperimentalCraftingTabUI) also hides the tab the first time it would appear.- Trash marks last only while the modifier is held, which is how they effectively behaved already, and they are no longer written to a per-player file.
- Middle-click with the trash modifier held no longer stores the hovered item as well.
- There is no Auga support and no extra version handshake, so a client without OttoStash can still join a server that has it.
- Fixed: coming from AzuAutoStore, the first run overwrote the carried-over settings with defaults. OttoStash now reads them after the copy.
- The reclaim features are translated into Chinese, French, German, Japanese, Korean, Russian and Spanish.
Crafting from chests, from AzuCraftyBoxes
- Crafting and building take the materials you lack from containers within
PullRange, kg drawers, and the backpacks and gem bags you carry. Requirement lists showhave/need, and the build menu shows how many of a piece you can build. - A
pull:block on a container or crafting station inpotto007.OttoStash.ymlkeeps items from being pulled, separately from the store rules. LeaveOneItem, a personal on/off hotkey (Alt+O) with a status icon, and Epic Loot's enchanting table drawing from the chests.- Coming from AzuCraftyBoxes: on the first run, its settings are copied into the new
CraftFromChestssection and its container rules are merged intopotto007.OttoStash.ymlas pull blocks. While AzuCraftyBoxes, CraftFromContainers or CFCMod is installed, OttoStash leaves crafting from chests to it. - Changes from AzuCraftyBoxes 1.8.19:
- Use-to-fill on smelters, kilns, fires, ovens, fermenters, shield generators and ballistas is left out, because OttoFuel already covers those.
- Spending obeys the pull rules. An excluded item used to be counted out and spent anyway.
- A one-ingredient recipe spends from the chests only when the craft succeeds, and only for that recipe.
- Taking from a chest claims its ownership first, so the change is saved.
3.5.1
- Rebuilt against Valheim 1.0.17. Every Harmony patch target still resolves in this build, and nothing else changed.
3.5.0
- Armor stands open a panel. Use on a stand shows your inventory beside the stand's
slots, drawn as a figure, where you can drag gear on or off, Ctrl-click to move it in
one go, or use Take All to empty the stand into your bag. Nothing is thrown on the
ground any more, and the hotbar keys still attach the vanilla way.
Armor Stand Panelturns the panel off.
3.4.1
- Backpacks now take the last unit of a stack from the store hotkey. The bulk path used to stop one short, while the single-item path did not.
- An item favorited both by name and by slot now gets its own tooltip text. That branch could never be reached before.
- The Makail drawer refusal message names the item again.
- Internal: the code is reorganised into feature classes under
Storing/andFavoriting/, the four store targets share one item filter, and the Debug configuration builds again.
3.4.0
Multiplayer fixes, written fresh for this release.
- Chests that were already loaded when you spawn become autostore targets straight away, so you no longer have to open each one after joining a server.
- The pause toggle applies once per chest, even when the game initialises a chest more than once.
- A container carried by another player or a creature is never treated as a chest, so pressing the store hotkey near another player no longer blanks their screen.
- The store hotkey, single-item store and ground pickup leave a chest alone while another player has it open, and OttoStash never takes that chest over. Chests are always released after a store, even if something goes wrong partway through.
- The store hotkey and single-item store now run in one pass, in one frame, and report a single "Stored N items" total.
- A chest only glows when something actually went into it.
- A stack now tops up a chest that has room for less than half of it. Before, that chest was skipped and the whole stack stayed with you.
- Adds an off-runtime unit test suite under
tests/that covers the store pass, the chest rules, the pause handler and the stack moves.
3.3.2
- Rebuilt against Valheim 1.0.16. Every Harmony patch target still resolves in this build, and nothing else changed.
v3.3.1
- Rebuilt against Valheim 1.0.15. Every Harmony patch target still resolves in this build, and nothing else changed.
v3.3.0
- Update the server first, or the server and clients together, because a server still on 3.2.1 disconnects clients running 3.3.0.
- Drops the custom version handshake, so ServerSync's version check decides who can join, the same way it does for OttoPay. A client without OttoStash can join a server that runs it, and a client running a different OttoStash version is still turned away.
- Rebuilt against Valheim 1.0.14. Every Harmony patch target still resolves in this build, and nothing else changed.
v3.2.1
- If you ran 3.2.0, check your settings, because a value you changed under 3.2.0 is back
at its default. Setting names go back to the 3.1.3 spelling, such as
1 - GeneralandPlayer Range, so a config from 3.1.3 or earlier loads with its values. - Drops the Ottomation_ModLib and Jotunn dependencies that 3.2.0 added, so OttoStash needs only BepInEx again.
- Keeps the favoriting tooltip text from 3.2.0, which has no apostrophe, and the README corrections.
v3.2.0
- Depends on Ottomation_ModLib 1.16.0, which brings Jotunn with it. OttoStash uses the
library for its config handling and keeps ServerSync for syncing settings, so
LockConfigurationworks as before. - Config names follow the Ottomation series spelling. The numbered sections lose their
numbers, so
1 - Generalis nowGeneral,1.5 - Fishis nowFish,2 - Shortcutsis nowShortcutsand3 - Favoritingis nowFavoriting. Keys lose their spaces, soPlayer Rangeis nowPlayerRange. Configuration Manager lists the sections in the same order as before, unless its sort-by-name option is on. - Your values carry over. On first load the library renames your config in place before OttoStash reads it, and a config carried over from AzuAutoStore goes through the same rename.
- The README config list now matches the file. It gains
DontStoreToBackpacksandChestsPickupFromGround, which it never listed, andFishSuctionnow describes what the setting actually does. - The config file starts with an
_Authorsection, the same as the rest of the Ottomation series. - The three favoriting tooltips now say "will not be stored" in place of "won't be
stored", because BepInEx saved the apostrophe as
\', which broke TOML formatters and syntax colors. A tooltip still on the old default changes to the new text, and a tooltip you wrote yourself stays as it is.
v3.1.3
Fixes chests not opening in 3.1.1 and 3.1.2.
The container patch answered Container.RPC_RequestOpen with an RPC named
OpenRespons, a misspelling that Valheim 1.0 corrected to RPC_OpenResponse. Because
the patch suppresses the vanilla handler, the reply it sent went to an RPC that no
longer exists, the client never received the grant, and the chest stayed shut. The log
showed only Failed to find rpc method -1556840686, at warning level.
An RPC name is a string hashed at run time, so a stale one compiles, patches and runs
without complaint. Every RPC name in the mod was checked against the 1.0 registration
list, and this was the only stale one. The sibling stack patch already used the current
RPC_StackResponse.
v3.1.2
- Rewrote the
Inventory.StackAlltranspiler so it no longer depends on the vanilla method's local variable layout. It stored through local slot 3 and dropped the list constructor, which only held while those slots stayed put, and Valheim 1.0 renumbered them. The filter is now spliced onto the evaluation stack, where it cannot drift. - Favourite filtering during Stack All no longer assumes a local player exists.
v3.1.1
3.1.0 was effectively inert, and this release fixes the patch targets it could not
resolve. The mod logged that it loaded, then threw out of Harmony.PatchAll, which
aborted every remaining patch and the rest of Awake, so the file watcher, the border
sprite and the MultiUserChest setup never ran. Harmony resolves these targets by name at
run time, so the compiler cannot catch a stale one.
ItemDrop.ItemData.GetTooltipgained a trailingappendingparameter. The hint is now also suppressed while the game builds a nested tooltip, which would otherwise print it twice.Inventory.AddItem(ItemData, int, int, int)gainedskipValidPositionCheck, and three patches targeted the old four-parameter list.Inventory.Loadnow has two overloads, which made the target ambiguous, so it is pinned toLoad(ZPackage), the one containers call.- The tooltip patch no longer assumes a local player exists.
- The ItemDrawers and QuickStack patches only apply when those mods are loaded. Their targets are resolved by name, so without the mod they resolved to nothing and took the whole PatchAll down.
v3.1.0
- Renamed to OttoStash from AzuAutoStore 3.0.11.
- Ported to the Valheim 1.0 API. AzuAutoStore did not load at all on 1.0, because
ZRoutedRpc.Everybodybecame a constant and the bundled ServerSync threwMissingFieldExceptionin the plugin's static constructor.- Rebuilt ServerSync against the 1.0 assemblies.
InventoryGrid.Elementis now the top-levelInventoryElement, and it no longer carriesm_pos.InventoryGrid.OnRightClickandOnLeftClickbecameOnRightDownandOnLeftDown.- The private
Inventory.AddItemoverload gained acheatedparameter. UnityEngine.ImageConversionModulecannot be referenced from net48, because its metadata namesReadOnlySpan<byte>, which lives in the game's Mono mscorlib. Thebyte[]overload ofLoadImagestill exists, so OttoStash binds it once by reflection and drops the reference.
- The config files are now
potto007.OttoStash.cfgandpotto007.OttoStash.yml. Your AzuAutoStore files are copied across on the first run, and an OttoStash file that already exists is never touched. - The console command
azuautostoresearchis nowottostashsearch. - Rebuilt the project SDK-style, with a version-drift guard and a guard against repacking a version that is already tagged as published.
- New title banner and package icon.
AzuAutoStore release history
Version |
Update Notes |
|---|---|
| 3.0.11 | - Update KGItemDrawers API. - Chunked item adds to reduce some churn - Update README.md with much needed missing information. |
| 3.0.10 | - Add a new configuration option Fish Suction to 1.5 - Fish section. When on, this will allow your ships to autostore fish (like the old bug) just by being nearby. Some people like this way of "fishing" and have requested a configuration option to allow the behaviour again. To word it a bit differently: Allow auto-storing fish that are still in water (boat 'netting'). Off = require fish to be out of the water; On = ignore IsOutOfWater() check.- Add acceptable shortcut values to the hotkeys. Been getting a lot of requests for assistance for people that insist on changing this directly in the file. - Fix some more small issues with quality checks. - Prevent some item loss scenarios that could occur. - Throttle owner requests to only try if there isn't an owner already. (which could be the chest fighting your auto-pickup). Hopefully this fixes some issues. - Compatibility with the original ItemDrawers. This means this mod now supports both versions (Makail's and KG's)! - Update README and Example files with new predefined group: Trinket added in Call To Arms. |
| 3.0.9 | - Fix issues with storing items of different quality when a chest is full. - Fix small issue with ownership RPC. |
| 3.0.8 | - Don't allow autostoring of fish unless they are out of water, - Don't allow storing singlular items unless it's from the player's inventory. |
| 3.0.7 | - Possibly fix an issue with the single item storage that could cause all items in your inventory to be stored. Can't remember why I coded it the way I did. Might break something, just report it if it does please. |
| 3.0.6 | - Fix a few bugs when teleporting or being dead. - Fix item duplication (hopefully) |
| 3.0.5 | - Bug fixes and performance improvements. |
| 3.0.4 | - Fix for Bog Witch update. |
| 3.0.3 | - Remove treasure prefix check, instead check creator only. - Fix containers remaining in use after storing. |
| 3.0.2 | - Default exclude tombstones and the player (for backpack mods) in the yml file, updated example file to match on README. If you delete the yml it will regenerate with these defaults. If you don't have them, you can now find the examples in the mod description to add them manually if needed. - Ensure that the ping effect will destroy after the allotted time, correctly. |
| 3.0.1 | - Fix casting issue now that I moved to interfaces for the containers. |
| 3.0.0 | - When using the vanilla Place Stacks button or the open to place stacks feature, it now respects your favorited items/slots. - Integration with Smoothbrain's Backpacks & KG's ItemDrawers. You can now store to them. There is a configuration option added to prevent storing to any backpacks. Found in Section 1 called "Don't Store to Backpacks" Add in global config that prevents storing into chests from the ground when toggled off (Chests Pickup From Ground in Section 1). |
| 2.1.12 | - Fix logical issue in removing invalid containers that was causing valid ones to be removed. |
| 2.1.11 | - If toggle. |
| 2.1.10 | - Fix NRE that can occur when teleporting. |
| 2.1.9 | - Fix item loss issue with new feature. - New feature will now also tell you if the item you attempt to store is in nearby containers or not when Must Have Existing Item To Pull setting is on. |
| 2.1.8 | - Add in a configuration option/logic for a key that you can press (Default: Mouse2 a.k.a. Middle Click). This key, when pressed while hovering an inventory item, will store just that item into nearby containers. |
| 2.1.7 | - Recompile for Ashlands |
| 2.1.6 | - Even more compatibility with QuickStackStore. Creating our stuff after theirs now duplicated their element under mine. I destroy the dupe now. All is well. Their update also make sure to never grab our elements. WOOT |
| 2.1.5 | - Sup vikings. Fixed some issues found when this mod is installed next to QuickStackStore, we now for sure create our stuff after their mod so when they grab the first element...it's not ours! We also search for our element instead of assuming. - Additionally, fixed some issues that might cause NREs on world load. |
| 2.1.4 | - Salutations, Keyboard Warriors and Mouse Monarchs! It's me again, your friendly neighborhood coder (or car warranty guy if you're annoyed with me), armed with another hotfix update hotter than a graphics card in a marathon gaming session. A quirky bug where your beloved player character decided to take an unexpected permanent vacation when using AdventureBackpack alongside this mod was found. Since Goldenrevolver also had the same issue, he got me the fix as well. Shoutout to him. - But wait, there's more! I added a component that will reduce the amount of times a container is pinged. And because I know that nobody likes to be pinged over and over (looking at you, group chats), this feature has manners. It won't ping a container that's already felt the sweet ping of attention. That's one less issue to clutter your adventure. |
| 2.1.3 | - At this point, I should be the car warranty guy. It's me again, with a fix for another NRE caused by an optimization I made. |
| 2.1.2 | - Update ServerSync - Add a message for when you search for an item using the azuautostoresearch command. It will now tell you if something is/isn't found and how much of that something.- The search command can now be invoked simply by left clicking on an item in your inventory while holding down the SearchModifierKeybind found in the 2 - Shortcuts section. - Using the command or searching via an item in your inventory, it will now point you to the closest that contains the item you are looking for. - Now limit the searching of new items in the world causing the search to trigger in the next second...to those that are close to a container. - Add a configuration option in the 1 - General section to speed up the search interval should you wish to do that called IntervalSeconds. - Add some null checks in places they probably should have been to start with. - Probably fixed some other shit I don't remember. Example of the new Feature: ![]() |
| 2.1.1 | - Fix NRE that can be thrown when a mob dies |
| 2.1.0 | - Performance improvements when storing things. It now checks more on an interval of 10 seconds. Though, if you throw out an item it will check within the next second. Also, reduced checks that might be a little expensive. - Add in Favoriting from Goldenrevolver By holding the Favoriting Key (default: Alt) or by using a new button, you can left click on an item to favorite it, or right click to favorite the slot it is in. This prevents most features of this mod from affecting it. No accidental quick stacking, sorting, storing or trashing. The favoriting state is shown with a custom colored border around the slot. None of the configuration options related to favoriting are synced with the server. |
| 2.0.3 | - Revert a small bit of code that fixes an issue. The issue is that some items were not being added to the correct groups as expected. - Add ElementalMagic and BloodMagic predefined categories |
| 2.0.2 | - Fix Potion criteria - Fix Equipment category to include more items like it originally should have. - Add more predefined groups. I added the following Armor, Equipment, Weapons, Shield, Chest, Legs, Shoulder, Helmet, Utility, Ammo, Arrows, and Bolts. - A file will now be created next to the dll called PredefinedGroups.txt which will contain all of the current items in the predefined groups (modded and vanilla, populates when you go into a server/world) |
| 2.0.1 | - Fix some item deletion, add ability to pause the execution of storing items (LeftShift + Period by default and 10 second wait by default) - If the pausing feature doesn't work like intended, I have code queued up to potentially fix the issue. Please report bugs |
| 2.0.0 | - MAJOR VERSION UPDATE- Everything about the configuration has changed. Please delete your old config file and boot the game once with this mod installed to get a clean one. - Move as many of the configuration options that make sense to YAML configuration. Please read the mod page for details on where to find and read the file for how to use. Ask questions if you need to in my discord. As frequent questions are asked, they will be added to the wiki tab for this mod. Read the FAQ section on the mod page for more details on that. - If you have used AzuCraftyBoxes in the past, the configuration is pretty much the same! Works the same, just in reverse (because we are storing things!) - Main difference between this and AzuCraftyBoxes configurations is that the range can be set in the yaml per container. - TLDR; This update breaks shit because it's a major change, if you are using the mod, delete everything (configuration file and dll). Start over. Read the mod page you lazy person...or figure it out on your own if you're not a smoothbrain |
| 1.1.5 | - Update for Valheim's latest version. |
| 1.1.4 | - Small update to fix an error on server connection |
| 1.1.3 | - Hildir Update |
| 1.1.2 | - Updated for Valheim 0.216.9 |
| 1.0.2 | - Fixes that I can't remember. ALo helped find the bugs - Added a new config option to allow you to disable the chest highlight - Prevent typing your hotkey while any UI is open so you don't store your items in the chest by accident |
| 1.0.1 | - AmmoNonEquipable item type missing fixed |
| 1.0.0 | - Initial Release |
