Repository navigation
Editor 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.
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.
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 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.
| 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.
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.
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.
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 |
/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.
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):
-
Overview — the icon row
Refresh · Select · Rename | Duplicate · Delete | Prev · Next | Re-bakeover 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") andBands O N V E U C(every band a button), then Parts / Templates / Blocks counts. -
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). - Stone — the stone family the same way, one row per kind.
- Blocks — every block the stage's linked parts use, with usage counts.
- 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.
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;deselectclears it. -
/dt editor stage filterpartshides 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 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.
| 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 theuser/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 inrun/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 fromsrc/, 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.
See Commands ▸ Stages for the full table.
- Templates ▸ Spawn gating — what a level band and phase set actually do
- Difficulty scaling — where Diff-Level comes from
- Shared carriages — the pool Stages partition
-
Packaging — what a
.dtpackdoes and doesn't carry - Commands — every slash command in one place