**New Features:**
- Added support for Minecraft 26.1, 26.1.1, 26.1.2, and 26.2 (new post-1.x versioning epoch; 26.1+ requires Java 25)
- Folia support (heavily iterated on afterward for stability)
- MEG Client Mod support, an optional client-side companion mod for enhanced rendering (Fabric, NeoForge)
- Added free cube rotation format using 1.21.11's item model rotation support (`Model-Generator.Use-New-Rotation`)
- Added config option `Texture-Path` (defaults to `entity/models`) to prevent atlases from breaking
- Added setting to reduce model-import log noise (only prints for models with issues)
- [MM] Added `vfxbrightness`/`vfxlight` mechanic to control VFX brightness independent of world light
- [MM] Added `hasmodel` condition, including checking whether a specific animation is currently playing
- [MM] Added `audience` support to `glow`/`glowbone` so the glow can be shown to specific players only
- [MM] Added MiniMessage/HEX color support to `setmodeltag` (legacy color codes still work)
- [MM] Added `track=false` to the model mechanic to hide a model from other players while disguised
- [MM] Added `modelid` attribute to the `lockmodel` mechanic
- [MM] Added `vr`/`viewrange` attribute to the model mechanic, controlling the client-side Display view range independently of the server-side tracking radius
- [API] Added per-player visibility cull exemption (global and per-entity) via `BasicCulling`
- [API] Added pre/post packet send callback API
- [API] Exposed the hit sub-hitbox bone on `BaseEntityInteractEvent` and on MythicMobs projectile hit events
- [API] Added a `boneId` getter to `DisplayBone`
- [API] Added `setScale`/`setHitboxScale` overloads accepting `Vector3fc`
- [API] Mount API: custom `MountController`s can now run on non-Mob bases, `getSeat()` accepts the authored `p_N` seat name, and mount health is resent when a player re-enters tracking range
**Changes:**
- MythicMobs mechanics now all run `SYNC_ONLY`, so a model and the mechanics that depend on it (`partvis`, `state`, `renderinit`) resolve in the same tick instead of needing an artificial delay
- Mechanics called inside a projectile or aura's `onStart` skill now act on the bullet/attachment model instead of the caster
- `Override-Move-To-Method` config now applies to all navigation types, not just the default one
- Animations with 0 length now loop infinitely, matching Blockbench's behavior
- Brightness mechanic now also affects nametag bones
- Broad CPU and memory optimization pass across the per-tick entity/model update loop, packet/metadata sending, and animation/keyframe interpolation; resource pack generation also got significantly faster (bbmodel caching + larger I/O buffers cut import time from ~3.4s to ~315ms)
**Bug Fixes:**
- Fixed the model/animation tick loop running at roughly half speed on Windows due to coarse system clock granularity
- Fixed models being destroyed by spurious entity-unload events and not being restored afterward
- Fixed cross-world teleports leaving stale tracking/disguise/pivot state, causing models to stop rendering or a MythicMob's hidden base entity to reappear
- Fixed numerous Folia issues: `dismountall` mechanic, AsyncCatcher errors around pivot overrides and mount mechanics, mount system thread safety, a ticking deadlock, and made async save/deferred restore Folia-safe
- Fixed several memory/entity leaks: ByteBuf leaks in VFX and channel handling, subhitbox entity leaks and UUID collisions, and leftover VFX/pivot/mount data after a world unloads
- Fixed a race that could null out items read from `BoneItems` during async rendering
- Fixed the `Bundle-Everything` mechanic, which had been dead since the R4.0.6 updater rewrite
- Fixed `hitboxissubhitbox` condition ignoring the configured hitbox name and matching any hitbox
- Fixed several NPEs: hitbox creation on unspawned entities, aura attachment initialization order, removing a queued state the same tick it plays, `getCollidableExemptions`
- Fixed a watchdog hang caused by non-UUID keys in the selection manager
- Fixed generated resource packs hashing differently each time due to multi-threaded generation order
- Fixed packets being sent to fake-player channels, corrupting the channel buffer
- Fixed `pv=true` (pivot override) unmounting native Bukkit passengers, like a parrot on a shoulder or a player riding another player
- Fixed several scale-0/segment issues: segments disappearing permanently at scale 0, step animations breaking at scale 0, scale-0 visibility not propagating to child bones
- Fixed subhitbox position scaling with local bone transforms, and attacks/interactions not registering on subhitboxes
- Fixed nametag line width not being set on spawn and not scaling correctly on older versions
- Fixed mount desync, mount projectile death delay, dismounting when the base has AI disabled, and mounted state machine animations not taking effect the same tick
- Fixed disguise removal causing a visible player snap/jitter, and the model mechanic not working after logout while using pivot override
- Fixed player model shaders and interaction rotation on 26.1
- Fixed chat-based input using a deprecated Bukkit event that could misbehave on newer Paper builds
- Fixed Molang addon support
- Fixed animation bugs: precedence when multiple animations start on the same tick, ref animations not saving/removing correctly, and `ModifyState` writing to the wrong lerp field
New Features:
- Blockbench 5.0 support
- 1.21.5, 1.21.7-1.21.11 support
- Added config option `Override-Move-To-Method` to toggle using patched mob pathfinding
- Added duplicate texture name autocorrection (only triggers if the other file with the same name has different data)
- Added config option `Load-On-World-Load` and `Unload-On-World-Unload` to toggle loading/unloading models on world load/unload phase instead of entity load/unload
- Added config option `Manual-Translucency-Order`, which renders transparent bone different when set to front rendering in Blockbench
- Segment/Tail overhaul
- Added config option `Default-Animation-Priority` to adjust priority of default animations used in state machines
- Added config option `Lower-Scale-Limit` that clamps the absolute scale of a bone to the limit (negative scale still works)
- Added config option `Force-Custom-Model-Data` that forces >1.21.4 servers to generate resource pack using <=1.21.3 CMD method
- Fire hologram on model
- User limb system using Mineskin API, aka shader compatible player limbs
- [API] Added methods for controlling model rotation directly
- [API] Added `ModelSetupEvent`, fired when an `ActiveModel` is added and initialized in `ModeledEntity`
- [API] Added generic model culling module `BasicCulling`, applicable to most custom `BaseEntity` classes
- [API] Bone dependency API, used when a bone relies on another bone that is not its parent
- [API] Added sync and async update callback to `Dummy`
- [API] Pivot override API, which allows a model to be directly mounted on another entity
- [API] Added `BoneTransformReadEvent` which allows last minute bone transform modification that is not saved and only affects clients
- [MM] Added `billboard` mechanic for billboarding specified bones
- [MM] Added `merge` to `state` and `defaultstate` mechanic, which switches the animation to lerp `lo` ticks before animation ends
- [MM] Made `setitemmodel` mechanic compatible with item variables
- [MM] Added `src` to `state` and `defaultstate` mechanic, which allows playing animation of a different model
- [EXT] New Molang support module
Changes:
- Model rotation would now be saved
- [MM] `state` and `modifystate` mechanics' `override` attribute is adjusted to set not-override on `false`, set override on `true`, do nothing on `null`
- [MM] Boolean attributes in `model` mechanic now accept placeholders
- [MM] Dismounting a model now triggers onDismounted trigger
Bug Fixes:
- Fixed VFX not displaying with correct display transform
- Fixed model saving on server shutdown when set to not save
- Fixed model drivable/ridable state not saved
- Fixed shearing animation not displayed correctly
- Fixed client desync monitor not syncing up with client correctly
- Fixed global rotation not handled
- Fixed head model in GUI not oversized
- Fixed inconsistent step keyframe handling
- Fixed OBB hitbox not accounting cube rotation and inflate
- Fixed model load/unload not deferring operation to main thread when fired on async
- Fixed manual animation overriding default bone transform
- Fixed removed bones still being ticked
- Fixed nametag json string nulling
- [API] Fixed `Dummy` without hitbox not detecting viewers
Bug Fix:
- Fixed hitboxes not applied on persistent models
- Fixed death animation not playing when no other animations are playing while dying
- Fixed OBB not working on 1.20.5+
- Fixed entity interaction range using BlockInteractionRange instead of EntityInteractionRange
- Fixed `interactmount` attribute of `mountmodel` mechanic not used
- Fixed models saving multiple times on disable, causing insanely long shutdown time
- Fixed plugin sending empty bundle packets
- Fixed client-side model jitter (as well as possible)
- Fixed plugin not loading on Java 17
- Fixed resource pack warnings on old versions
- Fixed incorrect leash position on 1.21+ (thanks Mojang)
- Fixed leash position lagging behind models
- Fixed potion effects on players not removed when expired
- Fixed players suddenly start jittering and teleporting around
- Fixed discontinuous frames not parsed correctly
- Fixed velocity changes not applied to disguised players
- Fixed model rotation not updated when no players are in range
Changes:
- Nametags are now Text Displays
- Model updaters now use a different system, allowing better load balancing and more stable ticking
- `model` mechanic defaults `step` to null, which uses the mobs' original step height
- Expanded `syncyaw` mechanic to sync between any yaw type (`yaw`, `body` and `head`)
New Features:
- 1.21.3 & 1.21.4 support
- Cubes no longer have angle limit. For <=1.21.3, additional bones would be spawned. >=1.21.4 will not add more entities
- Semi-legal cubes now auto fixes itself (such as 67.5 and 90 degree cubes)
- Support for MM ModelEngine bullet
- Added Multi-base-item generation
- AnimateModel Mechanic, allows controlling bone transform through skills
- Added position root motion, allows animating mob movement through model animations
- Added `child` attribute to `brightness`, `enchant`, `glow`, `partvis`, and `tint` mechanics
- Improved custom model parsing API
- Improved custom bone behavior parsing API
- Added `skipLastFrame` attribute to state mechanic
- Textures with names containing illegal characters would now fix itself by generating a UUID as the name
- Animation LOD system. Models will send less update to viewers further away from them
New Features:
- 1.20.5+ support
- Model mechanic now allows 0 render radius if the value is set to negative
- Segment & Tail bone
- [MM] Segment mechanic which allows finer control of the behavior of the segment/tail bone
- [MM] Updated slot system to 5.7
- Mounting on models will now accurately display health
- [MM] Placeholder for getting body rotation
Changes:
- Optimized culling hitbox generation
Bug Fixes:
- Fixed effects not being removed when undisguised
- Fixed OBB not detecting interactions inside OBB
- Fixed memory leak on entity data not being removed
- Fixed dummy detecting players when location is null
- Fixed plugin just breaks entirely when one model throws an error (now it still throws an error but meg will kindly ignore it and keep running)
- Fixed entity data being updated while animations are still being calculated
- [MM] Fixed Model.Id not lowercasing values
- Fixed playerQueue NPE
New Features:
- Load balancer on Culling and Animation calculations
- Added model glow support [Issue 92]
- Added model brightness support [Issue 91]
- Added `Create-MC-META` config [Details]
- Added primitive Step keyframe handling
- Scale 0 bones would no longer send packets [Issue 73]
- Added Priority Selector in animation menu for models using state-machine animation handler
- [MM] SyncYaw mechanic can now target to sync `yaw`, `body`, and `head`
- [MM] Allow using generic items and specifying data, color, and enchant on setItemModel mechanic [Issue 88]
- [MM] Added glow mechanic [Issue 92]
- [MM] Added brightness mechanic [Issue 91]
Bug Fixes:
- Fixed multiple infinity position errors
- Fixed multiple concurrent modification errors
- Updated mount mechanic to use the latest MM API version
- Fixed state machine not removing animations when they are lerping out
- Fixed animations sometimes not stopped
- Fixed animations chugging due to culling lag
- Fixed model invisible if removed and added immediately
- Fixed player model shader
- Fixed animation not imported as lowercase
- Fixed error when .data folder is missing while the server is already running
- Fixed animation interpolated incorrectly
- Fixed animation not playing correctly if rapidly added and removed (affects disguises more)
- Fixed super hyper SSR 6* rare case of entity being invalid when first spawned [Issue 44]
- Fixed Citizens saving
- Fixed player being invisible when rejoining server after disguise in the same server session (server has not restarted) [Issue 103]
- Fixed potion effects not applied to disguised players [Issue 104]
- Fixed compatibility enabling when the depended plugin has disabled itself
- Fixed whitespaces in model saved data would cause loading error
- Fixed WorldGuard `getName()` NPE (because WorldGuard just can't be bothered to fix it, and IT'S NOT MY FAULT THEY USED NULLABLE METHODS WITHOUT NULL CHECKS)
- [MM] Fixed ModelPart targeter using the wrong scale to scale the location
- [MM] Fixed MM mechanics not recognized if using namespace and mechanic alias (e.g. meg:ModelSkin)
Bug Fixes:
- Fixed mount bone position not always initialized (cause teleport to 0 0 0)
- Fixed memory leak with subhitbox not unregistering
- Fixed citizens command not working on entities until modified by /meg menu
- Fixed VFX NPE when not initialized
- Fixed models ignore culling on initial spawn
- Fixed Paper method name changing `isOpaque` to `canOcclude`
- Fixed 1.20+ model not loading
- Fixed subthitbox silverfish error spam
- Possibly fixed meg menu locking players from typing until server restart
New Features:
- Citizens support
- Model configuration menu (/meg menu)
- Dynamic render/hitbox scaling
- Extra summon and disguise command arguments
- Import models directly from Mythic packs
- MEG 3 data converter. Works on entities and citizens
- [MM] `syncbody` attribute on `model` and `vfx` mechanic. Used to set the body rotation to the yaw of the entity. `true` by default [Issue 56]
- [MM] `scale` mechanic
- 1.20.4 support
Bug Fixes:
- Fixed Blockbench format v4.9 not loading textures correctly
- Fixed mount and hitbox bones not despawning all entities [Issue 43]
- Fixed crash related to threads [Issue 51]
- Fixed models getting stuck when added after the first tick [Issue 59]
- Fixed models persisting when the modeled entity is set to not saved
- Fixed visibility not updating when bones are not moving
- Fixed cache file not read on /meg reload [Issue 63]
Bug fixes:
- Removed debug messages when right clicking with diamond
- Fixed model being invisible because render radius default to 0
- [MM] Fixed mount controller being case sensitive
- Fixed bones drifting for some behaviors (nametag, leash etc)
- [API] Fixed FINISHED phase not called
- Fixed models floating a bit on 1.20.2
- Possible fix for server crashing (Issue - 16)
- [API] Fixed driver cannot dismount when mounted model is not main model
- Fixed client disconnect when interacting with model where base entity is not interactable (such as arrow)
- [MM] Fixed ModelPart targeter hard requiring model ID
Changes:
- Resource pack now use MEG4 icon
New features:
- Config option for generating shader files
- Allow mounting to driver bones of different models
- Hitbox and Shadow visibility
- [API] Auto main mount manager assignment
- [MM] Meta Controllers, check MountModel to see how to use it
- [MM] Movement controller mechanics
- [MM] PartVisibility can now specify to affect all child bones
- [MM] Added save attribute to model mechanic
- [MM] State mechanic now has options to force loop mode or override
- [MM] Added ModState mechanic to change attributes of a state (leprin, lerpout, speed, force loop mode, force override)
- [Experimental] Packet batching. Off by default. Turn it on in config (set Network-Optimization.Bundle-Everything to true)
- [API] BaseEntityInteractEvent
(This is a merged update with R4.0.1)
Bug Fixes:
- Fixed MEG4 reading model data from MEG3 (Issue #7)
- Fixed UnsupportedOperationError (Issue #9)
- Fixed drifty mounting (Issue #11)
- Fixed model loading as leather horse armor
- Fixed model floating in 1.20.2
- Fixed leftover "test" message when right-clicking with diamond (lol)
- [API] Fixed model render distance set to 0 when applied in consumer
New API:
- Methods for creatingPriorityHandlerandStateMachineHandler
- ExposedforceStopAllAnimationtoAnimationHandler
- API for getting in-world locations of bones
- TrackedEntity predicate