Minecraft Wiki
Advertisement
Minecraft Wiki
Gear (item).gif
This article is a work in progress. 
Please help in the expansion or creation of this article by expanding or improving it. The talk page may contain suggestions.
Note: In 20w29a noise settings are also a separate folder in worldgen
Information icon.svg
This feature is exclusive to Java Edition. 

Custom world generation allows data packs to change how the world generates. This is particularly useful in conjunction with custom worlds.

Noise settings[]

Noise settings are for generating the shape of the terrain, stored as JSON files within a data pack in the path data/<namespace>/worldgen/noise_settings, and are used with the minecraft:noise generator in the dimension folder. Default settings include minecraft:overworld for normal Overworld generation, minecraft:amplified for Amplified Overworld generation, minecraft:nether for regular Nether generation, minecraft:caves for Cave (Nether-like generation but with Overworld terrain features) generation, minecraft:end for regular End generation, and minecraft:floating_islands for Floating Islands (similar to The End outer islands) generation.

JSON format[]

  • The root tag
    •  bedrock_roof_position: The Y offset of the bedrock roof below the top of the world. If out of world bounds, the roof does not disappear.
    •  bedrock_floor_position: The Y offset of the bedrock floor above the bottom of the world.
    •  sea_level: The sea level in this dimension.
    •  min_surface_level:[needs testing]
    •  disable_mob_generation: Whether mob generation during worldgen is disabled.
    •  noise_caves_enabled: Whether the different noise caves generate.
    •  noodle_caves_enabled: Whether noodle caves generate.
    •  deepslate_enabled: Whether stone is replaced with deepslate at the bottom of the world.
    •  ore_veins_enabled: Whether ore veins generate.
    •  aquifers_enabled: Whether aquifers generate.
    •  default_block: The default block used for the terrain.
      • Block state tags
    •  default_fluid: The block used for seas and lakes.
      • Block state tags
    •  structures: Structure settings
      •  stronghold: Settings for how strongholds should be spawned. The stronghold value under the  structures tag appears to be placeholders so that every structure has a value; these values are the ones that actually control stronghold spawning.
        •  distance: Controls how far apart the strongholds are.
        •  count: How many strongholds to generate.
        •  spread:
      •  structures: List of structures to use in this dimension
        •  <namespaced id>: The key for this field should be the namespaced ID of a structure, a list is available at Java Edition data value § Structures.
          •  spacing: Average distance between two structure placement attempts of this type in chunks[note 1].
          •  separation: Minimum distance between two structures of this type in chunks. Must be less than  spacing.
          •  salt: A number that assists in randomization; see salt (cryptography).
    •  noise: Parameters for world generation.
      •  min_y: The minimum Y coordinate where terrain starts generating. Value between -2048 or -2032 and 2031. Must be divisible by 16. Note that if -2048 is used, the bottom face of the, likely, bedrock floor won't be lit up correctly.[1]
      •  height: The total height where terrain generates. Must be divisible by 16. Before 1.17, it squashes the world, for example, with height=128, the ground is set to Y=32. min_y + height cannot be higher than 2032 so its maximum is 4064 or 4080.
      •  size_horizontal: Changes the X/Z scale of the landmass, but not the biomes.[needs testing]
      •  size_vertical: Changes the Y scale of the landmass. Values between 1 and 15 gradually increase the hill height, above 20 are all above the normal sea level of 63, and higher than 32 give normal land levels of 100+.
      •  density_factor: Changes the gradient of terrain density from the bottom to the top of the world. Positive values result in terrain that is solid underneath with shapes that shrink at higher altitudes, negative values result in terrain that is solid on top with empty space underneath. Greater positive or negative values result in a sharper transition.
      •  density_offset: Moves the center height for terrain density relative to the middle of the world, by an amount inversely proportional to  density_factor.
      •  simplex_surface_noise: Whether the surface builders should use simple noise instead of perlin noise.
      •  random_density_offset: Optional. [needs testing]
      •  island_noise_override: Optional. Causes the world to generate like The End with a big island in the center and smaller ones around.
      •  amplified: Optional. Toggles between amplified and normal terrain generation.
      •  sampling: Specifies how the noise is sampled.
        •  xz_scale: Scales the X and Z axis of the noise. Higher values results in more intricate horizontal shapes. Works similarly to coordinate scale from old customized worlds.
        •  xz_factor: Smoothes the noise on the horizontal axis. Works similarly to main noise scale X/Z from old customized worlds.
        •  y_scale: Scales the Y axis of the noise. Higher values result in more intricate vertical shapes. Works similarly to height scale from old customized worlds.
        •  y_factor: Smoothes the noise on the vertical axis. Value can range from 0.001 to 1000.0. Works similarly to main noise scale Y from old customized worlds.
      •  top_slide: Settings for the curve at the top of the world.
        •  target: The value of the curve. Negative values round off the top of the hills in the affected area, positive values create a roof. Higher values produce larger effects.
        •  size: Defines the size of the affected area from the top of the world. Calculated using the formula size = <height in blocks> * 0.25 / size_vertical.
        •  offset: Moves the affected area from the top of the world. Uses the same formula as  size, so offset = <height in blocks> * 0.25 / size_vertical. For  top_slide, positive values move the area down and negative values bring it up.
      •  bottom_slide: Settings for the curve at the bottom of the world.
        •  target: The value of the curve. Negative values remove the floor and round off the bottom of the islands, positive values make a floor. Higher values produce larger effects.
        •  size: Defines the size of the affected area from the bottom of the world. Uses the same formula as in  top_slide.
        •  offset: Moves the affected area from the bottom of the world. Uses the same formula as in  top_slide. For  bottom_slide, positive values move the area up and negative values bring it down.


Default settings[]

These are the settings used by the 6 presets available for the minecraft:noise generator.

Structure defaults[]

These are the default values for all namespaced structures. Every preset uses the same values for all of these structures, with the exception of minecraft:ruined_portal.

*Placeholder values, have no effect

**Salt values aren't used for theses structures; changing them produces no effect

Biome[]

Main article: Biome JSON format

Biomes stored as JSON files within a data pack in the path data/<namespace>/worldgen/biome.

Carvers[]

Carvers are used to add carved out regions of biomes, either replaced with air or liquid. They are stored as JSON files within a data pack in the path data/<namespace>/worldgen/configured_carver.

Whether it is possible to configure the "ocean" layer of carvers (for example the lava that appears below y=10 in Overworld caves) is unknown.

JSON format[]

The root tag

    •  type: The type of carver to use, must be one of either "cave", "nether_cave", "canyon", "underwater_canyon", or "underwater_cave".
    •  config: Configuration values for the carver.
      •  probability:[needs testing] The probability that each chunk attempts to generate this carver, must be between 0 and 1.

Surface builders[]

Surface builders 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 data/<namespace>/worldgen/configured_surface_builder.

Features[]

Main article: Configured feature

Features are unique elements of the world like trees, flowers, ore, etc. Configured features are stored as JSON files within a data pack in the path data/<namespace>/worldgen/configured_feature.

Structure features[]

Structure features are a special type of feature that generates a structure. Configured structure features are stored as JSON files within a data pack in the path data/<namespace>/worldgen/configured_structure_feature. The logic behind what qualifies as a structure feature versus a regular feature is unclear. Dungeons and Desert wells are typically considered structures, but are not structure features. Also, Nether Fossils are structure features while Fossils are not even though they are essentially the same feature.

Jigsaw pools[]

Jigsaw pools or template pools are used to generate structures using jigsaw blocks, stored as JSON files within a data pack in the path data/<namespace>/worldgen/template_pool.

JSON format[]

  • The root tag
    •  name: The namespaced id of the pool [needs testing]
    •  fallback: Can set to another template pool, which generates when the original pool cannot generate at the end of all layers. Used in the vanilla datapack to generate the end of village streets, aka terminators in structure files. [needs testing]
    •  elements: A list of structures to choose from
      •  An element:
        •  weight: How likely this element is to be chosen when using this pool
        •  element: The properties of this element
          •  element_type: Can be minecraft:empty_pool_element to generate no structure, minecraft:feature_pool_element when feature is used, minecraft:list_pool_element when elements are used, and minecraft:legacy_single_pool_element or minecraft:single_pool_element when location is used [needs testing]. The difference between legacy_single_pool_element and single_pool_element, is that the legacy_single_pool_element will not replace existing blocks with air (so is not suitable for building underground) and the single_pool_element will replace blocks with air and relies on the structure_void block to avoid not replacing blocks.
          •  feature: The namespaced id of the feature.
          •  location: The namespaced id of the structure to place
          •  projection: Can be rigid to place a fixed structure (like a house), or terrain_matching to match the terrain height like a village road [needs testing]
          •  processors: The namespaced ID of a processor if this is a string
            •  processors: A list of processors to use
              •  An element:
                •  processor_type: The namespaced id of the processor to use
                •  other properties [needs testing]
          •  elements: A list of structures to choose from
            •  An element:
              •  weight: How likely this element is to be chosen when using this pool
              •  location: The namespaced id of the structure to place
              •  projection: Can be rigid or terrain_matching [needs testing]
              •  element_type: Can be minecraft:empty_pool_element to generate no structure, minecraft:list_pool_element when elements is used, and minecraft:legacy_single_pool_element or minecraft:single_pool_element when location is used [needs testing]
              •  processors: The namespaced ID of a processor if this is a string
                •  processors: A list of processors to use
                  •  An element:
                    •  processor_type: The namespaced id of the processor to use
                    •  other properties [needs testing]


Processor lists[]

Processor lists are lists of processors used to affect blocks in structures, stored as JSON files within a data pack in the path data/<namespace>/worldgen/processor_list.

JSON format[]

  • The root tag
    •  processors: A list of processors
      •  A processor
        •  processor_type: Can be minecraft:rule, minecraft:block_rot, minecraft:block_age, minecraft:block_ignore, minecraft:blackstone_replace, minecraft:jigsaw_replacement, minecraft:lava_submerged_block, minecraft:gravity or minecraft:nop.
        • If processor_type is minecraft:block_rot:
        • If processor_type is minecraft:rule:
          •  rules: A list of rules to apply from top to bottom [needs testing]
            •  A rule
              •  position_predicate: The predicates to apply to the block's position [needs testing], see below for a list of valid predicates
              •  input_predicate: The predicates to apply to the block that is placed
              •  location_predicate: The predicates to apply to the block before the structure is generated [needs testing]
              •  output_state: The block that is placed if all conditions are met
                •  Name: ID of the block
                •  Properties: Block states
                  •  state: A block state key and its value
              •  output_nbt (optional): The nbt data of the block placed if all conditions are met [needs testing] (never used in vanilla)
        • If processor_type is minecraft:block_age:
          •  mossiness: Values below 0 is treated as 0; values above 1 is treated as 1.[needs testing]
        • If processor_type is minecraft:block_ignore:
          •  blocks: [needs testing]
            •  A block
              •  Name: The namespaced id of the block to use.
              •  Properties: Block states
                •  state: A block state key and its value.
        • If processor_type is minecraft:gravity:
          •  heightmap: Must be one of "WORLD_SURFACE_WG", "WORLD_SURFACE", "OCEAN_FLOOR_WG", "OCEAN_FLOOR", "MOTION_BLOCKING", or "MOTION_BLOCKING_NO_LEAVES".
          •  offset: [needs testing]

Predicates[]

  • The root tag
    •  predicate_type: Can be always_true, axis_aligned_linear_pos for a random chance that depends on a block's distance to the structure's origin [needs testing], block_match to test for a block, blockstate_match to test for specific block states, random_block_match to test for a block with a random chance or tag_match to test for a block in a block tag.
    • If predicate_type is axis_aligned_linear_pos:
      •  axis: Can be x, y or z
      •  min_chance: The chance for the predicate to pass when the distance of a block to the structure's origin is equal to min_dist [needs testing].
      •  max_chance: The chance for the predicate to pass when the distance of a block to the structure's origin is equal to max_dist [needs testing]. If a block's distance is between min_dist and max_dist, chance is obtained by linear interpolation between the values of min_chance and max_chance.
      •  min_dist
      •  max_dist
    • If predicate_type is block_match:
      •  block: A block ID.
    • If predicate_type is blockstate_match:
      •  block_state
        •  Name: ID of the block
        •  Properties: Block states
          •  state: A block state key and its value.
    • If predicate_type is random_block_match:
      •  block: A block ID.
      •  probability: The probability (between 0 and 1) of the predicate to pass if the block is found.
    • If predicate_type is tag_match:
      •  tag: The namespaced ID of a block tag

History[]

Java Edition
1.16.220w28aAdded support for custom world generation.
20w29aNoise settings can also be changed in worldgen.

External links[]

Notes[]

  1. Setting this to a number does not mean one structure is generated this often, only that the game attempts to generate one; biomes or terrain could lead to the structure not being generated. The maximum distance of structure placement attempts is 2*spacing - separation.