Releases: Lueken/Fieldwright
Releases · Lueken/Fieldwright
Release list
v0.1.3 - BE-aware ghost rendering + checklist modal
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.
- Chests / labeled chests / querns / beds tessellate normally and rotate by their saved
- Substrate-aware materials list. Chiseled cells contribute to their substrate's row in the build checklist (
planks: 0/12includes chiseled-from-plank cells) rather than showing as achiseledblockline. Placing the substrate counts the cell as matched for phase-1 build. - Checklist modal.
Ctrl+Shift+Lnow 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
NullReferenceExceptionon blueprints saved by v0.1.2's block-only fallback path. Reported by Fish and 3CHØ on the Vintage Story Discord.BlueprintFile.ToBlockSchematicnow callsEnsureSchematicCollectionsInitializedimmediately afterLoadFromStringso the schematic's collections are always non-null beforeBlockSchematic.Init -> Remapruns. Affects single-player saves loaded on a server, library paste, and the.fw pastechat 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
Initializewithout 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
[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
NullReferenceExceptionwhen the selection contains entities. The vanillaBlockSchematic.AddAreacaptures every entity in the region (mobs, dropped items, falling blocks, projectiles) and runsEntity.OnStoreCollectibleMappingson each, which NREs for any entity with a null collectible reference. NewBlueprintStore.CaptureBlocksOnlymethod builds the schematic from blocks only, bypassingAddAreaentirely. 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
[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+Kor.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.
PgDnpeels the top layer off the placed ghost,PgUprestores. Useful for tall builds and seeing interior layers while constructing. - 3-axis mirror toggle (
Ctrl+Shift+Mor.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+Xcancel hotkey. Dismisses any active ghost AND clears the selection box in one stroke..fw cancelnow does the same combined operation..fw clearstays 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
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.