You are viewing a potentially older version of this package. View all versions.
DragonMotion-MoveBuildPieces-1.0.17 icon

MoveBuildPieces

Move player-built Valheim pieces in World mode by default, or optionally from the build menu. Uses U hotkeys, a blue placement ghost, multiplayer owner confirmation, and configurable recipe-knowledge checks.

Date uploaded 2 weeks ago
Version 1.0.17
Download link DragonMotion-MoveBuildPieces-1.0.17.zip
Downloads 128
Dependency string DragonMotion-MoveBuildPieces-1.0.17

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

MoveBuildPieces

Move player-built Valheim build pieces without destroying and rebuilding them. By default the mod works in World mode, so you can walk up to a placed object and press U without opening the hammer build menu.

Usage

  • World mode: default. Without active build mode, hover a removable player-built piece and press U by default to start or cancel moving it.
  • BuildMenu mode: optional. Equip the hammer, enter build mode, hover a removable player-built piece, and press U by default to start or cancel moving it.
  • Place the blue ghost to move the original object to that position.
  • Press E while moving to interact with doors without cancelling move mode.

Choose one active mode with the Move mode config dropdown. Each mode has its own hotkey.

Config Defaults

  • Move mode = World: moving works outside the hammer build menu.
  • World mode move hotkey = U
  • Build mode move hotkey = U
  • Require known piece = false: player-built pieces can be moved even if the player has not learned their recipe yet.
  • Block terrain modifiers = true: terrain-changing pieces stay blocked.
  • Block dynamic objects = true: ships, carts, characters, and non-kinematic rigidbodies stay blocked.
  • Move lock timeout seconds = 45: multiplayer move locks expire automatically after a disconnect or crash.

Existing BepInEx config files keep their saved values. Delete or edit the existing config if you want these defaults to apply after updating.

Safety

The object keeps its original ZDO, so container inventories and production state stay on the same network object. In multiplayer the ZDO owner applies and confirms the final move, while the local player only requests it. Moves are limited to the original player-base area that covered the object when move mode started, and the ghost must remain inside the required build-station range.

World objects, terrain modifiers, ships, carts, characters, and active containers are blocked by default. Unknown pieces are allowed by default, but can be blocked with Require known piece = true.

Move mode is cancelled automatically when the player dies, starts teleporting, switches from World move mode into normal build mode, or the moved object disappears.

In multiplayer, the moved object is locked while a player is moving it. If the moving player disconnects or crashes, the lock expires after Move lock timeout seconds.

The mod only performs focused work for the local player while move mode is active. It does not scan all placed objects.

CHANGELOG

1.1.1

  • Fixed the false Not all requirements have been met rejection for Magic Supremacy's MagicWeaverDO and every other piece in a custom build category. The isolated relocation table now uses its own vanilla Misc slot and never calls category/index lookup.
  • Removed build-menu visibility, category order, AAABuildMenu columns/search/filters, required materials, and Player.HaveRequirements from relocation authorization.
  • Made Require known piece use only the player's real known-recipe set through Player.IsRecipeKnown; when disabled, knowledge is bypassed unconditionally.
  • Restored the intended build-area boundary using the source position's existing EffectArea.Type.PlayerBase territory (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 piece as 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, and Mixed, 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 WearNTear reflection 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 ZNetView objects 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 E move hotkey while giving a successful door interaction priority for that press.

1.0.23

  • Prevented Physics.ClosestPoint warning 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_creator cache 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 Mixed mode 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 WearNTear structural 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 WearNTear refresh 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 = World and Require known piece = false.

1.0.15

  • Enforced Require known piece before entering move mode, including World mode 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 World mode move is cancelled by equipping a hammer or another build tool.
  • Prevented World mode moves from starting while a build tool is already equipped.

1.0.12

  • Reset relocated WearNTear geometry, 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 World mode move.

1.0.10

  • Fixed Require known piece = false for pieces unavailable through the current build list by selecting the temporary move table without vanilla recipe filtering.

1.0.9

  • Fixed Require known piece = false by 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 World mode is replaced by normal build mode.
  • Allowed Require known piece = false without granting recipes or opening the full build list.

1.0.7

  • Added door interaction while move mode is active.
  • Added Require known piece config 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 BuildMenu move hotkey to U.
  • Prevented vanilla placement updates during active World mode moves to avoid null-reference errors when no build tool is equipped.
  • Updated World mode 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 mode dropdown.
  • Fixed World mode 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.