Skip to content

Releases: Lueken/Fieldwright

v0.1.3 - BE-aware ghost rendering + checklist modal

Choose a tag to compare

@Lueken Lueken released this 26 May 00:15
063aedf

The "ghost shows the real thing" release. Chests, crates, baskets, generic containers, and chiseled blocks now render with their actual block-entity geometry instead of mystery placeholders. The build checklist gets a movable, scrollable, copyable dialog mode in addition to the existing always-on HUD.

Added

  • BE-aware ghost rendering. Per-family mesh sources read each cell's saved block-entity tree at paste time and reconstruct the real mesh:
    • Chests / labeled chests / querns / beds tessellate normally and rotate by their saved meshAngle, so askew chests show askew in the ghost.
    • Crates / stationary baskets / generic containers spin up a throwaway BlockEntity from the schematic's BE tree and invoke its private mesh-builder (GenMesh(tesselator) / loadOrCreateMesh()) via cached reflection.
    • Chiseled blocks / microblocks render the substrate the chisel was carved from (oak plank, granite, etc.) as a full cube. Voxel-level chisel detail stays for the v0.2 chisel phase.
  • Substrate-aware materials list. Chiseled cells contribute to their substrate's row in the build checklist (planks: 0/12 includes chiseled-from-plank cells) rather than showing as a chiseledblock line. Placing the substrate counts the cell as matched for phase-1 build.
  • Checklist modal. Ctrl+Shift+L now cycles three view states: HUD (transparent always-on, no cursor grab) -> Modal (draggable title bar, clipped scroll body, "Copy to clipboard" button) -> Hidden -> HUD. The HUD opens automatically on .fw place; the modal is opt-in via the cycle.

Fixed

  • Paste no longer crashes with NullReferenceException on blueprints saved by v0.1.2's block-only fallback path. Reported by Fish and 3CHØ on the Vintage Story Discord. BlueprintFile.ToBlockSchematic now calls EnsureSchematicCollectionsInitialized immediately after LoadFromString so the schematic's collections are always non-null before BlockSchematic.Init -> Remap runs. Affects single-player saves loaded on a server, library paste, and the .fw paste chat command alike.

Notes

  • Crate / basket meshes don't show in-world label / contents detail since we don't reconstruct items inside containers; mesh geometry + rotation only.
  • Reflection-based BE instantiation is best-effort. Third-party BE classes that throw inside Initialize without populating their mesh field will fall back to bare tessellation. Warnings go to client-main.log under [fieldwright:be-mesh].
  • Phase 1 build counts treat chiseled cells as their substrate. Build-vs-chisel separation lands with v0.2.

v0.1.2 Hotfix

Choose a tag to compare

@Lueken Lueken released this 23 May 21:11
5598730

[0.1.2] - 2026-05-23

Hotfix for a save crash reported by multiple users on the ModDB page (SimonBBallin, Sir_Capon).

Fixed

  • Save no longer crashes with NullReferenceException when the selection contains entities. The vanilla BlockSchematic.AddArea captures every entity in the region (mobs, dropped items, falling blocks, projectiles) and runs Entity.OnStoreCollectibleMappings on each, which NREs for any entity with a null collectible reference. New BlueprintStore.CaptureBlocksOnly method builds the schematic from blocks only, bypassing AddArea entirely. Block entities (chest contents, sign text, chisel voxel data) are also skipped for now; they aren't read by any v0.1.x feature. Per-cell block-entity capture with proper try/catch returns when Phase 4 chisel overlay needs it.

v0.1.1

Choose a tag to compare

@Lueken Lueken released this 20 May 17:15
6db934b

[0.1.1] — 2026-05-20

The "polish + power-user" release. Adds the schematic library UI, three matching modes, a 3-axis mirror, layer-by-layer view, in-world red highlights for blocks that need to be cleared, plus a mod config file with user-tunable knobs.

Added

  • Mod config file at %APPDATA%/VintagestoryData/ModConfig/Fieldwright.json. Auto-created with defaults on first load. Knobs: DefaultMatchingMode, GhostAlpha, RenderDistanceBlocks, AutoDismissMs, HudOffsetX, HudOffsetY.
  • MatchingMode toggle (Loose / Medium / Strict). Loose stays the default (any cobble counts as any cobble), matching v0.1.0 behavior. Medium uses VS's Variant API to strip orientation variants only (rotation, facing, side) while preserving rock type / wood type / condition. Strict requires the exact block code including every variant. Per-paste override via .fw paste my-house medium. The library UI dropdown saves the chosen default back to disk.
  • Schematic library UI (Ctrl+Shift+K or .fw library). Native GuiDialog listing saved blueprints with size, block count, anchor face, modified date, and "has backup" badge. Per-row Paste and Delete buttons. Two-step delete confirmation with red "Confirm?" text. Pagination over scroll. Matching-mode dropdown at the top.
  • Hotkey reference modal accessible from the library footer.
  • Layer-by-layer view. PgDn peels the top layer off the placed ghost, PgUp restores. Useful for tall builds and seeing interior layers while constructing.
  • 3-axis mirror toggle (Ctrl+Shift+M or .fw mirror). Cycles None → X → Y → Z → None. Applied in the anchor-block-centered local frame so it composes correctly with player-yaw rotation. Tracker rebuilds expected positions when the ghost is already placed.
  • .fw restore <name> command. Swaps a blueprint with its rolling backup (reversible by running again). Handles the no-backup and main-file-missing cases gracefully.
  • Ctrl+Shift+X cancel hotkey. Dismisses any active ghost AND clears the selection box in one stroke. .fw cancel now does the same combined operation. .fw clear stays selection-only for granularity.
  • Red highlight on cells that need to be cleared. Both air-violation cells (should-be-empty but isn't) and wrong-block cells (expected block X, got block Y) render with a translucent red overlay, so the player can locate them in 3D rather than guess from a count.

Changed

  • HUD labels now stay clean regardless of matching mode. Display always uses FirstCodePart ("cobble", "log", "slantedroofing"); the variant detail used for matching lives only in the backend. Inventory counts remain truthful per mode.
  • "Blocks to remove" count now sums both air-violation and wrong-block cells.

Notes

  • Block variants still don't rotate with the ghost mesh; that lands with Phase 4 schematic-transform rotation in v0.2.x.
  • Chiseled blocks still render as their default shape and auto-match any chiseled block at the cell. Per-voxel comparison is Phase 4.

Fieldwright-v0.1.0

Fieldwright-v0.1.0 Pre-release
Pre-release

Choose a tag to compare

@Lueken Lueken released this 19 May 06:36
Initial release v0.1.0

Phase 1 (foundation), Phase 2a (ghost rendering), Phase 2b (snap-to-look
with yaw-based auto-rotation and place-toggle), and Phase 3a (match
tracking + checklist HUD). Client-side only; reads BlockChanged events
and player inventory, never writes.

Hotkeys: Ctrl+Shift+B/N for corners, Ctrl+Shift+P to toggle place,
Ctrl+Shift+L to toggle the checklist HUD. Commands under .fw prefix.

Multi-block placeholder cells are excluded from materials list and
air-violation set. Match logic uses group keys (FirstCodePart) so
auto-oriented variants count as the same block. Auto-dismisses ghost
and HUD 5.5s after completion.