Appearance
minecraft:geometry
The description identifier of the geometry to use to render this block. This identifier must either match an existing geometry identifier in any of the loaded resource packs or be one of the currently supported Vanilla identifiers: "minecraft:geometry.full_block" or "minecraft:geometry.cross".
minecraft:geometry you must also include minecraft:material_instances.| Parameter | Type | Default | Description |
|---|---|---|---|
identifier | String | not set | The geometry description identifier to use. Must match a geometry identifier in loaded resource packs. |
bone_visibility | Object | not set | An optional map of bone names to boolean values defining the visibility of individual bones in the geometry file. |
culling | String | not set | An optional identifier of a culling definition used to determine which faces should be culled when rendering. |
culling_layer | String | "minecraft:culling_layer.undefined" | Allows culling rules to group multiple blocks together when comparing them. |
uv_lock | Boolean | String[] | not set | A boolean locking UV orientation of all bones, or an array of strings locking UV orientation of specific bones. |
const block = new Block('Custom Stairs', 'myaddon:custom_stairs');
block.addComponent('minecraft:geometry', {
identifier: 'geometry.custom_stairs',
bone_visibility: { step_top: false },
culling: 'myaddon:custom_stairs_culling'
});
minecraft:material_instances
Maps face or material_instance names in a geometry file to an actual material instance. You can assign a material instance object to any of these faces: "up", "down", "north", "south", "east", "west", or "*" (all faces). You can also create named instances and assign them to faces.
minecraft:material_instances you must also include minecraft:geometry.| Parameter | Type | Default | Description |
|---|---|---|---|
texture | String | not set | Texture name for the material (references terrain_texture.json). |
render_method | String | not set | Render method: "opaque", "blend", "alpha_test", "double_sided", "alpha_test_single_sided", "blend_to_opaque", "alpha_test_to_opaque", or "alpha_test_single_sided_to_opaque". |
ambient_occlusion | Number | not set | If set, shadows will be created around and underneath the block. Controls the exponent applied to lighting. |
face_dimming | Boolean | not set | Whether this material should be dimmed by the direction it is facing. |
isotropic | Boolean | false | Whether the faces using this material should randomize their UVs. Requires format_version 1.21.80+. |
tint_method | String | not set | Tint multiplied to the color. Options: "none", "default_foliage", "birch_foliage", "evergreen_foliage", "dry_foliage", "grass", "water". Requires 1.21.80+. |
const block = new Block('Glass Panel', 'myaddon:glass_panel');
block.addComponent('minecraft:material_instances', {
'*': { texture: 'custom_glass', render_method: 'blend', face_dimming: false },
'up': { texture: 'custom_glass_top', render_method: 'opaque' }
});
minecraft:map_color
Sets the color of the block when rendered to a map. If this component is omitted, the block will not show up on the map.
| Parameter | Type | Default | Description |
|---|---|---|---|
color | String | Array | not set | The color as a hex string "#RRGGBB" or an array of [R, G, B] values (0–255). |
tint_method | String | not set | Optional tint multiplied to the color. Options: "none", "default_foliage", "birch_foliage", "evergreen_foliage", "dry_foliage", "grass", "water". Requires 1.21.80+. |
const block = new Block('Ruby Ore', 'myaddon:ruby_ore');
block.addComponent('minecraft:map_color', { color: '#FF1744' });
minecraft:destruction_particles
Sets the particles that will be used when the block is destroyed. Requires format_version 1.21.80+.
| Parameter | Type | Default | Description |
|---|---|---|---|
texture | String | not set | The texture name used for the particle. |
particle_count | Integer | 100 | Number of particles to spawn on destruction. Maximum is 255. |
tint_method | String | not set | Tint multiplied to the color. Options: "none", "default_foliage", "birch_foliage", "evergreen_foliage", "dry_foliage", "grass", "water". |
const block = new Block('Leafy Block', 'myaddon:leafy_block');
block.addComponent('minecraft:destruction_particles', {
texture: 'leafy_block',
tint_method: 'default_foliage'
});
minecraft:embedded_visual
The geometry and material used to render this block when it is embedded inside of another block (for example, a flower inside of a flower pot). Requires format_version 1.21.120+.
| Parameter | Type | Default | Description |
|---|---|---|---|
geometry | Object | not set | The minecraft:geometry component that will be used when rendered inside of another block. |
material_instances | Object | not set | The minecraft:material_instances component that will be used when rendered inside of another block. |
const block = new Block('Custom Flower', 'myaddon:custom_flower');
block.addComponent('minecraft:embedded_visual', {
geometry: { identifier: 'geometry.potted_flower' },
material_instances: { '*': { texture: 'custom_flower', render_method: 'alpha_test' } }
});
minecraft:item_visual
The geometry and material used to render the item representation of this block. Requires format_version 1.21.60+.
| Parameter | Type | Default | Description |
|---|---|---|---|
geometry | Object | not set | [Required] The minecraft:geometry component that will be used for the item. |
material_instances | Object | not set | [Required] The minecraft:material_instances component that will be used for the item. |
const block = new Block('Display Block', 'myaddon:display_block');
block.addComponent('minecraft:item_visual', {
geometry: { identifier: 'minecraft:geometry.full_block' },
material_instances: { '*': { texture: 'display_block', render_method: 'opaque' } }
});
Physics & Collision
minecraft:collision_box
Defines the area of the block that collides with entities. If set to true, default values are used (a full 16x16x16 block). If set to false, the block's collision with entities is disabled. If omitted, default values are used.
true/false boolean. See also minecraft:selection_box.| Parameter | Type | Default | Description |
|---|---|---|---|
origin | [x, y, z] | [-8, 0, -8] | Minimal position of the bounds. Must be in the range (-8, 0, -8) to (8, 24, 8), inclusive. |
size | [x, y, z] | [16, 24, 16] | Size of each side. origin + size must be in the range (-8, 0, -8) to (8, 24, 8), inclusive. |
const block = new Block('Half Slab', 'myaddon:half_slab');
block.addComponent('minecraft:collision_box', {
origin: [-8, 0, -8],
size: [16, 8, 16]
});
minecraft:selection_box
Defines the area of the block that is selected by the player's cursor (the outline shown when looking at the block). If set to true, default values are used. If set to false, this block is not selectable. If omitted, default values are used.
true/false boolean. See also minecraft:collision_box.| Parameter | Type | Default | Description |
|---|---|---|---|
origin | [x, y, z] | [-8, 0, -8] | Minimal position of the bounds. Must be in the range (-8, 0, -8) to (8, 16, 8), inclusive. |
size | [x, y, z] | [16, 16, 16] | Size of each side. origin + size must be in the range (-8, 0, -8) to (8, 16, 8), inclusive. |
const block = new Block('Small Lamp', 'myaddon:small_lamp');
block.addComponent('minecraft:selection_box', {
origin: [-4, 0, -4],
size: [8, 10, 8]
});
minecraft:friction
Describes the friction for this block in a range of 0.0 to 0.9. Friction affects an entity's movement speed when it travels on the block. Higher values result in more friction (less sliding). The default value is 0.4, which is used by most blocks. Ice uses 0.02.
| Parameter | Type | Default | Description |
|---|---|---|---|
| (value) | Decimal | 0.4 | Friction coefficient from 0.0 (slippery) to 0.9 (sticky). |
const block = new Block('Slippery Floor', 'myaddon:slippery_floor');
block.addComponent('minecraft:friction', 0.02);
minecraft:support
Defines the support shape of the block. Currently only allows for blocks to have the same shape as a Vanilla fence or Vanilla stair. Custom blocks without this component default to unit cube support.
| Parameter | Type | Default | Description |
|---|---|---|---|
shape | String | not set | [Required] The type of support shape: "fence" or "stair". |
const block = new Block('Custom Fence', 'myaddon:custom_fence');
block.addComponent('minecraft:support', { shape: 'fence' });
minecraft:random_offset
Defines a random offset for the block, seeded based on the block's position. It affects the block's rendered position, outline, and collision. If the offset causes the collision box to extend beyond cube bounds, the range will automatically adjust.
| Parameter | Type | Default | Description |
|---|---|---|---|
x | Object | not set | X offset with range ({ min, max }) and steps (integer). |
y | Object | not set | Y offset with range ({ min, max }) and steps (integer). |
z | Object | not set | Z offset with range ({ min, max }) and steps (integer). |
const block = new Block('Wild Grass', 'myaddon:wild_grass');
block.addComponent('minecraft:random_offset', {
x: { range: { min: -0.2, max: 0.2 }, steps: 4 },
z: { range: { min: -0.2, max: 0.2 }, steps: 4 }
});
minecraft:transformation
The block's translation, rotation, and scale with respect to the center of its world position.
| Parameter | Type | Default | Description |
|---|---|---|---|
translation | [x, y, z] | not set | The block's translation. |
rotation | [x, y, z] | not set | The block's rotation in increments of 90 degrees. |
rotation_pivot | [x, y, z] | not set | The point to apply rotation around. |
scale | [x, y, z] | not set | The block's scale. |
scale_pivot | [x, y, z] | not set | The point to apply scale around. |
const block = new Block('Rotated Block', 'myaddon:rotated_block');
block.addComponent('minecraft:transformation', {
translation: [0, 0.5, 0],
rotation: [0, 90, 0],
scale: [0.5, 0.5, 0.5]
});
Destruction
minecraft:destructible_by_mining
Describes the destructible by mining properties for this block. If set to true, the block will take the default number of seconds to destroy. If set to false, this block is indestructible by mining. If omitted, the block will take the default number of seconds to destroy.
true/false boolean.| Parameter | Type | Default | Description |
|---|---|---|---|
seconds_to_destroy | Decimal | 0 | Number of seconds it takes to destroy the block with base equipment. Greater numbers result in greater mining times. |
item_specific_speeds | Array | not set | Array of objects with item (string identifier or object with tags Molang query) and destroy_speed (decimal). |
const block = new Block('Hard Ore', 'myaddon:hard_ore');
block.addComponent('minecraft:destructible_by_mining', {
seconds_to_destroy: 10,
item_specific_speeds: [
{ item: { tags: "q.any_tag('minecraft:is_pickaxe')" }, destroy_speed: 5.0 }
]
});
minecraft:destructible_by_explosion
Describes the destructible by explosion properties for this block. If set to true, the block will have the default explosion resistance. If set to false, this block is indestructible by explosion. If omitted, the block will have the default explosion resistance.
true/false boolean.| Parameter | Type | Default | Description |
|---|---|---|---|
explosion_resistance | Decimal | 0 | Sets the explosion resistance. Greater values result in greater resistance. A negative value or 0 means it will easily explode. |
const block = new Block('Reinforced Stone', 'myaddon:reinforced_stone');
block.addComponent('minecraft:destructible_by_explosion', {
explosion_resistance: 1200
});
minecraft:flammable
Describes the flammable properties for this block. If set to true, default values are used (catch: 5, destroy: 20, same as planks). If set to false or omitted, the block will not catch on fire naturally from neighbors, but it can still be directly ignited.
true/false boolean.| Parameter | Type | Default | Description |
|---|---|---|---|
catch_chance_modifier | Integer | 5 | A modifier affecting the chance that this block will catch flame when next to a fire. Values ≥ 0; higher = more likely. |
destroy_chance_modifier | Integer | 20 | A modifier affecting the chance that this block will be destroyed by flames when on fire. Values ≥ 0; higher = more likely. 0 means the block will never be destroyed by fire. |
const block = new Block('Hay Bale', 'myaddon:hay_bale');
block.addComponent('minecraft:flammable', {
catch_chance_modifier: 60,
destroy_chance_modifier: 100
});
Light
minecraft:light_emission
The amount of light this block will emit in a range of 0–15. Higher value means more light. Reference values: torch (14), glowstone (15), redstone torch (7), soul torch (10). Monsters cannot spawn on blocks with light level 8 or higher.
| Parameter | Type | Default | Description |
|---|---|---|---|
| (value) | Integer | 0 | Light emission level from 0 (none) to 15 (maximum). |
const block = new Block('Glow Lamp', 'myaddon:glow_lamp');
block.addComponent('minecraft:light_emission', 15);
minecraft:light_dampening
The amount that light will be dampened when it passes through the block, in a range of 0–15. Higher value means the light will be dampened more. A value of 15 means fully opaque (like stone), while 0 means fully transparent (like glass). Leaves use 1, water uses 2.
| Parameter | Type | Default | Description |
|---|---|---|---|
| (value) | Integer | 15 | Light dampening level from 0 (transparent) to 15 (fully opaque). |
const block = new Block('Tinted Glass', 'myaddon:tinted_glass');
block.addComponent('minecraft:light_dampening', 2);
Interaction
minecraft:crafting_table
Makes your block into a custom crafting table which enables the crafting table UI and the ability to craft recipes. This component supports only "recipe_shaped" and "recipe_shapeless" typed recipes.
| Parameter | Type | Default | Description |
|---|---|---|---|
crafting_tags | String[] | not set | Tags that recipes should define to be crafted on this table. Limited to 64 tags, each limited to 64 characters. |
table_name | String | not set | Language file key or raw string displayed in the table UI. If omitted, falls back to display_name or the block name. |
const block = new Block('Forge', 'myaddon:forge');
block.addComponent('minecraft:crafting_table', {
crafting_tags: ['crafting_table', 'forge_recipes'],
table_name: 'Forge'
});
minecraft:display_name
Specifies the language file key that maps to what text will be displayed when you hover over the block in your inventory and hotbar. If the string cannot be resolved as a localization key, the raw string is displayed. If omitted, the block name is used.
| Parameter | Type | Default | Description |
|---|---|---|---|
| (value) | String | not set | Display name string or localization key. |
const block = new Block('Copper Wire', 'myaddon:copper_wire');
block.addComponent('minecraft:display_name', 'tile.myaddon:copper_wire.name');
minecraft:loot
Specifies the path to the loot table that determines what items are dropped when the block is destroyed. The path is relative to the behavior pack root folder. Path string is limited to 256 characters. If omitted, the block drops itself.
| Parameter | Type | Default | Description |
|---|---|---|---|
| (value) | String | not set | Path to the loot table JSON file (e.g. "loot_tables/blocks/my_block.json"). |
const block = new Block('Gem Ore', 'myaddon:gem_ore');
block.addComponent('minecraft:loot', 'loot_tables/blocks/gem_ore.json');
minecraft:placement_filter
Sets rules for under what conditions the block can be placed and survive. If placement conditions are not met, the block cannot be placed. If the block is already placed and conditions become invalid, the block will pop off and drop as an item.
| Parameter | Type | Default | Description |
|---|---|---|---|
conditions | Array | not set | List of conditions (limited to 64). Each condition has allowed_faces (array of "up", "down", "north", "south", "east", "west", "side", "all") and block_filter (array of block names or BlockDescriptors with name, states, or tags). |
const block = new Block('Wall Torch', 'myaddon:wall_torch');
block.addComponent('minecraft:placement_filter', {
conditions: [{
allowed_faces: ['side'],
block_filter: [{ tags: "q.any_tag('stone', 'wood')" }]
}]
});
minecraft:entity_fall_on
Configures what distance an entity must fall onto this block to cause the onEntityFallOn block custom component event to be sent to script. Without this component, the default fall distance is 1 block.
| Parameter | Type | Default | Description |
|---|---|---|---|
minimum_fall_distance | Decimal | 1 | The minimum distance in blocks that an entity needs to fall before events are raised. |
const block = new Block('Bounce Pad', 'myaddon:bounce_pad');
block.addComponent('minecraft:entity_fall_on', {
minimum_fall_distance: 2
});
minecraft:tick
Causes the block to tick based on a regular interval equal to a number of ticks randomly chosen from the interval_range. This sends the onTick event to blocks with custom components subscribed for the event.
| Parameter | Type | Default | Description |
|---|---|---|---|
interval_range | [min, max] | [0, 0] | A range of values in ticks to decide the next tick interval. The first value must be ≤ the second. |
looping | Boolean | true | If false, the block will only be ticked once. If true, it will continue ticking with a new random interval each time. |
const block = new Block('Growing Crystal', 'myaddon:growing_crystal');
block.addComponent('minecraft:tick', {
interval_range: [20, 60],
looping: true
});
tag:
An empty JSON object that defines a tag to be added to a block. The component has no body or parameters — it is simply a flag. When the block is parsed, the tag is added to the block's tag list. Use Vanilla block tags or create your own with a proper namespace.
tag: prefix instead of minecraft:. Multiple tags are added as separate components.| Parameter | Type | Default | Description |
|---|---|---|---|
| (none) | Empty object {} | — | The tag name is the component key itself. |
const block = new Block('Custom Ore', 'myaddon:custom_ore');
block.addComponent('tag:minecraft:is_pickaxe_item_destructible', {});
block.addComponent('tag:minecraft:diamond_tier_destructible', {});
block.addComponent('tag:myaddon:custom_ore_tag', {});
minecraft:liquid_detection
Defines how a block behaves when detecting liquid. Only one rule definition is allowed per liquid type. Requires format_version 1.21.60+.
| Parameter | Type | Default | Description |
|---|---|---|---|
liquid_type | String | "water" | The type of liquid this detection rule is for. Currently only "water" is supported. |
can_contain_liquid | Boolean | false | Whether this block can contain the liquid (e.g. be waterlogged). |
on_liquid_touches | String | "blocking" | Reaction to flowing water: "blocking", "broken", "popped", or "no_reaction". |
stops_liquid_flowing_from_direction | String[] | [] | Directions where liquid can't flow out: "up", "down", "north", "south", "east", "west". |
use_liquid_clipping | Boolean | false | Whether the block uses the encompassing collider to visually clip the liquid. |
const block = new Block('Coral Block', 'myaddon:coral_block');
block.addComponent('minecraft:liquid_detection', {
can_contain_liquid: true,
on_liquid_touches: 'no_reaction'
});
minecraft:flower_pottable
When added to a block, indicates that this block can be placed inside a flower pot. This component has no parameters. Requires format_version 1.21.120+.
| Parameter | Type | Default | Description |
|---|---|---|---|
| (none) | Empty object {} | — | No parameters. Simply adding this component enables flower pot placement. |
const block = new Block('Custom Flower', 'myaddon:custom_flower');
block.addComponent('minecraft:flower_pottable', {});
Redstone
minecraft:redstone_conductivity
The basic redstone properties of a block. If the component is not provided, the default values are used.
| Parameter | Type | Default | Description |
|---|---|---|---|
redstone_conductor | Boolean | false | Specifies if the block can be powered by redstone. |
allows_wire_to_step_down | Boolean | true | Specifies if redstone wire can stair-step downward on the block. |
const block = new Block('Conductive Block', 'myaddon:conductive_block');
block.addComponent('minecraft:redstone_conductivity', {
redstone_conductor: true,
allows_wire_to_step_down: true
});
minecraft:redstone_consumer
Describes how a block can consume and potentially propagate a redstone signal. This component is not available for block permutations.
| Parameter | Type | Default | Description |
|---|---|---|---|
min_power | Integer | 0 | Minimum incoming signal strength. If signal ≥ this value, the onRedstoneUpdate event is sent to Scripts. 0 means always emitted. |
propagates_power | Boolean | false | Whether a signal can pass through this block. |
const block = new Block('Redstone Receiver', 'myaddon:redstone_receiver');
block.addComponent('minecraft:redstone_consumer', {
min_power: 5,
propagates_power: false
});
minecraft:redstone_producer
Indicates that the block produces a redstone signal. Requires format_version 1.21.120+.
| Parameter | Type | Default | Description |
|---|---|---|---|
power | Integer | not set | Signal strength from 0 to 15. |
connected_faces | String[] | all faces | Faces that provide power: "north", "east", "south", "west", "up", "down". By default all faces are connected. |
strongly_powered_face | String | not set | The block touching this face becomes strongly powered. Strongly powered blocks power adjacent blocks. |
transform_relative | Boolean | false | If true, strongly_powered_face and connected_faces are rotated according to minecraft:transformation. |
const block = new Block('Power Source', 'myaddon:power_source');
block.addComponent('minecraft:redstone_producer', {
power: 15,
connected_faces: ['north', 'south'],
strongly_powered_face: 'down'
});
Experimental
minecraft:chest_obstruction Experimental
Controls how the block is evaluated by a chest during chest opening. Requires the Upcoming Creator Features experiment.
| Parameter | Type | Default | Description |
|---|---|---|---|
obstruction_rule | String | "shape" | How the block should be evaluated: "always" (always obstructs), "never" (never obstructs), or "shape" (uses the block's AABB shape). |
const block = new Block('Glass Shelf', 'myaddon:glass_shelf');
block.addComponent('minecraft:chest_obstruction', {
obstruction_rule: 'never'
});
minecraft:connection_rule Experimental
Defines whether other blocks such as fences, walls, bars, and glass panes are allowed to connect to this block.
| Parameter | Type | Default | Description |
|---|---|---|---|
accepts_connections_from | String | "all" | The type of block allowed to connect: "all", "only_fences", or "none". |
enabled_directions | String[] | ["north", "south", "east", "west"] | Cardinal directions that connection is enabled for. |
const block = new Block('Custom Post', 'myaddon:custom_post');
block.addComponent('minecraft:connection_rule', {
accepts_connections_from: 'only_fences',
enabled_directions: ['north', 'south']
});
minecraft:movable Experimental
Controls how the block reacts to being pushed by pistons.
| Parameter | Type | Default | Description |
|---|---|---|---|
movement_type | String | "push_pull" | [Required] Reaction to pistons: "push_pull", "push" (ignores sticky pistons), "popped" (destroyed), or "immovable". |
sticky | String | "none" | How the block handles adjacent blocks when pushed: "same" (moves adjacent blocks, only with "push_pull") or "none". |
const block = new Block('Immovable Pillar', 'myaddon:immovable_pillar');
block.addComponent('minecraft:movable', {
movement_type: 'immovable'
});
minecraft:precipitation_interactions Experimental
Determines how the block will interact with rain and snow.
| Parameter | Type | Default | Description |
|---|---|---|---|
precipitation_behavior | String | "accumulate snow" | Behavior options: "obrain", "obstruct_rain_accumulate_snow", or "none". |
const block = new Block('Heated Plate', 'myaddon:heated_plate');
block.addComponent('minecraft:precipitation_interactions', {
precipitation_behavior: 'none'
});
minecraft:replaceable Experimental
A block with this component can be replaced when another block is placed in the same block position. This component has no parameters. Requires format_version 1.21.70+.
| Parameter | Type | Default | Description |
|---|---|---|---|
| (none) | Empty object {} | — | No parameters. Simply adding this component makes the block replaceable. |
const block = new Block('Tall Grass', 'myaddon:tall_grass');
block.addComponent('minecraft:replaceable', {});