Skip to content

Feature Nether Structures

Brennan Hatton edited this page Aug 20, 2026 · 1 revision

Nether structures in the Nether band

Since: v0.577.0 — PR #997

The Nether band's core has looked like the Nether since v0.354.0 — real terrain sampled from the live Nether dimension, real biomes, real decoration, real mobs, lava flowing at Nether rate — but it generated no structures at all. You crossed empty country.

It now generates all four vanilla Nether structures: fortresses, bastion remnants, nether fossils and ruined portals. Not copies — the vanilla structures themselves, so /locate structure minecraft:fortress finds them, their loot tables and mob spawns are vanilla's, and a bastion still yields Pigstep and the netherite upgrade template.

Why it needed doing at all

The band is a stretch of the overworld. ChunkGeneratorStructureState.hasBiomesForStructureSet drops any structure set whose biomes are absent from the generator's possibleBiomes(), and Nether biomes never appear in the overworld's list — DT forces them onto band columns at generation time, long after that filter has run. So the vanilla Nether structure sets were discarded before a single placement was ever attempted.

How the band sites them

Vanilla sites these structures off heights that, in the band, describe the overworld mountain the core replaces. Each one is re-sited by a narrowly-gated mixin on its own class:

Structure What vanilla does What the band does
Fortress flat Nether-space Y 64, pieces clamped to 48–70 the same numbers, translated onto track level
Bastion rolls start_height as an absolute world Y reads the same roll as a Nether-space Y
Fossil walks the chunk generator's noise column for ground walks the band's core terrain instead
Ruined portal rolls Nether-space 27–100, then finds solid corners the same roll, corners probed against the core

Each mixin injects at the head of findGenerationPoint and is cancellable: inside the band core it returns the band's position, and everywhere else — the real Nether above all — it returns immediately and vanilla's own siting runs untouched. JigsawStructure and RuinedPortalStructure are shared with unrelated structures (villages, trial chambers, the six overworld portal variants), so those two are identified by their start pool and their setups' vertical placement rather than by class.

The band's biome restriction is asked of the real Nether's biome source, at the same patch of Nether the core terrain was sampled from — not of the overworld's, which yields the original overworld biome below sea level, exactly where bastions and portals routinely land. That is why fossils appear only in soul sand valley stretches, as they should.

Fortress supports

Vanilla grows a fortress's legs with StructurePiece.fillColumnDown, which walks downward placing nether bricks only while it sees air or liquid. Structures are normally placed during the structure steps, but the band's core fill runs at top_layer_modification — the very last decoration step. A fortress therefore built its legs against solid overworld stone, the walk stopped on the first block, and the fill then turned that stone into netherrack and open air underneath it. The fortress floated.

The band now defers structure placement on core chunks (DeferredStructurePlacement) and writes the pieces from its own feature, nether_structures, ordered after the core fill and before the track. Run against finished Nether terrain, fillColumnDown walks down through air and lava and stops on netherrack — vanilla's own supports, over the band's own lava.

Mob spawning

Two things in the band would otherwise leave a fortress empty, and both give way inside one:

  • The band cancels every natural spawn across its whole length so the mountains don't fill with zombies. That also ate the blazes and wither skeletons a fortress's own spawn_overrides propose. Spawns inside a band structure carrying a monster override are now exempt.
  • Wither skeletons and skeletons spawn through Monster.checkMonsterSpawnRules, which refuses under sky light. The real Nether has none, so the rule never bites there — but the band core lies under the overworld sky, so the open half of a fortress would have stayed empty by day. The placement check is allowed inside those same pieces.

Only structures that define a monster spawn override qualify, which is exactly the fortress. Bastions, fossils and ruined portals ship empty overrides and get no special treatment.

Frequency

Deliberately rarer than the real Nether. A band crossing is a corridor you ride straight down, which samples structures far more densely than wandering the Nether does, and vanilla spacing read as a procession.

Structure set Spacing / separation Density vs the real Nether
dungeontrain:nether_complexes (fortress + bastion) 71 / 11 1/7
dungeontrain:nether_fossils 5 / 2 ~1/6
dungeontrain:ruined_portals_nether 106 / 40 1/1

The portal figure looks odd until you know that vanilla's ruined_portals set draws 1 of 7 variants per site and only the Nether one passes the biome check down there. DT's set carries only the Nether variant, so the same spacing would have produced seven times as many; 106/40 lands it on the real Nether's rate.

Riding through one

Where a fortress or bastion lands across the line, the train tunnels straight through it. The track feature runs after the structures and carves the corridor through whatever stands in it. This is intentional — riding through a fortress is one of the better views on the crossing.

Configuration

netherStructures in dungeontrain-server.toml (default true) turns all four off, leaving the bare Nether crossing.

Implementation

  • worldgen/NetherCoreGeometry — the Nether-side twin of EndIslandGeometry: the real Nether's finalDensity router, trilinearly interpolated at its own noise-cell grid and translated onto track level. Shared by the feature that stamps the core and the structures that site into it, so the two can never disagree by a block. Owns the per-chunk corner memo that keeps the sampling affordable.
  • worldgen/structure/NetherStructureSiting — the pure rules: core columns at the edge-waved X, and the Nether-space ↔ band-Y mapping. Unit-tested without a NeoForge bootstrap.
  • worldgen/structure/Band{Fortress,Bastion,Fossil,RuinedPortal}Siting — vanilla's piece generation with only the heights and ground probes retargeted.
  • worldgen/feature/NetherStructuresFeature + DeferredStructurePlacement — the deferred placement.
  • worldgen/structure/BandStructureSpawns — the fortress spawning exemption.

Compatibility note

DT's structure sets are enabled on the overworld generator only. This matters: the vanilla Nether structures' biomes are listed by the real Nether's biome source, so without that gate DT's sets would pass the filter in the Nether too and add a second helping of fortresses there at DT's spacing. See Compatibility.

Known limitations

  • Not yet verified on a dedicated server or in multiplayer.
  • The extraction of the core sampler out of NetherTransitionFeature is pinned by a unit test against an independent recomputation, but a fixed-seed region-file A/B against the previous version has not been run. Terrain outside structure footprints is expected to be byte-identical.

Clone this wiki locally