Server-side only. Loot chests refill, and dungeon resources, the Queen, ancient armor, obsidian, flametal and ice come back, 30 in-game days after players leave them alone.
Removed /kick restock-reload and /kick reload-restock-regen. Hot reload is left to BepInEx
ScriptEngine, which reloads the mod by itself when the DLL in BepInEx/scripts is replaced (with
EnableFileSystemWatcher = true). The command only called a private method inside ScriptEngine.
0.18.0
Jotun invasions can be started again. The black ice block in a Morkhalla dungeon
(BlackIce_Start) starts a jotun invasion when broken and is then gone for good, so each dungeon
could start only one. It now comes back with the dungeon's gems and coin piles, once nobody has
been inside for 30 in-game days. Blocks broken before this version left nothing behind and cannot
come back. The owner's save of 2026-10-04 had 10 blocks left in 15 dungeons.
Fixed: a dungeon could lose its clock and its remembered spots on a mod reload, and could be
skipped as occupied with nobody there. The mod treated any object with an owner as held by a
player, but the game leaves the last nearby player as owner after they log off or walk away,
until someone else comes by or the server restarts. An object now counts as held only while its
owner is connected and has it loaded. Seen on 2026-10-04: two of three citadels restarted their
30 days when 0.17.0 was loaded.
0.17.0
Ice comes back in the Deep North: the ice ponds (IcePond_rock) and the ice along the shore
(IceShore_1) are restored where nobody has been within 100 m for 30 in-game days, like obsidian.
/kick restock-regen-ice, [Ice] and [DeepNorth] settings, and a message on entering the Deep
North.
Read from the game's prefab data: both break into a mineable version on the first hit (1 to 3 ice
per chunk for a pond, 2 to 3 for shore ice, which needs a tier 2 pickaxe) and are deleted with
the last chunk. Nothing in the game brings them back. The owner's save of 2026-09-30 had 5 ponds
(1 partly mined) and 241 pieces of shore ice (11 partly mined).
The floating ice on the sea (ice1) is not restored: it drifts, so it has no spot to come back
to. The large floating ice shelves give no ice.
0.16.0
The Queen comes back. A Mistlands infested citadel whose Queen has been killed resets once nobody
has been inside it for 30 in-game days: the Queen (SeekerQueen) is put back in her place, the
sealed door (dungeon_queen_door) is closed again, and the seeker eggs and creep blocks the mod
has seen are restored. A citadel whose Queen is alive is never touched.
/kick restock-regen-citadel and [Citadel] settings.
A player standing in front of the door of a citadel whose Queen is dead is told how many days are
left, and again on going inside.
Read from the game's prefab data: the Queen is not spawned by anything, she is an object in the
citadel's entrance room, so once killed the game never puts her back by itself. Her place is
worked out from the room positions the citadel keeps, so a Queen killed before the mod was
installed comes back too. Checked against the owner's save of 2026-09-30: both citadels had no
Queen and an open door, and the room's 26 seeker spawners land exactly where the same
calculation puts them.
The sealed door needs a Sealbreaker and does not use it up, so closing it costs players nothing
they already have. CitadelCloseDoor turns that off.
0.15.0
The Deep North's Holes get their trash piles (elaking_trashpile) and spawner nests
(Spawner_Hole, Spawner_Hole_double) back once nobody has been inside for 30 in-game days.
Both are deleted when broken and the game never restores them; restoring a nest also brings its
creatures back. /kick restock-regen-hole and [TheHole] settings.
Read from the game's prefab data and checked against the owner's saves: glow worms respawn by
themselves after 240 minutes (27 already had), so they are left to the game. Between 2026-09-25
and 09-30, 9 of 75 trash piles, 4 of 19 double nests and 113 roots had been broken and stayed
gone. Roots are not restored, on the owner's decision: many block passages.
0.14.0
The Deep North's Morkhalla dungeon gets its gems and coin piles back once nobody has been inside
for 30 in-game days: the gemstones in the statue eyes (Morkhalla_Eye1 to Eye7), the rubble
piles that drop ancient coins (Morkhalla_Rubble1 to Rubble4) and the treasure piles
(Pickable_MorkHallaTreasure). /kick restock-regen-morkhalla and [Morkhalla] settings.
How each one behaves was read from the game's own prefab data this time, not inferred: the eyes
stay in the world marked as taken with no respawn time, a broken coin pile is deleted and leaves
only non-persistent debris, and a treasure pile is deleted when taken.
tools/PrefabDump reads a prefab's settings out of the game's asset bundles. Every earlier
feature was re-checked with it. Confirmed: mud piles, ancient armor, crystals, black cores, and
that dragon eggs respawn by themselves (480 minutes). Two descriptions were wrong and are
corrected, with no change to what the mod does:
Flametal: a spire's chance of sinking is 1 in 100 per hit, not 1 in 4, and a fully mined spire
is not deleted, it stays as an empty husk. The mod restores a husk or a sunk spire alike.
Obsidian: a deposit is one breakable object, so there is no partly mined state. It is either
there or gone.
0.13.0
Flametal comes back. The flametal spire in the Ashlands' lava (LeviathanLava) runs the ocean
Leviathan's code: each hit has a chance of making it leave, which marks it dead, sinks it and
deletes it, and the game never puts it back. A spire with any chunk mined, or one that has sunk,
is now restored whole once no player has been within 100 m for 30 in-game days, and never within
8 m of anything a player built. [Flametal] and [Ashlands] settings,
/kick restock-regen-flametal, and a message on entering the Ashlands.
A spire floats, so its remembered spot is matched flat within 6 m rather than to 20 cm; the
nearest two spires on the owner's world are 25 m apart.
Not yet seen in a save: none of the 67 spires on the owner's world had been mined when this was
written, so the mined and sunk states come from the game code, not from an example.
0.12.0
Black cores in infested mines come back. A taken core's stand stays in the world marked as taken
and the game never resets it (39 of 172 on the owner's world). A mine's cores are now restored
once nobody has been inside it for 30 in-game days, like mud piles and crystals, with the same
entrance and inside messages. Restoring is clearing the stand's taken mark, so nothing is created
and cores taken before the mod was installed come back too. /kick restock-regen-cores and
[InfestedMines] settings.
Dragon eggs removed. 0.10.0 added a dragon egg group on the belief that taking an egg deletes
it. That was wrong: the egg stays, marked as taken, and the game un-takes it on its own timer
(the owner's save holds eggs that have already come back). The group could never have done
anything, it only acted on eggs that had vanished, and none do. The [DragonEgg] settings and
/kick restock-regen-eggs are gone, and the Mountains message now mentions obsidian only. Egg
records are dropped from the record file.
The start-up log now says, for each tracked pickable, what the game itself does when it is picked
(deleted or kept) and its respawn time, so a wrong assumption like the one above shows up at once.
0.11.0
Frost cave crystals come back. The game deletes a crystal when it is picked and never restores
it (32 picked on the owner's world between 2026-09-18 and 09-25 had not returned by 09-29). A
frost cave's crystals now regenerate once nobody has been inside it for 30 in-game days, exactly
like the sunken crypts' mud piles, with the same entrance and inside messages.
/kick restock-regen-crystals, and [FrostCaves] settings.
The mud pile code became a shared dungeon regrow engine for both. Mud pile settings, stored data
and behaviour are unchanged.
0.10.0
Obsidian deposits and dragon eggs in the Mountains come back like ancient armor: once no player
has been within 100 m for 30 in-game days, and never where a player has built within 8 m. A
partly mined deposit is replaced by a whole one; a mined-out deposit or a taken egg is put back.
Each has its own settings ([Obsidian], [DragonEgg]). Restoring eggs makes Moder repeatable.
Entering the Mountains shows "The spirits will restore obsidian and dragon eggs after 30 days
without visitors" ([Mountains] settings).
/kick restock-regen-obsidian and /kick restock-regen-eggs.
The ancient armor code became a shared "regrow" module for all three kinds. Settings and the
record file are unchanged.
0.9.1
Fixed ancient armor records counting a piece twice. Positions were written to the record file
with too few decimals, so a piece on a rounding edge read back as a separate spot that looked
mined out, and would have been doubled once due. Positions are now written in full, matched with
a 20 cm tolerance, and duplicates an older build wrote are dropped when the file is read. Found in
dry run on the live server, before anything was restored.
0.9.0
Ancient armor in the Mistlands comes back. A mined giant helmet or sword (giant_helmet1/2,
giant_sword1/2) is restored once no player has been within 100 m of it for 30 in-game days,
and never where anything a player built stands within 8 m of the spot. Spots are remembered from
the first time the mod sees a piece, and kept with the area visits in
worlds_local/<world>.restockregen.txt beside the world save.
Entering the Mistlands shows "The spirits will restore ancient armor after 30 days without
visitors", at most once every 10 minutes per player.
/kick restock-regen-armor restores every free mined piece now.
New [AncientArmor] settings: AncientArmor, AncientArmorDays, AncientArmorDryRun,
AncientArmorVisitRadius, AncientArmorBuildClearance, AncientArmorNotifyText,
AncientArmorNotifyCooldown.
README rewritten as a full guide, with a detailed admin command section.
The DLL carries its debug symbols inside it. ScriptEngine reads symbols when it loads a plugin, and
refused the first 0.9.0 build, which had them in a separate file.
0.8.0
Admin commands, typed in the chat box as /kick restock-<command> (or kick restock-<command>
in the F5 console): restock-help, restock-status, restock-reload, restock-regen,
restock-get:Setting, restock-set:Setting=value. They ride on Valheim's own kick command,
the one console command that reaches the server with its text, and are answered in the admin's
console and top-left. The server checks adminlist.txt; a real kick is unaffected.
Hot reload with BepInEx ScriptEngine: with RestockRegen in BepInEx/scripts, replacing the DLL
or restock-reload loads the new version without a server restart.
Each load patches under its own Harmony id, so an unloading copy cannot remove the new copy's
patches, and pending records are written out on unload.
0.7.0
Chests near a base restock too. A chest a player has loaded used to wait until nobody was near,
so chests close to a base, loaded almost all the time, never came back (33-38 of them a day on
the owner's server). Now they are restocked while loaded, as long as nobody has the chest open.
RestockLoaded (on) controls it.
MudPileRegenNow: a one-shot switch that regenerates every sunken crypt with mined piles at the
next daily sweep, whatever its clock, then turns itself off. A crypt someone is in at that moment
is done as soon as it is free.
Mud pile regeneration went live on the owner's server with 30 days, after a dry run in which
47-50 crypts a day came up due with a 1-day test setting.
0.6.0
Muddy scrap piles in sunken crypts regenerate. A sunken crypt that no player has visited for
MudPileDays (30) in-game days gets every mined pile back: partly mined piles are replaced by
whole ones and mined-out spots get a pile again. Any visit restarts the count.
The mod remembers each pile's spot from the first time it sees the pile, whole or partly mined,
and keeps the list on the crypt itself. A pile mined out completely before the mod saw it cannot
come back. On the owner's world none had been: every mined pile still left its broken remains.
Arriving at the entrance of a crypt with mined piles (within 30 m) shows the days left: "The
spirits will restore muddy scrap piles in 12 days if no one enters". Going in anyway restarts
the count and shows it again with the full 30 days: "The spirits will restore muddy scrap piles after
30 days without visitors" (MudPileNotifyText).
New settings in [MudPiles]: MudPiles, MudPileDays, MudPileDryRun, CryptRadius,
MudPileNotifyText, MudPileEntranceText, MudPileDueText, VisitCheckSeconds (30),
EntranceRadius (30). Chests are unchanged.
Documentation: in-game days only pass on a dedicated server while a player is online, so all
the 30-day counts, chests included, are about 10 hours of play, not of server uptime.
This is the first feature that creates and removes world objects. A fault in it switches it off
until the next restart and leaves chest restocking running.
0.5.0
Leftovers reset too. A loot chest now resets 30 days after a player first opens it, whether it
was emptied or not: whatever is inside at that point, loot or junk, is replaced by a fresh roll.
Agreed with the players. ResetOpened (on) controls it; off gives the old rule, where only
completely empty chests restock and putting anything back in stops the clock.
The on-screen notice now shows on every opening of a loot chest. With items inside it warns:
"The spirits will refill this chest in 30 days. Anything left inside will be lost"
(NotifyLeftoversText).
Chests opened before this version still hold their leftovers until someone opens them again;
that opening starts their clock.
The daily log line says "clocks started" instead of "newly empty", and each restock line says
how many stacks it replaced.
0.4.0
On-screen notice. When a player opens an empty loot chest, or takes the last item out of one,
the middle of their screen says when it restocks: "The spirits will refill this chest in 30 days". Still
server-side only: the server sees the chest's in-use flag and new owner in the player's normal
update and sends the message through the game's own ShowMessage.
The countdown starts from the moment a player was seen emptying the chest, not from the next
daily sweep, so the number on screen is the one that runs. That moment is kept in memory until
the sweep stamps the chest; after a restart the sweep's own day is used.
Settings Notify, NotifyText (with {days}) and NotifyDueText.
Chest history. Each loot chest remembers who first opened it and who opened it last, with the
in-game day, and the next player to open it is told in the top-left: "Last opened by Bjorn
3 days ago, first by Astrid 12 days ago". Settings History, HistoryText, HistoryTextOnce.
Recording starts with this version; earlier openings are not known.
History is written to the chest only once no player holds it: the server drops a player's update
to an object whose revision it has already moved past, so writing to a chest in use could make
the player's next change to it, such as taking an item, get lost.
0.3.0
Hildir's three quest chests (TreasureChest_forestcrypt_hildir, TreasureChest_mountaincave_hildir,
TreasureChest_plainsfortress_hildir) are never restocked. They each hold one of her quest items.
The list is the new Exclude setting.
The census no longer logs a line for every chest prefab with a building-piece component; nearly
all world chests have one. A chest that deletes itself when emptied is still reported, as a warning.
Confirmed on a live dry run: no loot chest in l-1.0.16 deletes itself when emptied, buried
treasure included, and chests a player has loaded are skipped.
0.2.0
Restocking. Once per in-game day the server sweeps every loot chest in the world:
an empty chest is stamped with the day it was first seen empty, and once it has stayed empty for
Days (30) days it gets a fresh roll from its own loot table. A chest that gets anything put back
in loses its stamp.
Chests a player currently has loaded are skipped and retried at the next sweep.
DryRun setting: count and log only, write nothing. Its empty-since dates live in memory, so a dry run still reaches "would restock".
The census now always names any loot chest prefab that deletes itself when emptied, or that has
a building-piece component.
0.1.0
Read-only census. Once the world is loaded, the server logs every loot chest prefab and how many
chests of each are in the world, empty, holding items, never loaded, or player-built. Nothing is
written to the world.
Built against Valheim l-1.0.16.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.