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.
MoveBuildPieces
Move player-built Valheim pieces in World, BuildMenu, or Mixed mode with owner-authoritative multiplayer validation and preserved object state.
| Date uploaded | 2 weeks ago |
| Version | 1.0.21 |
| Download link | DragonMotion-MoveBuildPieces-1.0.21.zip |
| Downloads | 44 |
| Dependency string | DragonMotion-MoveBuildPieces-1.0.21 |
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.2333README
MoveBuildPieces
Move player-built Valheim pieces without destroying and rebuilding them. The default Mixed mode uses one U hotkey both inside and outside the hammer build menu.
Usage
World: outside build mode, hover a removable player-built piece and press the world hotkey.BuildMenu: equip a build tool, hover a removable player-built piece, and press the build-menu hotkey.Mixed: use one separate mixed-mode hotkey both inside and outside build mode. The mod automatically selects the correct placement context.- Place the blue ghost to move the original object.
- Press the same move hotkey again or
Escapeto cancel. - Press
Ewhile moving to interact with doors without cancelling.
Choose the active behavior with Move mode. New configs default to Mixed. Existing BepInEx config files keep their previously saved mode until you change or remove that value.
Config Defaults
Move mode = MixedWorld mode move hotkey = UBuild mode move hotkey = UMixed mode move hotkey = URequire known piece = falseBlock terrain modifiers = trueBlock dynamic objects = trueMove lock timeout seconds = 45
Existing BepInEx config files keep their saved values. Select Mixed explicitly if an older config still contains World or BuildMenu.
Safety and multiplayer
The object keeps its original ZDO, so inventories and production state stay on the same network object. The current ZDO owner validates and commits the move; the requesting client reports success only after a direct, authenticated server check sees the transaction in the server's authoritative ZDO state.
Version 1.0.21 uses the authenticated move protocol introduced in 1.0.20. Install the same version on the server and all players who can own or move pieces. A leased direct server capability challenge prevents moves through an unmodded or no-longer-responding server. Requests carry a peer-bound player identity and one-time transaction token. Locks, replies, retries, cancellation, owner changes, and the final server commit are checked against that transaction, and a disconnect safety lease prevents permanent locks.
The server's Enabled, Require known piece, terrain/dynamic blocking, and lock-timeout values are authoritative and are sent directly to clients. Hotkeys and the selected input mode remain per-player settings.
A fresh vanilla placement validation runs immediately before commit. During move mode the original object remains available as a snap source, but is excluded from self-spacing, required-connection, overlap, and clipping tests, including rotation in place. The owner separately rechecks distance, ward access for the actual requesting player, no-build zones, base territory, station requirements, static connection rules, finite coordinates, structural support, and unsafe component types.
Pieces with terrain mutation, unsafe dynamics, nested network objects, occupied attach points, active containers, or cached fire/no-monster areas are blocked. Claimed beds can only be moved by their owner, and that player's custom spawn point follows a successful move. Sap collectors, shields, fireplaces, static rotation, biome/roof/lava state, heightmap subscriptions, and WearNTear support caches are refreshed at the new position.
The mod performs placement work only for the local player while move mode is active. It has no recurring scan over every placed object.
CHANGELOG
1.1.1
- Fixed the false
Not all requirements have been metrejection for Magic Supremacy'sMagicWeaverDOand every other piece in a custom build category. The isolated relocation table now uses its own vanillaMiscslot and never calls category/index lookup. - Removed build-menu visibility, category order, AAABuildMenu columns/search/filters, required materials, and
Player.HaveRequirementsfrom relocation authorization. - Made
Require known pieceuse only the player's real known-recipe set throughPlayer.IsRecipeKnown; when disabled, knowledge is bypassed unconditionally. - Restored the intended build-area boundary using the source position's existing
EffectArea.Type.PlayerBaseterritory (the base area used by Valheim's spawn suppression), without requiring the piece's original crafting station. - Capture the exact source build-area instances before creating the ghost, preventing a workbench or other base-piece ghost from authorizing its own destination.
- Resolve the canonical relocation prefab from the authoritative ZDO prefab hash before falling back to its name, improving compatibility with renamed runtime instances.
- Kept the final vanilla placement ghost as the surface/connection/biome/spacing validator and removed the second divergent owner-side static-rule clone that could reject a valid preview.
- Retained owner-side source/target build-area, ward, no-build, reach, unsafe-state, and structural-support rollback checks; bumped multiplayer traffic to protocol V4 so mixed releases fail cleanly.
1.1.0
- Re-audited relocation against the current vanilla placement, ZDO synchronization, crafting-station, station-extension, effect-area, and structural-support paths.
- Removed non-vanilla
PlayerBase, station-at-destination, and repeated source-distance requirements while preserving final vanilla placement validation, ward/no-build checks, target reach, connection rules, and structural support. - Preserved
Require known pieceas an independent recipe-knowledge policy; disabling it permits only the selected existing object and never teaches or exposes recipes. - Always use an isolated one-piece placement table in
World,BuildMenu, andMixed, preserving the normal table and selection across success or cancellation. - Unified placement input across all three modes so relocation is not accidentally gated by the hammer's stamina, durability, or resource-consumption path.
- Added optional AAABuildMenu compatibility for its filtered/search build lists without adding a hard dependency or changing AAABuildMenu when it is absent.
- Rebuild moved workbench upgrade lists/ranges, station-extension links, cached burning/no-monster bounds, and ward connection caches after move and rollback.
- Made nonessential
WearNTearreflection caches optional while retaining the fail-closed support check for pieces that can break without support. - Replaced six per-piece routed-RPC closures with six session-level handlers keyed by
ZDOID; bumped the network protocol and message names to V3. - Hold the object lock until server observation completes so a second move cannot overwrite a pending transaction record.
- Keep that lock lease refreshed while confirmation is pending, and validate fast visual updates against the committed token and ZDO pose.
- Snapshot and restore moved rigidbody velocities plus component cache/environment fields when an owner-side transaction rolls back.
- Store cancelled-request tombstones without retaining player, piece, or
ZNetViewobjects for the late-response safety window. - Cache unchanged move-link geometry and stopped duplicate placement-ghost setup and per-frame duplicate destination scans.
- Allow an explicitly configured
Emove hotkey while giving a successful door interaction priority for that press.
1.0.23
- Prevented
Physics.ClosestPointwarning spam when movable pieces use non-convex mesh or other unsupported collider types. - Kept exact proximity checks for primitive and convex colliders, used collider bounds as a safe fallback for piece-distance checks, and ignored inactive or trigger-only piece colliders.
- Made custom player-base area checks fail closed for unsupported collider shapes instead of calling an invalid Unity physics API.
- Reused component buffers and calculated each object's link endpoint and ring radius from one bounds scan per frame; corrected rotated mesh-only fallback bounds.
1.0.22
- Read player-built identity from the authoritative ZDO creator field whenever Valheim's one-time local
Piece.m_creatorcache differs from the network data. - Split non-removable and missing-creator failures into separate messages and added network identity diagnostics for genuine creator mismatches.
1.0.21
- Fixed the dashed link endpoint jumping toward world origin by removing the premature placement-ghost bounds cache and calculating current object endpoints after vanilla updates the ghost.
- Ignored inactive and near-zero collider/renderer bounds so temporary Unity bounds cannot distort link anchors or floor rings.
- Changed the clean-config default to
Mixed, using its separate hotkey both inside and outside build mode. Existing saved configs remain unchanged.
1.0.20
- Added
Mixedmode and its own configurable hotkey, usable both inside and outside build mode. - Replaced the old move RPCs with versioned, peer-authenticated lock and transaction messages, a direct server capability challenge and authoritative commit check, exact-owner routing, cancellation tombstones, owner-change retry, and bounded timeouts.
- Made the server's enable/safety/knowledge/lease policy authoritative for every possible ZDO owner instead of depending on a random owner's local config.
- Added owner-side requester, distance, ward, base, station, connection, finite-transform, occupied-piece, nested-network-object, and unsafe-area validation.
- Revalidated the vanilla placement ghost immediately before commit and locked the active PieceTable/prefab so copy, removal, or selection changes cannot move the wrong object.
- Fixed duplicate World placement-ghost updates and restored vanilla-style mouse/gamepad rotation handling.
- Rebuilt WearNTear relocation refreshes, including support geometry, roof, biome, heightmap subscription, water, Ashlands, lava, rain, and shield state, without treating the object as newly placed.
- Refreshed sap collectors, shield visuals, fireplace/cinder biome caches, static rotation, and claimed-bed spawn points after a move.
- Optimized active visuals by caching object bounds, reusing renderers/materials, growing dense-base support buffers safely, and targeting support-cache RPCs only at their owners.
- Added complete disable, cancel, death, teleport, logout, Piece destruction, and late-response cleanup.
- Excluded the original object from move-only spacing, required-connection, overlap, and clipping checks while preserving it as a snap source, including rotation in place; prevented a second placement-ghost update in the commit frame.
- Added an expiring challenge-bound server-capability lease, target-bound commit replies, coalesced lock refreshes, exact-owner release during ownership gaps and graceful logout, fail-closed ward compatibility, and transactional owner rollback on exceptions.
1.0.19
- Refuse moves that would immediately violate
WearNTearstructural support, preventing unsupported pieces from breaking after relocation. - Revert owner-side transforms before syncing if the moved piece cannot survive at the target position.
1.0.18
- Prevented vanilla placement from running while move mode is active, even if the selected prefab changes.
- Made the post-move
WearNTearrefresh softer so moved pieces recalculate support bounds without being treated as newly placed objects.
1.0.17
- Clarified the Thunderstore description and README with the two move modes, current defaults, and existing-config behavior.
1.0.16
- Changed new config defaults to
Move mode = WorldandRequire known piece = false.
1.0.15
- Enforced
Require known piecebefore entering move mode, includingWorldmode moves that use the temporary one-piece build table.
1.0.14
- Wait for the ZDO owner to confirm multiplayer moves before completing local move mode.
- Avoid owner-side ward checks that used the ZDO owner's local player instead of the moving player.
- Reduced redundant support-cache broadcasts when clients receive visual move updates.
1.0.13
- Restored the equipped build tool's normal build table when a
Worldmode move is cancelled by equipping a hammer or another build tool. - Prevented
Worldmode moves from starting while a build tool is already equipped.
1.0.12
- Reset relocated
WearNTeargeometry, support, roof, and biome caches after a move so structural support is recalculated at the new position instead of using stale world-space data.
1.0.11
- Suppressed primary and secondary attack input while move mode is active, including the placement click when finishing a
Worldmode move.
1.0.10
- Fixed
Require known piece = falsefor pieces unavailable through the current build list by selecting the temporary move table without vanilla recipe filtering.
1.0.9
- Fixed
Require known piece = falseby preserving the one-piece temporary move table instead of letting vanilla filter it by known recipes.
1.0.8
- Added multiplayer move locks so only one player can move the same object at a time.
- Added lock timeout recovery for disconnects or crashes during move mode.
- Cancelled move mode on player death and when
Worldmode is replaced by normal build mode. - Allowed
Require known piece = falsewithout granting recipes or opening the full build list.
1.0.7
- Added door interaction while move mode is active.
- Added
Require known piececonfig to allow moving player-built pieces before learning their recipes. - Cancelled active move mode automatically when the player starts teleporting.
1.0.6
- Changed the default
BuildMenumove hotkey toU. - Prevented vanilla placement updates during active
Worldmode moves to avoid null-reference errors when no build tool is equipped. - Updated
Worldmode to refresh the placement ghost and finish moves directly while vanilla placement is skipped.
1.0.5
- Replaced separate mode toggles with a single
Move modedropdown. - Fixed
Worldmode piece detection outside build mode by using a direct build-piece raycast.
1.0.4
- Added separate build-mode and world-mode moving.
1.0.3
- Synchronized moved pieces to already connected multiplayer clients immediately after the ZDO owner applies the relocation.
1.0.2
- Moved multiplayer relocation to the ZDO owner instead of claiming ownership locally.
- Kept child rigidbodies in their own transforms while stopping leftover motion after a move.
1.0.1
- Scale the origin and ghost floor rings from the moved object's footprint size.
1.0.0
- Initial Thunderstore release.
- Added build-mode moving for known player-built pieces with a blue placement ghost, raised dashed link, station-range limits, and preserved network object state.