You are viewing a potentially older version of this package. View all versions.
HelixDev-Hoard-1.0.0 icon

Hoard

A shared, upgradeable hoard for your enchanted gear, with a sortable, filterable list, plus a Rune Cache for enchanting materials. Required on server and clients.

Date uploaded 2 weeks ago
Version 1.0.0
Download link HelixDev-Hoard-1.0.0.zip
Downloads 16
Dependency string HelixDev-Hoard-1.0.0

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 icon
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.2350
ValheimModding-Jotunn-2.30.2 icon
ValheimModding-Jotunn

Jötunn (/ˈjɔːtʊn/, 'giant'), the Valheim Library was created with the goal of making the lives of mod developers easier. It enables you to create mods for Valheim using an abstracted API so you can focus on the actual content creation.

Preferred version: 2.30.2
shudnal-ConditionalConfigSync-1.0.9 icon
shudnal-ConditionalConfigSync

Shared config synchronization and server policy library for Valheim mods. Installed as a dependency and compatible with Jotunn and ServerSync.

Preferred version: 1.0.9
RandyKnapp-EpicLoot-0.14.13 icon
RandyKnapp-EpicLoot

Adds loot drops, magic items, and enchanting to Valheim.

Preferred version: 0.14.13

README

Hoard

One shared, upgradeable hoard for your group's enchanted gear, with a sortable, filterable list instead of a chest grid. Build a Hoard anywhere: every Hoard piece in the world opens the same contents. A second piece, the Rune Cache, is a small public chest for runestones, shard stones and enchanting materials.

Hoard must be installed on the server and on every client. A client without it (or with a different version) can't join a server that runs it, and a client with it won't join a server without it. EpicLoot is required too: the Hoard stores enchanted equipment only, and it uses EpicLoot to tell what is enchanted.

The Hoard

  • Build it with the hammer (Misc tab) at a workbench. The default cost is 20 Wood, 10 Stone and 5 Resin. Use it like a chest to open the Hoard window.
  • One store per world. The contents live on the server, not in the piece, so you can build as many Hoards as you like and they all open the same items at the same tier. Removing a Hoard with the hammer always works and loses nothing: rebuild one anywhere and everything is still there.
  • Nothing damages it: raids, monsters, fire, spells, tools, weather and losing its support all leave it untouched.
  • What goes in: identified EpicLoot magic equipment (weapons, shields, armour and other gear, from any mod, EpicLoot's special magic items included). Plain gear, unidentified items and anything else are refused with a message; enchanting materials belong in a Rune Cache.
  • Stand close: you must be within 5 m of a Hoard (plus a little slack for lag) to open it, take, deposit or upgrade.
  • Wards apply to the piece, like any chest: inside an active ward, only the ward's owner and its permitted players can use that Hoard. But every Hoard opens the same store, so a Hoard built outside the ward reaches everything the warded one holds. Wards protect a piece, not the store: Hoard is made for groups that share their gear.

Tiers

The Hoard starts with 40 slots. Upgrade it at any Hoard piece, one tier per boss: the boss must be dead in the world (anyone in the group can kill it), and each tier costs that biome's materials plus EpicLoot materials. Upgrades never lower capacity (a config edit can: see Settings), and the chest changes its look as the tiers go up.

Tier Boss that must be dead Slots Materials (default) Look
0 — (build cost) 40 Wood 20, Stone 10, Resin 5 wooden chest
1 Eikthyr 80 Deer hide 10, Hard antler 1, Magic dust 5, Magic essence 2 wooden chest
2 The Elder 120 Bronze 10, Fine wood 10, Magic dust 10, Magic reagent 5 reinforced chest
3 Bonemass 180 Iron 10, Chain 2, Rare dust 5, Rare essence 3 reinforced chest
4 Moder 240 Silver 10, Wolf pelt 5, Rare dust 10, Rare reagent 5 black metal chest
5 Yagluth 300 Black metal 10, Linen thread 10, Epic dust 5, Epic essence 3 black metal chest
6 The Queen 380 Eitr 10, Yggdrasil wood 10, Legendary dust 5, Legendary reagent 3 Dvergr strongbox
7 Fader 480 Flametal 10, Grausten 10, Mythic dust 5, Mythic essence 3 grausten chest

Coin piles grow around the chest as the tiers go up. Every tier is one line in the settings.

Upgrading: the window's header shows the next tier, its slots, the boss still needed and each material as have/need, and the Upgrade button says why it's off. The materials must be in your own inventory (nearby chests don't count). The server records the new tier first and your materials are taken when it confirms, once. If two players press Upgrade together, one gets it and the other keeps their materials.

The window

Your own inventory stays open next to the list. Drag an item from your inventory onto the list, or Ctrl-click it in your inventory, to deposit it; click a row, or drag it to your inventory, to take it. Deposit all magic gear sends every enchanted item in your inventory except the hotbar, anything equipped, AzuExtendedPlayerInventory's equipment and quick slots, and your QuickStackStore favourites; it sends only what fits and says how many didn't. Walking more than 5 m away closes the Hoard window and leaves your inventory open.

  • Filters: text search (names and enchantments), rarity, item type, biome tier, upgrade level, set pieces, enchantments (pick from those in the store, match ALL or ANY, with an optional minimum value each) and up to three stat rows such as "damage >= 120" or "weight <= 10". Stats are the item's EpicLoot tooltip values. The type and biome lists show only what the Hoard holds.
  • Sort by clicking a column header; click it again to reverse. Your last sort is remembered.
  • Compare: hovering a row shows the item's tooltip next to what you have equipped in that slot (TooltipCompare turns this off).
  • Taking needs a free inventory slot. If your inventory fills up before an item arrives, the window shows "N item(s) waiting: make room", and the item comes to you as soon as a slot is free.
  • The game saves your character when you open the Hoard (a brief save; the log gives its time), and once more before your first deposit after you craft something with the window open. Depositing waits for that save; it is part of what keeps an item from being lost or duplicated if the game crashes. If that save fails, deposits stay off for that window (taking still works).
  • Gamepad: while the list has focus, the stick or D-pad moves through it, A takes, X deposits all and Y cycles the sort column (and its direction); LB moves focus to the list and RB back to your inventory (where Y closes the inventory, as in vanilla); B closes the Hoard and your inventory. The filters, the enchantment picker, the stat rows, the column headers and the Upgrade button need a mouse.

An item whose mod was removed stays safely in the Hoard as "Unknown item" and can't be taken until that mod is back.

The Rune Cache

  • Build it with the hammer (Misc tab) near EpicLoot's enchanting table: you must stand within 10 m of one (measured horizontally), or the hammer refuses it. The default cost is 10 Fine wood and 8 Iron, like the vanilla Personal Chest, whose look it has. It holds 40 slots (5 rows of 8; the rows are a setting).

  • It only takes runestones, shard stones and EpicLoot's enchanting materials (dust, essences, reagents, shards). Anything else is refused, whether it is dragged, swapped, quick-stacked or added by another mod. (Without EpicLoot's API it can't tell, and accepts anything.)

  • It is public: anyone can open it (a ward applies, as to any chest). Each Rune Cache has its own contents; it isn't shared like the Hoard.

  • It can't be damaged, and the hammer only removes it when it is empty, so it never spills. (An admin's forcedelete is the exception: see Removing pieces.)

  • Enchanting can pull from it: with AzuCraftyBoxes, enchanting and augmenting costs are taken from a nearby Rune Cache, for the materials AzuCraftyBoxes is set to pull.

  • Its items can't be sacrificed at the enchanting table.

  • QuickStackStore quick-stacks into it.

  • AzuAutoStore: to keep auto-store from filling it with other items, add this to the server's Azumatt.AzuAutoStore.yml:

    hoard_runecache:
      exclude:
        - All
    
  • PlanBuild: if you use PlanBuild, add hoard_runecache to its Excluded plan prefabs setting. PlanBuild only checks a piece's crafting station when a plan is completed, and the Rune Cache has none (Hoard's near-table rule replaces it), so a planned Rune Cache could be finished away from an enchanting table. PlanBuild still lets admins plan excluded pieces.

Settings

File: BepInEx/config/helix.hoard.cfg.

  • The server's values apply to everyone connected. With Lock Configuration on (the default), only server admins can change them: admins can edit every setting in game with a configuration manager, and the server applies and shares the change right away. Everyone else sees them read-only.
  • A hand edit of the file on the server is picked up within a few seconds and pushed to players, no restart needed. A new build cost applies to building and to what removing a piece gives back. New Rune Cache rows apply to new Rune Caches and to existing ones the next time their area loads; a Rune Cache never gets fewer rows than its items need, so lowering the setting loses nothing.
  • The 9 Client section is local to each computer.
Section Setting Default
1 General Lock Configuration true Only admins may change the synced settings.
1 General ConfigReloadSeconds 5 How often the server checks the file for hand edits. 0 = off.
2 Hoard BuildCost Wood:20, Stone:10, Resin:5 Cost of a Hoard piece.
2 Hoard AccessRange 5 Metres from a Hoard to use it.
2 Hoard AccessTolerance 2 Extra metres the server allows for lag.
2 Hoard MaxItemsPerPut 10 Most items per deposit message (Deposit all sends several).
3 Tiers Base Slots 40 Capacity at tier 0.
3 Tiers Tier 1 … Tier 7 see above One line per tier, gate; slots; materials, e.g. defeated_eikthyr; 80; DeerHide:10, HardAntler:1, DustMagic:5, EssenceMagic:2. gate is the world key the boss sets (- for none). A line that doesn't read correctly is logged. While the server runs it keeps its last valid value; at startup it disables that tier and the ones above it, and if the Hoard is already at that tier its capacity falls back to the highest valid line below until you fix it (nothing stored is lost, but deposits are refused while it's over capacity). Lowering a tier's slots lowers capacity the same way.
4 Rune Cache BuildCost FineWood:10, Iron:8 Cost of a Rune Cache.
4 Rune Cache Rows 5 Rows of 8 slots (4–8).
4 Rune Cache TableRange 10 How close (horizontally, from where you stand) an enchanting table must be to place one.
5 Storage SnapshotCopies 10 Timestamped copies of the Hoard file to keep (one per world save).
5 Storage JournalMaxMB 16 Size at which the Hoard journal starts a new file.
5 Storage SnapshotDebounceSeconds 2 Delay before the Hoard file is rewritten after a change.
9 Client UiScale 1 Size of the Hoard window. Local.
9 Client TooltipCompare true Show the equipped item next to a hovered one. Local.
9 Client LogLevel Info Quiet, Info or Debug. Local.

For server admins

Where the Hoard is kept

In the server's worlds folder (worlds_local), next to the world's own files:

  • <World>.hoard, with .old and .old2: the store, rewritten a couple of seconds after each change.
  • <World>.hoard.journal (and .journal.1, .journal.2, …): one line per change (deposits, takes and restores carry the item's full bytes), written to disk before the player is told the change happened. After a crash or a power cut the store is rebuilt from the newest store file plus the journal.
  • <World>.hoard.<yyyyMMdd-HHmmss>: a copy taken at every world save; the newest SnapshotCopies are kept.

Each player's computer keeps a small journal of its own transfers in a Hoard folder in the game's local save folder (<playerID>_<worldUID>.hjl, plus ui_<playerID>.hui for the remembered sort). Don't delete it: it is what finishes a transfer a crash interrupted. The server remembers the outcome of each transfer until that player's game says it no longer needs it, which is what lets a crashed game recover. The log warns when one player has more than 5,000 outstanding; the limit is 100,000 per player, and an item not yet delivered is never dropped.

Rolling a world back

Restoring a world backup does not roll the Hoard back. To roll both back to the same moment, with the server stopped:

  1. Restore the world backup as usual.
  2. Move <World>.hoard, <World>.hoard.old, <World>.hoard.old2 and every <World>.hoard.journal* file into another folder. Keep them: they hold every change made since.
  3. Copy the timestamped <World>.hoard.<yyyyMMdd-HHmmss> taken at the same world save as the backup (the same time, or the last one before it) to <World>.hoard.
  4. Start the server.

Step 2 matters: if the journal stays, the server replays it on top of the copy and the Hoard comes back as it was before the rollback.

Players' characters are not rolled back, so, as with chests in a rolled-back world:

  • What players took out after that moment is both in their inventories and back in the Hoard.
  • What they deposited after it is gone from the Hoard, unless the depositor's game still holds the deposit in its own journal (it forgets a transfer some time after it is settled). Then, at that player's next login, the server answers that it never received the item, and the game gives it back. If someone else took that item out after the chosen moment, it now exists twice.
  • A taken item that the copy still lists as not delivered, but that reached the player (and was forgotten by their game) after that moment, is sent again at their next login and arrives a second time.

So roll back only when you need to, and choose the copy closest to the world backup. Only the newest SnapshotCopies copies are kept (10 by default, one per world save, so about five hours at the usual 30-minute save interval): raise it to cover how far back your world backups go.

Removing pieces

The admin forcedelete console command can't be blocked. A Hoard removed that way is safe (the store isn't in the piece). A Rune Cache removed with forcedelete is deleted with everything in it; nothing spills. Empty it first.

Admin commands

Admins (players in the server's adminlist.txt, the same list vanilla's admin commands use) type these in the game console, or in chat with a leading /. The server checks the admin list and answers in the console or chat, once the player has finished joining. The dedicated server's own terminal doesn't take commands; when you host from the game, your console runs them directly.

Command
hoard or hoard help The usage.
hoard stats Items, size, tier, pending and undelivered transfers, journal and snapshot state.
hoard journal <player name, player ID, item ID or request ID> The newest matching journal lines. Item IDs are decimal and request IDs hex, as the lines print them.
hoard restore <item ID or request ID> [player ID] Gives a new copy of an item from the journal: for a request ID, that request's item; for an item ID, the item as last recorded (deposited, taken or restored). It goes to the player named on that line, or to player ID: at once if they are online, otherwise when they next join. It never happens by itself. Every run makes one more copy, repeating the command included, and a grant to a wrong player ID can't be taken back. The reply warns when the result is an extra copy: the item is still in the Hoard, the original grant hasn't been delivered yet, or the item was already restored.
hoard export Writes every stored item to <World>.hoard.export-<time>.hoardx next to the store, one item per line (base64).
hoard verify Re-reads every stored item and undelivered transfer and names any that can't be loaded. Items whose mod is missing are listed separately and kept.

hoard journal and hoard restore read the whole journal the server keeps (usually up to about twice JournalMaxMB) on the same background thread that writes deposits and takes to disk, so those wait until the command is done. It takes about 12 to 16 ms per MB of journal on a dedicated server: roughly 0.2 to 0.5 seconds at the default 16 MB, and proportionally longer with a larger JournalMaxMB. Keep it near the default if admins use these commands while others play. Only admins can run them, and a refused attempt is logged at most once a minute per player.

Compatibility

  • EpicLoot (required, 0.14.13): Hoard uses its public API and a few internal methods it looks up at startup. If a later EpicLoot changes one of the internal methods, the matching list column or filter is hidden and everything else keeps working. If its public API changes, nothing can be deposited (taking still works) and the Rune Cache accepts any item until Hoard is updated. The [bind] log lines say which.
  • Gear from other mods (Therzie's Warfare, Armory and Wizardry, ValheimArmory, MagicPlugin, …) is classified by EpicLoot's own data, with no item lists in Hoard. The item types and biome tiers in the list come from the server's EpicLoot data, so they can differ slightly from a player's own tooltip when EpicLoot extended its item list on that player's computer.
  • AzuCraftyBoxes, QuickStackStore, AzuAutoStore, PlanBuild: see the Rune Cache. MultiUserChest: see Limitations.
  • AzuExtendedPlayerInventory and QuickStackStore favourites are respected by Deposit all.
  • Every Hoard prefab is named hoard_*.

Limitations

Every transfer is on the server's disk before it is confirmed, and your game keeps its own journal, so a crash or a lost connection during a deposit or a take is settled at your next login. What that can't cover:

  • After a crash, an item you took comes back only if it was still in your inventory. Hoard notes the moment an item it gave you leaves your inventory (dropped, stored, lost on death, used up) before the game saved your character, so a crash never hands it back.
  • An item you took, moved into a backpack (or swapped into an AzuExtendedPlayerInventory loadout), and then a crash before the game saved your character is lost, as it is when you take something from a chest and the game crashes.
  • A crash within about a frame of an item leaving your inventory can still duplicate it.
  • With MultiUserChest: if you drag an item you took into a chest that another player's game is handling and, in a rare race, that chest turns it down, the item comes back to you as a new copy. If the game then crashes before your character is saved (opening a Hoard saves it), that item is lost. It is never duplicated. Chests your own game is handling are not affected.
  • One character on two computers: the journal stays on the computer you play on; it doesn't travel with the character. If the game crashes during a deposit or a take, log back in on that same computer first, so it can finish that transfer. Playing the character on another computer before that can leave a deposited item both in the Hoard and on the character, or a taken item missing until you log in on the first computer again.
  • The range check trusts the positions players' games report, like other chest mods: it keeps honest games consistent and is not an anti-cheat.

Uninstalling

Empty every Rune Cache first. Then remove Hoard from the server and every client.

  • The Hoard's contents stay in <World>.hoard and its journal, untouched, and come back if you reinstall.
  • On a dedicated server, Hoard pieces and Rune Caches stay in the save as unknown objects and come back if you reinstall. In a single-player or self-hosted world the game deletes unknown objects when it loads them, so a Rune Cache still holding items loses them.

Log lines

Hoard logs to BepInEx/LogOutput.log with an area tag: [bind] (what it found in EpicLoot and the game at startup), [store] (loading, snapshot N items, rev R, X KB, copies), [txn] (one line per deposit, take and restore on the server; refusals as warnings with the reason), [row], [piece], [runecache], [tier], [ward], [net], [ui], [cfg], [admin], [start], [patch] and [health]. [txn] also logs each upgrade. [patch] says at startup whether every feature installed; warnings and errors say what was turned off and why.

On a dedicated server, loading some vanilla armour to compute its stats makes Unity log PlayerClothWindShelter: MagicaCloth component not found. It is harmless: the server has no cloth to simulate.

CHANGELOG

Changelog

1.1.2 — 2026-09-28

Required on the server and on every client (exact version match). The Hoard's files are unchanged from 1.1.0, so updating converts nothing.

  • The Hoard window slides in with the inventory: it was placed a frame early, before the inventory's slide had moved, so it flashed in its final spot, jumped to the top and then trailed the inventory down. It now moves with the inventory from the first frame, as a chest does.

1.1.1 — 2026-09-27

Required on the server and on every client (exact version match). The Hoard's files are unchanged from 1.1.0, so updating from 1.1.0 converts nothing.

  • No more hitch when opening a Hoard: the game no longer saves your character every time you open one. That save froze the game for about a fifth of a second and made the window pop in instead of sliding in with the inventory. Deposits are as safe as before: a deposit still saves first when an item isn't in your last save as it is now, so the first deposit of newly looted gear may hitch once instead. Items you take from a Hoard are now protected against a crash from the next autosave onward, where reopening a Hoard used to save them sooner; the leftovers in Limitations (a taken item moved into a backpack, or refused by a chest another player's game controls) can therefore last until that autosave.

1.1.0 — 2026-09-26

Required on the server and on every client (exact version match). Back up the world folder before updating: 1.1 converts the Hoard's files on its first start (it keeps a copy of the 1.0 files; 1.0 can't read the new ones — see "Going back to 1.0" in the README).

  • Ward stores. A Hoard inside a player's ward opens that ward's own store, for the ward's owner and the players on its list. Hoards outside wards keep opening the shared store, which keeps everything 1.0 held. Several wards over one Hoard: the ward whose store was set up first. A switched-off ward's store stays open to its list (anyone can join a switched-off ward at its stone, so the window warns). A store whose ward is gone or off is kept for its owner and can be claimed at a new ward.
  • Personal stores (optional). UnwardedHoards = Personal gives each player their own store at Hoards outside wards.
  • Each store upgrades on its own, on the same boss ladder. Each Hoard piece shows the tier of the store it opens.
  • History tab: a store's recent deposits, takes, upgrades and claims, with who and when, for anyone who can open it.
  • Upgrades pay from nearby chests with AzuCraftyBoxes, as crafting does. The Upgrade button counts them, and a shortfall (a chest emptied a moment earlier) is shown and logged.
  • New settings (section 6 Wards): WardStores, OffWardAccess, WardRange (for ward mods that change the range only in game), HistoryLength, UnwardedHoards. All apply live and never move or delete items.
  • New admin commands: hoard stores and hoard reattach (move a kept store to a ward, or hand a personal store to another character). hoard journal takes a store: filter; export and verify cover every store.
  • Rune Cache: a labelled material shelf in a wardrobe. One slot per material (Magic to Ancient × Dust, Essence, Reagent, Shard, Runestone), each holding one stack and showing a faded icon when empty; loose cells beside and below for shard stones and etched runestones. Every way of adding an item routes it to its slot or refuses it with a message. QuickStackStore's Sort tidies it. Recycle_N_Reclaim's Reclaim all does nothing on it. Existing Rune Caches become wardrobes and move their items into the slots the first time they're opened; nothing is removed. 4 Rune Cache.Rows is replaced by FreeRows; 9 Client.RuneCacheShelfView turns the labels off.
  • The Hoard window no longer jumps when it opens: it slides in with the inventory, as a chest does.
  • The Hoard window names its store in the title (Shared, Yours, or the ward owner's).
  • Shorter, plainer README.
  • Checked against Valheim l-1.0.16, AzuCraftyBoxes 1.8.26 and AzuExtendedPlayerInventory 2.6.0.

1.0.1 — 2026-09-25

Required on the server and on every client, like 1.0.0 (exact version match).

  • Crash safety: before a deposit, the game now saves your character whenever the item isn't exactly what your last save holds (changed in place, for example by an EpicLoot Brokkr's Gift, replaced by a craft, moved or taken since). Before, depositing an item changed that way and then crashing could duplicate it.
  • Crash safety: an item taken from the Hoard and then remade by a recipe that consumes it (for example a hand refuel) is now followed by its enchantment data, so an extra plain copy handed back by another mod can't hide it. Before, a crash right after such a craft could lose it.
  • Crash safety: a character save whose Steam Cloud write failed (the game falls back to a local copy) no longer counts as saved for Hoard's purposes.
  • Fewer save hitches: your character is saved when you open the Hoard (and before depositing an item your last save doesn't hold), no longer also when you close it and after Deposit all.
  • Window placement: the Hoard window follows the size of your inventory and other mods' panels (for example AzuExtendedPlayerInventory's extra rows and character panel) and no longer covers them.
  • Rune Cache look: the blue glow is gone; it looked like a solid blue chest.
  • Checked against Valheim l-1.0.16: none of the game code Hoard relies on changed from l-1.0.15.

1.0.0 — 2026-09-24

First release, built against Valheim l-1.0.15 (network version 40), BepInEx 5.4.23.5, Jotunn 2.30.2, ConditionalConfigSync 1.0.9 and EpicLoot 0.14.13.

  • The Hoard (hammer, Misc, at a workbench): one world-wide store of enchanted equipment, kept on the server. Every Hoard piece opens the same contents; pieces take no damage, and removing one loses nothing.
  • Seven boss-gated upgrades, from 40 to 480 slots, each paid in biome and EpicLoot materials; the chest's look changes with the tier. The whole ladder is configurable.
  • A sortable, filterable list next to your inventory: text, rarity, type, biome tier, upgrade level, set pieces, enchantments (ALL/ANY with minimums) and up to three stat rows, with the item's tooltip compared to what you have equipped. Deposit all magic gear skips the hotbar, equipped items, AzuExtendedPlayerInventory slots and QuickStackStore favourites. Basic gamepad support.
  • Crash-safe transfers: every change is journaled to disk on the server before it is confirmed, and each player's game keeps its own journal, so a deposit or take interrupted by a crash or a lost connection is settled at the next login. After a crash, a taken item comes back only if it was still in your inventory; the few cases this can't cover are listed in the README under Limitations. Stored items are kept byte for byte, including items whose mod was removed.
  • The Rune Cache (hammer, Misc, near an enchanting table): a public chest that takes only runestones, shard stones and EpicLoot enchanting materials; it can't be damaged, can only be removed with the hammer when empty (an admin's forcedelete deletes it with its contents), is closed to sacrifice, and works with AzuCraftyBoxes and QuickStackStore.
  • Admin commands in the console or chat: hoard stats, journal, restore, export and verify, accepted only from players who have finished joining and are in the server's admin list.
  • Required on the server and on every client (exact version match). All gameplay settings are server-synced with an admin lock and editable in game with a configuration manager; hand edits of the file on the server are reloaded live.