Bedrock Wiki
  • Discord
  • Contribute
  • bedrock.dev
  • MS Learn
Beginner's Guide
  • Guide
    • 1. Introduction
      guide
    • 2. Add-Ons Explained
    • 3. Software & Preparation
    • 4. Project Setup
    • 5. Create a Custom Item
    • 6. Create a Custom Entity
    • 7. Blockbench: Modeling, Texturing & Animating
    • 8. Adding Loot Tables, Spawn Rules & Crafting Recipes
  • Extra
    • a. Understanding JSON
    • b. Download Example Packs
    • c. Troubleshooting
      help
    • d. Advanced Manifest
    • e. Format Versions
    • f. Project Setup Android
Animation Controllers
  • Intro to Animation Controllers
    guide
  • Entity Commands
  • AFK Detector
  • Death Commands
  • Molang into Scoreboard
  • Respawn Commands
Blocks
  • General
    • Intro to Blocks
      guide
    • Block Components
    • Block Tags
    • Block States
    • Block Traits
    • Block Permutations
    • Block Events
      Scripts
    • Block Event Migration
      help
    • Blocks as Items
    • Multi-Blocks
    • Troubleshooting Blocks
      help
  • Sound & Visuals
    • Intro to Block Visuals
      guide
    • Block Culling
    • Block Models
      guide
    • Block Sounds
    • Block Texture Animation
    • Block Texture Variation
    • Block Tinting
    • N-Way Rotation
      guide
  • Tutorials
    • Applying Effects
      Scripts
    • Avoiding State Limit
    • Block Orientation
    • Fake Blocks
      Scripts
    • Ore Loot Tables
      Scripts
    • Tool-Based Destruction
  • Vanilla Re-Creations
    • Custom Crops
      Scripts
    • Custom Fences
    • Custom Glass
    • Custom Glazed Terracotta
    • Custom Heads
    • Custom Trapdoors
      Scripts
  • Documentation
    • Block Co-Location
    • Block Format History
    • Block Shapes
    • Redstone Components
    • Vanilla Block Models
    • Vanilla Block Sounds
    • Vanilla Block Tags
    • Vanilla Voxel Shapes
Commands
  • General
    • Intro to Command Blocks
    • Understanding Selectors
    • Functions
      guide
    • Block States
    • Coordinate System
    • Giving NBT Items
    • Scoreboard Operations
  • Commands
    • Damage
    • Execute
    • Playanimation
    • Playsound
  • On Event Systems
    • On First World Load
      function
    • On Player First Join
    • On Player Join
    • On Player Leave
    • On Player Death
    • On Player Respawn
  • Scoreboard Systems
    • Entity Counter
    • Scoreboard Timers
    • Comparing And Retrieving Scores
  • Detection Systems
    • Look Detection
    • Item Drop Detection
    • Movement Detections
    • Rain Detection
  • Techniques
    • Execute Logic Gates
      concept
    • Execute at Block Variant
    • Execution Forking
      concept
    • Binary in Commands
      concept
    • MBE - Max's Block Entity
    • FMBE - A New Way to Create Display Entities
    • Dynamic Displays
    • Orbital Camera
  • Useful Creations
    • Sphere Command
    • Compass Display
    • Custom Crafting
    • Multiplayer Position Rearrangement
      function
Concepts
  • contents.json
  • Molang
  • Namespaces
  • Overwriting Assets
  • Shaders
  • Sounds
  • Sounds (Server)
  • Subpacks
  • Texture Atlases
  • textures_list.json
Documentation
  • Advanced Molang
  • Aim Assist
  • File Types
  • Fog IDs
  • Material Configuration Description
  • Molang Queries
  • Pack Folder Structure
  • Shared Constructs
  • Sound Definitions
  • Vanilla Materials
Entities
  • General
    • Intro to Entities BP
      guide
    • Intro to Entities RP
      guide
    • Troubleshooting Entities
      help
    • Entity Events
    • Entity Properties
    • NPC Dialogue
    • Render Controllers
    • Spawn Rules
  • Tutorials
    • Area Effect Clouds
    • Coordinate Space Conversion
    • Creating Boats
    • Detecting Other Entities
    • Disabling Team Damage
    • Dummy Entities
    • Entity Attacks
    • Entity Movement
    • Entity Timers
    • Holding Items
    • Invulnerable Entities
    • Look at Entity
    • Riding Flying Entities
    • Sleeping Entities
    • Solid Entities
    • Spawning Tamed Entities
      Scripts
    • Village Mechanic
  • Documentation
    • Dummy Components
    • Non-Mob Runtime Identifiers
    • Projectiles
    • Runtime Identifiers
    • Vanilla Usage Components
    • Vanilla Usage Spawn Rules
Items
  • General
    • Intro to Items
      guide
    • Item Components
    • Item Tags
    • Item Events
      Scripts
    • Item Event Migration
      help
    • Item Catalog
    • Troubleshooting Items
      help
  • Tutorials
    • Equipment-Based Commands
    • Spawning Items
    • Throwable Items
  • Vanilla Re-Creations
    • Custom Armor
    • Custom Food
      Scripts
    • Custom Pottery Sherds
    • Custom Weapons
  • Documentation
    • Enchantments
    • Attachables
    • Item Format History
    • Numerical Item IDs
    • Vanilla Item Groups
    • Vanilla Item Tags
    • Vanilla Usage Components
JSON UI
  • General
    • Intro to JSON UI
      guide
    • Best Practices
      guide
  • Tutorials
    • Adding HUD Elements
    • Aseprite Animations
    • Buttons and Toggles
    • Dynamic Content Generation
    • Modifying Server Forms
    • Preserve Title Texts
    • Type Conversion
  • Documentation
    • JSON UI Documentation
Loot, Recipes & Trading
  • General
    • Trading Behavior
  • Documentation
    • Loot Tables
    • Trade Tables
    • Recipes
    • Item Functions
  • Tutorials
    • Randomized Structure Loot
Meta
  • Add-On Performance
  • Style Guide
  • Useful Links
  • Using Schemas
  • Version Control
  • Q&A
    • Blocks and Items Q&A 2024/08/30
    • Deferred Technical Preview Q&A 2024/02/23
    • GameTest Q&A 2021/08/06
    • Scripting and Editor Q&A 2023/09/22
    • World Generation Q&A 2024/11/15
NBT
  • General
    • .mcstructure
  • Tutorials
    • Enabling Experiments by Editing NBT
    • Extending Structure Limits
  • NBT in Depth
    • About NBT (Named Binary Tag)
    • NBT Libraries
    • Reading NBT Example
Particles
  • General
    • Intro to Particles
      guide
  • Tutorials
    • Disabling Particles
  • Documentation
    • Vanilla Particles
Scripting
  • General
    • Intro to Scripting
    • What is Script API?
    • API Modules
  • Tutorials
    • Script Core Features
    • Block Placement Prevention
    • Custom Commands
    • GameTests
    • Script Privileges
    • Script Requests API
    • Server Forms
  • Documentation
    • Engine Environment
    • Script Resources
    • Script Watchdog
    • Troubleshooting JavaScript
    • TypeScript
Servers
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet Protocol
    • RakNet Protocol
Text & Localization
  • General
    • Intro to Text & Localization
    • Raw Text
    • Splashes
  • Emojis & Symbols
    • Fonts
    • Intro to Emojis
    • Custom Emojis
    • Input Keys
Visuals
  • General
    • Introduction to Entity Visuals
      guide
    • Bedrock Modeling
    • Custom Death Animations
    • Effects in Animations
    • Material Creations
    • Materials
    • Math-Based Animations
    • Skin Packs
  • Tutorials
    • Entity Texture Animation
    • Glowing Entity Texture
    • Hurt Animations
    • Leash Position
    • Player Geometry
    • Remove Entity Shadows
    • Retexturing Spawn Eggs
  • Ideas
    • Structure Presentation
World Generation
  • General
    • Intro to World Generation
      guide
    • Biomes
    • Client Biomes
    • Dimensions
    • Feature Types
    • Jigsaw Structures
  • Tutorials
    • Block Conditions for Features
    • Generating Custom Jigsaw Structures
    • Generating Custom Ores
    • Generating Custom Structures
    • Generating Patches
    • Heightmap Noise
  • Documentation
    • Biome Tags

Intro to World Generation

guide
Intro to World Generation
  • Custom Biomes
  • Custom Dimensions
  • Features and Feature Rules
  • Features
  • Feature Rules
  • Custom Structures
    • Structure Template Features
    • Jigsaw Structures
  • Your Progress So Far

WARNING

This page is somewhat out-dated, and contains limited information. For the most up-to-date and comprehensive information, view the other pages in this section.

You can change the world's generation via Add-ons. The behavior pack folders involved are:

biomes, dimensions, features, feature_rules, structures and worldgen. Biome files go in biomes, custom dimension files in dimensions, terrain features such as ores in features and the rules for placing them in feature_rules, .mcstructure files from structure blocks in structures, and jigsaw structure files in worldgen and its subfolders. Biome visuals such as fog and colours live separately in the resource pack's biomes folder as client biomes.

Note: the vanilla behavior and resource packs are the best reference for every file type on this page. They are published in the bedrock-samples repository, and editors such as bridge. can generate them for you.


Custom Biomes ​

A biome decides which blocks make up the surface, its climate, and which tags it carries. Custom biomes generate by replacing a share of an existing vanilla biome's area.

📝 BP/biomes/cold_biome.biome.json
json
{
    "format_version": "1.26.50",
    "minecraft:biome": {
        "description": {
            "identifier": "wiki:cold_biome"
        },
        "components": {
            "minecraft:climate": {
                "downfall": 0.7,
                "snow_accumulation": [0.125, 0.5],
                "temperature": -0.3
            },
            "minecraft:surface_builder": {
                "builder": {
                    "type": "minecraft:overworld",
                    "sea_floor_depth": 7,
                    "sea_floor_material": "minecraft:blue_ice",
                    "foundation_material": "minecraft:cobblestone",
                    "mid_material": "minecraft:packed_ice",
                    "top_material": "minecraft:snow",
                    "sea_material": "minecraft:water"
                }
            },
            "minecraft:replace_biomes": {
                "replacements": [
                    {
                        "dimension": "minecraft:overworld",
                        "targets": ["plains"],
                        "amount": 0.5,
                        "noise_frequency_scale": 50
                    }
                ]
            },
            "minecraft:tags": {
                "tags": ["overworld", "monster", "wiki:cold_biome"]
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  • format_version is 1.26.50, the version the current vanilla biome files use.
  • description takes only one value: identifier, which must be namespaced.
  • minecraft:climate controls the weather. temperature decides whether rain falls as snow and whether water freezes, downfall is how much it rains, and snow_accumulation is how many snow layers can pile up in steps of 0.125.
  • minecraft:surface_builder chooses the blocks the terrain is made of. top_material is the topmost block, mid_material sits between the top and the foundation_material that fills the rest, and the sea_* fields cover anything below sea level.
  • minecraft:replace_biomes is what makes the biome generate. Each rule takes a share (amount) of the listed vanilla targets in a dimension and hands it to your biome. Without this component the biome never appears on its own.
  • minecraft:tags are how everything else finds your biome. You can test for a tag in spawn rules, feature rules, loot tables, entity filters and Molang queries.

Custom biomes cannot change the shape of the terrain, only what it is made of and what lives in it. The full list of components, all surface builder types and the rules for Nether replacement are on the Biomes page. Fog, sky and water colours, music and ambient sounds are set in a matching client biome in the resource pack.

Your custom biome is now complete!


Custom Dimensions ​

A dimension file defines a new space outside the Overworld, Nether and End. Custom dimensions currently only support void generation, so they are empty until you fill them, and players are moved in and out with the Script API.

📝 BP/dimensions/void_arena.json
json
{
    "format_version": "1.26.50",
    "minecraft:dimension": {
        "description": {
            "identifier": "wiki:void_arena"
        },
        "components": {
            "minecraft:generation": {
                "generator_type": "void"
            },
            "minecraft:dimension_height": {
                "min_y": -64,
                "height_range": 384
            },
            "minecraft:default_biome": {
                "biome": "wiki:cold_biome"
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  • minecraft:generation is required and void is the only generator type.
  • minecraft:dimension_height sets the bottom of the dimension and how tall it is, within the world limits of -512 to 512.
  • minecraft:default_biome fills the dimension with one biome, which can be a custom biome such as the one above.

See the Dimensions page for the full format and a script example that builds a platform and teleports players in.


Features and Feature Rules ​

Features and Feature Rules are used to generate everything from ores to grass and flowers, vegetation to granite or clay patches. It is even possible to create custom structures using those, but as it is very grindy and will be much easier after the mentioned update, we won't talk about it just yet.

Now, it's worthwhile to mention that the easiest way to generate Custom Structures is this auto generator by MACHINE_BUILDER, you should note that this tool has a free version with limited functionality and to enjoy the full functionality use the payware version. However, we'll still learn some other manual feature generation here, because some things like Ores are much more efficient to generate as ore_features and not structure_template_features.

Let's make our wiki:blocky custom block generate as an ore for the tutorial's sake. I'll do it the easy way, like this:

  1. Open bridge., choose your Add-on.
  2. Add new file>features>diamond_ore and Add new file>feature_rules>diamond_ore.
  3. Now I'll save the files and open them in my Code Editor and make the necessary modifications.

You can also write the files from scratch or copy them from the vanilla behavior pack in the bedrock-samples repository, which is the complete and current reference.

Features ​

Features are located in BP/features and are basically a group of blocks stored in the game's files, which can be placed with a feature_rule. The file name of a feature must match the identifier as well.

You can find their Documentation on bedrock.dev/r/Features

📝 BP/features/blocky_ore_feature.json
json
{
    "format_version": "1.13.0",
    "minecraft:ore_feature": {
        "description": {
            "identifier": "blocky_ore_feature"
        },
        "count": 8,
        "places_block": "wiki:blocky",
        "may_replace": [
            {
                "name": "minecraft:stone",
                "states": {
                    "stone_type": "andesite"
                }
            },
            {
                "name": "minecraft:stone",
                "states": {
                    "stone_type": "andesite_smooth"
                }
            },
            {
                "name": "minecraft:stone",
                "states": {
                    "stone_type": "diorite"
                }
            },
            {
                "name": "minecraft:stone",
                "states": {
                    "stone_type": "diorite_smooth"
                }
            },
            {
                "name": "minecraft:stone",
                "states": {
                    "stone_type": "granite"
                }
            },
            {
                "name": "minecraft:stone",
                "states": {
                    "stone_type": "granite_smooth"
                }
            },
            {
                "name": "minecraft:stone",
                "states": {
                    "stone_type": "stone"
                }
            }
        ]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
  • minecraft_ore_feature is type of the specific feature that places ores automatically. Each feature type has it's own specific syntax. (There's also single_block_feature that places a single block instead of an ore group, etc)
  • identifier doesn't require a namespace in this scenario. The namespace is optional, and is not to be added in the filename.
  • count is how big the ore "cluster" will be at maximum, or how many actual ore blocks will generate together.
  • places_block takes the identifier of the block to be placed as the value.
  • may_replace takes all the blocks that the feature can replace as arguments. If it generates over one of the blocks not included in here, the block will remain where it was without being replaced.

Feature Rules ​

Feature Rules control where and how features (and, in the future, structures) are placed.

📝 BP/feature_rules/overworld_underground_blocky_ore_feature.json
json
{
    "format_version": "1.13.0",
    "minecraft:feature_rules": {
        "description": {
            "identifier": "overworld_underground_blocky_ore_feature",
            "places_feature": "blocky_ore_feature"
        },
        "conditions": {
            "placement_pass": "underground_pass",
            "minecraft:biome_filter": [
                {
                    "any_of": [
                        {
                            "test": "has_biome_tag",
                            "operator": "==",
                            "value": "overworld"
                        },
                        {
                            "test": "has_biome_tag",
                            "operator": "==",
                            "value": "overworld_generation"
                        }
                    ]
                }
            ]
        },
        "distribution": {
            "iterations": 100,
            "coordinate_eval_order": "zyx",
            "x": {
                "distribution": "uniform",
                "extent": [0, 16]
            },
            "y": {
                "distribution": "uniform",
                "extent": [0, 16]
            },
            "z": {
                "distribution": "uniform",
                "extent": [0, 16]
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
  • description
    • identifier needs no namespace, but the filename needs to match.
    • places_feature takes the identifier of the feature that is controlled by this rule as the value.
  • conditions
    • placement_pass HOW the feature will be passed.
    • biome_filter tests for biome tags where the feature will generate, exactly as a spawn rule.
  • distribution
    • iterations basically chance. I set mine to 100 to make it generate everywhere, but for a diamond_ore, this is set to 1.
    • The next four components show in which directions the ore will be 'dragged' towards. Needs more clarification

The easiest way to test wether your ores generated is /fill ~15 ~5 ~15 ~-15 ~-15 ~-15 air 0 replace stone using this command at a low y level. it'll keep everything BUT stone in the selected area, like this:

And yes, 100 as "iterations" is definitely waaay too much 😉

It's a good idea to proceed checking out other feature and feature_rule vanilla files to learn further techniques. However, the ones you were just walked through are enough to create most of what needs to be generated.


Custom Structures ​

Structure Template Features ​

As of MCBE v1.16.20, Custom Generated structures are possible A simple way to generate Structures is this auto generator by MACHINE_BUILDER, mentioned earlier. It generates all three of the required files for your structure: feature_rules/mystructure.feature_rule.json, feature_rules/mystructure.feature.json and structures/mystructure.mcstructure. You can learn more about defining .mcstructures with Structure Blocks in Minecraft itself here.


Now that you have your .mcstructure, time to write your feature and feature rule. The last is the same as with ores (see the beginning of this article). Let's continue to the Feature.

  • Remember that the namespace is not required and that the filename must match the identifier, excluding the namespace. So if you have a feature rule with the identifier wiki:myfeaturerule or simply myfeaturerule, the file name can be be myfeaturerule.json in both cases.

Here's an code example from the Features Documentation:

json
{
    "format_version": "1.13.0",
    "minecraft:structure_template_feature": {
        "description": {
            "identifier": "wiki:hot_air_balloon_feature"
        },
        "structure_name": "wiki:hot_air_balloon",
        "adjustment_radius": 8,
        "facing_direction": "random",
        "constraints": {
            "unburied": {},
            "block_intersection": {
                "block_whitelist": ["minecraft:air"]
            }
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  • structure_name is the structure's identifier, the one you saved via a Structure Block.

Jigsaw Structures ​

Jigsaw structures can be very small or very large, up to 256 blocks across!

Jigsaws allow for large randomize structures like villages or trail ruins which can generate across the world and be located by /locate unlike structure features. They are very powerful and more information about them can be found here.

That's pretty much it! Now you're able to generate your own custom Structures in the world.

Your Progress So Far ​

What you've done:

  • Created your very first biome.
  • Defined a custom dimension.
  • Made your very first ore generate naturally.
  • Learned where to find the vanilla files for reference.
  • Learned about other Custom Generation methods.
  • Created custom structures.

Contributors

Edit Intro to World Generation on GitHub

Bedrock Wiki by Bedrock OSS

"Minecraft" is a trademark of Mojang AB.

Bedrock OSS, Bedrock Wiki and bedrock.dev are not affiliated in any way with Microsoft or Mojang AB.

  • Privacy Policy
  • Join our Discord
  • Learn how to Contribute
  • Visit our Repository