Skip to content

Feature Chunk Dimensions

Brennan Hatton edited this page Sep 25, 2026 · 3 revisions

Chunk dimensions — a portal room made of real world generation

Since: v0.797.0 — PR #1301

A chunk dimension is a dimensional carriage whose pocket room is not a room anybody built. It is one chunk of genuine Minecraft world generation — 16 × 16 across, two chunk sections tall — with terrain, caves, decoration, a structure and the mobs that live there, sealed in a box of sky, with the corridor doorways standing on its ground.

Seven variants share one group. Each is pinned to one look (PR #1547, v0.958.0):

Variant Shows How the look is held
chunk_dimension Plain vanilla overworld Sites in any band (fades included), legacy era or modded stretch are rejected before generation (WorldGenCycle.isOverworldGapAt + SecondLapOverworld.at).
chunk_dimension_wwoo The WWOO overworld stretch Handed a site inside a WWOO stretch within ±960k blocks (StretchSites); the biome mixin and decoration pass key on the sample's own X.
chunk_dimension_bop The Biomes O' Plenty stretch Same, inside a BoP stretch.
chunk_dimension_nether Vanilla Nether Cut with a private generator over the minecraft:-only Nether biome source (SampleGenerators).
chunk_dimension_nether_better BetterNether Live Nether; site kept only when its centre biome is betternether:.
chunk_dimension_end Vanilla End Private generator: VanillaEndBiomeSource over an unmarked copy of the End settings, so BetterEnd's terrain hook never applies.
chunk_dimension_end_better BetterEnd Live End; site kept only when its centre biome is betterend:.

Before this, overworld sites were scattered over ±960k blocks regardless of the train, and 43% landed in a band, legacy era or modded stretch, so the room showed that terrain anywhere. In DT worlds BetterEnd's own island generator is off (it only runs for its "PauleVs" End config), so the two End rooms differ in biomes, ground cover and plants, not island shape. Weights and Diff-Levels are authored in the editor's group sidecar. /dungeontrain debug portal-sites [count] reports each variant's site mix (expect 100% on target, 0 exhausted); portal-sites probe-end [n] generates one site both ways and logs the difference.

What a player walks into

The ground Real terrain from the dimension's own generator — a hillside, a beach, a cavern floor — carved, surfaced and decorated by the same passes that build the world outside.
The doorways Each of the room's two mouths stands at the height of the terrain in front of it, so a sloped chunk gives two doors at two heights. Exactly two blocks are cleared per door — nothing else is added or taken away.
A structure, always Every room has one: a village, a pyramid, a fortress, an outpost. One room in ten borrows another dimension's — an End city standing in a meadow, a bastion in a birch forest. The vanilla End room is the exception: six in ten show an End city, and the rest borrow another dimension's structure (see Structures).
Its inhabitants The structure's own people, the biome's animals, and — where a room would otherwise be empty, which in practice means the Nether and the End — that biome's own monsters.
Chests Carry the loot table the structure gave them, rolled when first opened, exactly as in the world.
The walls The dimension's skybox block (skybox_surface / skybox_nether / skybox_end, the same blocks the bands use to show a sky underground) on the floor, ceiling and both sides, so the chunk reads as floating in its own sky. Bedrock outside it is the backstop.

How the chunk is made

Sampled, never loaded. Nothing here generates, loads or saves a chunk in any world. Forcing a getChunk(FULL, true) on the server tick is the shape of the Sable worldgen deadlock — see Compatibility — and a portal room is stamped from inside exactly that loop. Instead:

  1. A site is picked far from the train and generated into a throwaway ProtoChunk that belongs to nobody — fillFromNoise, then the dimension's real surface rules.
  2. The site is judged: three of five probe columns must have standable ground at about one height. That single rule turns away the two samples nobody wants — the void, where nothing is solid, and open ocean, whose seabed has water on it rather than air. Up to 24 sites are tried.
  3. The carvers, one structure and every feature the biome grows run in a WorldGenRegion built over that same throwaway chunk, ringed by blank ones.
  4. A 16 × 32 × 16 window is cut out and written into the room.

Building the region over the sample rather than over the live server level matters twice. The live level's heightmaps are the train's surface some eighty blocks overhead, so every heightmap-relative placement — trees, grass, boulders, snow — would land on the world the train is crossing rather than in the room. And nothing would bound the writes, so a tree at the sample's edge would spill into the sealed basement and stay there. Over the sample, the neighbours catch that spill and are discarded a moment later.

Two passes, because a carriage cannot wait. The ground — noise, surface, carvers — is what a pair cannot be planned without, since its doorways stand on it; that is a few hundred milliseconds and the room is built the moment it lands. The structure and the features cost seconds and move nothing, so they are written into the standing room afterwards, as a rewrite that skips every cell already holding the block it would write. A player inside sees the room grow, not change.

Structures

Since v0.964.0 (PR #1559):

  • The vanilla Nether and End rooms are minecraft: only. A vanilla-biome generator was not enough. BetterEnd, through a WorldWeaver biome_modifications file, adds betterend:crashed_ship and its flavolite, thallasium and ender ores to minecraft:end_barrens/end_midlands/end_highlands. Its eternal_portal and end_bridge structures list vanilla End biomes in their own biome tags, and BetterNether does the same to the vanilla Nether biomes. So Source.vanillaOnly() (NETHER, END) vetoes every non-minecraft: placed feature while the sample decorates (ChunkGeneratorDecorationMixin + VanillaOnlySample) and drops non-minecraft: structures from both candidate lists. A headless A/B on the same 12 End sites went from 12/12 rooms with BetterEnd blocks to 0/12. The Better rooms are unchanged.
  • If one list has nothing that generates, the other stands in. A room draws from its own dimension's structures, or from another dimension's one time in ten. If every candidate in the drawn list fails to generate a valid start at the sample, the other list is tried before the room goes without.
  • The other-dimension list works in editor worlds. It is read through PortalChunkSources, stand-ins included, and keyed off the room's own dimension. Before, an editor world (a superflat overworld with no Nether or End) always had an empty list, so Test the Carriage never showed the one-in-ten borrowing.
  • The vanilla End rolls 60% End city. The End city is the vanilla End's only structure and needs ground 60+ blocks up under its footprint, which most sampled islands lack, so only about one room in five had one. The room now rolls 60% native / 40% other dimension. On the native side, an End city the sampled island turns down is generated on another outer-End island (up to 64 tries, 1.5k–41.5k blocks out) and moved onto the room's ground, the same way any structure that generated outside the room's rows is moved. Measured headless: 28/50 rooms.

Mobs

Ongoing spawning asks the biome at the position being spawned into, and a chunk dimension's room sits in the sealed basement under the train — so the game answers "plains", not "crimson forest". The sample therefore brings its own, at generation and once:

  • the structure's inhabitants, created by its placement;
  • the biome's animals, from vanilla's creature pass — rolled repeatedly, because vanilla seeds about one chunk in ten and this room is the only chunk of that biome a player will ever see;
  • and, only where those left the room empty, three of the biome's own monsters.

That last condition is emptiness rather than "this biome has no animals": the Nether's biomes do list a creature — the strider — which spawns standing in lava and so almost never places. Asked whether animals were available the Nether says yes and stays empty; asked whether any landed, it says no and gets its zombified piglins.

They are ordinary mobs from the moment they land: they wander, they can be killed, and nothing replaces them.

Notes for authors

  • The room's box is fixed at 16 × 32 × 16 by its templates; the second chunk of height is mostly air, and exists so a hill that keeps climbing, a tall tree or a structure's tower has somewhere to go.
  • The variant's authored door-height offset is only the fallback for a room stamped before its sample lands — the real doorways are fitted to the terrain.
  • Each variant's .nbt is a shell of that dimension's skybox block over its own filler (stone / netherrack / end stone), which is what a room falls back to if a sample ever fails.

Clone this wiki locally