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

RunicInventory

Labeled native-row equipment and quick slots, automatic empty-role equip, lossless armor swaps, locks, safe sort, and pickup controls for Valheim.

Date uploaded 10 hours ago
Version 1.0.0
Download link Chazman-RunicInventory-1.0.0.zip
Downloads 21
Dependency string Chazman-RunicInventory-1.0.0

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2333 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.2333

README

Runic Inventory 1.0.0

Runic Inventory is a standalone BepInEx gameplay mod with no Foundation runtime dependency. On Valheim's native 8×4 player inventory, it reserves the bottom row only after proving an exact eight-wide topology:

x 0 1 2 3 4 5 6 7
role Helmet Chest Legs Cape Utility Quick 1 Quick 2 Quick 3

That is five equipment roles and three quick roles. Unknown or modded categories remain ordinary inventory items. While the inventory is open, the native cells are subtly outlined and labeled. There is no gameplay HUD outside the inventory; the diagnostic status panel remains optional.

Hold Left Alt and right-click any player-inventory slot to lock it; repeat the same gesture to unlock it. Lock changes are silent: a bright yellow outline is the confirmation and disappears on unlock. The configured Alt+L shortcut remains available as an optional focused-slot fallback. Role labels and lock outlines are anchored to Valheim's exact native cells, while the complete bottom role row remains subtly outlined. Split-stack, variant, skills, and text dialogs always draw above these overlays. A transient equip/drag state no longer permanently disables that row: as soon as the native inventory is valid again, the labels, borders, equipment relocation, and protection proof recover.

Picking up or crafting recognized armor, cape, or utility gear fills an empty exact role. Manually equipping a replacement moves it to the role and swaps the previous occupant into the replacement's original native slot. If exact membership and positions cannot be proved, no relocation occurs.

Native ownership and persistence

Inventory does not add carrying capacity or maintain a second item store. Every item stays in the same vanilla Inventory with full item metadata: prefab, stack, durability, equipped state, quality, variant, crafter identity, custom data, world level, pickup state, weight, and effects.

  • Valheim Inventory.Save and Inventory.Load remain the item persistence path.
  • Death and tombstones remain Valheim's native grave-transfer path.
  • Topology and lock metadata remains one small checksummed entry in the owning player's custom data.
  • An abrupt uninstall leaves bottom-row items as ordinary vanilla items.
  • Sort, lock changes, quick use, and relocation require the exact owning Player.m_localPlayer.

Mutations use one short-lived mutation scope owned by this mod and perform exact in-memory rollback when a position proof fails. There is no global lock, cross-mod transaction coordinator, durable journal, quarantine, or recovery protocol.

Optional integration

RunicInventory.Api.InventoryIntegrationApi.TryGetProtection(object, out int) is a tiny optional reflection seam for independently installed mods. It returns state 0 for governed-but-unknown, 1 for proven unlocked, and 2 for locked. A false return means the supplied object is outside Inventory's domain. Consumers must treat unknown as fail-closed and must not retain the native item.

Crafting, Storage, and Interaction may use this optional reflection API when Inventory is installed; none is a hard dependency in either direction. Inventory loads and functions on its own. The normal workstation repair call receives a narrowly scoped unlocked view, so equipped armor in the protected bottom row can still be repaired; protection resumes as soon as that repair call ends.

Authority modes

  • AuthoritativeLocal: exact owning local player; gameplay features may mutate through native APIs.
  • RemoteDedicatedCompatibility: a non-local or non-owning player reference is read-only.
  • MigrationSafeCompatibility: topology or item evidence is incompatible, so special mutations stop.
  • Disabled / BatchInert: ordinary vanilla behavior.

A connected dedicated-server client owns its character inventory and can use Inventory normally. The headless server process has no local player, so this mod remains inert there.

Install only BepInEx and Runic Inventory. Existing 1.0.0 configuration and topology metadata remain valid; no data migration or version bump is required.

CHANGELOG

Changelog

1.0.0 - standalone runtime architecture

  • Removed mandatory Foundation runtime dependencies (Runic Core, Persistence, and Transactions) without changing the mod version or player topology metadata.

  • Replaced the suite-global mutation gate with one short-lived per-mod mutation scope around native owner-local operations.

  • Removed the durable journal, recovery bridge, quarantine, and cross-mod transaction service.

  • Added a tiny optional reflection API for item-protection consumers; Inventory remains independently installable and consumers continue without it.

  • Kept every gameplay mutation on the native owner-local character inventory path.

  • Added subtle in-inventory labels and an outline for the five equipment roles and three quick roles; no quick-slot HUD is drawn during gameplay, and the diagnostic panel now defaults off.

  • Added empty-role pickup/crafting placement with native equip, plus exact lossless position swapping when the player manually equips a replacement for an occupied armor, cape, or utility role.

  • Fixed ordinary armor replacement falsely entering MigrationSafeCompatibility when Valheim raised Inventory.Changed after equipping but before the postfix could relocate the new item. Equipment changes now use an exception-finalized deferred-refresh boundary, genuine role-content failures name the first offending role/item, and a corrected authoritative row reactivates automatically.

  • Added Left Alt + right-click as the primary in-inventory lock toggle while keeping the configured Alt+L action as a fallback.

  • Anchored Helmet, Chest, Legs, Cape, Utility, and Quick 1-3 labels and yellow borders to Valheim's exact eight native bottom-row elements.

  • Restored authoritative topology automatically after transient belt/equipment drag states and corrected carried-item protection proof to compare the fresh native item references rather than requiring two separately returned item lists to be the same list object.

  • Made slot lock toggles silent and represented each explicit lock with a bright yellow outline.

  • Yielded the bottom-row overlays whenever a native inventory modal is visible and allowed protected equipment through the exact workstation repair call without weakening protection elsewhere.

1.0.0 — 2026-08-22

  • Implemented Core's provider-neutral inventory.durable-operations contract with an independent checksummed atomic local journal, reconnect lock, exact Local-profile current-primary readback, provider-owned profile-source classification, and server-led Cloud/Legacy outstanding-operation adoption. Cloud completion requires an exact account/world/token/manifest/receipt binding plus a later direct session's first pre-mutation provider-recomputed inventory fingerprint; same-session and third-state evidence remains quarantined.

  • Added bounded cloned exact-manifest recovery for an owning consumer after restart, with explicit corrupt, file/mirror-conflict, foreign-owner, mismatched-operation, and terminal denial.

  • Replaced Storage's process-only catastrophic rollback flag with a real Indeterminate Inventory crash journal. The three-argument hold seam now succeeds only after an atomic independent flush, exclusive readback, and exact Player mirror; its manifest binds the profile/player identity, failure boundary, and captured/current inventory fingerprints. Disposal and restart retain the quarantine, and 1.0.0 deliberately provides no automatic clear without independent recovery proof.

  • Split startup into an early durable safety plane and a later convenience-feature plane. A protocol failure retains native evidence enforcement, while a compatible Core publishes a minimal module plus durable-operation recovery service before topology, gameplay-service, binding, and UI admission. Any later startup or cleanup failure disables new gameplay admission without withdrawing that recovery service, disposing a previously loaded journal runtime, unpatching its native Inventory/Player/death-and-grave guards, or stopping recovery ticks. With no durable evidence, degraded startup continues to yield ordinary vanilla inventory behavior; only final shutdown tears the recovery bridge and safety plane down.

  • Added a bounded provider-owned opaque-state forecast seam for cross-domain intents. Forecast bytes are defensive and side-effect checked, callback/reentrancy faults fail closed, and forecast never substitutes for the separately persisted TryCaptureLocalPrepared observation.

  • Hardened the independent journal to an exact trusted-root child with reparse-point denial before and after publication, exclusive bounded reread, backup-free atomic replacement, exact-delete identity, and preserved .new/.bak/.del forensic evidence on every uncertain cut.

  • Preserved vanilla death during an unresolved operation: CreateTombStone is never suppressed; an exception-finalized exact system-transfer scope journals the spawned grave identity, inventory fingerprint, stable-token evidence when already present, operation-tag counts, and current direct-server session digest. Cloud custody completion requires a different later session; a missing capture-session proof remains locked for server recovery. Added a provider-neutral durable server custody-recovery proof for the crash-before-local-capture cut, requiring the exact issued token/account/world/receipt, conservation evidence, one unique tagged grave, and a later observation session.

  • Added an all-or-nothing native bottom row with five equipment roles and exactly three manual quick roles.

  • Kept every item inside Valheim's native inventory; no extra capacity, weight change, stack multiplier, item clone, or secondary item serialization.

  • Added bounded digest-protected slot locks, locked-stack routing, and registered high-level drop, deposit, use, exact upgrade, processing, display, and sacrifice guards.

  • Added deterministic safe regional sort with hotbar/equipment/quick/lock preservation and exception rollback.

  • Added bounded event-driven pickup overflow/encumbrance preview, reserved-row-aware capacity checks, and an exact deny filter with quest-item bypass.

  • Published copied immutable inventory.topology, legacy coordinate locks, the Core 1.0.0 IItemProtectionQuery under inventory.item-locks, and truthful status services. The typed query proves exact current local membership, protects the full special row, returns false/Unknown only for NotApplicable external evidence or an explicitly disabled provider, and returns true/Unknown for unsafe in-domain evidence.

  • Added owning-local-player authority for solo, listen-host, and remote dedicated clients. Native player-inventory topology, sort, quick-use, equip relocation, and lock persistence no longer incorrectly require ZNet.IsServer; non-owner and headless paths remain read-only.

  • Corrected headless-client admission so Application.isBatchMode is never treated as gameplay authority: an exact owning Player.m_localPlayer remains eligible on an automated dedicated client, while a true dedicated server with no local Player remains inert and fail closed.

  • Added migration-safe dimension/digest/role mismatch behavior with no automatic item movement.

  • Added continuous live-dimension/host-authority revalidation, canonical-location proof for already-equipped gear, deterministic peer patch ordering, and pre-vanilla locked armor-source denial without blocking canonical reload re-equip.

  • Removed the private-reflection/manual-Harmony Storage guard. Storage, Safety, and Interaction consume the Core-owned typed item-protection contract without Inventory reflecting or patching their internals. Storage 1.0.0 is now truthfully a downstream hard consumer of Inventory's separate durable-operation service; Inventory itself still does not hard-reference Storage.

  • Corrected the optional item-protection contract so an explicitly disabled Inventory provider returns NotApplicable before inspecting a player item; Interaction and other optional peers now yield to vanilla transfers while Inventory is disabled, while migration/authority uncertainty remains fail-closed.

  • Closed the complementary lifecycle gap: while Inventory is enabled, any native item queried while the provider is disposed, loading/rebinding, or missing its Player/Inventory now returns in-domain Unknown. Only explicit disable or bounded exact membership absence can yield NotApplicable, so consumers cannot mutate through a transient unavailable provider.

  • Made disabled-topology metadata cleanup sticky across mutation-gate contention, ticks, rebinds, configuration changes, and restart. Inventory now stays fail-closed until the owning local player commits the exact removal, then publishes clean Disabled state without requiring another toggle.

  • Separated runtime configuration/disable cleanup from optional keybinding refresh. Cleanup now runs first, and failures in either phase are reported and failed closed without suppressing the other.

  • Added bounded once-per-reason verbose diagnostics for every typed item-protection outcome and indeterminate branch without logging item identity, contents, coordinates, or custom data; added direct healthy exact-member Locked/Unlocked and foreign-item NotApplicable regressions.

  • Invalidated cached controller ButtonDef paths and active input reservations on Valheim layout-change events, with symmetric shutdown unsubscription.

  • Replaced the new-install Quick 1 controller default with layout-independent JoyMap and normalize only the exact untouched legacy controller set to that route in memory. This closes Valheim Alternative 1's JoyAltKeys/JoyLBumper left-shoulder alias without rewriting customized files. Controller validation is now route-local, same-path map/chat aliases remain suppressed, Core registers the actual effective legacy route, and cached steady-state input ticks allocate nothing.

  • Declared the exact Runic Core 1.0.0, Runic Persistence 1.0.0, and Runic Transactions 1.0.0 release floors used by the compiled contracts.

  • Added lossless death, tombstone, logout, disable, upgrade, abrupt-uninstall, installed-IL, crash-cleanup, and 100/1,000/10,000 performance regressions.