Wiki 9Minecraft Wiki 9Minecraft

Block Tinting in Minecraft Bedrock

How to apply biome-based dynamic color tinting to custom block textures.

5Sections
2Code examples
3Known errors

Block tinting allows a custom block to dynamically change its color depending on the biome it is placed in, matching the behavior of vanilla grass, foliage, or water. You reach for this feature when building natural environment blocks like custom turf, bushes, vines, or mossy stones that need to blend seamlessly into the world's ecosystems. In Bedrock Edition, tinting is controlled through a combination of greyscale textures and specific properties inside the block's material instances.

How Bedrock Tinting Works

When Minecraft tints a block, it takes a base greyscale texture and multiplies its pixel values against a color sampled from a colormap (such as the grass or foliage colormap in the resource pack). Because the math is multiplicative, pure white pixels in your texture become the exact biome color, mid-grey pixels become a darker shade of that color, and pure black pixels remain black.

If you draw your texture in full green and then enable tinting, the engine will multiply your green pixels by the biome's green values, resulting in an overly dark, muddy texture. Always author the parts of your texture that will be tinted in greyscale. For blocks that only have partial tinting—like the side of a grass block where the dirt remains brown—you must use custom geometry or careful alpha masking, as a single material instance applies its tint method to the entire texture assigned to it.

Configuring Material Instances

For custom blocks using the modern `minecraft:geometry` and `minecraft:material_instances` components in the behavior pack, tinting is defined directly inside the material instance dictionary. Each face or named material instance can be given a `tint_method` string property.

This approach is far more flexible than the legacy `blocks.json` system because you can tint the `up` face of a block using the grass colormap while leaving the `north`, `south`, `east`, `west`, and `down` faces completely untinted. You can also combine `tint_method` with block permutations to turn tinting on or off dynamically based on block states.

BP/blocks/custom_turf.json
{
  "format_version": "1.20.80",
  "minecraft:block": {
    "description": {
      "identifier": "wiki:custom_turf"
    },
    "components": {
      "minecraft:geometry": "minecraft:geometry.full_block",
      "minecraft:material_instances": {
        "up": {
          "texture": "custom_turf_top",
          "render_method": "opaque",
          "tint_method": "grass"
        },
        "*": {
          "texture": "custom_turf_side",
          "render_method": "opaque",
          "tint_method": "none"
        }
      }
    }
  }
}

Available Tint Methods

The `tint_method` field inside `minecraft:material_instances` accepts a specific set of strings that correspond to different biome foliage and water calculations. Choosing different foliage methods changes how the block reacts to temperature and downfall values across biomes, or locks it to a specific vanilla tree type.

When a block with a `tint_method` is held in the inventory or dropped as an item, it does not have a world position to sample a biome from. In these cases, the engine applies a default fallback tint associated with that specific tint method.

Tint Method ValueWhat it doesNotes
noneDisables all biome tinting on this material instance.This is the default if the field is omitted.
grassSamples the biome's grass color and the grass colormap.Matches vanilla grass blocks and short grass.
default_foliageSamples the standard biome foliage color.Matches oak, jungle, and acacia leaves.
birch_foliageApplies the fixed birch leaf tint.Does not change colour across most biomes.
evergreen_foliageApplies the fixed spruce leaf tint.Gives a cooler, dark green shade.
dry_foliageSamples the warmer, dry foliage palette.Useful for savannah or dead bush style blocks.
waterSamples the biome's surface water color.Works best with a translucent or blend render_method.

Tinting Multi-Part Custom Models

A common challenge is recreating the side of a vanilla grass block, where the dirt stays brown and only the grassy overlay changes color. Because `tint_method` applies to the entire material instance, you cannot taint half of a single flat PNG without advanced shader workarounds.

The cleanest solution in modern Bedrock is to build a custom block model in Blockbench with two overlapping cubes or planes. Give the inner cube a material name like `base_dirt` and the outer overlay elements a material name like `grass_overlay`. Ensure the overlay texture uses transparent pixels where the dirt should show through.

In your behavior pack block file, you then map `base_dirt` with `tint_method` set to `none` and `render_method` set to `opaque`. For `grass_overlay`, set `tint_method` to `grass` and `render_method` to `alpha_test`. Note that if the two faces occupy the exact same 3D coordinates, they may z-fight and flicker; inflating or offsetting the overlay geometry by a tiny fraction (such as 0.01 units) prevents this visual glitch.

BP/blocks/overgrown_stone.json
{
  "format_version": "1.20.80",
  "minecraft:block": {
    "description": {
      "identifier": "wiki:overgrown_stone"
    },
    "components": {
      "minecraft:geometry": "geometry.overgrown_stone",
      "minecraft:material_instances": {
        "stone_base": {
          "texture": "stone_base_tex",
          "render_method": "opaque",
          "tint_method": "none"
        },
        "moss_overlay": {
          "texture": "moss_overlay_greyscale",
          "render_method": "alpha_test",
          "tint_method": "grass"
        }
      }
    }
  }
}

Legacy Resource Pack Tinting

Before `tint_method` was introduced to behavior pack material instances, tinting was configured inside `RP/blocks.json` using the `carried_textures` property alongside shader-level alpha masks. While you may still see `blocks.json` used in older packs or for overriding vanilla blocks, you should avoid mixing `blocks.json` definitions with modern `minecraft:material_instances`.

When a custom block defines `minecraft:material_instances` in the behavior pack, the game bypasses many of the settings in `RP/blocks.json`, and texture shortnames are resolved directly from `RP/textures/terrain_texture.json`. Stick to `tint_method` inside the behavior pack for all new custom blocks.

Which versions this applies to

The `tint_method` property inside `minecraft:material_instances` is stable in format versions 1.20.60 and higher, and does not require any experimental toggles.

When it does not work

What you seeWhyThe fix
The block texture in-game looks extremely dark, muddy, or nearly black instead of vibrant green.Your source PNG texture is already colored green instead of greyscale. The game multiplies your dark green pixels by the biome's green color values, darkening the result.Desaturate your PNG texture in an image editor so that it is bright greyscale (white and light greys), then reload the resource pack.
Content Log Error: [Blocks][error]-wiki:custom_turf | minecraft:material_instances - Invalid tint_method valueYou used an unrecognized string for `tint_method`, such as `"foliage"` or `"biome"` instead of the exact enumerated strings the schema expects.Change the value in your JSON to one of the valid strings: `"none"`, `"grass"`, `"default_foliage"`, `"birch_foliage"`, `"evergreen_foliage"`, `"dry_foliage"`, or `"water"`.
The tinted overlay texture on a custom geometry block has black or white solid backgrounds covering the base block beneath it.The material instance for the overlay is using `"render_method": "opaque"`, which ignores the alpha channel of your PNG.Change the overlay material instance's `render_method` to `"alpha_test"` for hard pixel edges, or `"blend"` for semi-transparent pixels.

Reference, straight from the game files

Read out of the game itself, so the ids match the version you are building for.