Skip to content

Editor Stages

Brennan Hatton edited this page Oct 16, 2026 · 6 revisions

Stages

A Stage is a named, reusable spawn gate. Instead of setting a level band and a phase set on every template one at a time, you define the band once — "the nether stretch", "endgame" — and link templates to it. Edit the Stage later and every linked template retunes at once.

Since: v0.368.0 — Stages ship as bundled default content since v0.370.0, so every install starts with a full set.

Stage vs Custom

Every weighted template is in one of two states:

State Where its gate comes from
Linked to a Stage The Stage's gate. The template's own inline gate is kept only as a snapshot for when you detach.
Custom (unlinked) Its own inline gate — the min/max/phase you set on the row. This is how templates behaved before Stages existed.

A Stage holds exactly the same two things a per-template gate holds — a min/max Diff-Level band and a set of worldgen phases. See Templates ▸ Spawn gating for what those mean. A Stage adds no new gating power; it makes one gate shareable.

Linking and detaching

Each template row in the floating world-space panels has a Stage cell. Click it to open the Stage / Custom picker.

  • Link — the row collapses to a Stage chip and the min / max / phase cells disappear, because the Stage now owns those values. The weight cell stays editable.
  • Detach to Custom — the Stage's current gate is snapshotted into the template's inline gate first, so the manual cells come back pre-filled with exactly what the row was already showing. Detaching never silently changes where a template spawns.

Changing a template's weight does not affect its Stage link (fixed in v0.546.0 — before that, nudging the weight on a linked row silently detached it).

Deleting a Stage leaves links dangling

Deleting a Stage does not touch the templates linked to it. Each one falls back to its own inline snapshot gate and logs a one-time warning. Re-creating a Stage with the same id re-attaches them.

What can link to a Stage

Thing How
Carriages Stage cell on the carriage row, or /dt editor stage apply carriage.
Contents Stage cell on the contents row, or /dt editor stage apply contents.
Track-side templates (tracks, pillars, tunnels) Stage cell on the row, or /dt editor stage apply tracks.
Contents sub-variant members Stage cell on the member row, or /dt editor stage apply contents-group.
Carriage parts The Stage control on the part-assignment panel (no slash command).

Sub-variant members are the exception that can link to more than one Stage. A member with several links is eligible wherever any of them allows it — a union, not an intersection. Editing a member's inline gate deliberately detaches all of its Stage links at once (the first linked Stage's gate is snapshotted as the starting point), because a union of several Stages has no single gate to fall back to.

Editing a Stage

Select a Stage and change its band, and every linked template moves with it. From chat:

/dt editor stage minlevel nether 20
/dt editor stage maxlevel nether all
/dt editor stage phase nether nether on

There is no separate "apply" step — the resolution is live, read at spawn time.

Sorting the Stages panel (v0.860.0)

The world-space Stages panel has a row of column titles under + Add / – Remove: Name | Blocks | Min | Max | Phases. Click a title to sort the rows by that column (ascending, ▲); click the same title again to flip it (▼). An open-ended max (≤∞) sorts as the largest value; ties keep the server's order. The sort is client view state — row clicks still edit the stage drawn on that row — and it resets when you leave the editor.

The wood stretch (v0.860.0)

From level 131 the overworld bands are one timber at a time, each with its own floors, walls, roofs and doors (<family>_wood_<type> parts, cloned from the wood_oak set — see Development § Cloning the wood stages):

Stage Levels Stage Levels
wood_oak 131–160 warped 321–355
birch 161–175 bamboo 356–375
acacia 176–205 darkwood 376–415
jungle 206–225 bamboo_mosaic 416–435
mangrove 226–265 spruce 436 → ∞
cherry 266–285
crimson 286–320

Editing a linked template's gate does nothing until you detach

/dt editor minlevel <linked-template> 5 writes to the template's inline gate, which is inert while the template is linked — the effective gate still comes from the Stage. Since v0.546.0 the command tells you so instead of reporting a bare success. To actually change where a linked template spawns, either edit the Stage (affects everything linked) or detach the template to Custom first.

The Stages tab in the X menu (v0.867.0)

Press X anywhere in the editor world and pick the Stages tab (between Layout and Settings). It works away from the plots and without the world-space panels.

Browser (left). Every stage as a tile of a carriage stamped with that stage — the carriage and roll the preview is showing, so the tiles compare stages on the same model. Tiles resolve the placeholder blocks through each stage's palette, so every wood stage shows its own wood (fixed in v0.880.0, PR #1410). The cell above the icon column toggles a list view (≡): [most-used block] name · min → max, with Name and Level titles that sort (click again to flip). Click a tile or row to show that stage.

Preview (right), paged with < n / N > (wheel or arrows):

  1. Overview — the icon row Refresh · Select · Rename | Duplicate · Delete | Prev · Next | Re-bake over a 3D model of one carriage stamped with the stage. Refresh re-rolls the block variants (a new seed), Prev/Next change the carriage, Select (✓) makes this the editor's focused stage — the same as /dt editor stage select — so the placeholder block icons, the placed placeholder textures and the carriage plot previews all follow it (click again to deselect; since v0.880.0, it was Apply before — linking a template to a stage now lives on the template's own sheet), Delete asks first, Re-bake re-derives the placeholder palette (overrides kept). Under the model, the same sheet a template has: Built by (a picker in dev mode), Spawns Lv a — b (click +1, shift- or right-click −1, cmd-click to type; an empty max is "all") and Bands O N V E U C (every band a button), then Parts / Templates / Blocks counts.
  2. Palette — the Solid, Shapes and Wood placeholder blocks with what each resolves to for this stage; a gold dot marks an override. Click a cell holding a block to override it, empty-hand click to clear; click the Wood: heading holding a plank to set the family (empty hand unlocks it).
  3. Stone — the stone family the same way, one row per kind.
  4. Blocks — every block the stage's linked parts use, with usage counts.
  5. Linked templates — the parts and templates linked to the stage; click one to select it on the Templates tab.

The page, carriage and roll you are on stay put when you pick another stage, so two stages can be compared side by side on the same carriage.

Stages as a content set

Beyond gating, a Stage groups the parts authored for it.

  • /dt editor stage select <id> focuses a Stage: every carriage plot re-stamps as a preview of that Stage — parts assigned to it are stamped, unassigned slots are aired out over the base shell — and newly added parts default to that Stage. Selecting the same Stage again toggles the preview off; deselect clears it.
  • /dt editor stage filterparts hides part plots that the focused Stage doesn't use.
  • /dt editor stage duplicate <id> [newid] copies a Stage with its content set — the part files and their assignment entries are duplicated too, so you can fork a whole look and diverge it.
  • /dt editor stage replaceblock <id> <from> <to> swaps a block across every part linked to that Stage, structural NBT and block-variant sidecars alike. This is the one-pass reskin for a whole stage.
  • /dt editor stage blocks <id> lists the Stage's parts and the unique blocks in them.

Stages name the stretch you are in

Stages do double duty: they also answer "which stage of the run is this?" for a given level and phase. That is what pools shared carriages — a room built in the stone stretch is only ever placed back into a stone stretch.

The Stages do not partition the space cleanly (nether has no level bounds and covers both the Nether and End phases, so a low-level End context matches both stone and nether). The narrowest level band wins, so a specific Stage beats a catch-all, with the id as a tie-break so the answer is stable across runs.

Where Stages live

Tier Path
Bundled defaults /data/dungeontrain/stages.json inside the mod jar
Your edits <minecraft>/config/dungeontrain/stages.json — overrides bundled entries by id

Stages do not travel in a .dtpack. The per-install file sits deliberately outside the user/ tree the package exporter walks. Share a package that links templates to a Stage the recipient doesn't have and those links dangle — they fall back to each template's inline snapshot gate, so nothing breaks, but the grouping is lost.

Stage ids are lowercase a-z, 0-9, and _, 1–32 characters. In dev mode edits are also written to the source tree so author-built Stages ship in the next build.

Dev-mode gotcha: the write-through goes both ways only once. A Stage you edit in-game also lands in run/config/dungeontrain/stages.json (and a template you edit in run/dungeontrain/user/templates/*.parts.json), and those per-install copies keep overriding the bundled data even after the source tree changes underneath them — a stage that "won't take" a new band from src/, or a template whose new parts show an empty Blocks column, is almost always a stale user-tier copy. Delete it (or copy the bundled file over it) to see the bundled data again.

Commands

See Commands ▸ Stages for the full table.

See also

Clone this wiki locally