Skip to content

Generation context fixes

BonsUnleashed edited this page Oct 7, 2026 · 3 revisions

Generation context fixes

Minecraft 1.20.1 / Forge: this page documents that build and its measurements. For the separate 170-control Minecraft 1.21.1 port, see Minecraft 1.21.1 NeoForge.

Nine fixes in seven mods exist for one reason: a mod's world-generation code reaches into the live world from inside a generation region, makes the server thread wait for chunks that are still being generated, or never terminates. Each one stops a specific reproduced server freeze, worker-thread crash or generation exception. This page explains the background; each fix is documented on the page of its mod.

Fix Mod Since What it stops
hostilevillages_distant_generation_queue Hostile Villages 1.0.11 a server freeze (one 84-second tick in the reproduction)
iceandfire_lake_guard_region Ice and Fire 1.0.11 a server freeze (98 seconds in the reproduction)
iceandfire_pixie_village_difficulty Ice and Fire 1.0.11 a generation exception
scuba_gear_generation_context Scuba Gear 1.0.11 a server freeze with Distant Horizons and a crash with C2ME
alexscaves_teletor_generation_context Alex's Caves 1.0.11 a crash with C2ME
structure_gel_lake_guard_region Structure Gel API 1.0.11 a server freeze (the second lake guard of the same freeze)
spawn_zombified_flower_floor Spawn 1.0.19 a ground search that never ended in an empty column
hostilevillages_pending_chunk_queue Hostile Villages 1.0.24 server freezes while pregenerating (41 seconds, then stalls of 2 to 12 seconds)
dynamictrees_rot_cycle_guard Dynamic Trees 1.0.30 a stack overflow at the edge of a generation region

The six fixes of 1.0.11 were first shipped as individually patched mod JARs (September 9 to 11, 2026), then as Bons Worldgen Compatibility 1.0.0 (September 18), and were folded into Bons and Furious at 1.0.11 with byte-identical transformed output. The Spawn fix followed in 1.0.19, the second Hostile Villages fix in 1.0.24 and the Dynamic Trees fix in 1.0.30.

Why generation context matters

Two popular mods generate terrain off the server thread:

  • Distant Horizons builds its far-terrain LODs by running the world generator inside temporary generation regions (DhLitWorldGenRegion_forge) on its own worker threads. Everything a feature does inside that region is thrown away once the LOD is built.
  • C2ME runs ordinary chunk generation on worker threads and wraps the world's random in a CheckedThreadLocalRandom that throws a ConcurrentModificationException if a worker thread touches the live world's random.

Vanilla features receive a WorldGenLevel/ServerLevelAccessor for exactly this reason. Some mods ignore it and go to ServerLevel instead: the live structure manager, the live random, the live entity list. From a Distant Horizons worker that means synchronous chunk loads on the server thread (the freeze signature: the server thread parked in "waits for chunk generation", 84-second ticks, TPS collapsing to single digits); from a C2ME worker it means a crash. Each fix binds the operation to the region it was handed.

Bons and Furious

Minecraft 1.20.1 / Forge 1.0.34

Compatibility

Controls by mod

Links

Clone this wiki locally