Minecraft Wiki
This article is for Java Edition. 

Features are small decorations that can at most write to a 3×3 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.

Feature Type[]

A feature type (sometimes called feature) determines how and what to generate.

List of feature types[]

The IDs of all feature types are listed below:

  • no_op—Does nothing. Useful for overwriting existing configured features.
  • bamboo
  • basalt_columns
  • basalt_pillar
  • block_column
  • block_pile
  • blue_ice
  • bonus_chest
  • chorus_plant
  • coral_claw
  • coral_mushroom
  • coral_tree
  • delta_feature
  • desert_well
  • disk—Only if there is water at the current block, places blocks in a circular formation using the specified radius and deepness.
  • dripstone_cluster
  • end_gateway
  • end_island
  • end_spike
  • fill_layer—Fills all air blocks in a 16×1×16 layer of blocks. Used by the game in flat worlds.
  • flower
  • forest_rock
  • fossil—Can place a small structure.
  • freeze_top_layer—Places snow and replaces water with ice in snowy biomes.
  • geode
  • glowstone_blob
  • huge_brown_mushroom
  • huge_fungus
  • huge_red_mushroom
  • iceberg
  • ice_spike
  • kelp
  • lake
  • large_dripstone
  • monster_room
  • multiface_growth
  • nether_forest_vegetation
  • netherrack_replace_blobs—Replaces all target blocks in a certain radius with another block. If it doesn't find the target block at its position, it will move down before generating until it finds one.
  • no_bonemeal_flower
  • ore
  • pointed_dripstone
  • random_boolean_selector—Randomly chooses one of two features with each having an equal chance.
  • random_selector—Randomly chooses a feature from a list with chances.
  • random_patch
  • replace_single_block—Replaces a single block using a list of targets and states.
  • root_system—Generates a root column with a feature on top.
  • scattered_ore
  • sculk_patch
  • seagrass
  • sea_pickle
  • simple_block
  • simple_random_selector—Randomly chooses a feature from a list with each having an equal chance.
  • spring_feature
  • tree
  • twisting_vines
  • underwater_magma
  • vegetation_patch
  • vines
  • void_start_platform
  • waterlogged_vegetation_patch—A vegetation patch but it will try to waterlog the blocks placed.
  • weeping_vines

Configured Feature[]

A feature type determines how to generate a feature, but the specific details need to be configured additionally. After configured, it is called a configured feature, or simply called a feature.

Configured features are stored as JSON files within a data pack in the path data/<namespace>/worldgen/configured_feature.

JSON Format[]

  • : Root object.
    •  type: The ID of feature type.
    •  config: Configuration of this configured feature. The avialable properties vary depending on the  type. Types that are not listed below have no config, but must still have an empty config object.

Placed feature[]

A configured feature determines what to be generated, but additional definition is required to determine where and how to place it in world generation. After added placement modifiers, it is called a placed feature.

Placed features are stored as JSON files within a data pack in the path data/<namespace>/worldgen/placed_feature.

JSON Format[]

  • : Root object.
    •  feature: A configured feature's ID, or a object of a configured feature.
    •  placement: A list of placement modifiers. They are applied in order.
      • : A placement modifier.
        •  type: The type of this placement modifier.
        • Other additional fields depend on the value of  type, described below.

Placement Modifier[]

A placement modifier takes in a initial position and returns empty or one or more block positions. Each position represents a generation attempt here. The placement modifier can return empty to cancel the attempt; return multiple copies of the same position to increase the number of attempts here; return some different positions to make multiple attempts in different positions.

For a placed feature, the placement modifiers in the list are applied in order to get the final list of positions from the initial position, then the feature will attempt to generate at those positions. When generating a feature directly, the initial position is the bottom northwest corner of a chunk. When referenced by another feature (such as being referenced by a feature of type random_selector, or by a structure pool), the initial position is where the feature is to be generated.

The possible values for  type and associated additional fields:

  • biome—Either returns the current position or empty. Only passes if the biome at the current position includes this placed feature. No additional field. Important: This modifier type cannot be used in placed features that are referenced from other configured features.
  • block_predicate_filter—Returns the current position when the predicate is passed, otherwise return empty.
    •  predicate: The block predicate to test.
      • Block predicate
  • carving_mask—Returns all positions in the current chunk that have been carved out by a carver. This does not include blocks carved out by noise caves.
    •  step: The carving step. Either air or liquid.
  • count—Returns multiple copies of the current block position.
    •  count: Value between 0 and 256 (inclusive).
      • Int provider
  • count_on_every_layer—In the horizontal relative range (0,0) to (16,16), at each vertical layer separated by air, lava or water, tries to randomly select the specified number of horizonal positions, whose Y coordinate is one block above this layer at this selected horizonal position. Return these selected positions.
    •  count:Count on each layer. Value between 0 and 256 (inclusive).
      • Int provider
  • environment_scan—Scans blocks either up or down, until the target condition is met. Returns the block position for which the target condition matches. If no target can be found within the maximum number of steps, returns empty.
    •  direction_of_search: One of up or down.
    •  max_steps: Value between 1 and 32 (inclusive).
    •  target_condition: The block predicate that is searched for.
      • Block predicate
    •  allowed_search_condition: (optional) If specified, each step must match this block position in order to continue the scan. If a block that doesn't match it is met, but no target block found, returns empty.
      • Block predicate
  • height_range—Sets the Y coordinate to a value provided by a height provider. Returns the new position.
    •  height: The new Y coordinate.
      • Height provider
  • heightmap—Sets the Y coordinate to one block above the heightmap. Returns the new position.
    •  heightmap: The heightmap to use. One of MOTION_BLOCKING, MOTION_BLOCKING_NO_LEAVES, OCEAN_FLOOR, OCEAN_FLOOR_WG, WORLD_SURFACE or WORLD_SURFACE_WG.
  • in_square—For both X and Z, it adds a random value between 0 and 15 (both inclusive). This is a shortcut for a random_offset modifier with y_spread set to 0 and xz_spread as a uniform int from 0 to 15. No additional fields.
  • noise_based_count—When the noise value at the current block position is positive, returns multiple copies of the current block position, whose count is based on a noise value and can gradually change based on the noise value. When noise value is nagetive or 0, returns empty. The count is calculated by ceil((noise(x / noise_factor, z / noise_factor) + noise_offset) * noise_to_count_ratio).
    •  noise_factor: Scales the noise input horizontally. Higher values make for wider and more spaced out peaks.
    •  noise_offset:(optional, defaults to 0) Vertical offset of the noise.
    •  noise_to_count_ratio: Ratio of noise value to count.
  • noise_threshold_count—Returns multiple copies of the current block position. The count is either below_noise or above_noise, based on the noise value at the current block position. First checks noise(x / 200, z / 200) < noise_level. If that is true, uses below_noise, otherwise above_noise.
    •  noise_level: The threshold within the noise of when to use below_noise or above_noise.
    •  below_noise: The count when the noise is below the threshold. Value lower than 0 is treated as 0.
    •  above_noise: The count when the noise is above the threshold. Value lower than 0 is treated as 0.
  • random_offset—Applies an offset to the current position. Note that the even though X and Z share the same int provider, they are individually sampled, so a different offset can be applied to X and Z.
    •  xz_spread: Value between -16 and 16 (inclusive).
      • Int provider
    •  y_spread: Value between -16 and 16 (inclusive).
      • Int provider
  • rarity_filter—Either returns the current position or empty. The chance is calculated by 1 / chance.
    •  chance: Must be a positive integer.
  • surface_relative_threshold_filter—Returns the current position if the surface is inside a range. Otherwise returns empty.
    •  heightmap:The heightmap to use. One of MOTION_BLOCKING, MOTION_BLOCKING_NO_LEAVES, OCEAN_FLOOR, OCEAN_FLOOR_WG, WORLD_SURFACE or WORLD_SURFACE_WG.
    •  min_inclusive: The minimum relative height from the surface to current position.
    •  max_inclusive: The maxinum relative height from the surface to current position.
  • surface_water_depth_filter—If the number of blocks of a motion blocking material under the surface (the top non-air block) is less than the specified depth, return the current position. Otherwise return empty.
    •  max_water_depth: The maximum allowed depth.

History[]

Java Edition
1.16.220w28aAdded experimental support for configured features in data packs.
20w29aRenamed the minecraft:decorated_flower feature in minecraft:no_bonemeal_flower.
1.1720w45aAdded minecraft:geode feature.
20w49aAdded minecraft:dripstone_cluster, minecraft:large_dripstone, and minecraft:small_dripstone features.
21w03aAdded minecraft:glow_lichen feature type.
1.1922w11aAdded block field into glow_lichen (multiface_growth) feature config.
Added minecraft:sculk_patch feature type.
22w12aLeaves are now waterloggable. And foliage placers now always waterlog the blocks when replacing water, if the foliage block has a waterlogged block state.
22w13aAdded extra_rare_growths field into sculk_patch feature config.
22w14aRenamed the glow_lichen feature type to multiface_growth.
Added surface_disk feature type.
Added can_origin_replace field into the minecraft:disk feature config. Must be a block ID or a block tag, or a list of block IDs. The feature origin must in these blocks to generate the feature.
Added root_placer field into the minecraft:tree feature config.
Added attached_to_leaves decorator into the minecraft:tree feature config.
Added probability field into the leave_vine decorator of the minecraft:tree feature config.
Added upwards_branching_trunk_placer trunk placer into the minecraft:tree feature config.
22w15aMerged the surface_disk and ice_patch feature types into the disk type.
Added state_provider and targets fields into the minecraft:disk feature config, replacing state, targets and can_origin_replace fields.
Added trunk_offset_y and above_root_placement fields into the root placer in the minecraft:tree feature config.
Removed the y_offset field of the mangrove_root_placer root placer in the minecraft:tree feature config. Moved all other additional fields of mangrove_root_placer into an object  mangrove_root_placement.
1.19.423w07aAdded minecraft:cherry_foliage_placer and minecraft:cherry_trunk_placer into the minecraft:tree feature config.
1.2023w17aAdded replaceable_blocks field into the minecraft:huge_fungus feature config.