FreeMinecraftModels FAQ
If you have a question that isn't listed here, take a look at the sidebar to see if it has a page dedicated to it in the wiki!
Getting Started
How do I install and use FreeMinecraftModels?
Info
Installation:
- Download FreeMinecraftModels.jar and place it in your plugins folder
- Restart your server to generate plugin folders
- Run
/fmm setupfor the first-time setup / content-management menu - If you use official content packs, link Nightbreak with
/nightbreaklogin <token> - Use
/fmm setupor/fmm downloadallfor official Nightbreak-managed content - For manual content, place
.bbmodelfiles in~/plugins/FreeMinecraftModels/imports/and run/fmm reload - Find the generated resource pack in
~/plugins/FreeMinecraftModels/output/FreeMinecraftModels.zip
Distributing the Resource Pack:
Choose one of these methods:
- Option A (Recommended): Install Resource Pack Manager for automatic distribution
- Option B: Manually configure via server.properties or a hosting service
Spawning Models:
/fmm spawn static <id>- Spawn temporary decorative model/fmm spawn dynamic <id>- Spawn model attached to entity/fmm spawn prop <id>- Spawn persistent world model
Management:
/fmm- Open the craftable items menu (requiresfreeminecraftmodels.menu)/fmm setup- Open the content-management / first-time setup menu/fmm recommendedplugins- Browse companion plugins that pair well with FMM/fmm downloadall- Download the latest plugin update plus all accessible official content/fmm downloadallcontent- Download all accessible official content (content only)/fmm updatecontent- Update outdated official content/fmm downloadpluginupdate- Download the latest plugin jar update only/fmm forcereinstallcontent <package|all>- Repair command: re-download content you already have, even when versions say it is current/fmm reload- Reload plugin and convert new models/fmm version- Show plugin version/fmm stats- Display entity count statistics/nightbreaklogin <token>//nightbreaklogout- Shared MagmaCore top-level commands for storing and clearing the Nightbreak account token (permission:nightbreak.login)/freeminecraftmodelschangelog [dismiss|disable]- Read unread FMM release notes in-game (admins only; also offered as a clickable prompt on join)
Player Features:
/fmm disguise <modelID> [player]- Transform your appearance (or a target player's) into a custom model/fmm undisguise [player]- Remove a player's disguise/fmm disguiselist- List all currently disguised players/fmm itemify <model> <material>- Create a placeable item that spawns the specified model/fmm craftify <modelID>- Open an interactive recipe builder to create a crafting recipe for a prop/fmm shop- Open the optional Vault-backed furniture shop (only when enabled inshop_config.yml)/fmm mount <modelID>- Spawn a rideable horse disguised as a custom model (experimental)
Debugging:
/fmm hitbox visualize [duration]- Visualize model hitboxes using particles (duration in ticks, default 100)/fmm location- Report registered protection / dungeon providers and test them at your current location/fmm debug bedrock [on|off]- Toggle the verbose[FMM-BedrockDebug]log stream for diagnosing the Bedrock display pipeline. Not a config key — resets to OFF on every reboot/fmm debug props [on|off]- Toggle the stacked-props scan: every chunk load then reports any two props within 0.1 blocks of each other asSTACKED PROPS DETECTED. Also resets to OFF on every reboot/fmm packetdebug [ticks]- Sample modeled-entity packet load for the next[ticks]model-clock ticks (default 1, max 200) and report packets/tick, per-viewer fan-out, the heaviest viewers and a packet-type breakdown
Administrative:
/fmm deleteall [radius]- Remove all loaded modeled entities and props (use with caution - no confirmation prompt). An optional player-only[radius]limits removal to that many blocks
Permissions:
freeminecraftmodels.*(default: OP) - Wildcard that grantsfreeminecraftmodels.admin,freeminecraftmodels.deleteall,freeminecraftmodels.disguise.self,freeminecraftmodels.disguise.others, andfreeminecraftmodels.bypassregionprotection. Also the literal permission required by/fmm reload,/fmm stats,/fmm spawn,/fmm itemify,/fmm craftify,/fmm mount,/fmm hitbox visualize,/fmm debug,/fmm packetdebug,/fmm location,/fmm setup,/fmm recommendedplugins,/fmm downloadall,/fmm downloadallcontent,/fmm updatecontent,/fmm downloadpluginupdate, and/fmm forcereinstallcontentfreeminecraftmodels.admin(default: OP) -/fmm admin(the admin content browser) and/fmm giveitemfreeminecraftmodels.disguise.self(default: OP) - Lets a player disguise/undisguise only themselvesfreeminecraftmodels.disguise.others(default: OP) - Allows targeted disguise/undisguise and/fmm disguiselistfreeminecraftmodels.deleteall(default: OP) - Required for/fmm deleteall(child of the wildcard)freeminecraftmodels.bypassregionprotection(default: OP) - Place/interact with props anywhere another plugin would block normal block placement, even whenpreventPropPlacementInProtectedRegionsis onfreeminecraftmodels.menu(default: true) - Lets all players open the craftable items browser via/fmmfreeminecraftmodels.shop(default: true) - Lets all players open/fmm shop(still gated on the shop being enabled)nightbreak.login(default: OP) - Registered by MagmaCore, notplugin.yml. Required by/nightbreakloginand/nightbreaklogout
Commands are OP-only by default unless noted otherwise. Grant these permissions to non-OP players if needed.
Model Features & Limits
What are the model size and rotation limits?
Info
Size Limits:
- Per-bone bounding box maximum: 192x192x192 model pixels (12x12x12 in-game blocks) — measured across all cubes within a single bone
- FreeMinecraftModels uses 4x internal scaling and shifts the model origin to fit Minecraft's
-16..+32resource-pack range - If a bone exceeds the limit FMM logs a console warning; either shrink the cubes, move them closer, or split them into multiple bones
- Whole models can be larger than this — only the per-bone limit applies
Cube Rotation Limits:
- Minecraft 1.21.6 and newer: any cube angle works. FMM decomposes the angle into a base transform (0°, ±90°, ±180°, baked into the geometry) plus a remainder within ±45°, which modern Minecraft accepts at arbitrary precision
- Minecraft 1.21.4 / 1.21.5: the remainder has to land on a value Minecraft accepts natively (−45°, −22.5°, 0°, 22.5°, 45°), so allowed angles are 0°, ±22.5°, ±45°, ±67.5°, ±90°, ±112.5°, ±135°, ±157.5°, ±180° — every multiple of 22.5°
- Single-axis rotation only, on all versions. The converter keeps only the last non-zero axis in the cube's rotation array
- Example:
[22.5, 0, 0]works, but[22.5, 0, 45]only partially rotates - An angle FMM cannot decompose is logged as
Could not decompose rotation angle ... for model name <model>and applied raw, which usually looks wrong
Bone Rotation:
- Bones support any rotation angle
- Avoid default resting positions of 90°, -90°, 180°, -180° (may cause unexpected behavior)
- Multi-axis rotation supported
- Each bone creates a separate entity (performance consideration)
Performance Note:
Keep bone count as low as possible. Each bone spawns a separate entity in Minecraft, which can impact server performance at scale.
What animations are supported?
Info
FreeMinecraftModels binds five animation names to automatic runtime states:
State Animations:
spawn— plays once when the model is created, then falls through toidleidle— loops while the entity is (almost) stationarywalk— loops while the entity's velocity is above0.08attack— plays once, then returns toidledeath— plays once on removal viaremoveWithDeathAnimation()
Any other animation name in the model is a custom animation: it never fires on its own, but it can be played by name from the API or from Lua.
jumpJUMP exists in the AnimationStateType enum and the walk state does request it when the entity leaves the ground, but no jump state is registered in the animation manager, so that automatic transition currently does nothing. An animation literally named jump still works when you trigger it yourself — it just runs through the custom-animation path like any other name.
How It Works:
- Create animations in BlockBench using the lowercase names above so FMM auto-binds them to the matching state
- Plugin reads animation keyframes from
.bbmodelfiles at import time and bakes them into per-tick frames - State animations trigger automatically based on entity state
- Developers can trigger any animation programmatically using
playAnimation(animationName, blend, loop)on aModeledEntity, orcontext.prop:play_animation(name, blend, loop)from Lua
Player disguises are different:
A model used with /fmm disguise runs its own controller that recognizes five names — attack, jump, sneak, walk, idle — in that priority order. sneak and jump only do anything on disguises. A disguise model with no idle logs a console warning and freezes on the last frame whenever nothing else is playing. See Player Disguises.
See Animations for loop modes, interpolation types, keyframe timing, and IK.
Special Case:
Evoker entities detect nearby Evoker Fangs to trigger attack animations automatically.
What are virtual bones and how do they work?
Info
Virtual bones are special bones with reserved names that add functionality to your models:
Hitbox Bones:
- Name:
hitbox(exact name, case-insensitive) - Creates interaction zones and collision boxes
- Defines entity boundaries with matching x/z values
- Must be a top-level bone in the outliner — a
hitboxbone nested inside another group is treated as an ordinary bone - Must contain exactly one cube. Extra cubes log
has more than one value defining a hitbox! Only the first cube will be used, and an empty hitbox bone logshas a hitbox bone but no hitbox cube! - Never animated, never rendered, and excluded from the Bedrock geometry export
Name Tag Bones:
- Prefix:
tag_ - Displays text above models
- Used for entity naming
- Required. A model with no
tag_bone has no nametag at all —setDisplayNameon it silently does nothing, and the underlying vanilla mob is hidden so its own nametag cannot show either. See Why does my model have no name? - The bone needs no cubes; it is just a positional anchor for the text display, usually placed above the head
Head Rotation Bones:
- Prefix:
h_ - Rotates based on player/entity head position
- Tracks head movement automatically
Hidden / Structural Bones:
- Prefix:
b_ - Never rendered in-game
- Use these for structural, organizational or metadata-only bones that should still take part in the skeleton hierarchy without producing geometry
Mount Point Bones:
- Prefix:
m_ - Each
m_bone becomes a rideable seat position on the model, managed byMountPointManager - The seat follows the bone through animations
- Multiple
m_bones create multiple seats - Excluded from the Bedrock geometry export
- See What are mount point bones? below
Usage:
Create a bone in BlockBench with one of these special names, and the plugin automatically applies the corresponding functionality.
Troubleshooting FAQ
Instead of custom models, I only see horse armor.
Info
If, instead of custom models appearing in your game, you only see horse armor, the issue is most likely that you haven't merged the FMM resource pack properly with your preexisting resource pack.
MagmaGuy has developed a plugin called Resource Pack Manager (RSPM) that can automatically merge resource packs for you. You can download it from Spigot here.
Simply drop the RSPM .jar file into your plugins folder, and RSPM will handle everything. It will merge all the resource packs, auto-host them, and distribute them to players when they log into your server.
Why can't I see my model after adding the .bbmodel file?
Info
If your model isn't appearing, check these common issues:
1. Forgot to reload
Run /fmm reload after placing .bbmodel files in the imports folder. This converts models and generates the resource pack.
2. Resource pack not applied
Players must have the FMM resource pack active to see models.
- Check
~/plugins/FreeMinecraftModels/output/FreeMinecraftModels.zipfor the generated pack - Install Resource Pack Manager for automatic distribution
- OR manually distribute via server.properties or a hosting service
3. Wrong file location
.bbmodel files for manual imports must go in: ~/plugins/FreeMinecraftModels/imports/
If you are using official content packs instead, use /fmm setup or /fmm downloadall rather than dropping files in manually.
4. Model has errors
Check console logs for error messages during /fmm reload. Common issues include unsupported rotations, oversized models, or texture problems.
5. Resource pack merge issue
If you see horse armor instead of models, resource packs weren't merged properly. Use Resource Pack Manager (RSPM) to handle merging automatically.
6. Model ID collision
Look for [FMM Models] Rejected normalized model ID collision in the console. Two or more of your model files normalize to the same ID, so all of them were rejected. See Why was my model rejected for an ID collision? below.
Why was my model rejected for an ID collision?
Info
FreeMinecraftModels normalizes every model file name before using it as a runtime model ID and resource-pack filename: it lowercases the name, then replaces every character outside a-z, 0-9, ., _, and - with an underscore.
That means these all collapse to the same ID, my_table:
My Table.bbmodel
my table.bbmodel
my_table.bbmodel
MY_TABLE.bbmodel
Before conversion starts, FMM sweeps the models tree for these collisions. When it finds one, every colliding file is rejected — not just the extras — so you never end up with an unpredictable "whichever loaded last wins" result. The console prints:
[FMM Models] Rejected normalized model ID collision '<id>'. These files normalize to the same ID: <paths>. Rename the files so every normalized model ID is unique; no colliding model was loaded.
The fix: rename the files so their normalized IDs differ, then run /fmm reload. The warning lists the exact absolute paths involved.
Avoiding it: name model files in lowercase with underscores from the start (stone_table.bbmodel). Then the file name and the model ID are identical, and nothing can normalize onto anything else unexpectedly.
Rejected models are skipped everywhere — no Java pack output, and no Bedrock custom-entity bundle either.
Why does my model have no name?
Info
Because the model has no tag_ bone. This is the most common cause of shipped content with nameless mobs.
What happens:
- FreeMinecraftModels only creates a nametag text display for bones whose name starts with
tag_ ModeledEntity.setDisplayName(...)loops over the model's nametag bones. With notag_bone that list is empty, so the call succeeds and does nothing — no error, no warning- A dynamic model hides its underlying living entity from clients, so the vanilla mob nametag cannot fill in either
The result: a plugin such as EliteMobs sets the boss name correctly, the API call reports no problem, and players still see a mob with no name above it.
The fix:
- Open the model in BlockBench
- Add a bone (group) named
tag_namepositioned where the nametag should float, typically just above the head - It needs no cubes — it is only a positional anchor
- Re-import and run
/fmm reload
Multiple tag_ bones are allowed; each gets its own text display showing the same name.
If the console shows nametag bone did not spawn name tag, the bone was recognized but its text display failed to spawn — that is a different failure than having no tag_ bone.
ViaVersion can lead to Resource Packs not displaying properly.
Info
ViaVersion can cause issues with resource packs, particularly when running a server on a version lower than 1.21.4. Minecraft introduced changes in how resource packs are handled starting from 1.21.4. If you are running a server on a version like 1.21.3 and using ViaVersion to allow 1.21.4 clients to connect, these clients may experience issues displaying certain resource pack contents, such as custom models from FMM (FreeMinecraftModels).
This happens because the resource pack system in Minecraft changed with the 1.21.4 update.
Note: This is a Minecraft and ViaVersion limitation, not specific to FreeMinecraftModels. ViaVersion's protocol translation may not fully support resource pack changes when running on server versions below 1.21.4.
To resolve this, consider updating your server to 1.21.4 or higher, as this will ensure better compatibility with modern resource pack features, including FMM custom models.
Why are my models causing lag or performance issues?
Info
Each bone in your BlockBench model creates a separate entity in Minecraft. Models with many bones can impact server performance.
Optimization Tips:
- Minimize bone count in your models
- Limit the number of spawned models
- Consider using Static models instead of Dynamic models when animations aren't needed
- Avoid spawning many high-bone-count models near each other
Technical Explanation:
FreeMinecraftModels renders each bone as a separate Minecraft entity. A model with 50 bones spawns 50 entities. At scale, this impacts performance.
Best Practices:
- Design models with fewer bones
- Test performance with realistic spawn counts
- Monitor server TPS when adding new models
Measuring It:
Run /fmm packetdebug 20 while standing in the area that feels laggy. It samples the next 20 model-clock ticks and reports logical packets/tick, packets actually delivered per tick (counting per-viewer fan-out), the worst single player, a packet-type breakdown, and the heaviest viewers. That tells you whether the cost is bone count, viewer count, or both.
Built-in Packet Optimizations:
Three config.yml keys control the packet-side optimizations. All default to the optimized behavior — the alternate settings exist for debugging, not as tuning advice:
skipUnchangedBoneUpdates(defaulttrue) — a bone that did not move, rotate, or rescale this tick sends nothing. Static props and idle model parts cost almost nothinguseDeltaMetadataPackets(defaulttrue) — the per-tick metadata packet carries only the changed transformation instead of re-serializing the whole item-display blobmaxModelsForProximityOverride(default25) — models within 10 blocks are normally always shown, skipping the line-of-sight raytrace to avoid pop-in. Once a world holds this many loaded models, that override switches off in that world so occlusion culling runs even up close. This is the key to look at for multi-floor NPC hubs where players were being made viewers of models on other floors
See Configuration for the full descriptions.
Advanced Features
Do I need Resource Pack Manager (RSPM)?
Info
Resource Pack Manager (RSPM) is optional but highly recommended.
What RSPM Does:
- Automatically merges resource packs from multiple plugins
- Hosts resource packs (no external hosting needed)
- Distributes packs to players automatically on login
- Eliminates manual resource pack configuration
Without RSPM:
You must manually:
- Merge FMM resource pack with any existing server resource packs
- Host the merged pack on an external service or via server.properties
- Configure server to send pack to players
- Update pack every time you add new models
Why Use RSPM:
Most "horse armor instead of models" issues are caused by improper resource pack merging. RSPM handles this automatically.
Download RSPM: https://www.spigotmc.org/resources/resource-pack-manager.118574/
Developed by MagmaGuy, the same author as FreeMinecraftModels.
Can I use FreeMinecraftModels in my own plugin?
Info
Yes, FreeMinecraftModels provides an API for developers.
Maven/Gradle Integration:
Repository: https://repo.magmaguy.com/releases
Artifact:
- GroupId:
com.magmaguy - ArtifactId:
FreeMinecraftModels - Scope:
provided(must be installed on server, do not shade)
Primary API Classes:
ModeledEntity(base class)StaticEntityDynamicEntityPropEntity
Example Usage:
StaticEntity staticEntity = StaticEntity.create(id, location);
if (staticEntity == null) {
Bukkit.getLogger().warning("Failed to create model");
return;
}
staticEntity.setRightClickCallback(...);
staticEntity.remove();
Important:
Do not shade FreeMinecraftModels into your plugin. It must be installed separately on the server.
For detailed API documentation, see the official README.
How do I disguise a player as a custom model?
Info
The /fmm disguise command transforms a player's appearance into any custom model.
Commands:
/fmm disguise <modelID> [player]
/fmm undisguise [player]
/fmm disguiselist
How it works:
- Makes the player invisible to other players
- Overlays the custom model on the player's position
- The model follows the player's movements
- Perfect for roleplay servers or special events
Examples:
/fmm disguise dragon # Disguise yourself
/fmm disguise dragon Steve # Disguise another player
/fmm undisguise Steve # Undisguise Steve
/fmm disguiselist # List everyone currently disguised
Requirements:
- Self-targeting:
freeminecraftmodels.disguise.self(default: OP) - Other-targeting and
/fmm disguiselist:freeminecraftmodels.disguise.others(default: OP) - Console can run the targeted form as long as a player name is supplied
- modelID must be a valid converted model in your models folder
- Third-party plugins can drive disguises via the public
DisguiseAPI
Notes:
- Player hitbox remains unchanged (same collision box)
- Other players see the custom model instead of your player skin
- Disguising again while already disguised cleanly replaces the previous disguise
- The invisibility persists through milk buckets and other effect-clear interactions until the player is undisguised
How do I create placeable model items?
Info
The /fmm itemify command creates special items that players can use to place models in the world.
Command:
/fmm itemify <model> <material>
Parameters:
model- Any valid model ID from your models foldermaterial- Any Minecraft material (STICK, PAPER, DIAMOND, etc.)
Example:
/fmm itemify lamp_post STICK
What it creates:
- A custom item with a formatted gold-decorated display name (e.g. "✦ Wolf ✦")
- Descriptive lore explaining the item
- The item is added directly to your inventory
- Right-click to place the model as a prop
Use cases:
- Give players items to decorate their builds
- Create custom "spawn eggs" for furniture
- Distribute models without giving build permissions
- Setup kits for creative building
Requirements:
- Permission:
freeminecraftmodels.* - Player must be in-game (not console)
How do I debug model hitboxes?
Info
The /fmm hitbox visualize command visualizes model hitboxes using particles.
Command:
/fmm hitbox visualize [duration]
Parameters:
duration(optional) - How long to show hitboxes in ticks (default: 100, max: 1200)- 20 ticks = 1 second
Examples:
/fmm hitbox visualize # Show for 5 seconds
/fmm hitbox visualize 200 # Show for 10 seconds
How it works:
- Searches for models within 10 blocks of you
- Displays oriented bounding box (OBB) boundaries with particles
- Shows both the model and its collision boundaries
- Useful for verifying hitbox size and rotation
Projectile collision uses a swept segment from the projectile's previous position to its current one, so fast arrows cannot skip through thin OBBs between ticks. When one segment intersects multiple models, FMM routes the hit nearest-first. A normal projectile can hit one modeled target; a Piercing arrow can hit pierce level + 1 different modeled targets without the OBB and vanilla backing hitboxes double-counting the same impact.
When to use:
- Testing if hitboxes match visual models
- Debugging interaction issues
- Verifying hitbox rotations
- Troubleshooting click detection
Requirements:
- Permission:
freeminecraftmodels.*
Note: Hitboxes in FMM rotate with the model, unlike standard Minecraft AABBs.
Can I create rideable custom models?
Info
Yes, use the /fmm mount command to create rideable custom models (experimental feature).
Command:
/fmm mount <modelID>
What it does:
- Spawns a horse at your location
- Disguises the horse as your custom model
- Automatically tames the horse and adds a saddle
- Makes you ride the horse immediately
Example:
/fmm mount dragon
Requirements:
- Permission:
freeminecraftmodels.* - Valid model ID
Important notes:
- This feature is marked as experimental
- Movement speed and behavior match a standard horse
- The horse's hitbox remains unchanged
- Works best with models designed for mounts
Use cases:
- Custom mounts for roleplay servers
- Special transportation for VIP players
- Unique rideable creatures for adventure maps
What are mount point bones?
Info
Mount points let you define rideable positions directly on your model using specially named bones.
How to create mount points:
In Blockbench, name any bone with the prefix m_ (e.g. m_seat, m_back). Each m_ bone becomes a seat position on the model where a player or entity can be mounted.
How it works:
- The mount position follows the bone's location, including animations
- Multiple
m_bones create multiple seats - Players/entities can be mounted onto these positions via the API or Lua scripts
Testing:
Use /fmm mount <modelID> to quickly test mount points on a model.
Use cases:
- Multi-seat vehicles (boats, carriages)
- Rideable creatures with specific seat positions
- Shoulder-mounted pets or companions
Custom Items
What are custom items?
Info
Custom items are models that have a material: field set in their sibling YML config file, turning them into holdable, equippable items with Lua scripting support.
Key differences from prop placement items:
- Custom items use the
fmm_item_idPDC (PersistentDataContainer) key - Prop placement items (from
/fmm itemify) use themodel_idPDC key - Custom items support 22 item-specific Lua script hooks (equip, attack, consume, etc.)
- Custom items can have enchantments, custom names, and lore defined in their YML config
How to create a custom item:
- Create a
.bbmodelmodel in Blockbench - Create a sibling YML file with the same base name (e.g.
magic_sword.ymlnext tomagic_sword.bbmodel) - Set the
material:field in the YML to any valid Minecraft material (e.g.material: DIAMOND_SWORD) - Optionally set
name:,lore:, andenchantments:fields - Optionally create a Lua script in
plugins/FreeMinecraftModels/scripts/and reference it via thescripts:field
Example YML:
isEnabled: true
material: DIAMOND_SWORD
name: "&6Flame Blade"
lore:
- "&7A legendary weapon"
- "&cBurns enemies on hit"
enchantments:
- "FIRE_ASPECT,2"
scripts:
- flame_blade.lua
How to get a custom item:
/fmm giveitem <id>(requiresfreeminecraftmodels.adminpermission)- Through the admin menu (
/fmm admin)
Menus
What menus does FMM provide?
Info
FreeMinecraftModels provides two in-game menus for browsing and managing content.
Player Menu — /fmm
- Permission:
freeminecraftmodels.menu(default: true, all players can use it) - Shows only items that have crafting recipes defined
- Click an item to see a detail view with a spatial 3x3 crafting grid preview
- Allows players to discover and learn how to craft custom items
Admin Menu — /fmm admin
- Permission:
freeminecraftmodels.admin(default: OP) - Full content browser showing:
- Installed packages
- Unpackaged model folders
- Root-level models
- Custom items (models with
material:set)
- Allows admins to give items, preview models, and manage content
Display Models
What are display models?
Info
Display models let custom items show a 3D model in the player's inventory and hand, instead of the default material appearance.
How to set up a display model:
- In Blockbench, use File > Export > Java Block/Item to export a
.jsonmodel file - Place the
.jsonfile next to the.bbmodelfile with the same base name (e.g.magic_sword.jsonnext tomagic_sword.bbmodel) - Run
/fmm reload
How it works:
- On Minecraft 1.21.4+, the item will display with the custom 3D model when held or viewed in inventory
- Bare texture references in the JSON are automatically rewritten to FMM namespace paths
- If no
.jsonfile exists, the item falls back to the plain material appearance - Older server versions ignore display models silently
Requirements:
- Server running Minecraft 1.21.4 or newer
- A valid Blockbench "Java Block/Item" export (
.json) placed alongside the model file