Skip to content

Built in Minecraft Models

Piggo41 edited this page Oct 12, 2026 · 4 revisions

Built-in Minecraft block models

BetaMoon supplies models based on Minecraft Beta 1.7.3 block shapes under the minecraft:block/ key prefix. Use a key directly in an appearance or look it up with betamoon.assets.models:get(key). These models need no assets.models:add declaration. All bundled models and their texture-pack replacements are Bedrock geometry format_version: "1.12.0" JSON files, using the supported model subset.

local torchModel = betamoon.assets.models:getRequired("minecraft:block/torch")
local torchAppearance = {
    model = torchModel,
    texture = "mymod:block/torch_texture"
}

Provide a texture for every material slot the selected model uses. The model supplies geometry and UVs; it does not create a block, select a texture, or inherit vanilla placement, collision, lighting, redstone, or interaction behavior. Choose a variant through your block's metadata appearances when its state changes.

Model keys

Every name in this table follows minecraft:block/<name>. Directional models use a single south-facing base; rotate the appearance for other directions. Fence keys still describe connections because those shapes add or remove arms. Aliases resolve to their canonical model and share its texture-pack override path; model:getOverridePath() reports that path.

Family Model names
Stairs stairs; stair is an alias
Fence fence plus every connection combination using _north, _east, _south, _west in that order, such as fence_north_east and fence_north_east_south_west; fence_post is an alias for fence
Trapdoor trapdoor (closed), trapdoor_open
Door door, door_open for the whole two-block door; door_lower, door_lower_open, door_upper, door_upper_open for its halves
Bed bed for the whole two-block bed; bed_head, bed_foot for its halves
Lever lever, lever_on for wall placement; lever_floor, lever_floor_on for floor placement
Torch torch (upright), torch_wall; torch_floor is an alias for torch
Rail rail_straight (north-south), rail_ascending (rising south), rail_corner (south-east); rail is an alias for rail_straight
Ladder ladder
Slab slab, slab_double
Button button, button_pressed
Snow snow_1 through snow_8, where the number is the layer count; snow is an alias for snow_1
Pressure plate pressure_plate, pressure_plate_pressed

Stairs, fences, and other axis-aligned pieces follow Beta 1.7.3 rendered geometry and UV layout. The slanted wall torch, lever handle, and ascending rail use Bedrock rotated cubes or planes; their silhouettes are approximations of Beta's renderer. Built-in models have no animated clips.

For a placed stair, declare a four-value state.facing enum and placement = { facing = "horizontal", facingFrom = "player" }. With facing as the only state field and values ordered north, east, south, west, metadata 0–3 select those directions. Reuse the same model in four render.variants appearances with Y rotations of 0°, 270°, 180°, and 90° respectively. These fixed rotations remain eligible for static chunk rendering. If the block has other state fields, account for their metadata combinations too; appearances currently do not rotate automatically from a named state.

See the Facing Stair Display example for this pattern. It combines a lower slab and upper half-block collision box into a walkable stair; BetaMoon rotates those boxes with the saved facing.

Most models use the default material slot and accept appearance.texture. Door models use lower and upper; bed models use head_top, head_side, foot_top, foot_side, and bottom as needed by the selected whole or half model. Bind those slots with appearance.materials.

local doorAppearance = {
    model = "minecraft:block/door",
    materials = {
        lower = { texture = "mymod:block/door_lower" },
        upper = { texture = "mymod:block/door_upper" }
    }
}

Texture-pack replacements

An override goes at bm_assets/minecraft/models/block/<name>.json in the texture-pack ZIP, for example bm_assets/minecraft/models/block/torch.json. It must be a supported Bedrock geometry JSON model, just like a script-supplied model. Keep the built-in model's named parts and material requirements compatible with the refresh rules. model:getOverridePath() gives the exact ZIP entry for any selected key, including a short key.

The default models are visual starting points. A texture-pack replacement changes their appearance, while Lua declarations control the associated block or item behavior.

Clone this wiki locally