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 a Loot Table, Spawn Rule & Crafting Recipe
  • 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
    • Troubleshooting Blocks
      help
  • Visuals
    • Block Culling
    • Block Models
      guide
    • Block Texture Animation
    • Block Texture Variation
    • Block Tinting
  • Tutorials
    • Applying Constant Effects
      Scripts
    • Avoiding State Limit
    • Fake Blocks
    • Ore Loot Tables
      Scripts
    • Precise Interaction
      Scripts
    • Precise Rotation
      Scripts
    • Rotatable Blocks
  • Vanilla Re-Creations
    • Custom Crops
      Scripts
    • Custom Glass
    • Custom Glazed Terracotta
    • Custom Trapdoors
      Scripts
  • Documentation
    • Block Format History
    • Block Shapes
    • Block Sounds
    • Vanilla Block Models
Commands
  • General
    • Intro to Command Blocks
    • Functions
    • Block States
    • Coordinate System
    • NBT Commands
    • Scoreboard Operations
    • Understanding Selectors
  • Commands
    • Damage
    • Execute
    • Playanimation
    • Playsound
  • On Event Systems
    • On Player First Join
    • On Player Join
    • On Player Leave
    • On Player Death
    • On Player Respawn
    • On First World Load
  • Scoreboard Systems
    • Entity Counter
    • Scoreboard Timers
    • Comparing And Retrieving Scores
  • Techniques
    • Execute Logic Gates
    • MBE - Max's Block Entity
    • FMBE - A New Way to Create Display Entities
    • Look Detection
    • Movement Detections
    • Orbital Camera
  • Useful Creations
    • Custom Crafter
    • Multiplayer Position Rearrangement
      function
Concepts
  • contents.json
  • Emojis & Symbols
  • Molang
  • Namespaces
  • Overwriting Assets
  • Raw Text
  • Shaders
  • Sounds
  • Subpacks
  • Text and Localization
  • Texture Atlases
  • textures_list.json
Documentation
  • Shared Constructs
  • Advanced Molang
  • File Types
  • Fog IDs
  • Material Configuration Description
  • Menu Categories
  • Molang Queries
  • Pack Folder Structure
  • Sound Definitions
  • Vanilla Materials
Entities
  • General
    • Intro to Entities BP
      guide
    • Intro to Entities RP
      guide
    • Troubleshooting Entities
      help
    • Entity Events
    • Entity Properties
    • NPC Dialogues
    • Render Controllers
    • Spawn Rules
  • Tutorials
    • Convert Points Between Any Space (World, Entity, Bones)
    • Creating Boats
    • Detecting Other Entities
    • Disabling Team Damage
    • Dummy Entities
    • Entity Attacks
    • Entity Holds Item
    • Entity Movement
    • Entity Timers
    • Flying Entities
    • Introduction to AOE Clouds
    • Invulnerable Entities
    • Look at Entity
    • 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
    • Troubleshooting Items
      help
  • Tutorials
    • Custom Armor
    • Custom Food
      Scripts
    • Custom Pottery Sherds
    • Custom Weapons
    • Equipment-Based Commands
    • High Resolution Items
    • Spawning Items
    • Throwable Items
  • Documentation
    • Enchantments
    • Attachables
    • Item Format History
    • Numerical Item IDs
    • Vanilla Item Identifiers
    • Vanilla Usage Components
JSON UI
  • General
    • Intro to JSON UI
      guide
    • Best Practices
      guide
  • Tutorials
    • Adding HUD Elements
    • Aseprite Animations
    • Buttons and Toggles
    • Modifying Server Forms
    • Preserve Title Texts
    • String to Number
  • 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
    • Experiments in Education Edition
    • 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
    • Block Placement Prevention
    • GameTests
    • Script Core Features
    • Script Forms
    • Script Requests API
    • Simple Chat Commands
  • Documentation
    • Engine Environment
    • Script Resources
    • Script Watchdog
    • Troubleshooting JavaScript
    • TypeScript
Servers
  • Software
    • Bedrock Server Software
  • Protocols
    • Bedrock Protocol
    • NetherNet Protocol
    • RakNet Protocol
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
      guide
    • Feature Types
    • Jigsaw Structures
  • Tutorials
    • Block Conditions for Features
    • Generating Custom Ores
    • Generating Custom Structures
    • Generating Patches
    • Heightmap Noise
  • Documentation
    • Biome Tags

Intro to Blocks

guide
beginner
Intro to Blocks
  • Registering Blocks
    • Block Description
  • Adding Components
  • Applying Textures
    • Per-Face Textures
  • Applying Sounds
  • Defining Names
  • Result
  • What's Next?

FORMAT & MIN ENGINE VERSION 1.21.70

This page discusses basic block features. You can learn more about other block components here.

NOTE

Vanilla blocks are hardcoded. You may not override or access them.

Minecraft Bedrock allows us to add custom blocks into our world with various vanilla-like properties. Custom blocks can have multiple stages (like plants), directional facing, and other useful features.

This tutorial will cover how to create basic blocks for the stable version of Minecraft.

Registering Blocks ​

Block definitions are structured similarly to entities: they contain a description and a list of components that defines the block's behavior.

Unlike entities, blocks do not have a resource definition other than in RP/blocks.json.

Below is the minimum behavior-side code to get a custom block into the creative inventory.

BP/blocks/custom_block.json
json
{
    "format_version": "1.21.70",
    "minecraft:block": {
        "description": {
            "identifier": "wiki:custom_block",
            "menu_category": {
                "category": "construction", // The creative inventory or recipe book tab that the block is placed into
                "group": "minecraft:itemGroup.name.concrete", // The expandable group that the block is a part of. (Optional)
                "is_hidden_in_commands": false // Is the block hidden from use in commands? (Optional)
            }
        },
        "components": {} // Must be here, even if empty!
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Block Description ​

  • Defines the block's identifier - a unique ID in the format of namespace:identifier.
  • Configures which menu_category the block is placed into.
    • Also takes the optional parameters group and is_hidden_in_commands.

The block description is also home to states and traits, which are covered in their own pages.

Adding Components ​

Right now, our custom block is using the default component values (which can be found here).

Let's configure our own functionality!

BP/blocks/custom_block.json
json
{
    "format_version": "1.21.70",
    "minecraft:block": {
        "description": {
            "identifier": "wiki:custom_block",
            "menu_category": {
                "category": "construction"
            }
        },
        "components": {
            "minecraft:destructible_by_mining": {
                "seconds_to_destroy": 3
            },
            "minecraft:destructible_by_explosion": {
                "explosion_resistance": 3
            },
            "minecraft:friction": 0.4,
            "minecraft:map_color": "#ffffff",
            "minecraft:light_dampening": 0,
            "minecraft:light_emission": 4,
            "minecraft:loot": "loot_tables/blocks/custom_block.json"
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  • minecraft:destructible_by_mining defines how long the player will need to mine the block until it breaks. Currently, it isn't possible to set different destroy times for different tools.
  • minecraft:destructible_by_explosion defines the resistance to explosions. The higher the value, the lower the chance of destruction.
  • minecraft:friction defines how much friction the block has. For example, soul sand has a high value for friction, so it slows the players. Ice has a lower friction value, so it has a slippery effect. The friction of classic blocks such as wood or stone is 0.4.
  • minecraft:map_color is the hex color code that will be displayed on a Minecraft map to represent this block. #ffffff means white. You can get hex codes for other colors here.
  • minecraft:light_dampening defines how much light will be blocked from passing through.
  • minecraft:light_emission defines the light level the block will output.
  • minecraft:loot defines a loot table path for the block to drop. If this is removed, then the block will drop itself. You can learn more about loot tables here.

Browse more block components here!

Applying Textures ​

The geometry and material instances components should be used to determine how your block looks.

For our basic 16×16×16 pixel block, the vanilla model minecraft:geometry.full_block will be used.

minecraft:block > components
json
"minecraft:geometry": "minecraft:geometry.full_block",
"minecraft:material_instances": {
    "*": {
        "texture": "wiki:custom_block"
    }
}
1
2
3
4
5
6

Now, we need to link the texture shortname to an image file path in RP/textures/terrain_texture.json:

RP/textures/terrain_texture.json
json
{
    "resource_pack_name": "wiki",
    "texture_name": "atlas.terrain",
    "texture_data": {
        // Our texture shortname:
        "wiki:custom_block": {
            "textures": "textures/blocks/custom_block" // Link to an image file name
        }
    }
}
1
2
3
4
5
6
7
8
9
10

Per-Face Textures ​

Textures can also be applied per face. For example, a custom "compass block" could use the following ✨stunning✨ textures:

  • textures/blocks/compass_block_down.png

  • textures/blocks/compass_block_up.png

  • textures/blocks/compass_block_north.png

  • textures/blocks/compass_block_east.png

  • textures/blocks/compass_block_south.png

  • textures/blocks/compass_block_west.png

The material instances should look like this:

minecraft:block > components
json
"minecraft:material_instances": {
    "*": {
        "texture": "wiki:compass_block_down" // This texture appears in destruction particles
    },
    "up": {
        "texture": "wiki:compass_block_up"
    },
    "north": {
        "texture": "wiki:compass_block_north"
    },
    "east": {
        "texture": "wiki:compass_block_east"
    },
    "south": {
        "texture": "wiki:compass_block_south"
    },
    "west": {
        "texture": "wiki:compass_block_west"
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

With the following terrain_texture.json data:

RP/textures/terrain_texture.json
json
{
    "resource_pack_name": "wiki",
    "texture_name": "atlas.terrain",
    "texture_data": {
        "wiki:compass_block_down": {
            "textures": "textures/blocks/compass_block_down"
        },
        "wiki:compass_block_up": {
            "textures": "textures/blocks/compass_block_up"
        },
        "wiki:compass_block_north": {
            "textures": "textures/blocks/compass_block_north"
        },
        "wiki:compass_block_east": {
            "textures": "textures/blocks/compass_block_east"
        },
        "wiki:compass_block_west": {
            "textures": "textures/blocks/compass_block_west"
        },
        "wiki:compass_block_south": {
            "textures": "textures/blocks/compass_block_south"
        }
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Applying Sounds ​

The mining sound, step on sound, breaking sound, and placement sound of custom blocks can be determined by the sound parameter in RP/blocks.json.

Learn more about block sounds here!

RP/blocks.json
json
{
    "format_version": "1.21.40",
    "wiki:custom_block": {
        "sound": "grass"
    }
}
1
2
3
4
5
6

Defining Names ​

Finally, let's define our block names like this:

RP/texts/en_US.lang
lang
tile.wiki:custom_block.name=Custom Block
tile.wiki:compass_block.name=Compass Block
1
2

You can learn more about translation here.

Result ​

In this page, you've learnt about the following:

...but it's only the beginning, see what else you could do below!

What's Next? ​

Add Functionality

Learn about the available block components to craft unique gameplay.

Why not give your block a custom model with the geometry component? You could also configure your own collision and selection boxes to match!

Create Variants

Make use of block states and permutations to conditionally enable components on your blocks.

For example, you could add liquid depth levels to your custom tank block, with support for multiple liquid types.

Replicate Vanilla

Browse several complete replicas of existing blocks in the Vanilla Re-Creations category.

Start simple with custom glass blocks, making use of material instances!

Contributors

Edit Intro to Blocks 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