BetterModel is a Minecraft Forge 1.20.1 mod that allows placing custom animated 3D models in the world in Blockbench/Bedrock format, loaded dynamically from the config folder during runtime without restarting the game.
In vanilla Minecraft and most mods, adding a custom animated model to the world requires writing code and restarting the server. BetterModel solves this problem: simply place model files in the config/bettermodel/ folder, and the block will appear in-game immediately.
This mod is aimed at server administrators and content creators who need to quickly place decorative animated objects (statues, portals, decorations, etc.) without editing code or causing server downtime.
config/bettermodel/<name>/ during runtime. Simply add a folder with files, and the model is available for selection right away..png.mcmeta) and GeckoLib animations (animation.json) are supported. If animation.json is missing, the model still renders using fallback static idle animation.glowmask.png file provides a glow mask on top of the main texture, working correctly with transparent edges (no white artifacts).Each model is a separate subfolder inside config/bettermodel/.
The folder name becomes the model ID that is shown in the selection GUI.
config/
└── bettermodel/
└── my_model/ ← folder name = model ID (any Latin name)
├── model.json required — geometry in Bedrock/Blockbench format
├── texture.png required — main diffuse texture
├── animation.json optional — GeckoLib animation file (if absent, fallback `idle` is used)
├── texture.png.mcmeta optional — animated texture frame data
└── glowmask.png optional — emissive / glow-mask overlay
Important: file names must match exactly (case-sensitive on Linux/Mac servers).
| File | Status | Description |
|---|---|---|
model.json |
Required | Bedrock/Blockbench geometry. Export from Blockbench as Bedrock Model |
texture.png |
Required | Main texture applied to the model |
animation.json |
Optional | GeckoLib animation file. Export from Blockbench as GeckoLib Animation. If absent, model uses fallback static idle animation |
texture.png.mcmeta |
Optional | Animated texture metadata (standard Minecraft .mcmeta format). Requires texture.png with all frames stacked vertically |
glowmask.png |
Optional | Glow/emissive overlay. Must be the same resolution as texture.png. Transparent pixels are treated as non-glowing areas |
BetterModel includes a Particle Emitter block — a configurable particle system that can emit custom particles loaded from the config folder.
config/bettermodel/particles/<name>/ at runtime. Supports multi-frame sprite sheets.Right-click the Particle Emitter block (requires operator level 2+) to open the settings screen.
At the bottom of the screen there is a settings text field that shows all current settings serialised as NBT.
You can copy the text, paste it into another emitter's field, and click Apply to transfer the full configuration.
| Problem | Solution in BetterModel |
|---|---|
| Can't add custom models without code | Simply place files in config/ - model is ready |
| Restart needed for model updates | Models are re-read on the fly when the GUI is opened |
| Static decorations in-world | Full GeckoLib animation support |
| No glow support without shaders | Built-in emissive layer with glowmask.png |
| Can't scale objects without code | Scale directly in the game using Shift + click |
BetterModel.jar in the mods/ folderconfig/bettermodel/ folder will be created automaticallyYou can tune interaction steps in config/bettermodel/interaction.properties:
rotation_step_degrees - rotation step for Shift+Alt click actions.scale_step_percent - scale step in percent for Shift-only click actions.| Dependency | Version |
|---|---|
| Minecraft Forge | 1.20.1-47.4.13+ |
| GeckoLib | 4.8.3 (forge-1.20.1) |
The mod works fully on dedicated servers:
Block settings are saved on the server - modelId and scale are stored in the chunk's NBT data as regular BlockEntity data and survive server restarts.
Model files must be on the server - the server only reads subfolder names from config/bettermodel/ to build the available models list for the GUI and verify correct operator selection. The server does not load or process model files (model.json, texture.png, etc.) - they are needed only by the client for rendering.
Client needs models too - to render models, the files must be present on the client in the same config/bettermodel/ folder. Behavior in case of mismatch:
| Situation | Result |
|---|---|
| Model is on the server, but not on the client | The block is invisible to the client, server data is not corrupted |
| Model is on the client, but not on the server | The model is unavailable for selection in the GUI; if modelId is already saved in NBT — the block is displayed on the client |
| Models are named the same, but files differ | The server stores only the name — the client renders its own files, the visual result may differ |
Permissions - model selection and scaling are only available to operators (level 2+), regular players cannot change block settings.
RenderType.entityTranslucentEmissive for correct alpha channel handling.