With Minecraft Bedrock 1.21.0+, custom block authoring transitioned into a declarative component system. The legacy block pipeline has been replaced by modular components in the Behavior Pack paired with texture definitions in the Resource Pack.

1. Behavior Pack Component Declaration

Every custom block JSON requires a namespace identifier and core components defining friction, geometry, material instances, and collision bounds.

{
  "format_version": "1.21.0",
  "minecraft:block": {
    "description": {
      "identifier": "custom:industrial_workbench",
      "menu_category": {
        "category": "items",
        "group": "itemGroup.name.workbench"
      }
    },
    "components": {
      "minecraft:geometry": "geometry.industrial_workbench",
      "minecraft:material_instances": {
        "*": {
          "texture": "industrial_workbench",
          "render_method": "opaque"
        }
      },
      "minecraft:collision_box": true,
      "minecraft:selection_box": true,
      "minecraft:destructible_by_mining": {
        "seconds_to_destroy": 1.5
      }
    }
  }
}

2. Resource Pack Mappings

For the engine to display the block model and texture, register the identifier inside blocks.json and declare the texture path inside textures/terrain_texture.json:

// terrain_texture.json
{
  "resource_pack_name": "digital_tools_shed_rp",
  "texture_name": "atlas.terrain",
  "texture_data": {
    "industrial_workbench": {
      "textures": "textures/blocks/industrial_workbench"
    }
  }
}

3. Molang State Permutations

Dynamic block properties (such as activation states, rotation directions, or visual variants) are managed using permutations and minecraft:custom_components:

"permutations": [
  {
    "condition": "q.block_state('custom:powered') == 1",
    "components": {
      "minecraft:light_emission": 14,
      "minecraft:material_instances": {
        "*": {
          "texture": "industrial_workbench_active",
          "render_method": "blend"
        }
      }
    }
  }
]

Generate Bedrock Manifests & UUIDs

Use our generator to create valid manifest.json files with matching UUID v4 pairs and module headers for your Behavior and Resource packs.