You are viewing a potentially older version of this package. View all versions.
shudnal-BuildPiecesCustomized-1.3.0 icon

BuildPiecesCustomized

Customize individual build pieces. Set properties globally such as rain, water, ash, lava damage immunity. Customize global material type properties.

Date uploaded a week ago
Version 1.3.0
Download link shudnal-BuildPiecesCustomized-1.3.0.zip
Downloads 559
Dependency string shudnal-BuildPiecesCustomized-1.3.0

This mod requires the following mods to function

denikson-BepInExPack_Valheim-5.4.2350 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.2350
shudnal-ConditionalConfigSync-1.0.5 icon
shudnal-ConditionalConfigSync

Shared config synchronization and server policy library for Valheim mods. Installed as a dependency and compatible with Jotunn and ServerSync.

Preferred version: 1.0.5
ValheimModding-YamlDotNet-16.3.0 icon
ValheimModding-YamlDotNet

Shared version 16.3.0 of YamlDotNet from Antoine Aubry and contributors, net47 package for use in Valheim mods. Maintained by the ValheimModding team.

Preferred version: 16.3.0
ValheimModding-JsonDotNET-13.0.3 icon
ValheimModding-JsonDotNET

Shared version 13.0.3 of Json.NET from Newtonsoft, net45 package for use in Valheim mods. Maintained by the ValheimModding team.

Preferred version: 13.0.3

README

BuildPiecesCustomized

Customize individual Valheim build pieces, apply common properties globally, and adjust structural material properties.

Features

  • Customize individual piece properties, including enabled state, name, description, requirements, placement rules, durability, targeting, and Hammer usage tags.
  • Apply common properties globally through prefab lists.
  • Change material support properties to build higher or farther.
  • Load JSON, YAML, and YML piece configuration files from the plugin directory or BepInEx/config/shudnal.BuildPiecesCustomized.
  • Synchronize server-controlled configuration and reapply changes when configuration files change.

Hammer usage tags

Valheim 1.0 uses Piece.UsageTagFlags for the main Hammer build menu filters. BuildPiecesCustomized does not reassign legacy PieceCategory values.

Individual piece files can define usageTags:

usageTags:
  - Building
  - Doors

usageTags is a full replacement:

  • If usageTags is omitted, the piece keeps its original usage tags.
  • If usageTags is present, the listed built-in tags replace the current tag set.
  • usageTags: [] clears all usage tags.
  • Tag names are case-insensitive when loading.
  • Only built-in Valheim Piece.UsageTagFlags names are supported. Numeric masks and custom runtime tags added by other mods are not supported.
  • Unsupported custom tags remain untouched while usageTags is omitted. Setting usageTags replaces the mask with built-in tags only.

The generated Pieces and properties.md file contains the currently supported tag names, their localized in-game names, and the current tags of every discovered piece.

Bulk usage tag configuration

For centralized overrides, create Piece usage tags.yaml, Piece usage tags.yml, or Piece usage tags.json.

A single file can configure tags in both directions:

pieces:
  wood_door:
    - Building
    - Doors
  custom_piece: []

tags:
  Defense:
    - h_drawbridge01
    - hayzestake_01

The two sections have different semantics:

  • pieces: prefab -> tags. The list fully replaces the piece's usage tags.
  • tags: tag -> prefabs. The tag is added to every listed piece without removing its other tags.

The bulk usage-tag file has higher priority than individual piece files. Processing order is:

  1. Individual piece usageTags.
  2. Bulk pieces replacements.
  3. Bulk tags additions.

This allows a piece to receive a complete tag set in pieces and then receive additional shared tags from tags in the same file.

If more than one fixed-name bulk file is found, the last file in configuration search priority is used. The config directory is processed after the plugin directory.

The old Piece categories.json / YAML format is no longer supported.

Setting global values

There are several global lists set in the main config:

  • Clip everything
  • Allow in dungeons
  • Can be repaired
  • Can be removed
  • Ash and lava immunity
  • Heavy snow immunity
  • Water and rain damage immunity
  • Structural integrity
  • Is roof
  • Is leaky (non-roof)
  • Disabled pieces

All lists are comma-separated prefab names. If a prefab is present in a global list, that value overrides the corresponding individual setting.

Use AllPieces to apply a supported global rule to every piece. Disabled pieces does not use AllPieces.

Material properties

Material groups provide multipliers for:

  • Max support multiplier - support provided when grounded.
  • Min support multiplier - minimum support before the piece breaks.
  • Vertical stability multiplier - increases or decreases vertical building stability.
  • Horizontal stability multiplier - increases or decreases horizontal building stability.

A value of 1.0 keeps the vanilla material behavior.

Automatically generated documentation

When the main menu or a world initializes, Pieces and properties.md is generated in BepInEx/config/shudnal.BuildPiecesCustomized.

It contains:

  • Supported usageTags and their localized Hammer category names.
  • The bulk usage-tag file format and precedence rules.
  • Supported enum identifiers for other configurable properties.
  • All discovered build-piece prefab names.
  • Current usage tags for every listed piece.

Regenerate it at any time with:

bpcdocs

Setting individual values

Generate a template for one piece:

bpcsave [prefab name]

Generate templates for multiple pieces using a partial name or wildcard:

bpcsaveall [prefab partial name or wildcard *]

Files are created in BepInEx/config/shudnal.BuildPiecesCustomized using JSON by default or YAML when Save piece data as YAML is enabled.

You can remove every property you do not want to override. Missing properties preserve the default value captured from the piece prefab.

Configuration files can be placed in subdirectories under either the plugin directory or BepInEx/config/shudnal.BuildPiecesCustomized. Files placed on the server are synchronized to clients according to ConditionalConfigSync policy.

Selected property notes

Most properties are self-explanatory. Some useful details:

  • usageTags - built-in Hammer usage tags. The list fully replaces the current tags; an empty list clears them.
  • groundOnly - piece can only be built on the ground.
  • cultivatedGroundOnly - piece can only be built on cultivated terrain.
  • waterPiece - piece must touch water when built.
  • clipGround - piece can clip into terrain.
  • clipEverything - piece can clip into other objects.
  • noInWater - piece cannot touch water when built.
  • notOnWood - piece cannot be placed on wood or hardwood surfaces.
  • notOnTiltingSurface - piece requires a relatively flat surface.
  • notOnFloor - piece requires a vertical surface.
  • noClipping - piece cannot clip other objects.
  • inCeilingOnly - piece must hang from a ceiling.
  • onlyInTeleportArea - piece can only be placed inside a teleport effect area.
  • allowedInDungeons - piece can be built in dungeon interiors.
  • allowedInDeepSnow - piece can be placed in Deep North deep-snow areas that normally reject it.
  • requireDeepSnow - piece can only be placed in Deep North deep snow.
  • spaceRequirement - minimum distance to another station extension.
  • allowRotatedOverlap - piece can overlap other pieces when rotated.
  • vegetationGroundOnly - vegetation requires cultivated ground.
  • blockRadius - prevents placing another similar piece inside this radius.
  • extraPlacementDistance - adds distance between the player and the placement position.
  • targetNonPlayerBuilt - enemies can target the object even when it was not player-built.
  • primaryTarget - enemies prioritize the object.
  • randomTarget - object can be selected as a random enemy target.
  • onlyInBiome - biome bit mask used by the game.
  • noRoofWear - controls rain and water wear.
  • roofCheckOffset - offset used by WearNTear roof detection.
  • noSupportWear - controls structural-integrity wear.
  • snowDamageImmune - immunity to heavy-snow damage.
  • supports - controls whether other pieces can use this piece for support.
  • hitNoise - noise generated when hit.
  • destroyNoise - noise generated when destroyed.
  • ashDamageImmune - immunity to ash and lava damage.
  • ashDamageResist - reduced lava damage and Ashlands ignition resistance.
  • triggerPrivateArea - nearby wards react when the object is attacked.
  • requiredPersistentEvent - persistent-event identifier used by WearNTear event damage logic.
  • takeDamageIfInsideEvent - enables the configured persistent-event damage condition.
  • eventDamage - base damage applied by the persistent-event rule.
  • eventDamageDeviation - random deviation applied to persistent-event damage.
  • requiredBiome - biome mask required by WearNTear.
  • outsideRequiredBiomeDamage - damage applied when the piece is outside requiredBiome.

Installation

Copy BuildPiecesCustomized.dll to BepInEx/plugins or install the Thunderstore package.

Incompatibility

The mod is incompatible with deprecated or outdated mods that patch the same piece properties directly.

  • Floors are Roofs - use the water-damage and roof global settings.
  • Custom Building Material Properties - use the material property settings.
  • Forever Build - use material properties or the structural-integrity settings.
  • Build Piece Tweaks - overlapping piece customization.

Configuration UI

Recommended configuration managers:

Dependencies

ConditionalConfigSync is a separate dependency and must not be bundled into this mod package.

Donation

Buy Me a Coffee

Discord

Join server

CHANGELOG

1.3.0

  • Added Valheim 1.0 Deep North piece placement settings: allowedInDeepSnow and requireDeepSnow.
  • Added WearNTear heavy-snow, roof-check, persistent-event, and required-biome settings to generated piece configs.
  • Added a global Heavy snow immunity prefab list.
  • Replaced legacy piece category reassignment with Valheim 1.0 Hammer usage tag customization.
  • Added usageTags to individual piece files with full-replacement semantics and support for clearing all tags with an empty list.
  • Added Piece usage tags.yaml / JSON bulk configuration with both pieces (prefab -> tags) and tags (tag -> prefabs) sections.
  • Made bulk usage-tag configuration override individual piece usageTags, with tag-group additions applied after per-piece replacements.
  • Restricted usage-tag configuration to built-in Valheim Piece.UsageTagFlags names and reject invalid values atomically.
  • Updated generated documentation with supported Hammer tags, localized display names, bulk-file examples, and current usage tags for every piece.
  • Refresh the open Valheim build UI when usage tags change.
  • Removed legacy Piece categories configuration and category storage compatibility patches.
  • Removed remaining Nexus packaging files and references.

1.2.3

  • Cached parsed resource and damage-modifier configuration while resolving resources against the current ObjectDB.
  • Avoided constructing default requirements that are immediately replaced, without sharing mutable requirements between pieces.
  • Reduced repeated prefab fallback lookups and temporary allocations in global piece rules.

1.2.2

  • Fix category storage and selection array bounds when refreshing building tools in Valheim 1.0.7.
  • Filter disabled pieces from availability views without removing prefabs from the shared piece registry.
  • Reject unknown or reserved configured categories while preserving registered custom categories and All.
  • Refresh the building menu after deferred prefab updates and initialize global filters before patching.
  • Generate category documentation without changing the active building tool or invoking HUD updates.
  • Updated for the Valheim 1.0.7 release.
  • Completed the migration to the standalone ConditionalConfigSync dependency.
  • Updated required dependencies to BepInExPack Valheim 5.4.2350 and ConditionalConfigSync 1.0.5.
  • Rebuild category configuration without retaining entries from deleted files and handle empty configuration data.

1.2.0

  • support for YAML files (new config to save piece data as YAML, disabled by default)
  • support for partially filled files (missing properties will fallback to default value)
  • new config "Disabled pieces" for disabling pieces en masse
  • new config file with fixed name "Piece categories.json" for moving pieces between categories en masse

1.1.5

  • new configs for roof -> leaky transition
  • new config drawers for string lists

1.1.4

  • patch 0.220.3
  • ServerSync updated

1.1.3

  • probably fixed occasional unharmful error on doc generation

1.1.2

  • fixed patching Hoe pieces
  • documentation file will be generated with full list of items after world loading

1.1.1

  • fixed AllPieces config setting not applying properly to all pieces

1.1.0

  • minor optimization
  • new global config option to make piece a roof

1.0.7

  • bpcsaveall command to save several pieces JSON at once

1.0.6

  • all config values made server synced

1.0.5

  • NullReferenceException fixed

1.0.4

  • proper compatibility with Infinity Hammer
  • "bpcsave" command now save json file into \BepInEx\config\shudnal.BuildPiecesCustomized folder

1.0.3

  • incompatibility with Infinity Hammer

1.0.2

  • loading files from config directory fixed

1.0.1

  • description update
  • incompatibility list extended

1.0.0

  • Initial release