Why Block Sounds Live in the Resource Pack
A common point of confusion for creators moving between entities and blocks is where sound definitions belong. Custom block components in the Behavior Pack (`BP/blocks/*.json`) handle collision, mining speed, loot, and block states, but there is no server-side component for block sounds. Audio is treated strictly as a client-side presentation detail alongside textures.
Instead of adding a component to your Behavior Pack block file, you must edit or create `RP/blocks.json` at the root of your Resource Pack. This file acts as a lookup table that links your block's namespace identifier (such as `my_addon:copper_grate`) to a terrain texture entry and a `sound` category. When a player interacts with the block in the world, the client checks `RP/blocks.json`, finds the sound group name, and looks up the corresponding audio events in `RP/sounds/sound_definitions.json` and the engine's internal sound mapping.
Basic Configuration in RP/blocks.json
Every custom block you add should have a matching key in `RP/blocks.json`. Inside that block's object, add the `sound` property set to one of the game's built-in sound group strings. You do not need to include the `minecraft:` namespace prefix on the sound value itself, though your block identifier key must keep its namespace.
Note that while the modern `minecraft:material_instances` component in the Behavior Pack allows you to define textures without needing `RP/blocks.json` for visuals, you still need an entry in `RP/blocks.json` if you want to assign a block sound group. If you already define textures in `minecraft:material_instances`, your `RP/blocks.json` entry only needs to contain the `sound` key.
{
"format_version": [
1,
1,
0
],
"my_addon:treated_planks": {
"sound": "wood"
},
"my_addon:basalt_bricks": {
"textures": "basalt_bricks",
"sound": "stone"
},
"my_addon: glowing_crystal": {
"sound": "amethyst_block"
}
}Common Vanilla Block Sound Identifiers
Each sound string in `RP/blocks.json` maps to a whole suite of interactions: walking (`step`), breaking (`dig` or `break`), placing, hitting while mining (`hit`), and falling onto the block (`fall`). Choosing `
| Sound Identifier | Material Feel | Typical Vanilla Blocks |
|---|---|---|
| stone | Hard, heavy mineral | Stone, cobblestone, ores, concrete |
| wood | Hollow, creaky timber | Planks, logs, crafting tables, chests |
| gravel | Loose, crunching aggregate | Gravel, dirt, coarse dirt, podzol |
| grass | Soft, fibrous foliage | Grass block, leaves, hay bale,sponge |
| sand | Fine, shifting grains | Sand, red sand, concrete powder |
| glass | High-pitched, brittle | Glass, glass panes, glowstone, ice |
| metal | Resonant, clinking metallic | Iron block, gold block,铁bars |
| cloth | Muted, soft fabric | Wool, carpet, beds |
| slime | Wet, squishy | Slime block |
| snow | Crisp, muffled crunch | Snow, snow layer, powder snow |
| lantern | Hollow metallic clank | Lantern, soul lantern |
| chain | Rattling metal links | Chain |
| copper | Bright, tonal metal | Copper blocks, cut copper |
| amethyst_block | Musical, chiming crystal | Block of amethyst, budding amethyst |
| deepslate | Dense, low-pitched stone | Deepslate, cobbled deepslate |
| deepslate_bricks | Polished, crisp heavy stone | Deepslate bricks, deepslate tiles |
| tuff | Hollow, ashy stone | Tuff |
| nether_bricks | Dry, ceramic clink | Nether bricks, red nether bricks |
| bone_block | Dry, hollow rattle | Bone block |
| sculk | Organic, wet crackle | Sculk, sculk sensor |
| mud | Squelching, heavy wet earth | Mud, muddy mangrove roots |
| bamboo_wood | Light, snappy hollow wood | Bamboo planks, bamboo mosaic |
| cherry_wood | Soft, slightly muted timber | Cherry planks, cherry log |
How Block Sounds Pair with Behavior Pack Components
While the sound itself is declared in `RP/blocks.json`, the way the sound plays in-game depends heavily on how your block is configured in the Behavior Pack (`BP/blocks/*.json`). For instance, the `hit` sound (played continuously while a player holds down the mine button) will only be heard if the block takes time to break via `minecraft:destructible_by_mining`. If `seconds_to_destroy` is set to `0`, the block breaks instantaneously and skips straight to the break sound.
Similarly, step and fall sounds require the player to actually collide with the block. If you set `minecraft:collision_box` to `false` (for example, on a custom flower or tall grass block), players walk through the block rather than on top of it, so the step sound will not trigger in the normal way.
{
"format_version": "1.20.80",
"minecraft:block": {
"description": {
"identifier": "my_addon:treated_planks"
},
"components": {
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 2.0
},
"minecraft:destructible_by_explosion": {
"explosion_resistance": 3.0
},
"minecraft:material_instances": {
"*": {
"texture": "treated_planks",
"render_method": "opaque"
}
}
}
}
}Limitations of RP/blocks.json Sounds
Because `RP/blocks.json` keys are flat block identifiers, you cannot switch the `sound` group dynamically using block states or permutations. A custom block has one sound group for its entire lifecycle across all of its states. If your block transforms into a drastically different material (such as wet mud drying into hard brick), and you want the step and break sounds to change accordingly, it is usually cleaner to split the states into two separate block identifiers rather than one block with a state.
If you need a one-off sound when a player right-clicks or interacts with a block (such as flipping a custom switch or opening a custom crate), `RP/blocks.json` does not cover that. For interaction sounds, attach a custom script component in your Behavior Pack and call the `world.playSound` or `Dimension.playSound` method in `@minecraft/server` when the `onPlayerInteract` event fires.
Which versions this applies to
Applies to all modern Bedrock versions (1.16.100 through 1.21+). No experimental toggles are required to assign vanilla sounds in RP/blocks.json, though specific newer sound strings (like cherry_wood or bamboo_wood) require a client version that includes those vanilla blocks (1.20+).
When it does not work
| What you see | Why | The fix |
|---|---|---|
| The block is completely silent when walked on, placed, or broken, or plays the default stone sound instead of wood/metal. | Either the block identifier in RP/blocks.json is missing its namespace (e.g. writing "treated_planks" instead of "my_addon:treated_planks"), or the sound string is misspelled (such as writing "wooden" instead of "wood" or "iron" instead of "metal"). | Make sure the key in RP/blocks.json matches the exact "identifier" string from your Behavior Pack block file, including the namespace, and verify the sound value against the vanilla sound list. |
| Content Log shows: [Blocks][error]-blocks.json | ... syntax error or duplicate key. | Multiple developers or tools added the same custom block identifier to RP/blocks.json twice, or left a trailing comma on the last entry in the file. | Validate RP/blocks.json with a strict JSON linter, remove trailing commas, and merge any duplicate block identifier objects so each block appears only once. |
| Defining textures in RP/blocks.json overrides or conflicts with minecraft:material_instances in the Behavior Pack. | When a block uses the modern minecraft:material_instances component in BP/blocks/*.json, putting a "textures" key inside RP/blocks.json as well can cause the game to ignore your material instance settings. | Omit the "textures" key from RP/blocks.json on modern custom blocks; leave only the "sound" key inside the block's entry and keep all texture definitions inside the Behavior Pack's minecraft:material_instances component. |
Reference, straight from the game files
Read out of the game itself, so the ids match the version you are building for.
