Generating Custom Structures
The structure template feature is one of the most basic features, placing exported .mcstructure files into the world.
This tutorial will show you how to make:
- Surface structures
- Underground structures
- Floating structures
- Underwater structures
- Water surface structures
WARNING
As of 1.21.130 Android devices cannot export structure files.
TIP
For more complex structures which are compatible with the locate structure command, use jigsaw structures.
Make sure you put your .mcstructure files inside of the BP/structures folder! The first subfolder is used as the namespace for structure, meaning the structure name of BP/structures/wiki/house.mcstructure would be wiki:house.
Surface Structure
Feature File
BP/features/house_feature.json
json
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:house_feature"
},
"structure_name": "wiki:house",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"grounded": {},
"unburied": {},
"block_intersection": {
"block_allowlist": [
"minecraft:air" // The structure can only replace air
]
}
}
}
}Feature Rule
BP/feature_rules/plains_house_feature.json
json
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:plains_house_feature",
"places_feature": "wiki:house_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "plains"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": "q.heightmap(v.worldx, v.worldz)", // Generates the feature on the highest block on the column
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 25
}
}
}
}
Underground Structure
Feature File
BP/features/bunker_feature.json
json
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:bunker_feature"
},
"structure_name": "wiki:bunker",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"block_intersection": {
"block_allowlist": [
"minecraft:air", // Makes the feature only replace air and stone
"minecraft:stone"
]
}
}
}
}Feature Rule
BP/feature_rules/overworld_bunker_feature.json
json
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:overworld_bunker_feature",
"places_feature": "wiki:bunker_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "overworld"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": {
"extent": [
11,
50 // Makes the structure generate between y11 and y50
],
"distribution": "uniform"
},
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 15
}
}
}
}
Floating Feature
Feature File
BP/features/balloon_feature.json
json
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:balloon_feature"
},
"structure_name": "wiki:balloon",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"block_intersection": {
"block_allowlist": [
"minecraft:air" // Makes the structure only replace air
]
}
}
}
}Feature Rule
BP/feature_rules/overworld_balloon_feature.json
json
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:overworld_baloon_feature",
"places_feature": "wiki:balloon_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "overworld"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": {
"extent": [
100, // Makes the structure generate from y100 to y200
200
],
"distribution": "uniform"
},
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 25
}
}
}
}
Underwater Structure
TIP
For underwater structures, make sure you waterlogged the structure, because Minecraft won't waterlog them automatically!
Feature File
BP/features/aqua_temple_feature.json
json
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:aqua_temple_feature"
},
"structure_name": "wiki:aqua_temple",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"block_intersection": {
"block_allowlist": [
"minecraft:water" // Makes the structure only replace water
]
}
}
}
}Feature Rule
BP/feature_rules/ocean_aqua_temple_feature.json
json
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:ocean_aqua_temple_feature",
"places_feature": "wiki:aqua_temple_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "ocean"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": "q.above_top_solid(v.worldx, v.worldz)", // Places the feature on top of the highest solid block on the column, so it won't place it on the surface of the water
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 25
}
}
}
}
Water Surface Structure
Feature File
BP/features/raft_feature.json
json
{
"format_version": "1.13.0",
"minecraft:structure_template_feature": {
"description": {
"identifier": "wiki:raft_feature"
},
"structure_name": "wiki:raft",
"adjustment_radius": 4,
"facing_direction": "random",
"constraints": {
"block_intersection": {
"block_allowlist": [
"minecraft:water", // Makes the structure only replace air and water
"minecraft:air"
]
}
}
}
}Feature Rule
BP/feature_rules/ocean_raft_feature.json
json
{
"format_version": "1.13.0",
"minecraft:feature_rules": {
"description": {
"identifier": "wiki:ocean_raft_feature",
"places_feature": "wiki:raft_feature"
},
"conditions": {
"placement_pass": "first_pass",
"minecraft:biome_filter": {
"test": "has_biome_tag",
"operator": "==",
"value": "ocean"
}
},
"distribution": {
"iterations": 1,
"x": {
"extent": [0, 16],
"distribution": "uniform"
},
"y": 62, // Makes the feature generate only on y62, which is Minecraft water level
"z": {
"extent": [0, 16],
"distribution": "uniform"
},
"scatter_chance": {
"numerator": 1,
"denominator": 25
}
}
}
}


