Custom 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. They are used in world generation.

JSON format
When another configured feature is required inside the settings, it can either be provided with a string tag as the namespaced id of another configured feature, or with a compound tag as a nested definition.


 * The root tag.
 * : The feature type. Valid options are listed below.
 * Configuration properties of this feature type, specified below.
 * Configuration properties of this feature type, specified below.

The possible values for and associated config:


 * bamboo&mdash;Generates a single bamboo column with a height between 5 and 16 blocks. Requires a block below that is inside the block tag.
 * : The probability for a podzol disk to generate below the bamboo. The disk has a radius of 1 to 4 blocks.

An example


 * basalt_columns
 * : Int provider between 0 and 3.
 * : Int provider between 1 and 10.
 * : Int provider between 1 and 10.

An example


 * basalt_pillar
 * This feature has no config properties.


 * block_column
 * : The direction of the column. One of,  ,  ,  ,  , or.
 * : A block predicate.
 * : Determines where to cut off blocks when space is restricted. If, will start removing layers from the start of the column.
 * : The layers.
 * : Int provider specifying the height of the layer.
 * : The block to use for this layer.
 * : Int provider specifying the height of the layer.
 * : The block to use for this layer.
 * : The block to use for this layer.

An example


 * block_pile
 * : The block to use.

An example


 * blue_ice
 * This feature has no config properties.


 * bonus_chest
 * This feature has no config properties.


 * chorus_plant
 * This feature has no config properties.


 * coral_claw
 * This feature has no config properties.


 * coral_mushroom
 * This feature has no config properties.


 * coral_tree
 * This feature has no config properties.


 * delta_feature
 * : The block to use on the inside of the delta.
 * : The block to use for the rim of the delta.
 * : Int provider between 0 and 16.
 * : Int provider between 0 and 16.
 * : Int provider between 0 and 16.
 * : Int provider between 0 and 16.
 * : Int provider between 0 and 16.

An example


 * desert_well
 * This feature has no config properties.


 * disk&mdash;Only if there is water at the current block, places blocks in a circular formation using the and twice the  blocks deep.
 * : The block to use.
 * : Int provider between 0 and 8.
 * : Value between 0 and 4.
 * : The blocks to replace.
 * A block state.
 * : The blocks to replace.
 * A block state.

An example


 * dripstone_cluster
 * : Value between 1 and 512. For how many blocks the feature will search for the floor or ceiling.
 * : Int provider between 0 and 128.
 * : Int provider between 0 and 128.
 * : Value between 0 and 64.
 * : Value between 1 and 64.
 * : Int provider between 0 and 128.
 * : Float provider between 0 and 2.
 * : Float provider between 0 and 2.
 * : Value between 0 and 1.
 * : Value between 1 and 64.
 * : Value between 1 and 64.
 * : Float provider between 0 and 2.
 * : Value between 0 and 1.
 * : Value between 1 and 64.
 * : Value between 1 and 64.
 * : Value between 1 and 64.

An example


 * end_gateway
 * : Whether the gateway should teleport entities in the exact exit position.
 * : (optional) The block position where the gateway should exit.
 * X coordinate.
 * Y coordinate.
 * Z coordinate.

An example


 * end_island
 * This feature has no config properties.


 * end_spike
 * : (optional) Defaults to false.
 * : (optional) Block position of the beam target.
 * : The X coordinate.
 * : The Y coordinate.
 * : The Z coordinate.
 * A spike configuration.
 * : (optional) The X coordinate.
 * : (optional) The Z coordinate.
 * : (optional) The radius of the spike.
 * : (optional) The height of the spike.
 * : (optional) Whether to generate a cage around the crystal.
 * : (optional) Whether to generate a cage around the crystal.

An example

<div class="treeview" id="fill_layer" style="margin-top: 1em;">
 * fill_layer&mdash;Fills all air blocks in a 16x1x16 layer of blocks. Used by the game in flat worlds.
 * : The block to fill with.
 * : Value between 0 and 4064. The layer to fill, starting at the bottom of the world.
 * : Value between 0 and 4064. The layer to fill, starting at the bottom of the world.

An example


 * flower
 * Identical to the random_patch feature.

<div class="treeview" id="forest_rock" style="margin-top: 1em;">
 * forest_rock
 * : The block to use.

An example


 * fossil&mdash;Can place a small structure.
 * : A fossil structure.
 * : An overlay structure.
 * : How many corners of the structure are allowed to be empty for it to generate. Prevents structures floating in the air.
 * : An overlay structure.
 * : How many corners of the structure are allowed to be empty for it to generate. Prevents structures floating in the air.
 * : How many corners of the structure are allowed to be empty for it to generate. Prevents structures floating in the air.
 * : How many corners of the structure are allowed to be empty for it to generate. Prevents structures floating in the air.
 * : How many corners of the structure are allowed to be empty for it to generate. Prevents structures floating in the air.
 * : How many corners of the structure are allowed to be empty for it to generate. Prevents structures floating in the air.

<div class="treeview" id="freeze_top_layer" style="margin-top: 1em;">
 * freeze_top_layer&mdash;Places snow and replaces water with ice in snowy biomes. This feature should be added to all biomes.
 * This feature has no config properties.


 * geode
 * : The block used for the filling.
 * : The block used for the inner layer.
 * : The block used for the alternate inner layer.
 * : The block used for the middle layer.
 * : The block used for the outer layer.
 * A block state.
 * : A block tag listing which blocks not to replace.
 * : A block tag listing invalid blocks. The feature placement fails entirely when an invalid block is found.
 * : (optional) Value between 0.01 and 50. Defaults to 1.7.
 * : (optional) Value between 0.01 and 50. Defaults to 2.2.
 * : (optional) Value between 0.01 and 50. Defaults to 3.2.
 * : (optional) Value between 0.01 and 50. Defaults to 4.2.
 * : (optional) Value between 0 and 1. Defaults to 1.
 * : (optional) Value between 0 and 5. Defaults to 2.
 * : (optional) Value between 0 and 10. Defaults to 2.
 * : (optional) Value between 0 and 1. Defaults to 0.05.
 * : (optional) Value between 0 and 1. Defaults to 0.35.
 * : (optional) Value between 0 and 1. Defaults to 0.35. The chance that the inner layer will use the alternate block provider.
 * : (optional) Defaults to true. Whether the inner placements are only allowed on the alternate inner blocks.
 * : (optional) Int provider between 1 and 20. Defaults to a uniform int between 4 and 5.
 * : (optional) Int provider between 1 and 20. Defaults to a uniform int between 3 and 4.
 * : (optional) Int provider between 1 and 10. Defaults to a uniform int between 1 and 2.
 * : (optional) Defaults to -16.
 * : (optional) Defaults to 16.
 * : (optional) Value between 0 and 10. Defaults to 2.
 * : (optional) Value between 0 and 1. Defaults to 0.05.
 * : (optional) Value between 0 and 1. Defaults to 0.35.
 * : (optional) Value between 0 and 1. Defaults to 0.35. The chance that the inner layer will use the alternate block provider.
 * : (optional) Defaults to true. Whether the inner placements are only allowed on the alternate inner blocks.
 * : (optional) Int provider between 1 and 20. Defaults to a uniform int between 4 and 5.
 * : (optional) Int provider between 1 and 20. Defaults to a uniform int between 3 and 4.
 * : (optional) Int provider between 1 and 10. Defaults to a uniform int between 1 and 2.
 * : (optional) Defaults to -16.
 * : (optional) Defaults to 16.
 * : (optional) Defaults to -16.
 * : (optional) Defaults to 16.
 * : (optional) Defaults to 16.

An example

<div class="treeview" id="glow_lichen" style="margin-top: 1em;">
 * glow_lichen
 * : (optional) Value between 1 and 64. Defaults to 10.
 * : (optional) Value between 0 and 1. Defaults to 0.5.
 * : (optional) Defaults to false.
 * : (optional) Defaults to false.
 * : (optional) Defaults to false.
 * A block ID.
 * A block ID.

An example

<div class="treeview" id="glowstone_blob" style="margin-top: 1em;">
 * glowstone_blob
 * This feature has no config properties.

<div class="treeview" id="huge_brown_mushroom" style="margin-top: 1em;">
 * huge_brown_mushroom
 * : The block to use for the cap.
 * : The block to use for the stem.
 * : (optional) The size of the cap. Defaults to 2.
 * : (optional) The size of the cap. Defaults to 2.
 * : (optional) The size of the cap. Defaults to 2.

An example

<div class="treeview" id="huge_fungus" style="margin-top: 1em;">
 * huge_fungus
 * : The block to use for the hat.
 * : The block to use as decoration.
 * : The block to use for the stem.
 * : The block to place on top of.
 * : (optional) Defaults to false.
 * : The block to place on top of.
 * : (optional) Defaults to false.
 * : (optional) Defaults to false.
 * : (optional) Defaults to false.

An example

<div class="treeview" id="huge_red_mushroom" style="margin-top: 1em;">
 * huge_red_mushroom
 * Identical to the huge_brown_mushroom feature.

<div class="treeview" id="ice_patch" style="margin-top: 1em;">
 * ice_patch
 * Identical to the disk feature

<div class="treeview" id="ice_spike" style="margin-top: 1em;">
 * ice_spike
 * This feature has no config properties.


 * iceberg
 * : The block to use.

An example


 * kelp
 * This feature has no config properties.


 * lake
 * : The block to use for the fluid of the lake.
 * : The block to use for the barrier of the lake.
 * : The block to use for the barrier of the lake.

An example

<div class="treeview" id="large_dripstone" style="margin-top: 1em;">
 * large_dripstone
 * : (optional) Value between 1 and 512. Defaults to 30.
 * : Int provider between 0 and 20.
 * : Float provider between 0 and 20.
 * : Value between 0 and 1.
 * : Float provider between 0.1 and 10.
 * : Float provider between 0.1 and 10.
 * : Float provider between 0 and 2.
 * : Value between 0 and 100.
 * : Value between 0 and 5.
 * : Float provider between 0 and 2.
 * : Value between 0 and 100.
 * : Value between 0 and 5.
 * : Value between 0 and 100.
 * : Value between 0 and 5.

An example

<div class="treeview" id="monster_room" style="margin-top: 1em;">
 * monster_room
 * This feature has no config properties.

<div class="treeview" id="nether_forest_vegetation" style="margin-top: 1em;">
 * nether_forest_vegetation
 * : The block to use.
 * : Must be at least 1.
 * : Must be at least 1.
 * : Must be at least 1.

An example

<div class="treeview" id="netherrack_replace_blobs" style="margin-top: 1em;">
 * netherrack_replace_blobs&mdash;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.
 * : The block to use.
 * : The block to replace.
 * : Int provider between 0 and 12.
 * : Int provider between 0 and 12.
 * : Int provider between 0 and 12.

An example

<div class="treeview" id="no_bonemeal_flower" style="margin-top: 1em;">
 * no_bonemeal_flower
 * The config properties are identical to the random_patch feature.

<div class="treeview" id="no_op" style="margin-top: 1em;">
 * no_op&mdash;Does nothing. Useful for overwriting existing configured features.
 * This feature has no config properties.''


 * ore
 * : Value between 0 and 64. Does not directly correspond with the amount of blocks placed.
 * : Value between 0 and 1. The chance for an ore block to be discarded when it is exposed to air. Setting this to 1 makes the ore completely hidden.
 * : A list of targets.
 * A target
 * : Rule test. The blocks to replace.
 * : The block to use.
 * : The block to use.

An example

<div class="treeview" id="pointed_dripstone" style="margin-top: 1em;">
 * pointed_dripstone
 * : (optional) Value between 0 and 1. Defaults to 0.2.
 * : (optional) Value between 0 and 1. Defaults to 0.7.
 * : (optional) Value between 0 and 1. Defaults to 0.5.
 * : (optional) Value between 0 and 1. Defaults to 0.5.

An example

<div class="treeview" id="random_boolean_selector" style="margin-top: 1em;">
 * random_boolean_selector&mdash;Randomly chooses one of two features with each having an equal chance.
 * : Feature 1.
 * : Feature 2.
 * : Feature 2.

An example

<div class="treeview" id="random_patch" style="margin-top: 1em;">
 * random_patch
 * : (optional) Defaults to 128.
 * : (optional) Defaults to 7.
 * : (optional) Defaults to 3.
 * : The feature to place.

An example

<div class="treeview" id="random_selector" style="margin-top: 1em;">
 * random_selector&mdash;Randomly chooses a feature from a list with chances.
 * A feature and its corresponding chance.
 * : The feature to place.
 * : The chance of this feature being chosen.
 * : The placed feature to use if none of the above features are chosen.
 * : The chance of this feature being chosen.
 * : The placed feature to use if none of the above features are chosen.

An example

<div class="treeview" id="replace_single_block" style="margin-top: 1em;">
 * replace_single_block&mdash;Replaces a single block using a list of targets and states.
 * : A list of targets.
 * A target
 * : Rule test. The blocks to replace.
 * : The block to use.
 * : The block to use.

An example

<div class="treeview" id="root_system" style="margin-top: 1em;">
 * root_system&mdash;Generates a root column with a feature on top.
 * : A value between 1 and 64.
 * : A value between 1 and 64.
 * : A value between 1 and 256.
 * : A value between 1 and 4096.
 * : A value between 1 and 64.
 * : A value between 1 and 16.
 * : A value between 1 and 256.
 * : A value between 1 and 64.
 * : A block tag specifying which blocks can be replaced by the root column.
 * : The block to use for the root column.
 * : The block to use hanging below the root column.
 * : The block predicate used to check if the tree position is valid.
 * : The feature to place on top.
 * : The block predicate used to check if the tree position is valid.
 * : The feature to place on top.

An example

<div class="treeview" id="scattered_ore" style="margin-top: 1em;">
 * scattered_ore
 * The config properties are identical to the ore feature.

<div class="treeview" id="sea_pickle" style="margin-top: 1em;">
 * sea_pickle
 * : Int provider between 0 and 256.

An example


 * seagrass
 * : Value between 0 and 1.

An example

<div class="treeview" id="simple_block" style="margin-top: 1em;">
 * simple_block
 * : The block to use.

An example

<div class="treeview" id="simple_random_selector" style="margin-top: 1em;">
 * simple_random_selector&mdash;Randomly chooses a feature from a list with each having an equal chance.
 * : A list of features to choose from. Either all strings or all compounds.
 * : The feature to place.

An example

<div class="treeview" id="spring_feature" style="margin-top: 1em;">
 * spring_feature
 * : Fluid state. The fluid to use.
 * : (optional) Defaults to 4.
 * : (optional) Defaults to 1.
 * : (optional) Whether the spring feature requires a block below the fluid. Defaults to true.
 * : A list of valid blocks to place the spring feature in.
 * The namespaced id of the block.

An example


 * tree
 * (optional) Defaults to false. Allows the tree to generate even if there are vines blocking it.
 * : (optional) Defaults to false. If true, will place the dirt provider even when the block below the tree is not a grass block or mycelium.
 * : Defines the width of the tree at different heights, for the minimum size of the feature.
 * : One of  or
 * : (optional) Value between 0 and 80. If the possible height at this location is lower than what the trunk placer requires, but greater or equal to this value, the tree will generate anyway.
 * If  is  :
 * : (optional) Value between 0 and 81. Defaults to 1. At heights lower than this value, the feature size will return the value of, otherwise.
 * : (optional) Value between 0 and 16. Defaults to 0. Minimum width of the tree at heights under.
 * : (optional) Value between 0 and 16. Defaults to 1. Minimum width of the tree at heights greater than or equals.
 * If  is  :
 * : (optional) Must be between 0 and 80. Defaults to 1. At heights lower than this value, the feature size will return the value of, otherwise   or.
 * : (optional) Must be between 0 and 80. Defaults to 1. At heights between this and, the feature size will return the value of  . If it is greater or equals, it will use.
 * : (optional) Must be between 0 and 16. Defaults to 0. Minimum width of the tree at the lowest layer.
 * : (optional) Must be between 0 and 16. Defaults to 1. Minimum width of the tree at the middle layer.
 * : (optional) Must be between 0 and 16. Defaults to 1. Minimum width of the tree at the upper layer.
 * : The block to place below the trunk. Only places if  is true, or if there is a grass block or mycelium below the trunk.
 * : The block to use for the trunk.
 * : The block to use for the foliage.
 * : One of,  ,  ,  ,  , or.
 * : Must be between 0 and 32.
 * : Must be between 0 and 24.
 * : Must be between 0 and 24.
 * If  is  :
 * : Int provider between 1 and 64.
 * : (optional) Value needs to be at least 1. Defaults to 1.
 * One of,  ,  ,  ,  ,  ,  ,  , or.
 * If  is ,  ,  , or  :
 * Affects the foliage height and size in block height. Value between 0 and 16.
 * (Presumably) a random offset from the trunk block on which this piece of foliage is centered.
 * If  is  :
 * Int provider between 0 and 24.
 * If  is  :
 * Int provider between 0 and 24.
 * If  is  :
 * Int provider between 0 and 24.
 * If  is  :
 * Int provider between 1 and 512.
 * Value between 0 and 256.
 * Decorations to add to the tree apart from the trunk and leaves.
 * A decorator.
 * The type of decoration to add. One of,  ,  ,  , or.
 * If  is   or  :
 * Value between 0 and 1.
 * If  is  :
 * The block to replace the ground with.
 * If  is  :
 * Int provider between 1 and 512.
 * Value between 0 and 256.
 * Decorations to add to the tree apart from the trunk and leaves.
 * A decorator.
 * The type of decoration to add. One of,  ,  ,  , or.
 * If  is   or  :
 * Value between 0 and 1.
 * If  is  :
 * The block to replace the ground with.
 * The block to replace the ground with.

An example

<div class="treeview" id="twisting_vines" style="margin-top: 1em;">
 * twisting_vines
 * Must be at least 1.
 * Must be at least 1.
 * Must be at least 1.

An example

<div class="treeview" id="underwater_magma" style="margin-top: 1em;">
 * underwater_magma
 * Value between 0 and 512.
 * Value between 0 and 64.
 * Value between 0 and 1.

An example

<div class="treeview" id="vegetation_patch" style="margin-top: 1em;">
 * vegetation_patch
 * The surface to place on. One of, or
 * : Int provider between 1 and 128.
 * Value between 1 and 256.
 * Value between 0 and 1.
 * Value between 0 and 1.
 * Value between 0 and 1. The chance that a vegetation feature will be placed, is evaluated for each block.
 * Int provider. The radius of the patch.
 * A block tag specifying what blocks this feature can replace.
 * The block to use for the ground of the patch.
 * The feature to place on top of the patch.
 * The block to use for the ground of the patch.
 * The feature to place on top of the patch.
 * The feature to place on top of the patch.


 * vines
 * This feature has no config properties.''

<div class="treeview" id="void_start_platform" style="margin-top: 1em;">
 * void_start_platform
 * This feature has no config properties.''

<div class="treeview" id="waterlogged_vegetation_patch" style="margin-top: 1em;">
 * waterlogged_vegetation_patch&mdash;A vegetation patch but it will try to waterlog the blocks placed.
 * The config properties are identical to the vegetation_patch feature.

<div class="treeview" id="weeping_vines" style="margin-top: 1em;">
 * weeping_vines
 * This feature has no config properties.''

List of decorators
Decorators are used to modify the generation of features in various ways. They are applied from the outermost decorator to the innermost. A decorator takes in a block position and returns a list of block positions. This allows them to filter, transform and generate block positions.

minecraft:carving_mask
Returns a list of all block positions in the current chunk that have been carved out by a carver. This does not include blocks carved out by noise caves.
 * The carving step. Either  or.
 * The carving step. Either  or.

minecraft:cave_surface
Returns a block position with the Y coordinate modified. The new Y coordinate is set to a cave floor or ceiling, depending on the configuration. If it can't find a cave surface it returns nothing.
 * The surface to find. Either  or.
 * The amount of blocks to search for the cave surface.
 * The amount of blocks to search for the cave surface.

minecraft:chance
Either returns the current block position or nothing (an empty list). The chance is calculated by.
 * The chance for the feature to generate. Calculated by.
 * The chance for the feature to generate. Calculated by.


 * countReturns multiple copies of the current block position. The count is determined by an int provider.
 * Int provider between 0 and 256.
 * Int provider between 0 and 256.

minecraft:count_extra
Returns multiple copies of the current block position. The count is determined by a base count and a chance to add an extra count. Calculated by.
 * Base count.
 * Extra count.
 * : Chance to add  to the total count.
 * : Chance to add  to the total count.

minecraft:count_multilayer
Returns multiple block positions, placed on different vertical layers and spread in the X and Z direction with a range of 16. The count is per layer and determined by an int provider.
 * Int provider between 0 and 256.
 * Int provider between 0 and 256.

minecraft:count_noise
Returns multiple copies of the current block position. The count is either below_noise or above_noise, based on a noise value at the current block position. This noise is the same for each biome or dimension, only dependent on the X and Z coordinates. The count is calculated by.
 * The threshold within the noise of when to use  or.
 * The count when the noise is below.
 * The count when the noise is above.
 * The count when the noise is above.

minecraft:count_noise_biased
Returns multiple copies of the current block position. Similar to count_noise, the count is based on a noise value at the current block position, but instead of being only two possible values it can gradually change based on the noise value. The count is calculated by.
 * Scales the noise input horizontally. Higher values make for wider and more spaced out peaks.
 * (optional) Offset of the "positive" area, where features are generated. Can affect the count if above 0. Defaults to 0.
 * Count multiplier, provided any features are generated.
 * Count multiplier, provided any features are generated.

<div class="treeview" id="dark_oak_tree" style="margin-top: 1em;">
 * dark_oak_tree

This decorator has no config properties.

minecraft:decorated
Chains two decorators. First it runs the  decorator, then it loops over the resulting block positions and runs the   decorator. The result is a combined list of the results of each  decorator.
 * The outer configured decorator.
 * The inner configured decorator.
 * The inner configured decorator.

minecraft:end_gateway
Increases the Y coordinate by a random value between 3 and 9 (inclusive). Calculated by.

This decorator has no config properties.

minecraft:heightmap
Returns a block position with the Y coordinate modified. The new Y coordinate is set to the heightmap. If the resulting height is at the bottom of the world, nothing (an empty list) is returned.
 * The heightmap to use. One of,  ,  ,  ,  , or.
 * The heightmap to use. One of,  ,  ,  ,  , or.

minecraft:heightmap_spread_double
Returns a block position with the Y coordinate modified. The new Y coordinate is set to a random value between the bottom of the world and double the heightmap. Calculated by  heightmap. If the resulting height is at the bottom of the world, nothing (an empty list) is returned.
 * The heightmap to use. One of,  ,  ,  ,  , or.
 * The heightmap to use. One of,  ,  ,  ,  , or.

minecraft:iceberg
This decorator has no config properties.

minecraft:lava_lake
If the current Y position is below 63, always returns the current position. Otherwise only with a chance of.
 * This config value is required but unused.
 * This config value is required but unused.

minecraft:nope
Does nothing. It returns the same block position that it received.

This decorator has no config properties.

minecraft:range
Returns a block position with the Y coordinate modified. The new Y coordinate is determined by a height provider.
 * A height provider used to set the new Y coordinate.
 * A height provider used to set the new Y coordinate.

minecraft:spread_32_above
Returns a block position with the Y coordinate modified. The new Y coordinate set to a random value between  and   (exclusive). Calculated by.

This decorator has no config properties.

minecraft:square
Returns a block position with the X and Z coordinates modified. For both X and Z, it adds a random value between  and   (exclusive).

This decorator has no config properties.

<div class="treeview" id="water_depth_threshold" style="margin-top: 1em;">
 * water_depth_thresholdEither returns the current block position or nothing (an empty list).
 * A height provider used to set the new Y coordinate.
 * A height provider used to set the new Y coordinate.