Minecraft Wiki
Advertisement
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/biomes generates. This is particularly useful in conjunction with custom worlds/biomes.

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:the_end for regular End generation, and minecraft:floating_islands for Floating Islands (similar to The End outer islands) generation.

JSON format[]

  • The root tag
    •  sea_level: The sea level in this dimension.
    •  disable_mob_generation: Disables passive mob spawning upon chunk generation.
    •  ore_veins_enabled: Whether ore veins generate.
    •  aquifers_enabled: Whether aquifers generate.
    •  legacy_random_source: Whether to use the old random number generator from before 1.18 for world generation.
    •  default_block: The default block used for the terrain.
      • Block state
    •  default_fluid: The block used for seas and lakes.
      • Block state
    •  noise_router: Routes density functions to noise parameters used for world generation.
      •  final_density: Determines where there is air or stone. [needs testing]
      •  vein_toggle: [check the code]
      •  vein_ridged: [check the code]
      •  vein_gap: [check the code]
      •  erosion: Determines the erosion values for terrain generation and biome placement.
      •  depth: Determines the depth values for terrain generation and biome placement.
      •  ridges: Determines the weirdness values for terrain generation and biome placement.
      •  initial_density_without_jaggedness: [check the code]
      •  lava: Used for lava aquifers. [check the code]
      •  temperature: Determines the temperature values for biome placement.
      •  vegetation: Determines the humidity values for biome placement.
      •  continents: Determines the continentalness values for terrain generation and biome placement.
      •  barrier: Used to separate between aquifers and open areas in caves. [needs testing]
      •  fluid_level_floodedness: [check the code]
      •  fluid_level_spread: [check the code]
    •  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. E.g., increases the distance between mountainous terrain. Upper limit for this parameter is somewhere between 4 and 8.
      •  size_vertical: Changes the Y scale of the landmass. Values between 1 and 1.5 gradually increase the hill height, above 2.0 are all above the normal sea level of 63, and higher than 3.2 give normal land levels of 100+.
      •  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.
      •  large_biomes: Optional. Toggles between large biomes and normal biome 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.
      •  terrain_shaper:
        •  offset: A terrain spline determining the offset of the terrain. Corresponds to the old  density_offset field but can now be configured depending on the dimension noises.
        •  factor: A terrain spline determining the factor of the terrain. Corresponds to the old  density_factor field but can now be configured depending on the dimension noises.
        •  jaggedness: A terrain spline determining the jaggedness of the terrain.
    •  surface_rule: Surface rule configuration for the terrain. This replaces the old surface builder system.
      •  type: Type of the surface rule, minecraft: with one of: condition, block, vertical_gradient, above_preliminary_surface, sequence, stone_depth, water, biome, y_above, not, noise_threshold, steep, hole, bandlands or temperature. See below of extra properties for each type.


The extra properties for  surface_rule per type:

  • condition
    •  if_true: A surface rule that can give a true or false output
    •  then_run: A surface rule that does something
  • block sets the blocks that reach this surface rule to the specified block
    •  result_state: The block to use
      •  Name: The namespaced id of the block to use.
      •  Properties: Block states
        •  state: A block state key and its value.
  • vertical_gradient a conditional surface rule to select blocks in a gradient, used for deepslate and bedrock (between the specified y-coords is the gradient itself)
    •  random_name:[needs testing] any random name.
    •  true_at_and_below: the lower y-coord where this condition is true.
      •  above_bottom: the y-coord above the bottom of the world, mutually exclusive with absolute and below_top.
      •  absolute: the exact y-coord, mutually exclusive with above_bottom and below_top.
      •  below_top: the y-coord below the top of the world, mutually exclusive with above_bottom and absolute.
    •  false_at_and_above: the upper y-coord where this condition is false.
      •  above_bottom: the y-coord above the bottom of the world, mutually exclusive with absolute and below_top.
      •  absolute: the exact y-coord, mutually exclusive with above_bottom and below_top.
      •  below_top: the y-coord below the top of the world, mutually exclusive with above_bottom and absolute.
  • above_preliminary_surface [needs testing] conditional surface rule, has no further properties
  • sequence applies surface rules in order (only the first successful surface rule seems to be applied [needs testing])
    •  sequence
      • a surface rule
  • biome conditional surface rule to test for the biome
    •  biome_is: list of biomes that result in true.
      • : namespaced id of the biome to check for.
  • y_above conditional surface rule to check if it is above a specified y-coord
    •  anchor: the minimal y-coord where this condition is true.
      •  above_bottom: the y-coord above the bottom of the world, mutually exclusive with absolute and below_top.
      •  absolute: the exact y-coord, mutually exclusive with above_bottom and below_top.
      •  below_top: the y-coord below the top of the world, mutually exclusive with above_bottom and absolute.
    •  surface_depth_multiplier: [needs testing]
    •  add_stone_depth: [needs testing]
  • not conditional surface rule, inverts the conditional surface rule within this
    •  invert: the surface rule to invert.
  • steep [needs testing] conditional surface rule, has no further properties
  • hole [needs testing] conditional surface rule, has no further properties
  • bandlands [needs testing] surface rule, used in badlands, has no further properties
  • temperature [needs testing] conditional surface rule, used to generate ice in frozen oceans, has no further properties


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: See below.

Shared by all carver types:

  •  config:Configuration values for the carver.
    •  probability: The probability that each chunk attempts to generate this carver, must be between 0 and 1.
    •  y: Height provider. The height at which this carver attempts to generate.
      • Height provider
    •  yScale: Float provider. Vertically scales the carved area.
      • Float provider
    •  lava_level: The vertical anchor where lava begins to generate.
      • Choices for a vertical anchor
    •  aquifers_enabled: If true, aquifers will be generated.

When carver type is "cave", "nether_cave", or "underwater_cave":

  •  config: Configuration values for the carver

When carver type is "canyon" or "underwater_canyon":

  •  config: Configuration values for the carver.
    •  vertical_rotation:[needs testing] Creates the curves in the canyon as it continues.
      • Float provider
    •  shape: The shape to use for the ravine.
      •  thickness:[needs testing] The width of the canyon.
        • Float provider
      •  width_smoothness:[needs testing] Higher values seem to smooth canyon walls on the vertical axis. Must be positive.
      •  distance_factor:[needs testing]
        • Float provider
      •  horizontal_radius_factor:[needs testing]
        • Float provider
      •  vertical_radius_default_factor:[needs testing]
        • Float provider
      •  vertical_radius_center_factor:[needs testing]
        • Float provider

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.

Structure sets[]

Structure sets are used to place structures in given locations. They are stored in data/<namespace>/worldgen/structure_set.

JSON format[]

  •  structures: The structures that may be placed.
    • A structure to be placed.
      •  structure: The namespaced ID of the configured structure to be placed.
      •  weight: Determines the chance of it being chosen over others.
  •  placement: How the structure should be placed.
    •  type: One of minecraft:concentric_rings or minecraft:random_spread.
    • If type is minecraft:concentric_rings:
      •  distance: Controls how far apart the structures are. [needs testing]
      •  count: How many structures to generate.
      •  spread: How many structures are in the closest ring to spawn. [needs testing]
    • If type is minecraft:random_spread:
      •  spread_type: (optional) One of linear or triangular. Defaults to linear.
      •  locate_offset: (optional) The chunk coordinate offset given when using /locate.
      •  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).

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.

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 randomly selected structure from the target pool cannot generate due to size constraints from existing structures. Example, if a 12x12x12 structure is placed between two existing structures with only 10 blocks between them, it would instead try to load something from the fallback pool. The fallback pool can contain any sized structure, but ideally should contain smaller structures than the original pool. [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 placed 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[]

Main article: Processor list

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 to be in JSON form. [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 (see min_dist and max_dist below), 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 or less than min_dist.
      •  max_chance: The chance for the predicate to pass when the distance of a block to the structure's origin is equal to or greater than max_dist. 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: The minimum distance from the origin (for jigsaw structures this will be the jigsaw block) unclear for non jigsaw block structures [needs testing].
      •  max_dist: The maximum distance from the origin (see above).
    • 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.
1.18.222w06aAdded tag field to structure noise settings.
1.18.2 Pre-release 1Added noise_router to noise_settings.
Moved structure generation settings to separate files from noise_settings.

External links[]

Notes[]


Advertisement