1. Wiki
  2. /World Generation
  3. /The biome file

The biome file

Make a custom Minecraft Bedrock biome: the behavior pack biome.json, its components and tags, and the client_biome file that sets its colors and fog.

A biome is an area of the world with its own ground, weather, colors and mobs. Plains, deserts and cherry groves are all biomes. In this guide you will make a Ruby Grove: a warm meadow with reddish grass that replaces small parts of the plains.

A biome, like a block, lives in two packs:

  • The behavior pack file says how the land is built: its climate, which blocks cover the ground, and where it appears.
  • The resource pack file (the "client biome") says how it looks and sounds: grass color, water color, fog, music.

The files

Your add-on
BP/
  biomes/
    ruby_grove.biome.json
RP/
  biomes/
    ruby_grove.client_biome.json

Both files use the same identifier, wiki:ruby_grove. That is how the game knows they belong together.

Step 1: the behavior pack biome

BP/biomes/ruby_grove.biome.json
{
  "format_version": "1.26.30",
  "minecraft:biome": {
    "description": {
      "identifier": "wiki:ruby_grove"
    },
    "components": {
      "minecraft:climate": {
        "temperature": 0.9,
        "downfall": 0.4,
        "snow_accumulation": [0.0, 0.125]
      },
      "minecraft:overworld_height": {
        "noise_type": "lowlands"
      },
      "minecraft:surface_builder": {
        "builder": {
          "type": "minecraft:overworld",
          "top_material": "minecraft:grass_block",
          "mid_material": "minecraft:dirt",
          "foundation_material": "minecraft:stone",
          "sea_floor_material": "minecraft:gravel",
          "sea_material": "minecraft:water",
          "sea_floor_depth": 7
        }
      },
      "minecraft:replace_biomes": {
        "replacements": [
          {
            "dimension": "minecraft:overworld",
            "targets": ["plains"],
            "amount": 0.25,
            "noise_frequency_scale": 0.5
          }
        ]
      },
      "minecraft:map_tints": {
        "grass": { "type": "tint", "tint": "#c4504f" },
        "foliage": "#b8433f"
      },
      "minecraft:tags": {
        "tags": ["overworld", "animal", "monster", "plains", "ruby_grove"]
      }
    }
  }
}

The file has two parts:

  • description holds the identifier. Use lowercase letters and your own namespace. This is also the name /locate biome uses.
  • components holds everything else. Each component switches on one thing the biome does.

Put one biome in each file, and name the file after the biome (ruby_grove.biome.json for wiki:ruby_grove).

The main components

Here are the components you will use most. Every one of them has its own page in Biome components.

ComponentWhat it does
minecraft:climateTemperature and rain. Cold biomes get snow and ice, downfall of 0 means no rain at all.
minecraft:surface_builderWhich blocks make the ground: the top layer, the dirt under it, the stone deep down and the sea floor.
minecraft:overworld_heightHow tall and bumpy the land is. Pick a preset such as lowlands, highlands or mountains.
minecraft:replace_biomesPuts your biome in the world by taking over patches of existing biomes.
minecraft:map_tintsGrass and leaf colors on the in-game map.
minecraft:creature_spawn_probabilityHow often animals appear when a chunk is first made (0 to 0.75).
minecraft:village_typeWhich village style can generate here: default, desert, ice, savanna or taiga.
minecraft:tagsLabels other files can check. See below.

How your biome gets into the world

A new biome file on its own does nothing. The game only places a biome that tells it where to go, so a custom biome needs minecraft:replace_biomes:

  • targets lists the biomes you take over. Write them without a namespace (plains, not minecraft:plains).
  • dimension is minecraft:overworld or minecraft:nether.
  • amount is roughly how much of the target you replace, from just above 0 up to 1.
  • noise_frequency_scale sets the patch size. Lower values give fewer, bigger patches. Higher values give many small ones.

Add new replacements at the end

Once players have worlds with your biome, only add new entries to the end of the replacements list. Putting one in front changes how all new chunks generate.

Tags

Tags are plain words attached to the biome. They do two jobs:

  1. Other files check them. Spawn rules and feature rules use tests like has_biome_tag to decide where mobs spawn and where trees or ores go. Give your biome tags like overworld, animal and monster and lots of vanilla content will treat it like a normal overworld biome.
  2. Some tags have built-in meaning. For example cold or frozen dress villagers for snow, plains, forest, meadow and swamp choose which flowers grow, and desert and mesa make sand play ambient sounds.

Add your own tag too (here ruby_grove). Then your own features and mobs can target just this biome.

Tags may use letters, numbers, . and _.

Step 2: the client biome

The resource pack side has the same shape, but its root is minecraft:client_biome:

RP/biomes/ruby_grove.client_biome.json
{
  "format_version": "1.21.120",
  "minecraft:client_biome": {
    "description": {
      "identifier": "wiki:ruby_grove"
    },
    "components": {
      "minecraft:grass_appearance": {
        "color": "#c4504f"
      },
      "minecraft:foliage_appearance": {
        "color": "#b8433f"
      },
      "minecraft:water_appearance": {
        "surface_color": "#7a3fd1"
      },
      "minecraft:sky_color": {
        "sky_color": "#ff9a8c"
      },
      "minecraft:fog_appearance": {
        "fog_identifier": "wiki:ruby_fog"
      },
      "minecraft:biome_music": {
        "music_definition": "cherry_grove"
      }
    }
  }
}
ComponentWhat it does
minecraft:grass_appearanceGrass color.
minecraft:foliage_appearanceLeaf and vine color.
minecraft:water_appearanceWater surface color and see-through amount.
minecraft:sky_colorSky color.
minecraft:fog_appearanceWhich fog file to use.
minecraft:biome_musicWhich music plays.
minecraft:ambient_soundsBackground loops and random extra sounds.

Vibrant Visuals adds four more that point at files of their own: atmospherics, lighting, color grading and water. The full list is in Client biome components.

Every component is optional. Anything you leave out uses the default.

biomes_client.json is the old way

Old packs put all biome colors in one big RP/biomes_client.json. Newer content uses one .client_biome.json file per biome. The game still reads the old file for other packs, but new add-ons should use the per-biome files.

Testing

  1. Turn both packs on in a new world. Biomes only appear in chunks that have not been made yet.
  2. Run /locate biome wiki:ruby_grove to find it.
  3. Fly there and check the grass color. If it is the normal green, the client biome identifier does not match.

Can't find it?

Raise amount and lower noise_frequency_scale while testing so the biome is big and common. Turn them back down when you are happy. Check the Content Log too: a typo in a block name stops the whole biome from loading.

Next steps

We use cookies to improve your experience and analyse site traffic. Learn more