Skip to main content

FreeMinecraftModels

FreeMinecraftModels is both a custom-model runtime and a developer-facing API.

The current plugin is no longer just an "imports folder plus /fmm reload" workflow. The current codebase adds:

  • a first-time setup flow and join-time reminder until setup is marked complete
  • a Nightbreak-backed setup menu for official model-pack installs and updates
  • a generated resource-pack folder at plugins/FreeMinecraftModels/output/FreeMinecraftModels
  • a zipped pack artifact at plugins/FreeMinecraftModels/output/FreeMinecraftModels.zip
  • a broader command surface for setup, content updates, spawning, disguises, props, and debugging
  • mount point bones — bones whose name starts with mount_ create rideable seat points on a model, letting players ride custom entities
  • custom display model JSON — place a sibling .json file (Blockbench display-item export) next to a .bbmodel to override the in-game item appearance (requires 1.21.4+)
  • custom scriptable items — models whose YML config sets material: become holdable custom items with full Lua scripting support and 22 item hooks
  • admin content browser (/fmm admin) — an inventory menu for admins to browse installed packs, folders, models, and custom items
  • player craftable items menu (/fmm) — an inventory menu showing all craftable items with their recipes; clicking an item shows the spatial 3x3 grid with arrow and output
  • player UI API — Lua scripts can display boss bars, action bars, and titles to players

Start Here

Lua Scripting

FreeMinecraftModels includes Lua scripting support for both props and custom items, powered by the MagmaCore 2.0 scripting engine. Scripts live in plugins/FreeMinecraftModels/scripts/.

Prop Hooks (8)

Prop scripts can respond to the following hooks:

HookTrigger
on_spawnProp is spawned into the world
on_game_tickEvery game tick while the prop is alive
on_zone_enterA player enters the prop's interaction zone
on_zone_leaveA player leaves the prop's interaction zone
on_destroyProp is removed from the world
on_left_clickA player left-clicks the prop
on_right_clickA player right-clicks the prop
on_projectile_hitA projectile hits the prop

Prop scripts receive a context.prop table with fields like model_id and current_location, and methods like play_animation(name) and stop_animation().

Item Hooks (22)

Custom item scripts (for models with material: set in their YML) can respond to the following hooks:

HookTrigger
on_equipItem is equipped (enters an active slot)
on_unequipItem is unequipped (leaves an active slot)
on_attack_entityPlayer attacks an entity while holding the item
on_kill_entityPlayer kills an entity while holding the item
on_take_damagePlayer takes damage while item is equipped
on_shield_blockPlayer blocks damage with a shield
on_shoot_bowPlayer shoots a bow
on_projectile_hitA projectile fired by the player hits something
on_projectile_launchPlayer launches a projectile
on_right_clickPlayer right-clicks while holding the item
on_left_clickPlayer left-clicks while holding the item
on_shift_right_clickShift + right-click while holding
on_shift_left_clickShift + left-click while holding
on_interact_entityPlayer right-clicks an entity while holding
on_swap_handsItem is swapped between hands
on_dropPlayer drops the item
on_break_blockPlayer breaks a block while holding the item
on_consumeItem is consumed (food/potion)
on_item_damageItem takes durability damage
on_fishPlayer uses a fishing rod
on_deathPlayer dies while item is equipped
on_game_tickEvery server tick while the item is equipped

Item scripts receive a context.item table with fields and methods relevant to the held item and the player holding it. Lua scripts can also use the player UI API to display boss bars, action bars, and titles.

Current Notes

  • The current official Nightbreak-managed packs baked into the plugin are Basic Furniture Pack, BetterStructures Prop Pack, and EliteMobs Prop Pack.
  • FreeMinecraftModels rebuilds its resource-pack output during startup and on /fmm reload.
  • ResourcePackManager is still the recommended way to distribute the generated pack automatically to clients.