Blog 2026 04 27 - bh679/dungeon-train-mc GitHub Wiki

Home > Blog > 2026-04-27

Dev Log โ€” 27 April 2026

A huge day: the variant editor grew per-entry rotation, in-place previews, data-safety fixes, and a new wireframe renderer. CI landed, the first public release was prepped, carriage contents got a full authoring pass, the mod went live on CurseForge and Modrinth, and the release pipeline gained automatic beta-channel tagging. 15 PRs merged.

Latest Build

v0.73.0 โ€” released 2026-04-27

Download dungeontrain-0.73.0.jar (935 KB) โ€” Release notes ยท All releases ยท Installation guide


Features

Version HUD hidden on main; Z hotkey gated to editor plots (#99)

Two quality-of-life polish items shipped as v0.73.0:

HUD hidden on release builds. VersionHudOverlay and VersionMenuOverlay both short-circuit immediately when the jar was built on the main branch. Release jars are now clean โ€” no watermark in-game and no overlay on the title screen. Feature-branch and dev builds still show Dungeon Train v<version> (<branch>) as a sanity check.

Z hotkey gated to editor plots. VariantHotkeyClient now checks EditorStatusHudOverlay.isActive() before sending either the held-state packet or the tap-to-open-menu packet. If the player walks out of a plot while holding Z, a single release packet is sent so the server's right-click-to-add gating doesn't stay armed. Outside any editor plot, Z is a complete no-op.

White wireframe for variant-flagged blocks (#95)

The END_ROD particle ring that outlined variant blocks in editor mode is replaced with a GPU-batched client-side line-box wireframe. The new renderer fires at AFTER_TRANSLUCENT_BLOCKS using RenderType.lines(), so the cost per frame is constant regardless of how many flagged cells are clustered together. Toggling /dt editor overlay off clears the wireframe immediately. A new BlockVariantOutlinePacket carries the server-side snapshot to the client; BlockVariantPlot.allFlaggedPositions() provides the interface.

Per-entry rotation: lock / random / options (#89)

Each block-variant entry now carries its own rotation mode. Three modes are available: lock (use the source block's exact rotation), random (randomise on place), and options (cycle through a listed set). The editor shows a live preview of the selected mode while you author.

In-place preview on name click โ€” block-variant and parts menus (#83, #85)

Clicking an entry name in the block-variant menu or the parts menu now previews that block or part in-place inside the plot. You can audition options visually without committing the change.

Carriage contents authoring + SlotWindow variant (#93)

Carriage contents can now be authored directly from the editor. The SlotWindow variant has been moved to sit alongside the other content-authoring options in the menu hierarchy.

New roof/wall parts, windowed template, content updates (#79)

New bundled parts: additional roof and wall pieces plus a windowed carriage template. Existing content received polish updates.

Unified classpath scan for bundled template variants (#74)

Template variant discovery now uses a single unified classpath scan instead of separate per-type lookups, making it easier to add new bundled template types.


Fixes

Tunnel paint deferred during chunk autosave (#92)

Tunnel paint no longer races with the chunk autosave: painting is deferred while an autosave is in flight, preventing occasional corrupted tunnel segments after long sessions.

Block-variant data recovered; sidecar auto-promoted in dev mode (#88)

Lost block-variant data (entries that went missing after certain editor operations) is now recovered correctly. In dev mode the variant sidecar is auto-promoted to the source tree so edits persist across restarts.

Block-variant menu anchor no longer drifts (#86, #87)

The block-variant context menu anchor froze at the wrong screen position when the player moved after opening the menu. The anchor is now recaptured on every click.

Remove button wipes plot blocks and bedrock cage (#82)

Pressing Remove in the editor now fully clears both the plot's block content and its surrounding bedrock cage, leaving no ghost geometry.

Paste preserves source texture; lock-id renders on all six faces (#81)

Paste operations carry the source block's texture through correctly. The lock-id indicator now renders on all six faces of the target block.

Variant entry cleared on block break in editor plots (#80)

Breaking a block inside an editor plot now clears its associated variant entry, so stale variant data can no longer accumulate on air blocks.

Part name freed on rename so it can be reused (#78)

Renaming a part now releases the old name immediately. Previously the old name stayed reserved until a restart, making it impossible to re-use within the same session.

Duplicate variants prevented in block-variant and part-variant menus (#77)

Both menus now reject duplicate entries at insertion time, keeping variant lists clean without requiring a manual dedup pass.

In-game part-variant and weight edits auto-promoted to source tree (#73, #75)

Changes made to part-variant entries and carriage weights directly in-game are now auto-promoted to the bundled source tree in dev mode, removing the need to manually sync files after playtesting.


CI & Infrastructure

Build and release workflows added (#94)

Two new GitHub Actions workflows ship with this commit:

  • build.yml โ€” runs on every PR and push to main. Caches the Gradle wrapper and Forge Gradle home, builds the mod, and uploads dungeontrain-*.jar as a workflow artifact.
  • release.yml โ€” fires on v*.*.* tag push (and on workflow_dispatch with a tag input for reruns). Verifies the tag matches mod_version in gradle.properties, builds the release jar, creates the GitHub Release, then calls publish-wiki.sh.

The mod logo was also refreshed to the 573ร—574 source resolution.

Wiki Downloads pages auto-published on every release (#96)

scripts/publish-wiki.sh renders Downloads.md and Downloads-Archive.md from the GitHub Releases API, clones the wiki via WIKI_TOKEN, and pushes only when content changes (idempotent). The release.yml workflow emits a warning rather than failing if WIKI_TOKEN is not yet configured. The Gradle home cache-cleanup post-step is disabled to avoid spurious failures against the Gradle 8.4 wrapper.

First public release preparation (#90)

LICENSE (MIT), mods.toml metadata, and the refreshed logo are all in place for the first public release.

CurseForge and Modrinth publishing (#97)

After the wiki publish step in release.yml, two new steps fire:

  • "Check mod-platform publish prerequisites" โ€” emits a workflow warning (not a failure) if MODRINTH_TOKEN+MODRINTH_PROJECT_ID or CURSEFORGE_TOKEN+CURSEFORGE_PROJECT_ID are not configured. Mirrors the WIKI_TOKEN gating pattern.
  • "Publish to Modrinth + CurseForge" โ€” uses Kir-Antipov/[email protected] with required dependencies declared (valkyrien-skies, kotlin-for-forge), Forge loader, MC 1.20.1, and fail-mode: warn so a single-platform outage doesn't poison the workflow once the GitHub Release is already cut.

One-time manual setup: create project listings on both platforms, generate API tokens, and add MODRINTH_TOKEN, CURSEFORGE_TOKEN, MODRINTH_PROJECT_ID, CURSEFORGE_PROJECT_ID as repo secrets/variables. Once configured, triggering workflow_dispatch against any existing tag will retro-publish on both platforms.

README Downloads section added (#98)

The README now includes a Downloads section linking to the auto-published wiki Downloads page. Modrinth and CurseForge badges sit alongside the existing Build badge so visitors reach the right download immediately.

Releases auto-tagged beta when MAJOR is 0 (#101)

The release.yml workflow now derives release type from the tag's MAJOR component at runtime โ€” no manual workflow toggle required:

Tag GitHub Release Modrinth/CurseForge channel
v0.x.x (current) Pre-release beta
v1.x.x+ Release release

A new Compute release type from tag step uses pure bash parameter expansion (no jq/awk) and emits two outputs (type + prerelease) consumed by the GitHub Release and mc-publish steps. Every v0.* tag now publishes as beta, matching what the version number already implies. Existing releases (v0.72.1 on Modrinth) stay at their original channel; only future tags get the new treatment.

README overhaul (#100)

The README now leads with a friendly description of the mod, promotes Modrinth as the recommended download, adds a Links section (Wiki, Blog, original itch.io game), and moves the specs table below the top-of-page sections. Sections are now ordered: badges โ†’ description โ†’ Download โ†’ Links โ†’ Specs โ†’ Build/Run โ†’ Project conventions.


Version

This post covers versions v0.58.0 โ†’ v0.73.0 (all merged today).

โš ๏ธ **GitHub.com Fallback** โš ๏ธ