Confirm with your password

NoodlesMcDoodles

Take the desync out of Valheim. Your dedicated server runs the world instead of whichever player got there first, and far-away players get the bandwidth they need. Less rubber-banding, same vanilla game. Works with vanilla clients.

· Website · 💗 Donate

Stars
0
Downloads
64
Version
1.0.12
Updated
Author
Wubarrk
Virus scan
✓ Scan successful
Runs on
Client & Server
Required by
2 mods

Description

🍜 NoodlesMcDoodles

🖥️ Dedicated servers  ·  👥 Works with vanilla clients  ·  🧩 BepInEx 5  ·  📜 MIT  ·  🏷️ v1.0.12

Take the desync out of Valheim: the server runs the world, not whoever loaded in first.

In vanilla Valheim, a zone belongs to whichever connected player is nearest it — and it stays theirs for as long as they're there. If that player's own connection is the slowest one on the server, their upload and their latency quietly become everyone else's lag, for every zone they happen to be standing in. Raising send rates alone doesn't fix that; it just lets a bad connection flood the pipe faster.

NoodlesMcDoodles fixes the cause. The dedicated server runs the world around every player (creatures, buildings, production, doors, terrain) instead of leaving it to whichever player loaded the area first; players keep only what they handle directly, like chests, carts and their own character. The server also paces its sending per player, so distant players get steady updates instead of vanilla's bursty ones. Every feature has its own config switch, and the whole mod reverts to stock vanilla instantly if you flip its kill switch — see Safety below.


⚔️ Features

🗺️ Server-run zones

In vanilla, the first player to load an area runs it for everyone: their game simulates the creatures, buildings, doors and smelters there, and everyone else sees that world second-hand through their connection. NoodlesMcDoodles gives that job to the dedicated server. With the default OwnershipAuthority.Mode = FarOrShared, the server runs creatures and tames, buildings, production (smelters, kilns, windmills, crafting stations), trees and rocks, doors and terrain, both in empty areas and in the areas players are standing in. Players keep what they handle directly: their own character, chests, carts, item and armor stands, turrets, signs, items on the ground, ships, and anything harvestable within reach. Moving an object to the server only changes which machine sends its updates; nothing a player sees happen to it changes.

Where several players share an area, the objects players keep go to whichever of them has the best round-trip time to the server, not to whoever arrived first. An experimental extension (O10) lets the server hold such an object itself when every player near it is far from the server. It's marked EXPERIMENTAL in its own config description (that exact case, several far players at once, hasn't been exercised in a long live session yet), and it can be switched off on its own.

🧊 Empty-area preservation

The server also keeps running areas nobody is standing in — which in vanilla is exactly when things start decaying, despawning, or losing durability with nobody around to notice. A dedicated guard freezes those specific destructive vanilla code paths (weather/structural decay, dropped-item despawn, wild-creature-vs-tame and wild-creature-vs-piece combat) only inside that empty, server-held band. Nothing changes for a zone a player is actually standing in — normal combat and damage there behave exactly as vanilla.

📡 Steadier networking

Raises the per-connection send-rate ceiling and lets it adapt upward per player as their connection proves it can take it, instead of pinning everyone to one fixed number. The old vanilla send-queue gate only ever allowed about one round trip's worth of data in flight, which quietly punished distant players the most; the queue now grows with a connection's own measured round-trip time, so a far player can approach the same effective throughput as a nearby one instead of being structurally capped lower.

🧩 Optional client-side extras

Installing the same DLL on your own game client (not just the server) unlocks these client-side improvements, plus the F6 status panel below: your own uploads get the identical rate/queue treatment the server gives itself, so other players see fresher updates from you; and a shortened dead-reckoning window means a creature, player, or object you don't own stops sliding on stale movement data sooner after a network hiccup, instead of coasting for vanilla's full two seconds and snapping back. A second, more aggressive smoothing mode (buffered interpolation) also ships but stays off by default — measured testing found it smoother in ordinary play but worse than vanilla in the worst case, so it's left in as an experiment rather than a default.

📊 Status panel (F6)

Press F6 in game for a small black-and-gold panel with two tabs. Basic shows who runs the world around you, as a share of the objects loaded near you (Server owns, You own, Other players own, Unowned), your ping, upload and download, your upload and download limits, and whether the server runs NoodlesMcDoodles. Detailed splits your connection into Upload (you to the server: your set limit against the one in use, your send queue against its allowance, with the peak over the last minute) and Download (the server's own numbers for you: its limit, what it actually sends and its queue for you, since your download is the server's upload and only the server sets it). It also shows who controls each of the nine zones around you, by name, which players own objects near you, and this client's own features. Drag the title to move the panel, drag its corner to resize it; text wraps and the content scrolls, and the panel remembers where you left it. F6 cycles Basic → Detailed → hidden. It works on any server, modded or vanilla (download numbers need a NoodlesMcDoodles 1.0.3+ server), and only reads what your game already has: the only file it writes is its own position and size.

🗜️ ZDO compression between modded peers

When both ends of a connection are running NoodlesMcDoodles, object-update traffic between them is compressed before it's sent. This is negotiated automatically per connection — a vanilla peer, or an older/incompatible build of this mod, is simply never offered it and sees no difference at all.


📥 Installation

Dedicated server (this is where the real work happens)

  1. Install BepInExPack Valheim on the server.
  2. Drop NoodlesMcDoodles.dll into the server's BepInEx/plugins/.
  3. Start the server once to generate BepInEx/config/wubarrk.noodlesmcdoodles.cfg, then adjust settings if you want (see Configuration below — the defaults are already tuned, not just "safe").
  4. Restart. That's it — fully vanilla clients can connect right away and everything above still applies to them. No client-side install is required for any of it.

Optional client install

Adds the extras from "Optional client-side extras" above, including the F6 status panel. Install BepInExPack and drop the same NoodlesMcDoodles.dll into your own BepInEx/plugins/. It negotiates automatically with a modded server, and works standalone (its client-local pieces only) against a completely vanilla one too.

Mixed servers

Some players with the mod, some without, is completely fine — nothing here requires every player to match. Players without the client install simply don't get the optional upload/smoothing extras for their own character; everything server-side still applies to them normally.


🧯 Safety

This mod touches object ownership and network pacing on a live world, so it's built with a hard "zero data loss" rule:

  • Nothing destructive happens where it can't be undone. In-use ships, carts, chests, and crafting stations are never reclaimed out from under the player using them; the server-held empty band actively preserves instead of decaying. The two counters that would prove otherwise (an object claimed by two owners at once, or a persistent object destroyed by the empty-band logic) are designed to always read zero.
  • Auto stand-down. The mod watches its own exception rate and will automatically switch itself fully off — logging exactly why — if something starts throwing errors faster than expected. It never re-enables itself; an admin has to do that on purpose once the cause is fixed.
  • Mode quarantine. If another mod keeps refusing the server's ownership claims, the mod drops to the conservative SharedFar mode (the server runs only areas nobody is standing in) until an admin runs noodles clear ModeQuarantine.
  • Admin kill switch. Any admin on the server's own admin list can type noodles status, noodles enable, or noodles disable into Valheim's built-in developer console (F5 by default) from inside the game, or the server operator can type the same commands directly into the server's own console. disable reverts every hook this mod adds to exact vanilla behaviour immediately — no restart needed — and safely hands back anything the mod was holding.
  • Clean rollback. Nothing here changes the world save format or writes data a stock game can't read. If you ever want it gone entirely, just remove NoodlesMcDoodles.dll from BepInEx/plugins/ and restart — that's the whole uninstall.

Built and tested against Valheim 1.0.16 (network version 40).


⚙️ Configuration

(Run the game or server once to generate BepInEx/config/wubarrk.noodlesmcdoodles.cfg. "Side" says which install a setting matters on: the server's, a player's client, or both. Features.ZdoCompression.Active is the one setting a modded server pushes to connected modded clients.)

Safety & kill switch

Setting Default Side Description
Core.Enabled true both Master switch. Off = exactly vanilla behaviour everywhere.
Core.AutoStandDown.Enabled true both Let the mod switch Core.Enabled off by itself when its error rate spikes.
Core.AutoStandDown.ExceptionBurstLimit 5 both Caught errors per rolling 60 s before auto stand-down trips.
OwnershipAuthority.ModeQuarantine.VetoBurstLimit 50 server Claims refused by another mod, per 60 s, before ownership drops to SharedFar.

Networking

Setting Default Side Description
Transport.T1_GlobalRateBps 262144 (256 KiB/s) both Per-connection send-rate ceiling (vanilla: 150 KiB/s).
Transport.T9_ServerTotalBps 10485760 (10 MiB/s) server Server-wide sending total before rate increases pause.
Transport.T2_JoinBurstBps 2097152 (2 MiB/s) server Temporary higher ceiling for a player who is still joining.
Transport.Q10_Enabled true client Apply the same rate/queue improvements to a modded client's own upload.

Server-run zones

Setting Default Side Description
OwnershipAuthority.Active true server Master switch for server-run zones.
OwnershipAuthority.Mode FarOrShared server SharedFar: only areas nobody is standing in. FarOrShared: everything except what players handle directly. All: chests, carts, stands and ground items too.
O9.Active true server Give the objects players keep to whichever nearby player has the best ping.
O10.Active true (EXPERIMENTAL) server Let the server itself own an object when every nearby player is far.
Features.ServerZoneSim.Active true server Gives the server real terrain and objects around every player, so it has something to run.
Features.HeldBandPreservationGuard.Active true server Freezes decay/despawn inside the server's own empty held zones.

Gameplay correctness

Setting Default Side Description
Features.VehicleContainerHandover.Active true server Never reclaim a ship, cart, or container while a player is using it.
Features.ProductionHandoverGuard.Active true server Same protection for smelters, kilns, and similar production buildings.
Features.DoorAutoClose.Active true server Closes player-placed doors left open for 5 minutes (keyed and dungeon doors excluded).
Features.UpdateIsolation.Active true server If one object throws an error during its update, every other object keeps running. Without this, a single error freezes every creature on the server for that frame.

Compression & smoothing

Setting Default Side Description
Features.ZdoCompression.Active true both Compress object-update traffic between two modded peers (the server's value is pushed to clients).
ClientSmoothing.ShortExtrapolation.Active true client Shortens vanilla's 2 s stale-movement window to 500 ms.
ClientSmoothing.Active false (EXPERIMENTAL) client Optional buffered-interpolation smoothing; off by default (see Features above).

Status panel

Setting Default Side Description
Overlay.ToggleKey F6 client Cycles the panel: hidden → Basic → Detailed → hidden. Remap it if another mod uses F6.
Overlay.ShowOnStart false client Open the Basic tab at the start of each session without pressing the key.
Overlay.Opacity 0.7 client Panel background darkness, from 0.1 to 1.

The panel's position, size, tab and open state are saved automatically in wubarrk.noodlesmcdoodles.overlay.cfg.

Every feature above ships on by default except the experimental buffered-interpolation smoothing mode, which ships off. Each has its own switch: turning one off returns just that piece to vanilla behaviour.


Cooked up by Wubarrk.

Bug reports and suggestions are genuinely wanted — Discord is the fastest way to reach me.

License: MIT — use, modify, and redistribute freely, including commercially; just keep the copyright notice. See LICENSE.md for the full text.

Changelog

1.0.12 Latest
  • Fixed: harvested crops, berries, mushrooms and honey were mistaken for building pieces by 1.0.11's hand-back pass. When another mod deliberately holds such items on the server (an item-tracking mod, say), a player harvesting a patch, dozens at once, had every hand-back refused, and that burst tripped this mod's own safety net, which drops the server to the cautious SharedFar mode until a restart or noodles clear. Ground items are left to the item rules again, as in 1.0.10.
  • Changed: a hand-back another mod refuses on purpose (a held door, a held item) no longer counts toward the safety net's veto limit. It is counted on its own as ownership.o11.releaseRefusedByHolder, with samples in the detail log.
1.0.11
  • Fixed: trees and falling logs near a player stay with that player's own game again, as in vanilla. The server used to run them, so a log it broke on impact, or a stump a falling log hit, could disappear from the player's view, and a falling log could change hands mid-fall.
  • Fixed: a piece you placed this session stays with you while you're nearby. A brand-new portal was taken over by the server moments after its builder stepped away, and then destroyed.
  • Fixed: a tombstone near a player stays with the players' games again, as in vanilla. Another server mod could hand new tombstones to the server, whose copy only lifts a sinking tombstone back up where its own ground has loaded.
  • Fixed: the server no longer applies creature, fire or impact damage to builds and tames that are outside every player's own simulated area. Before, it kept doing so up to about 160 m from a player, further than any player's game runs.
  • Diagnostics: a player-built object the server destroys with nobody near now logs a warning naming what destroyed it (ownership.playerBuiltDestroyWhileServerHeld), and a hit the server's copy of an object can't take names that object (ownership.droppedRoutedRpc).
  • Compatibility: the handshake is unchanged, so 1.0.10 and 1.0.11/1.0.12 players and servers work together.
1.0.10
  • Changed: the server's claim pass now does a little work every frame (about half a millisecond) instead of one big pass a second, and it only changes who runs an object when something actually needs to change. The old pass made thousands of ownership calls a second that were all refused, in one frame. In a 25-minute test those are gone, and objects the server claimed back within a minute dropped from 42,484 to 291: creatures, doors and building pieces stop bouncing between the server and players.
  • Fixed: the server now lets go of an object the moment it unloads it, instead of a second or two later. In that gap a creature could stand frozen and a hit on it could be lost.
  • Fixed: the server no longer tries claims its own rules refuse (mostly pickables near players).
  • Fixed: the F6 network panel no longer shows on the main menu or loading screen; it appears once you're in the world.
  • Settings: new [OwnershipAuthority] ClaimScanBudgetMs (default 0.5). MaxZonesClaimedPerCycle is gone; the old line in an existing config is ignored.
  • Telemetry: ownership.o6.claimSliceMsMax and ownership.o6.scanStepMsMax (the claim pass's slowest frame and single step), ownership.o6.scanObjectsPerSec, ownership.o6.setOwnerCallsPerSec, ownership.o6.strayOrCandidacyLostReleased and ownership.unloadReleased.

9 older entries, full version history & downloads →

Manual installation instructions
1

Install BepInExPack Valheim

BepInExPack Valheim is required to run mods in Valheim.

Download BepInExPack Valheim 5.4.2351 · View mod page

Check out the mod page for detailed installation instructions.

2

Install NoodlesMcDoodles

This mod must be installed on both the client and the server.

Download NoodlesMcDoodles 1.0.12

Extract the ZIP and place the file(s) into the BepInEx/plugins/ folder inside your Valheim game folder.