What Defines Glazed Terracotta in Bedrock
From a technical standpoint, vanilla glazed terracotta is just a standard unit cube with three distinct traits: horizontal rotation, stone-tier mining speed, and a specific reaction to pistons. When a player places the block, the top texture aligns with the direction they are looking, allowing four identical blocks to meet at their corners to form a larger 2x2 mosaic.
The Behavior Pack handles the placement logic and physical properties. Instead of writing legacy Molang placement filters to detect player rotation, modern Bedrock blocks use the placement_direction trait. This built-in trait automatically injects a block state into your block and reads the player's horizontal look angle at the exact moment the block is placed in the world.
One detail that catches some creators off guard is piston interaction. Vanilla glazed terracotta can be pushed by pistons, but sticky pistons cannot pull it back. Currently, the data-driven block format does not expose a stable JSON component to explicitly control piston push or pull rules on custom blocks, so your block will inherit the default push-and-pull behavior of standard custom blocks while replicating everything else.
Behavior Pack Block Definition
To set up the block, create a JSON file inside your Behavior Pack's blocks directory. The key to making the pattern rotate is combining the minecraft:placement_direction trait in the description block with a list of permutations that read the minecraft:cardinal_direction state. We also apply a y_rotation offset of 180 degrees to the trait so the primary side of the block faces back toward the player upon placement, matching vanilla terracotta behavior.
Notice that while you could use the standard minecraft:unit_cube geometry, the minecraft:transformation component works most reliably when paired with an explicit geometry identifier and minecraft:material_instances. Using the built-in minecraft:geometry.full_block identifier gives us a standard 16x16x16 cube that responds cleanly to permutation rotations without needing a custom model file in the Resource Pack.
{
"format_version": "1.20.80",
"minecraft:block": {
"description": {
"identifier": "wiki:azure_glazed_terracotta",
"menu_category": {
"category": "construction",
"group": "itemGroup.name.glazedTerracotta"
},
"traits": {
"minecraft:placement_direction": {
"enabled_states": [
"minecraft:cardinal_direction"
],
"y_rotation_offset": 180.0
}
}
},
"components": {
"minecraft:geometry": "minecraft:geometry.full_block",
"minecraft:material_instances": {
"*": {
"texture": "azure_glazed_terracotta",
"render_method": "opaque"
}
},
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 1.4
},
"minecraft:destructible_by_explosion": {
"explosion_resistance": 1.4
},
"minecraft:map_color": "#336699"
},
"permutations": [
{
"condition": "q.block_state('minecraft:cardinal_direction') == 'north'",
"components": {
"minecraft:transformation": {
"rotation": [0, 0, 0]
}
}
},
{
"condition": "q.block_state('minecraft:cardinal_direction') == 'west'",
"components": {
"minecraft:transformation": {
"rotation": [0, 90, 0]
}
}
},
{
"condition": "q.block_state('minecraft:cardinal_direction') == 'south'",
"components": {
"minecraft:transformation": {
"rotation": [0, 180, 0]
}
}
},
{
"condition": "q.block_state('minecraft:cardinal_direction') == 'east'",
"components": {
"minecraft:transformation": {
"rotation": [0, 270, 0]
}
}
}
]
}
}Core Components Reference
Every component in the behavior definition serves a specific role in making the block feel native to the survival game. While the permutations handle the directional artwork, the base components establish the hardness, blast resistance, and visual rendering pipeline.
The table below breaks down the exact components and traits used in the definition above and explains how they interact.
| Component or Trait | What it does | Notes |
|---|---|---|
| minecraft:placement_direction | Automatically records the player's horizontal facing direction when placing the block. | Requires enabled_states to include minecraft:cardinal_direction. |
| minecraft:geometry | Assigns the 3D mesh used by the block. | Using minecraft:geometry.full_block allows UV rotation via transformations. |
| minecraft:material_instances | Links the block faces to a texture shortname defined in terrain_texture.json. | Using the wildcard * applies the same pattern to all six faces. |
| minecraft:transformation | Rotates, scales, or translates the block's geometry per permutation. | Rotation values must be strictly multiples of 90 degrees on any axis. |
| minecraft:destructible_by_mining | Controls how long the block takes to break by hand or tool. | A value of 1.4 closely matches vanilla glazed terracotta hardness. |
Resource Pack Setup and Sound
Because our Behavior Pack block uses minecraft:material_instances and an explicit geometry, it bypasses the isotropic face-randomization found in blocks.json, ensuring our pattern stays locked to our permutation rotations. However, you still need an entry in the Resource Pack's blocks.json file to assign the stone sound effect when players walk on, place, or break the block.
You also need to register the texture shortname in terrain_texture.json. When painting your 16x16 pixel art in an image editor, draw the mosaic corner (such as the center of a circle or the tip of an arrow) in the top-left corner of the canvas. As the transformation component rotates the block around the Y-axis in 90-degree increments, that top-left corner will swing around to meet adjacent blocks, completing your 2x2 pattern.
{
"resource_pack_name": "wiki_terracotta_rp",
"texture_name": "atlas.terrain",
"padding": 8,
"num_mip_levels": 4,
"texture_data": {
"azure_glazed_terracotta": {
"textures": "textures/blocks/azure_glazed_terracotta"
}
}
}Assigning Block Sounds and Names
Without a blocks.json entry, your custom terracotta will make a generic dirt or grass sound when broken. Adding the sound property fixes this without overriding the geometry or materials defined in the Behavior Pack. Make sure the identifier matches your Behavior Pack identifier exactly, including the namespace.
Finally, remember to add a localization line to your RP/texts/en_US.lang file using the format tile.wiki:azure_glazed_terracotta.name=Azure Glazed Terracotta so the block displays a clean name in the creative inventory.
{
"format_version": "1.20.80",
"wiki:azure_glazed_terracotta": {
"sound": "stone"
}
}Which versions this applies to
Applies to Bedrock Edition 1.20.80 and newer. All components, traits, and built-in geometries shown here are completely stable and do not require any experimental toggles to be enabled in the world settings.
When it does not work
| What you see | Why | The fix |
|---|---|---|
| Content Log Error: [Blocks][error]-wiki:azure_glazed_terracotta | minecraft:transformation - rotation must be in 90 degree increments. | You entered a rotation angle like 45 or 135 inside the minecraft:transformation component. Block geometry rotations only support right angles. | Change all numbers in the rotation array to 0, 90, 180, 270, or -90. |
| The block places in the world, but the texture on the top face never rotates no matter which way the player looks. | You either used the minecraft:unit_cube component instead of minecraft:geometry.full_block, or your permutation conditions are checking the wrong block state name. | Replace minecraft:unit_cube with "minecraft:geometry": "minecraft:geometry.full_block" and verify your Molang queries check 'minecraft:cardinal_direction'. |
| The block appears in the hand and world as a purple and black checkered cube with no pattern. | The shortname defined in the Behavior Pack's minecraft:material_instances does not match the key in RP/textures/terrain_texture.json, or the PNG file is missing from the specified path. | Check that "azure_glazed_terracotta" is spelled identically in both files and that the image exists at RP/textures/blocks/azure_glazed_terracotta.png. |
Reference, straight from the game files
Read out of the game itself, so the ids match the version you are building for.
