Repository navigation
Asset Texture Packs
Assets / Texture-pack overrides
Place BetaMoon override files beneath bm_assets/ at the root of the texture-pack ZIP. The selected pack supplies overrides; files it does not replace use the script's defaults. Selecting Default restores those defaults.
When a script registers an asset with only a key, its conventional file path determines both the script default and the pack override:
bm_assets/<namespace>/<category>/<key-path>.<extension>
Supported categories are textures, sounds, models, and animations. For a key-only sound, the script must contain exactly one matching .ogg or .wav file; preserve that format in the pack. Use asset:getOverridePath() to obtain the exact expected path.
| Registered asset | Override entry |
|---|---|
Texture mymod:block/slate
|
bm_assets/mymod/textures/block/slate.png |
Sound mymod:block/machine/click with OGG default |
bm_assets/mymod/sounds/block/machine/click.ogg |
Sound mymod:block/machine/alarm with WAV default |
bm_assets/mymod/sounds/block/machine/alarm.wav |
Model mymod:item/robot
|
bm_assets/mymod/models/item/robot.json |
Built-in model minecraft:block/torch
|
bm_assets/minecraft/models/block/torch.json |
| Built-in normal GUI button | bm_assets/betamoon/textures/gui/controls/button/normal.png |
Animation mymod:item/robot
|
bm_assets/mymod/animations/item/robot.animation.json |
If a script supplies path when registering an asset, that path determines the override instead. For
{ key = "mymod:block/machine", path = "animated_machine/machine.json" }, a loose script uses
betamoon/scripts/animated_machine/machine.json, while a packaged mod uses
<package>/assets/animated_machine/machine.json. Put the pack model at
bm_assets/animated_machine/machine.json. The key still identifies the asset in Lua. This applies to textures,
sounds, models, and animations; the path's case and directories are preserved. Several keys using the same path share
one pack entry.
Built-in Minecraft models keep their catalog paths and use the same Bedrock geometry JSON format for bundled files and replacements.
For an unregistered texture, sound, model, or animation path, BetaMoon reads the default relative to betamoon/scripts or
the owning package's assets/ directory. Prefix that exact logical path with bm_assets/ for its override:
| Script path | Override entry |
|---|---|
dummy.png |
bm_assets/dummy.png |
textures/slate.png |
bm_assets/textures/slate.png |
mymod/Textures/Guard.PNG |
bm_assets/mymod/Textures/Guard.PNG |
mymod/sounds/click.ogg |
bm_assets/mymod/sounds/click.ogg |
Direct paths preserve case and directory structure, with backslashes normalized to slashes. ZIP entries are case-sensitive. Use lowercase names for portability. Paths must stay relative and cannot contain .., absolute locations, or empty directory segments.
MyPack.zip
pack.png
pack.txt
bm_assets/
dummy.png
mymod/
textures/block/slate.png
sounds/block/machine/click.ogg
Overrides follow the same supported file types and size limits as asset registration. Keep texture layout and proportions appropriate for the block, item, armor, or GUI using the image. For animated textures, the pack PNG must be a valid vertical frame strip. Playback settings remain in Lua; a malformed strip falls back to the script default. Block/item frames scale to the selected atlas cell size.
After changing files in the selected ZIP, call betamoon.assets:refresh() from a script callback. The request runs on the next client tick. Re-selecting a pack also refreshes content.
If an override cannot be read or decoded, BetaMoon reports the asset and pack entry and tries the script default. If both replacement sources are unusable, an already loaded asset retains its previous content. Check warnings in the Scripts screen or launcher console, and inspect asset:getSource() to see the source actually in use.
Install BetaMoon's Java agent as described in the installation guide so custom textures load and refresh correctly. Packs supply textures, sounds, models, and numeric animation clips; they do not replace scripts or gameplay definitions.
Model/animation replacements must preserve the bundled names and material requirements used by scripts. Incompatible combinations fall back together. See model compatibility and supported export formats.
- 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