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.
RunicProduction
Server-authoritative chest-linked ingredients, fuel, output, and stock replenishment for Valheim production stations.
| Date uploaded | a day ago |
| Version | 2.1.2 |
| Download link | Chazman-RunicProduction-2.1.2.zip |
| Downloads | 544 |
| Dependency string | Chazman-RunicProduction-2.1.2 |
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
Runic Production 2.1.2
Connect your production stations to shared chests without repeated chest ownership handoffs. Ingredients, fuel, output, production state, and replenishment changes commit through the same server inventory authority used by Runic Storage and Crafting.
Linking controls
Point at a station, perform the gesture, then point at the destination chest and repeat it within 30 seconds. Hold Shift during both gestures to unlink.
| Gesture | Role |
|---|---|
| Alt + left mouse on station / ingredient control | Input |
| Alt + left mouse on native fuel control | Fuel Input |
| Alt + right mouse | Output |
| Alt + middle mouse | Replenishment |
Multiple chests can serve each supported role. An output chest can also supply another station. Links and replenishment plans are saved together; setup does not claim native ownership of either endpoint.
Stations and production
Smelter-family stations support input, fuel, and output. Cooking stations and ovens support input, appropriate fuel, output, and replenishment. Allowed recipe stations and fermenters support input/output/replenishment. Beehives support output; refillable fires and lamps support fuel.
Production keeps the native recipe quantities, fuel costs, cooking/burning thresholds, fermentation duration, and relevant environmental checks. The station's simulation owner supplies roof, fire, smoke, wind, or bee conditions; the server commits inventory and timer changes. Open chests remain usable by automation.
Place a physical exemplar in a replenishment chest to establish a supported target. An empty link activates when an exemplar is added. Reserves, capacity, recipe identity, access, and configured limits are rechecked before production. Smelter-family output that cannot enter a linked chest appears at the native output point and can be collected normally. Cooking, fermentation and hive output retain their normal station collection behavior when routing is unavailable.
Native station visuals and ambient processing remain active. Manual fueling and collection use the shared server inventory authority on enrolled stations. Turning automation off or removing its last link does not freeze an enrolled station's ordinary clock. Destroyed enrolled stations release their queued contents as ordinary ground items. Existing recovery chests can be removed without creating another chest or refunding building materials.
Settings are in BepInEx/config/chazman.RunicProduction.cfg.
Normal Runic inventory actions, crafting, and building do not force a character save or disk-sync checkpoint. Ordinary game saves, autosaves, and their indicators keep their normal behavior. Pending receipts remain in memory and are included in ordinary character saves. A crash before the next character save can lose or duplicate recent transfers; an OS crash or power loss can also lose or reorder recent buffered server writes. Server confirmation, permissions, inventory revisions, and live request deduplication still apply.
Native chest compatibility
Ordinary chest transfers and mods using Valheim's Container inventory callbacks remain visible immediately. Changes to an enrolled chest are merged into its latest contents rather than overwritten by an older Runic snapshot. Deposits retain item metadata and expanded inventory rows. Unenrolled chests keep native saving and opening behavior.
Runic's coordinated operations still share current quantities. Unknown mods can perform their own transfers outside that coordination; simultaneous withdrawals can follow native race behavior. These transfers do not add a character-save checkpoint or wait for a disk flush. Custom inventory implementations that bypass Container callbacks and ZDO inventory replication need their own adapter. Initial enrollment asks a connected owner for fresh contents for at most 250 ms, then uses the native replicated snapshot. Unloaded owners and ownership changes do not keep enrollment pending indefinitely. Once enrolled, the existing ledger remains authoritative. No per-action character save is added.
Dismantling removes the native world object immediately and releases its contents as ground items. Removing an old recovery chest is terminal: it releases its contents without making another chest or refunding construction materials. Large inventories and drawers recover in bounded batches using ordinary item stack limits, preserving item data. An unfinished recovery resumes after a server restart. No per-action character save or forced world save is added.
Unavailable linked chests no longer cancel a furnace's own processing tick. Other ready links remain usable; unrouted smelter output drops into the world as usual.
Multiplayer and upgrading
Each Runic mod works independently with BepInEx. Runic Storage is not required by Crafting or Production, and no other Runic mod is required. Install the same chosen modules and builds on the server and participating clients, then restart. All required synchronization code is included in each DLL; installing several modules shares one service.
Back up the world, characters, configurations, and the server's RunicOperations/<world UID> folder together. The ledger is authoritative after enrollment. Do not delete it, restore only the world, or downgrade an enrolled world without restoring the matching backup. Existing native chest contents and production links are imported on first use. Chest ledger schemas 2-7 are read; schema 7 is written. Older 2.0.x DLLs cannot read schema 7. Restore the complete pre-update world, ledger, and character backup together if rolling back.
Supported storage includes placed, static chests using Valheim's standard Container component and the Makail ItemDrawers adapter. Drawer assignments and large quantities are preserved; configured prefab allowlists still apply. SmartSort does not reorganize drawers. Carts, ships, graves and other custom inventory implementations retain their own interactions.
Wards, private chests, range, item identity, capacity, and configured item protections still apply. Multiple viewers do not block transfers. If a player runs out of inventory space, an accepted delivery remains pending in the current session until space is available. Pending transfers included in an ordinary character save can resume in the original world; unsaved transfers have no crash-recovery guarantee. Do not remove a saved pending character receipt.
The server's ranges and access policies govern accepted operations. Keep participating clients' corresponding settings aligned so previews match server decisions. Version 2.1.2 reads character receipt versions 2, 3, and 4 and continues writing version 4 with original inventory slots. Returned offered items use those slots when available; occupied slots are preserved and normal available space is used instead. Versions before 2.0.7 cannot read version 4 receipts, including completed receipts. Restore matching character, world, and operation-ledger backups together when rolling back; completing a transfer alone does not make its receipt readable by older versions.
Language and support
Keep the Translations folder beside the DLL. Missing translations fall back to English.
CHANGELOG
2.2.1
- Remove durability from Runic material-change, inventory snapshot, sorting, stacking and drawer eligibility checks. Worn items no longer block unrelated transfers or nearby material use.
- Remove the snapshot durability correction routine. Item wear and repair continue to use the game's normal behavior.
2.2.0
-
Keep shared native chest deltas tied to their planned slots instead of redirecting changes to another matching stack.
-
Let completed deliveries wait in character data without blocking deposits when the backpack is full; resume as space becomes available, using ordinary character saves.
-
Use the native owner's current chest inventory, dimensions, stack limits, and serialized item data as transaction input.
-
Apply only each requested item or rule change; stop projecting a separate inventory ledger over ordinary chest edits.
-
Preserve unrelated edits, modded item metadata, and native chest destruction behavior.
-
Retain legacy recovery data while moving active inventories to native world persistence. Read journal versions 1–2 and write version 2; use a complete matching backup to roll back.
-
Keep each Runic module independently installable. Matching server and client modules are still required; no companion Runic dependency is added.
-
Keep native production clocks and installed station patches active. Route actual spawned products, preserve their custom data, and release buffered contents on native station removal.
2.1.3
- Honor legal stacks above 65,535 when a stack mod extends Valheim's native item serialization, including ItemStacksItemWeights.
- Remove the old 16-bit cap from shared inventory loading and transfer capacity, while checking that the installed serializer preserves extended counts.
- Allow saved pending deliveries affected by that cap to resume without deleting receipts or resetting the world.
- No new dependencies, save format changes, or per-action character saves.
2.1.2
- Fixed removed occupied chests being replaced by another recovery chest, including repeating unsupported chest collapses.
- Recovered chest and enrolled production contents now drop as ordinary ground items; old recovery chests do not refund construction materials.
- Preserved item metadata and large drawer quantities through bounded, restart-resumable recovery.
- Shared fix included independently in this mod; no new mod dependencies or per-action saves.
2.1.1
-
Remove dismantled managed objects immediately instead of keeping their world records alive while inventory retirement waits; retain inventory data for background salvage.
-
Prevent repeated destruction callbacks from issuing the same managed piece's building-material refund again.
-
Continue furnace processing when an optional linked chest is enrolling or unavailable. Other usable links still transfer, and unrouted smelter output uses native world drops.
-
Retire a furnace that was dismantled during enrollment even while its previous owner remains connected, without waiting indefinitely for an owner snapshot.
-
Fix initial chest enrollment waiting indefinitely when a remote owner has unloaded the chest, its ownership changes, or its inventory exceeds the old 64 KB capture limit.
-
Give fresh owner capture one bounded 250 ms window, then use the replicated native contents. Existing enrolled chests do not wait for this step.
-
Recover unfinished owner-side enrollment markers from earlier releases; keep existing published ledger identities intact.
-
Compress initial owner snapshots and accept inventories up to the existing 1 MiB codec limit. Late capture replies cannot replace enrolled contents.
-
Preserve independent installation and ordinary autosaves. No new mod dependencies or per-action character saves.
2.1.0
- Remove mandatory Runic-to-Runic dependencies. Storage, Crafting, and Production each include their own shared runtime and work independently with BepInEx.
- Preserve native and third-party chest deposits and withdrawals when a chest also participates in Runic automation.
- Merge native item changes with current chest contents, including item metadata and expanded rows, instead of replacing them with an older snapshot.
- Keep pending native changes visible and retry the same request if the network queue is full.
- Limit Storage chest controls to views opened through Storage; disabled Storage and native/third-party views retain normal interaction.
- Separate Runic viewer presence from vanilla's chest-in-use lock.
- Retain the one-click nearby building fix and ordinary-save behavior: no per-action character saves or forced disk synchronization.
- Preserve existing configuration and chest-ledger data. Keep matching server/client builds for whichever modules you choose to install.
2.0.8
-
Retry a delivery blocked by a full backpack after 100 ms, so freeing a slot does not impose the previous two-second wait.
-
Remove mandatory character checkpoints from normal manual station inventory interactions.
-
Use buffered server journal and inventory writes without forcing disk synchronization for each production operation.
-
Preserve live inventory concurrency, permissions, revisions, native production timing, and ordinary game saves.
-
Recent transfers and buffered writes no longer carry a per-operation crash-persistence guarantee.
-
Require Runic Storage 2.0.8 and matching installed Runic module builds.
Earlier entries below describe their historical release behavior. Their per-operation saving guarantees were changed in 2.0.8.
2.0.7
- Let manual inventory actions pass queued automatic station, recipe, drawer, and animal work; bounded scheduling still gives automation a turn.
- Reuse an already verified Runic-only checkpoint for Character Vault 1.0.3 queued uploads instead of performing a redundant third full save.
- Include the shared receipt update that preserves the original inventory slots of returned offered items when available, including interrupted-transfer recovery.
- Preserve verified character saves, replay protection, and existing production behavior.
- Require Runic Storage 2.0.7 and matching installed Runic module builds.
2.0.6
- Keep Runic-origin queued Character Vault 1.0.3 follow-up saves quiet, while preserving ordinary and disconnect save indicators.
- Apply shared quiet save-notification handling to Runic character checkpoints used by manual inventory interactions.
- Preserve actual saving, transaction recovery, and ordinary save notifications.
- Require Runic Storage 2.0.6.
2.0.5
- Include the shared character-checkpoint reduction for manual inventory interactions, preserving their recovery behavior.
- Wait safely for the native world context during connection and teardown.
- Require Runic Storage 2.0.5.
2.0.4
- Stop persisting clock-only changes for smelters and kilns that cannot work because input or fuel is missing.
- Rebase idle clocks when manual or automated input/fuel arrives so idle time never produces retroactive output.
- Preserve durable changes for active production, buffered output, fuel, input, and linked inventories.
- Include shared server queue scheduling improvements; require Runic Storage 2.0.4.
2.0.3
- Bound background request admission while preserving capacity for chest access and manual inventory operations.
- Preserve all admitted production transactions and retry them with their original IDs; no inventory mutation is discarded to free queue space.
- Require matching Runic Storage 2.0.3 on clients and server.
2.0.2
- Fix production authorization and link owner lookup for remote players whose legacy peer player-ID field remains unset in current Valheim.
- Use the connected player's owned character ZDO for identity while retaining ownership and access checks.
- Require matching Runic Storage 2.0.2 on the server and clients.
2.0.1
- Restore automatic visible smelter-family output when linked output chests cannot accept it. Ground collection uses durable shared transactions.
- Restore production interaction effects and automatic cooking experience recipient metadata.
- Consume nearby manual fuel/cooking input together with the station change when Runic Crafting is enabled.
- Restore ItemDrawers inputs, output and replenishment integration with exact large quantities.
- Respect cooking fire requirements and configured source-prefab lists.
- Require matching Runic Storage 2.0.1 on the server and clients.
2.0.0
- Replace inventory ownership handoffs with shared server authority and durable operations.
- Allow concurrent chest viewing, crafting, transfers, and production.
- Preserve character transfer receipts with verified character saves; reject stale/replayed changes.
- Recover first-enrollment identity across native world reloads and recover destroyed inventory through marked chests.
- Require matching module builds on host/server and clients. Crafting and Production now depend on Storage 2.0.0.
- See README for changed building/manual-fetch controls and the supported container boundary.
Changelog
1.0.17 — Native ownership recovery
- Recover nearby chest access after native ownership changes without a matching Runic handoff receipt. The server independently confirms the current ownership generation, data revision, and saved item fingerprint before the client refreshes and resumes. Stale or mismatched snapshots, busy chests, and denied access remain blocked.
- Preserve native ownership, material accounting, access checks, and rollback behavior.
- Add bounded server confirmation requests and reject stale or spoofed acknowledgements.
- Update matching companion builds together and restart both client and server.
1.0.16 - test candidate
- Fix shared-chest stalls when a handoff reply arrives late or another station requests the same chest. Pending snapshot receipts remain stable across retries.
- Recognize fresh native chest-opening snapshots and resume automation after the player closes the chest. Transfers still pause while a chest is in use.
- Allow the authoritative host to retire an impossible receipt after native ownership returns from a disconnected peer, only after refreshing the accepted chest inventory. No forced ownership claims were added.
- Wake the bounded production scheduler after local chest use ends.
- Use live fermenter recipe quantities and positive native fermentation durations. Skip unsupported recipes without disabling unrelated recipes; collapse identical duplicate entries. Multiple bases producing one output work with ordinary input/output links; replenishment still requires an unambiguous ingredient.
- Report rejected recipes and their causes, including background validation failures without requiring verbose logging.
- Update RunicCrafting to 1.1.9 and RunicStorage to 1.3.9 when installed together: all three embed the shared handoff implementation. Update participating clients and the server together.
- Automated validation is recorded in TESTING.md. Live multiplayer acceptance remains required before publication.
1.0.15
- Added per-mod language files using Valheim's selected language, with English fallback and no new plugin dependency.
Changelog
1.0.14 - 2026-09-23
- Improve coordination with Crafting and Storage when they use the same chests.
- Wait for linked chests to synchronize before moving ingredients, fuel or finished items.
- Reduce repeated checks of idle or blocked stations and spread automation work across updates.
- Handle interrupted transfers more carefully and pause affected production when a failed transfer needs inspection.
- Show clearer status when a linked station or chest is waiting for an absent player's network ownership to recover. Finished smelter items can still drop normally when storage is unavailable.
- Preserve existing production links, stock targets and ItemDrawers assignments.
- No extra Runic mod is required.
1.0.12 - 2026-09-20
- Fixed fermenters consuming a mead base while displaying Empty on current Valheim: automation now reads and writes the native numeric prefab ID, including collection and rollback. Legacy string-format game APIs remain supported.
- Empty fermenters no longer stall on a leftover fermentation timestamp after manual tapping.
- Unknown items and stranded old-format batches stop further input consumption rather than overwriting their state. Existing affected fermenters may require batch recovery; this update does not automatically recover them.
- Retained ItemDrawers support, station effects, beehive outputs, and cooking experience from 1.0.11.
1.0.11 - 2026-09-19
- Added independent Modded Containers.AllowedPrefabIds configuration, defaulting to piece_drawer for Makail ItemDrawers. Applies to linked roles and nearby ingredient sources.
- Synchronize ItemDrawers through its own save format. Preserve oversized stacks and assigned empty drawers through planning, consumption, output publication and rollback; honor drawer capacity and normal chest stack limits.
- Refuse mismatched item types and metadata that ItemDrawers cannot save. Attributed direct-recipe outputs still require a normal destination chest.
- Match timed cooking/fermenter output-capacity preflight to their actual unattributed output metadata.
1.0.10 - 2026-09-19
- Added Output chest links for beehives, preserving native honey production and world drop scaling. Full or unavailable storage leaves honey in the hive.
- Automated cooking now awards native loading and collection Cooking XP to the online player who configured the corresponding link, including server-owned stations.
- XP is awarded only after committed transfers; retries and blocked storage do not award XP.
1.0.9 - 2026-09-16
- Restored cooking-station and oven loading, refueling, and collection effects for automated transfers.
- Restored fermenter filling, tapping, and batch-output effects, and crafting-station effects for automated recipes.
- Preserved the existing native refueling effects for fires, torches, and lamps, and native cooking-done, overcooking, and ambient effects without duplicating them.
- New effects run only after confirmed commits, at the station or its slot/output point. Cosmetic failures cannot roll back or repeat item transfers. Instant automated fermenter/crafting transactions play their effects at commit without changing production timing.
1.0.8 - 2026-09-16
- Restored native kiln and smelter loading, fueling, and production effects for automated transfers, including output routed directly into linked chests and onward through production chains.
- Effects play only after confirmed transfers. Blocked or rolled-back transfers stay silent; normal world-drop output keeps its vanilla effects.
- Effect failures cannot roll back or replay completed item transfers.
1.0.7 - 2026-09-14
- Fixed production stopping after the player who configured it leaves and station/chest ownership splits between peers.
- Added coordinated chest handoff for linked ingredients, fuel, outputs, replenishment, and eligible nearby recipe inputs.
- Removed the original player's presence requirement from pending and legacy replenishment activation.
- Preserved ward and personal-chest access checks, shared-chest serialization, and the link-click fixes from 1.0.6.
1.0.6 - 2026-09-14
- Fixed a repeated mouse-press signal across frames cancelling a newly selected production link.
- Kept each accepted linking click captured until its button is released and the press signal clears, including fast clicks.
- Preserved normal station-to-chest linking, Shift+Alt unlinking, and deliberate cancellation with a separate click.
1.0.5 - 2026-09-11
- Fixed production's native item-status checks after Valheim 1.0.12 changed the underlying game API. Supports both the 1.0.7 field and the 1.0.12 property without changing the game's item-status rules.
1.0.4 - 2026-09-10
- Fixed production link setup rejecting players who have chest and ward access but do not already own the station and chest's network state.
1.0.3 - PreProduction
- Read container contents from Valheim 1.0's byte-array storage rather than the retired string field.
- Accept the exact native one-load durability conversion while rejecting unrelated inventory differences.
- Check the replicated integer busy flag before and after synchronization.
- Cross-peer station/chest ownership remains a limitation; this update does not add remote transfers.
1.0.2 - 2026-09-09
- Updated cheated-state provenance, queue, slot, item insertion, and inventory notification integration for Valheim 1.0.
1.0.1 - 2026-09-04
- Fixed one Alt+mouse press being observed by both
Player.SetControlsandPlayer.Update, which could immediately cancel a newly armed production link before the player could select a chest. - Kept an accepted link gesture captured until its physical mouse button is released, preserving action suppression and the intended two-step station-to-chest workflow.
1.0.0 - 2026-08-29
-
Made the plugin independently installable with BepInEx as its only runtime dependency while keeping version 1.0.0 and the established package identity.
-
Removed the shared registry, capability negotiation, permissions service, transaction composites, remote-owner handoff, custom Production RPC transport, persistent operation records, recovery, claims, global inventory guards, and account/global quarantine paths.
-
Rebuilt smelter, cooking, recipe-station, and fermenter automation around Valheim's exact loaded native owner. No path claims or transfers ZDO ownership.
-
Kept persistent explicit links, stable endpoint tokens, bounded multi-destination catalogs, physical exemplar plans, target signatures, and fairness cursors in their existing world-data formats.
-
Kept valid singleton-link migration. Tokenless singleton links upgrade only from one exact loaded local-owner chest, while tokenless catalog destinations require an explicit refresh.
-
Added bounded, expiring local link selections with fresh range, chest, ward, access, identity, creator, ownership, and synchronization checks at commit and use.
-
Preserved throughput Input, Fuel, and Output links, complete-batch smelter fallback, exact reserves, direct recipe replenishment, cooking/fermenting replenishment, and optional bounded nearby ingredient sourcing.
-
Added exact persisted-state compensation for multi-object mutations without leaving restart-time work or locking unrelated inventory. A proven rollback retains vanilla smelter fallback; an indeterminate publication suppresses duplicate fallback and pauses only that station until reload.
-
Replaced obsolete transport and crash-recovery coverage with focused standalone, native-owner, persistence-format, boundedness, rollback, and vanilla-fallback tests.
-
Added exact native Fireplace fuel service, so explicitly linked fires draw Wood and lamps draw Resin from player-facing Input chests with the existing reserve and rollback rules.
-
Added station-specific hover guidance for Input, throughput Output, and exemplar-backed Replenishment setup; enabled bounded nearby recipe ingredients by default.
-
Added exact station-level Alt mouse links: Left selects Input, Right selects Output, and Middle selects Replenishment. Repeating the same gesture on a chest within 30 seconds commits it; Shift+Alt at both steps removes that exact role link.
-
Reserved accepted mouse gestures through release so combat and build actions cannot leak through, and added vivid green Input, yellow Output, and turquoise multi-Replenishment chest rings on successful links and while their station is pointed.
-
Made role selection independent of a station's physical sub-control: aiming anywhere on the station uses the mouse button alone to select Input, Output, or Replenishment.
-
Added multiple persistent chests per role, station hover counts for all three roles, one unified per-role link limit, reserve-driven dynamic exemplar refresh, and server-side reconciliation.
-
Added exact composite nearby recipe sourcing across accessible shared chests, protected linked destinations, in-flight reserve admission, completed-output routing, and rollback readback guards.
-
Made empty Replenishment links crash-safe by publishing their signed principal plan while inert before the authoritative role link. Orphan plan bodies remain inert, and no link success is shown unless both publications complete.
-
Fixed linked-chest rendering by placing each LineRenderer on its own child GameObject. An invalid root or ring now tears that marker down once, preventing repeated UpdateVisuals exceptions without affecting Production links or transfers; a later lease may create a fresh marker.
-
Separated Fuel Input from ingredient Input when the player aims Alt+Left Mouse at a native fuel control, with distinct selection, link, removal, and hover text while retaining legacy Input-fuel compatibility until an explicit Fuel Input link is made.
-
Enabled Output links for allowed cauldron, mead-kettle, and preparation-table recipe stations.
-
Expanded ordinary cooking-station and oven ingredient sourcing from an explicit Input link to the same bounded eligible nearby-chest pool used by recipe automation, and exposed exact validation failures through the station status and verbose log instead of silently doing nothing.
-
Allowed one physical chest to carry independent roles, including serving as one station's Output and another station's Input for true chained production lines such as mead ketill to fermenter.
-
Kept finite native oven fuel states above the display capacity operational; automation stops adding fuel at capacity without disabling food input, cooking, or cooked-output routing.