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

Biomes

Biomes
  • Folder Structure
  • Format
    • Description
    • Overriding Vanilla Biomes
  • Components
    • minecraft:climate
    • minecraft:creature_spawn_probability
    • minecraft:humidity
    • minecraft:map_tints
    • minecraft:mountain_parameters
    • minecraft:partially_frozen
    • minecraft:replace_biomes
    • minecraft:surface_builder
    • minecraft:subsurface_builder
    • minecraft:surface_material_adjustments
    • minecraft:tags
    • minecraft:village_type
  • Legacy Components
  • Placing Blocks and Features
Related Pages
  • Client Biomes
  • Biome Tags
  • Dimensions

Behavior packs can define entirely new biomes or override the vanilla ones. A biome decides which blocks make up the surface, how cold and wet the area is, which mobs and features spawn there through tags, and whether villages can generate. Everything a player sees, such as fog, sky colour, grass tint, music and ambient sounds, is configured separately in the resource pack through a client biome with the same identifier.

WARNING

Custom biomes cannot change the shape of the terrain. The Overworld and Nether landscape is carved by the game first, then your biome is painted onto a share of an existing vanilla biome's area with minecraft:replace_biomes. What you control is which blocks the surface is made of, the climate, and everything that hooks into biome tags.

Folder Structure ​

Biomes are placed in the biomes folder of your behavior pack. The file name is not used by the game, so name it after the biome for clarity. Subfolders are supported.

      • crystal_caves.biome.json

Format ​

The file contains a single minecraft:biome object with a description and a components object.

📝 BP/biomes/crystal_caves.biome.json
json
{
    "format_version": "1.26.50",
    "minecraft:biome": {
        "description": {
            "identifier": "wiki:crystal_caves"
        },
        "components": {
            "minecraft:climate": {
                "temperature": 0.5,
                "downfall": 0.8
            },
            "minecraft:surface_builder": {
                "builder": {
                    "type": "minecraft:overworld",
                    "sea_floor_depth": 7,
                    "sea_floor_material": "minecraft:gravel",
                    "foundation_material": "minecraft:stone",
                    "mid_material": "minecraft:dirt",
                    "top_material": "minecraft:amethyst_block",
                    "sea_material": "minecraft:water"
                }
            },
            "minecraft:replace_biomes": {
                "replacements": [
                    {
                        "dimension": "minecraft:overworld",
                        "targets": ["plains", "forest"],
                        "amount": 0.2,
                        "noise_frequency_scale": 25
                    }
                ]
            },
            "minecraft:tags": {
                "tags": ["overworld", "monster", "animal", "wiki:crystal_caves"]
            }
        }
    }
}
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

Description ​

identifier ​

Required

The namespaced identifier of the biome, for example wiki:crystal_caves. To override a vanilla biome, use its vanilla identifier such as minecraft:plains. The identifier is also what a client biome uses to attach visuals, and what /locate biome and the Script API report.

Vanilla biome identifiers are listed on the Biome Tags page.

Overriding Vanilla Biomes ​

A biome file whose identifier matches a vanilla biome replaces that biome's definition entirely. There is no inheritance, so copy the vanilla file from the vanilla behavior pack and edit it rather than writing only the components you want to change.

Components ​

All components are optional. Components that reference blocks accept either a block identifier string or a block specifier object with name and states, for example

json
{
    "name": "minecraft:dirt",
    "states": {
        "dirt_type": "coarse"
    }
}
1
2
3
4
5
6

minecraft:climate ​

Sets the temperature and rainfall of the biome. Biomes without this component use default values.

  • temperature - Controls whether rain falls as snow, whether water freezes, and the sky and grass colours when a client biome does not override them. Vanilla values range from -0.5 (frozen) to 2.0 (desert and Nether).
  • downfall - How much rain falls. Also affects fire spread and, alongside temperature, the default grass and foliage colour.
  • snow_accumulation - A [min, max] range for how deep snow layers can pile up. Each 0.125 is one snow layer. min must not exceed max.
json
"minecraft:climate": {
    "temperature": 0.25,
    "downfall": 0.8,
    "snow_accumulation": [0.0, 0.125]
}
1
2
3
4
5

minecraft:creature_spawn_probability ​

The chance that passive creatures spawn in a chunk when it is first generated. Higher values mean more animals.

  • probability - Float between 0.0 and 0.75.
json
"minecraft:creature_spawn_probability": {
    "probability": 0.07
}
1
2
3

minecraft:humidity ​

Marks the biome as humid, which lowers the chance and rate of fire spreading.

  • is_humid - Boolean. Required.
json
"minecraft:humidity": {
    "is_humid": true
}
1
2
3

minecraft:map_tints ​

Controls how the biome is drawn on map items. Does not affect the world itself.

  • grass

    • Fixed colour
    json
    {
        "type": "tint",
        "tint": "#rrggbb"
    }
    1
    2
    3
    4
    • Default Noise Pattern
    json
    {
        "type": "noise"
    }
    1
    2
    3
  • foliage - A #rrggbb colour string or [r, g, b] array.

json
"minecraft:map_tints": {
	"grass": {
		"type": "tint",
		"tint": "#aea42a"
	},
	"foliage": "#90814d"
}
1
2
3
4
5
6
7

minecraft:mountain_parameters ​

Overworld only. Adjusts how mountainous terrain is dressed.

  • steep_material_adjustment - Replaces the surface block on steep slopes.
    • material - The block to use.
    • north_slopes, south_slopes, west_slopes, east_slopes - Booleans selecting which slope directions are affected.
  • top_slide - { "enabled": false } disables the smoothing that normally rounds off the tops of terrain. Vanilla meadow and cherry grove use this.
json
"minecraft:mountain_parameters": {
    "steep_material_adjustment": {
        "material": "minecraft:stone",
        "north_slopes": true,
        "south_slopes": true,
        "west_slopes": true,
        "east_slopes": true
    },
    "top_slide": {
        "enabled": false
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

minecraft:partially_frozen ​

Marks the biome as only partly frozen, producing patchy ice and snow like the frozen ocean. Takes no parameters.

json
"minecraft:partially_frozen": {}
1

minecraft:replace_biomes ​

Overworld
Nether

The only way to make a custom biome generate. After the game has laid out the vanilla biomes for a chunk, each replacement claims a share of one or more target biomes' area for your biome.

  • replacements - Array of replacement rules. Required, at least one entry, no duplicates.
    • dimension - "minecraft:overworld" or "minecraft:nether". Required.
    • targets - Vanilla biome names without the minecraft: namespace, for example "plains". Required, at least one.
    • amount - Fraction of the target area to take, greater than 0 and up to 1.0. Required.
    • noise_frequency_scale - How large the replaced patches are, greater than 0 and up to 100. Higher values produce smaller, more frequent patches. Required.

If two custom biomes target the same vanilla biome, the one with the lower noise result at each position wins. Adding a new rule to the front of the array shifts the noise for the rules after it and changes generation in existing worlds, so always append new rules to the end.

In the Nether, replacement only works with surface builders of type minecraft:overworld, minecraft:frozen_ocean, minecraft:capped and minecraft:the_end.

json
"minecraft:replace_biomes": {
    "replacements": [
        {
            "dimension": "minecraft:overworld",
            "targets": ["plains", "sunflower_plains"],
            "amount": 0.3,
            "noise_frequency_scale": 25
        },
        {
            "dimension": "minecraft:nether",
            "targets": ["hell"],
            "amount": 0.1,
            "noise_frequency_scale": 40
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

TIP

A biome without minecraft:replace_biomes never generates on its own. It can still be used as the minecraft:default_biome of a custom dimension.

minecraft:surface_builder ​

Decides which blocks form the surface of the terrain. The builder object is required and its type selects one of the builders below. Every builder except minecraft:the_end and minecraft:noise_gradient shares the same base fields.

Bedrock at the floor and ceiling is placed regardless of this component.

minecraft:overworld ​

The standard layered surface. All fields are required.

  • top_material - The topmost block, such as grass.
  • mid_material - The block between the surface and the foundation, such as dirt.
  • foundation_material - The block the rest of the terrain is made of, such as stone.
  • sea_material - The liquid that fills areas below sea level.
  • sea_floor_material - The block placed on the sea floor.
  • sea_floor_depth - How many blocks below sea level the sea floor material extends. Integer from 0 to 127.
json
"minecraft:surface_builder": {
    "builder": {
        "type": "minecraft:overworld",
        "sea_floor_depth": 7,
        "sea_floor_material": "minecraft:gravel",
        "foundation_material": "minecraft:stone",
        "mid_material": "minecraft:dirt",
        "top_material": "minecraft:grass_block",
        "sea_material": "minecraft:water"
    }
}
1
2
3
4
5
6
7
8
9
10
11

minecraft:frozen_ocean ​

Same fields as minecraft:overworld, and additionally generates icebergs.

minecraft:mesa ​

Same fields as minecraft:overworld plus the following, all required.

  • clay_material - The block used for the banded terracotta layers.
  • hard_clay_material - The block used for the hardened top layer.
  • bryce_pillars - Whether to generate the tall thin pillars of the eroded badlands.
  • has_forest - Whether to place a grass and coarse dirt layer on the plateau top.

minecraft:swamp ​

Same fields as minecraft:overworld plus one required field.

  • max_puddle_depth_below_sea_level - How deep the shallow puddles that dot the surface can be. Integer from 0 to 127.

minecraft:capped ​

Generates surfaces on blocks that have air above or below them, which suits cave-like and Nether terrain.

  • ceiling_materials - Array of blocks to use on ceilings, top to bottom. Required, at least one.
  • floor_materials - Array of blocks to use on floors, top to bottom. Required, at least one.
  • foundation_material - The block the rest of the terrain is made of. Required.
  • sea_material - The liquid below sea level. Required.
  • beach_material - Optional block placed where the floor meets the sea.
json
"minecraft:surface_builder": {
    "builder": {
        "type": "minecraft:capped",
        "ceiling_materials": ["minecraft:netherrack"],
        "floor_materials": ["minecraft:warped_nylium", "minecraft:netherrack"],
        "foundation_material": "minecraft:netherrack",
        "sea_material": "minecraft:lava",
        "beach_material": "minecraft:soul_sand"
    }
}
1
2
3
4
5
6
7
8
9
10

minecraft:the_end ​

Marks the biome as using End terrain generation. Takes no other fields.

json
"minecraft:surface_builder": {
    "builder": {
        "type": "minecraft:the_end"
    }
}
1
2
3
4
5

minecraft:noise_gradient ​

Requires format version 1.26.30. Samples a 3D noise and picks a block based on which range the noise value falls into. This is how the vanilla sulfur caves mix cinnabar and sulfur.

  • noise_descriptor - Required.
    • name - A namespaced name for the noise so it is seeded consistently.
    • first_octave - The largest octave to sample. More negative values give larger features.
    • amplitudes - Array of 1 to 100 floats, one per octave, controlling how much each contributes.
  • noise_block_specifiers - Array of blocks and the noise range each is used for. Required, at least one.
    • block - The block to place. Required.
    • range - { "min": float, "max": float } between -1.0 and 1.0. Where no range matches, the existing block is kept.
  • non_replaceable_blocks - Optional array of blocks the builder must never overwrite.
json
"minecraft:surface_builder": {
    "builder": {
        "type": "minecraft:noise_gradient",
        "noise_descriptor": {
            "name": "wiki:crystal_gradient",
            "first_octave": -5,
            "amplitudes": [1.0, 0.0, 1.0]
        },
        "non_replaceable_blocks": ["minecraft:bedrock"],
        "noise_block_specifiers": [
            {
                "block": "minecraft:amethyst_block",
                "range": { "min": -0.4, "max": -0.1 }
            },
            {
                "block": "minecraft:calcite",
                "range": { "min": 0.0, "max": 0.4 }
            }
        ]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

minecraft:subsurface_builder ​

Requires format version 1.26.30. Identical in shape to minecraft:surface_builder, but applied to terrain underneath the regular surface, such as cave walls. The existing builder types were designed for the surface and may give unexpected results underground; minecraft:noise_gradient is the intended builder here.

json
"minecraft:subsurface_builder": {
    "builder": {
        "type": "minecraft:noise_gradient",
        "noise_descriptor": {
            "name": "wiki:crystal_gradient",
            "first_octave": -5,
            "amplitudes": [1.0, 0.0, 1.0]
        },
        "noise_block_specifiers": [
            {
                "block": "minecraft:amethyst_block",
                "range": { "min": 0.4, "max": 1.0 }
            }
        ]
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

minecraft:surface_material_adjustments ​

Swaps out surface builder materials in parts of the biome selected by noise and height. Adjustments are applied in order, so later entries override earlier ones where they overlap.

  • adjustments - Array of adjustment rules.
    • materials - Required. Any of top_material, mid_material, foundation_material, sea_material, sea_floor_material, each a block to substitute.
    • height_range - Optional [min, max] of Molang expressions. variable.sea_level is available, so "variable.sea_level - 3" is valid.
    • noise_frequency_scale - Optional. How rapidly the selection noise changes across the terrain.
    • noise_range - Optional [min, max] of noise values for which this adjustment applies.
json
"minecraft:surface_material_adjustments": {
    "adjustments": [
        {
            "materials": {
                "top_material": {
                    "name": "minecraft:dirt",
                    "states": { "dirt_type": "coarse" }
                }
            },
            "noise_frequency_scale": 0.22,
            "noise_range": [0.3, 1.0]
        },
        {
            "materials": {
                "top_material": "minecraft:gravel",
                "mid_material": "minecraft:gravel"
            },
            "height_range": ["variable.sea_level - 3", "variable.sea_level + 2"],
            "noise_frequency_scale": 0.2,
            "noise_range": [-1.0, -0.5]
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

minecraft:tags ​

Attaches tags to the biome. Tags are how everything else in the game finds biomes: spawn rules, feature rules, structure placement, loot table conditions and the query.has_any_biome_tags Molang query all filter on them.

  • tags - Array of strings. Required.

Some tags have hard-coded meaning, for example overworld and nether allow vanilla features to generate, monster and animal enable the vanilla spawn rules. See the Biome Tags page for the tags every vanilla biome carries.

json
"minecraft:tags": {
    "tags": ["overworld", "monster", "animal", "forest", "wiki:crystal_caves"]
}
1
2
3

minecraft:village_type ​

Requires format version 1.26.0. Allows villages to generate in the biome and chooses their style. Biomes without this component never generate villages.

  • type - One of default, desert, ice, savanna or taiga. Required.
json
"minecraft:village_type": {
    "type": "taiga"
}
1
2
3

Legacy Components ​

The following components still parse and appear in every vanilla biome file, but they do not influence world generation anymore. Do not rely on them when writing a new biome.

  • minecraft:overworld_generation_rules - The pre-Caves & Cliffs Overworld placement system with generate_for_climates, hills_transformation, mutate_transformation, river_transformation and shore_transformation. Does nothing for custom biomes.
  • minecraft:multinoise_generation_rules - The pre-Caves & Cliffs Nether placement system with target_temperature, target_humidity, target_altitude, target_weirdness and weight. Does nothing for custom biomes.
  • minecraft:overworld_height - Sets a noise_type such as lowlands or mountains. No longer changes terrain height; only affects how map items shade the biome.

Placing Blocks and Features ​

A biome only decides the surface blocks. Trees, ores, plants and structures come from features and feature rules, which target biomes by tag. Give your biome a unique tag such as wiki:crystal_caves and use it in your feature rules' biome_filter so vanilla decorations do not appear alongside your own.

Contributors

Edit Biomes 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