Repository navigation
Built in Minecraft 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.
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" }
}
}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.
- Installation
- Install scripts
- Getting started
- VS Code and LuaLS
- Examples
- Reload and compatibility
- Troubleshooting
- Changelog
Scripts and shared values
- Script lifecycle
- Packaged Lua mods
- Modules
- References and stacks
- Queries
- Overrides
- Minecraft constants
- Chat and positions
- Structured data
- Script configuration
- Particles
Blocks and items
- Multiblocks
- Blocks
- Block state and placement
- Block shapes and rendering
- Block callbacks
- Block ticks and redstone
- Items
- Fluids
- Item callbacks
- Tools and armor
- Materials
- Textures
Entities
- Entities
- Entity access and movement
- Entity lifecycle and data
- Entity health and loot
- Entity inventories and relationships
- Projectiles and pickups
- Entity presentation and sounds
- Living entities and AI
- Entity parts and sensors
Assets and audio
- Assets
- Models and animations
- Built-in Minecraft models
- Model appearances
- Blockbench workflow
- Audio
- Texture-pack overrides
Events and world actions
World generation
World systems
Inventories and screens
Recipes