Custom world generation

Custom world generation allows data packs to change how the world generate.

World Preset and Dimension
A world preset controls what dimensions a world has. Before 1.19 (22w11a), dimensions are defined in denmision folder rather than in world preset. Although in current version the world preset is recommended, the dimension folder is still supported.

World preset or dimension define what generator (noise, debug or superflat) is used in a dimension. If it is noise, they define what noise settings and biomes are used and how the biomes are placed.

Noise settings
Noise settings are for generating the shape of the terrain and noise caves, and what blocks the terrain is generated with, stored as JSON files within a data pack in the path, and are used with the generator in a dimension. Vanilla settings include for normal Overworld generation,  for Amplified Overworld generation,  for regular Nether generation,  for Cave (Nether-like generation but with Overworld terrain features) generation,  for regular End generation, and  for Floating Islands (similar to The End outer islands) generation.

JSON format

 * : Root object.

Biome
A biome is a region in a dimension with distinct features, carvers, climates, spawned mobs, ambient sound and music, and sky, water, grass and foliage colors, stored as JSON files within a data pack in the path.

Carver
Carvers are used to add carver caves and canyons. Note that noise caves are generated by noise settings.

Feature
Features are small decorations that can at most write to a 3x3 chunk area centered on the placement chunk. They're locally placed per chunk and cannot be searched for using commands. Examples are trees, flowers, ore, etc.

Structure
Structures are large decorations that can write to a much larger area than the 3x3 chunks of a feature. They're placed globally and spaced out in a randomized grid (or in concentric rings for strongholds), and can be scanned for and found using. Structures can affect terrain generation.

Surface builder
Surface builders were used to control how the surface of the terrain is shaped and what blocks it is generated with. They are stored as JSON files within a data pack in the path.