Dimensions & dimension types
The two files behind every world: a dimension/ instance that pairs a generator with a dimension type, and the dimension_type/ file that defines that dimension's physics and behavior.
The dimension instance
A dimension instance ties a dimension type (physics/behavior) to a generator (how terrain and biomes are produced). Creating the file registers a new dimension reachable via /execute in <ns>:<id> as a teleport target. Vanilla overworld/nether/end can be overridden by shadowing their path.
data/<ns>/dimension/<id>.json β shape
{
"type": "<dimension_type id or inline object>",
"generator": { "type": "<noise|flat|debug>", ... }
}
| Field | Type | Notes |
|---|---|---|
type | string (or object) | A dimension_type reference: minecraft:overworld, minecraft:the_nether, minecraft:the_end, minecraft:overworld_caves, or your custom <ns>:<id>. As of 1.19 (22w11a) dimension types must be referenced by ID, not inlined. |
generator | object | One of the three generator types below. |
- The noise generator's
seedfield was removed in 1.19 (22w11a); the world seed is now universal across all dimensions β do not include it. - Before 1.19, dimension types could be inlined into the dimension file; they are now separate registry files referenced by ID.
- Flat generation moved to
Y=−64in 1.18 (wasY=4); layer counts changed accordingly.
Generators: noise, flat, debug
Generator: noise
The standard terrain generator.
| Field | Type | Notes |
|---|---|---|
type | "minecraft:noise" | |
settings | string | object | A noise_settings reference (e.g. minecraft:overworld) or an inline noise-settings object. |
biome_source | object | Chooses biome placement (see below). |
seed | removed | Removed in 1.19 (22w11a). The world seed is always used. Do not include it. |
Generator: flat (superflat)
| Field | Type | Default | Notes |
|---|---|---|---|
type | "minecraft:flat" | ||
settings.layers[] | array of {block, height} | required | Read bottom-to-top starting at the world floor. height is 0–4064; block defaults to minecraft:air. |
settings.biome | string | minecraft:plains | Single biome for the whole world. |
settings.lakes | boolean | false | If true, lava lakes (lake_lava_*) generate often, even in biomes that normally lack them. |
settings.features | boolean | false | If true, biome placed features generate β except the UNDERGROUND_STRUCTURES and SURFACE_STRUCTURES steps, which never generate in flat. |
settings.structure_overrides | ID | tag | list | all structure sets | Which structure sets may generate: a structure-set ID, a #tag, or a list of IDs. |
Generator: debug
{ "type": "minecraft:debug" } β the flat grid of every blockstate; no other fields.
Biome sources
The biome_source object (inside a noise generator) decides which biome goes where.
type | Fields | Meaning |
|---|---|---|
minecraft:multi_noise | preset or biomes[] | Climate-driven placement in 6-D noise space. preset = minecraft:overworld or minecraft:nether; or supply an explicit biomes array of parameter points. |
minecraft:fixed | biome | One biome everywhere (single-biome dimension). |
minecraft:checkerboard | biomes[], scale (int 0–62, default 2) | Biomes tiled in a checkerboard; scale sets tile size (2^scale blocks). |
minecraft:the_end | — | The End's special radial biome layout. |
multi_noise parameter points
Each entry in biomes[] is { "biome": <id>, "parameters": {...} }. The six climate parameters temperature, humidity, continentalness, erosion, weirdness each accept either a single float OR a two-element [min, max] range. depth and offset must be single constants (offset is 0–1.0 and shrinks the biome as it moves away from 0). All values are on a −1.0 … 1.0 scale. The generator picks the biome whose point is nearest in 6-D space.
One parameter point
{
"biome": "minecraft:plains",
"parameters": {
"temperature": [-0.45, -0.15],
"humidity": [-1, -0.35],
"continentalness": [-0.11, 0.3],
"erosion": [-0.7799, -0.375],
"weirdness": [-1, -0.9333],
"depth": 0,
"offset": 0
}
}
| Climate parameter | Controls |
|---|---|
temperature & humidity (vegetation) | The biome "flavor". |
continentalness (continents) | Ocean ↔ inland. |
erosion | Mountainous ↔ flat. |
weirdness (ridges) | Variant selection & shattered terrain. |
depth | Surface ↔ cave (only nonzero for cave biomes). |
Complete dimension examples
data/example/dimension/my_dim.json β a custom noise dimension
{
"type": "example:my_dim_type",
"generator": {
"type": "minecraft:noise",
"settings": "minecraft:overworld",
"biome_source": {
"type": "minecraft:multi_noise",
"preset": "minecraft:overworld"
}
}
}
data/example/dimension/flatland.json β a single-biome flat dimension
{
"type": "minecraft:overworld",
"generator": {
"type": "minecraft:flat",
"settings": {
"biome": "minecraft:plains",
"lakes": false,
"features": false,
"structure_overrides": ["minecraft:villages"],
"layers": [
{ "block": "minecraft:bedrock", "height": 1 },
{ "block": "minecraft:dirt", "height": 2 },
{ "block": "minecraft:grass_block", "height": 1 }
]
}
}
}
Dimension types
A dimension type defines the physics and behavior of any dimension that references it: light, height bounds, coordinate scale, spawning rules, portals/beds, ambient rendering. Vanilla ships overworld, overworld_caves, the_nether, and the_end. It lives at data/<ns>/dimension_type/<id>.json.
Dimension type fields
| Field | Type | Example / default | Description |
|---|---|---|---|
ultrawarm | bool | false (OW) / true (Nether) | Water evaporates; wet sponge dries; lava flows faster/farther. |
natural | bool | true (OW) | If false: beds/respawn anchors don't work normally, zombified piglins spawn from portals, compasses spin. |
coordinate_scale | double | 1.0 (OW) / 8.0 (Nether) | Horizontal scale factor when traveling between this dim and the overworld (0.00001–30000000). |
has_skylight | bool | true / false | Whether sky light exists (affects weather & lighting). |
has_ceiling | bool | false / true (Nether) | Bedrock ceiling; affects weather, respawn, mob spawn. |
ambient_light | float | 0.0 (OW) / 0.1 (Nether) | Baseline light floor (0 = fully dark shadows, 1 = no ambient darkening). |
fixed_time | long (optional) | 18000 (Nether) | If present, locks the time of day (ticks). Omit for a normal day/night cycle. |
monster_spawn_light_level | int or object | OW = {uniform 0..7}, Nether = 7 | Max light level (or a distribution) at which monsters may spawn. |
monster_spawn_block_light_limit | int (0–15) | 0 (OW) / 15 (Nether) | Block-light ceiling for monster spawning. |
piglin_safe | bool | false / true (Nether) | If false, piglins zombify over time. |
bed_works | bool | true / false (Nether) | Beds set spawn/sleep vs. explode. |
respawn_anchor_works | bool | false (OW) / true (Nether) | Respawn anchors set spawn vs. explode. |
has_raids | bool | true / false (Nether) | Whether Bad Omen → raids. |
logical_height | int | 384 (OW) / 128 (Nether) | Max Y for chorus-fruit teleport & nether-portal placement (≤ height). |
min_y | int | -64 (OW) / 0 (Nether) | World floor; multiple of 16 (range −2032…2031-ish). |
height | int | 384 (OW) / 256 (Nether) | Total build height; multiple of 16, 16–4064; min_y + height ≤ 2032. |
infiniburn | block tag | #minecraft:infiniburn_overworld | Blocks on which fire burns forever. |
effects | string | minecraft:overworld / minecraft:the_nether / minecraft:the_end | Selects the client render style (sky, fog, clouds). |
has_ender_dragon_fight | bool (optional) | true for the End | Enables obsidian pillars + end fountain. Present on the End type. |
cloud_height | — | — | Not a standard 1.21 top-level field. Cloud/sky styling is driven by effects, not a settable cloud_height key. See the note below. |
monster_spawn_light_level has two valid shapes: an int (Nether = 7) or a distribution object (overworld uniform 0..7). And cloud_height is not a settable top-level field in 1.21 β cloud and sky rendering are chosen by effects, which only selects one of the three vanilla renderers.
Vanilla dimension type examples
Grounded 1.21 values, extracted from github.com/misode/mcmeta @ tag 1.21-data-json, data/minecraft/dimension_type/.
data/minecraft/dimension_type/overworld.json
{
"ambient_light": 0.0,
"bed_works": true,
"coordinate_scale": 1.0,
"effects": "minecraft:overworld",
"has_ceiling": false,
"has_raids": true,
"has_skylight": true,
"height": 384,
"infiniburn": "#minecraft:infiniburn_overworld",
"logical_height": 384,
"min_y": -64,
"monster_spawn_block_light_limit": 0,
"monster_spawn_light_level": {
"type": "minecraft:uniform",
"max_inclusive": 7,
"min_inclusive": 0
},
"natural": true,
"piglin_safe": false,
"respawn_anchor_works": false,
"ultrawarm": false
}
data/minecraft/dimension_type/the_nether.json
{
"ambient_light": 0.1,
"bed_works": false,
"coordinate_scale": 8.0,
"effects": "minecraft:the_nether",
"fixed_time": 18000,
"has_ceiling": true,
"has_raids": false,
"has_skylight": false,
"height": 256,
"infiniburn": "#minecraft:infiniburn_nether",
"logical_height": 128,
"min_y": 0,
"monster_spawn_block_light_limit": 15,
"monster_spawn_light_level": 7,
"natural": false,
"piglin_safe": true,
"respawn_anchor_works": true,
"ultrawarm": true
}
- 26.1.2 (JAR-verified, build 0.19.2): the change is additive, not a replacement β the flat flags above (
has_skylight,has_ceiling,ambient_light,coordinate_scale,height,min_y,logical_height,infiniburn,monster_spawn_light_level/_block_light_limit,has_ender_dragon_fight) remain valid, so a 1.21-styledimension_typestill loads in 26.1.2. Alongside them, 26.1.2 adds anattributesobject holding namespaced dimension-level properties:minecraft:visual/{sky_color, fog_color, cloud_color, cloud_height, ambient_light_color}(e.g.cloud_height=192.33for the overworld),minecraft:audio/{ambient_sounds, background_music}, andminecraft:gameplay/{bed_rule, respawn_anchor_works, nether_portal_spawns_piglin}. New top-level fieldsdefault_clockandtimelinesalso appear. One flat field did drop:naturalis no longer a top-level flag (relocated, likely underattributes/gameplay). None of theattributes/timelinesadditions belong in a 1.21 file, but the flat 1.21 flags coexist rather than being removed. (Exact snapshot that introducedattributesis earlier than 0.19.2 and not pinned here.) - Pre-1.19: dimension types could be inlined into the dimension file; they are now separate registry files.
Tricks & workarounds
- Reference vanilla
noise_settings/dimension_typeby ID whenever possible; only fork them when you truly need changes. Fewer inline blobs = fewer version-break surfaces. - Keep
dimension_type.min_y/heightand the referencednoise_settings.noise.min_y/heightidentical; a mismatch produces missing or duplicated terrain. Also keeplogical_height ≤ height. - Copy a vanilla type and change one axis at a time; the flag interactions (natural/bed/anchor/piglin) are subtle. Namespace your custom IDs.
- Void dimension: a
flatgenerator with a singleairlayer + afixedbiome source (e.g.the_void); or, on the noise side, anoise_settingswhosefinal_densityis constant 0. - Single-biome dimension:
multi_noisewith one parameter point, or simplyfixed. - Nether-style compressed dimension:
coordinate_scale: 8.0so it maps 8:1 onto the overworld. - Bright void:
ambient_light: 1.0+has_skylight: falsefor an evenly lit dimension.
Custom sky in a datapack: in 1.21 you cannot freely author sky effects in the dimension type β effects only picks one of the three vanilla renderers (overworld/the_nether/the_end). Fully custom skies require the Fabric FabricDimensions modding API or a resource-pack/shader approach; datapack-only custom skies did not arrive until the 26.x attributes visual/* keys. Also: a new dimension does not auto-generate a portal β reach it with /execute in <ns>:<id> run tp ... or a custom teleport datapack.