By registering with us, you'll be able to discuss, share and private message with other members of our community.
SignUp Now!Level up your summer with an exclusive 25% OFF on all Monthly Ranks 🎮
Use coupon code:
⏰ Limited time offer — Catch the summer boost before it ends!
ModelEngine • BetterModel • Animations • Scaling • Hover Effects • Stability Fixes
BetterModel 3.x is Here
ModeledNPCs now officially supports BetterModel 3.x.
Starting with v9.0, ModeledNPCs ships as one single JAR that automatically detects the model system installed on your server and uses the appropriate integration at runtime.
[]ModelEngine installed → ModelEngine integration
[]BetterModel installed → BetterModel integration- Neither installed → ModeledNPCs can still start without loading model-specific code
You no longer need a separate ModeledNPCs build depending on which model plugin your server uses.
Important: Running ModelEngine and BetterModel simultaneously is currently not supported. If both are installed, ModelEngine takes priority.
ModelEngine functionality remains supported and existing ModelEngine NPCs continue working normally.
New — BetterModel NPC Creation
BetterModel models can now be spawned directly as ModeledNPCs NPCs.
Code (Text):
/mnpc create bettermodel
ModeledNPCs automatically uses any compatible model registered inside BetterModel.
NPC data remains persistent, meaning BetterModel NPCs are restored after server restarts just like existing ModelEngine NPCs.
BetterModel Animations
BetterModel NPCs now support the complete ModeledNPCs animation workflow.
Animation Picker
The admin animation GUI automatically retrieves animations from the NPC's current model.
You can configure:
[]Looped / idle animations
[]Interaction animations
The old ModelEngine Animations menu has also been renamed simply to:
Code (Text):
Animations
The same menu now works with both supported model providers.
Looped Animations
BetterModel's native looping system is now supported.
Once a looped animation is selected, BetterModel keeps that animation running continuously without requiring ModeledNPCs to repeatedly restart it.
This also fixes the previous one-shot behavior encountered during early BetterModel integration testing.
Interaction Animations
Animations configured to play when a player interacts with an NPC now work correctly with BetterModel NPCs as well.
BetterModel Scaling
Both permanent NPC scaling and ModeledNPCs' hover effect now support BetterModel.
Permanent Scaling
Code (Text):
/mnpc scale
now resizes BetterModel models using BetterModel's native model scaler API.
Scaling continues to persist as part of the NPC configuration.
Hover Scaling
The existing hover effect is now provider-independent.
When a player aims at an NPC, the model can temporarily increase in size just like ModelEngine NPCs.
The system automatically routes the scaling operation through the correct model provider.
Major Internal Model Provider Rewrite
v9.0 introduces a new internal IModelProvider abstraction.
Instead of ModeledNPCs systems communicating directly with ModelEngine, common model operations are now routed through the active model backend.
This includes:
[]Applying models
[]Removing models
[]Playing animations
[]Stopping animations
[]Listing available animations
[]Changing model scale- Resolving model/entity information
The currently active integration is managed by the new ModelProviderRegistry.
This makes ModeledNPCs much easier to maintain and allows additional model providers to be integrated in the future without rewriting the NPC system.
Existing third-party plugins using the ModeledNPCs API are unaffected by this internal change.
Bug Fixes
BetterModel NPCs disappearing after restart
Fixed an issue where BetterModel NPCs existed in ModeledNPCs' internal data after a restart but no actual entity/model appeared in the world.
The NPC spawning system previously had no loading branch for the bettermodel NPC type.
BetterModel NPCs are now recreated correctly whenever NPC data is loaded.
NPC IDs skipping numbers
Fixed NPC IDs sometimes progressing like:
Code (Text):
1, 3, 5, 7...
instead of:
Code (Text):
1, 2, 3, 4...
The NPC loader was calling the ID allocator while restoring existing NPCs, which silently consumed an additional ID for every NPC loaded.
A new internal bumpNextId() system now updates the minimum available ID without allocating one.
Startup crash without ModelEngine
Fixed an important compatibility issue affecting servers that did not have ModelEngine installed.
Several ModeledNPCs listeners still contained direct ModelEngine API types inside their bytecode.
Even when those methods were never executed, the JVM could attempt to resolve those classes while Bukkit registered the listener and cause a startup failure.
Affected systems included parts of:
[]NPC greetings
[]Quest handling- NPC hover effects
ModelEngine-specific operations are now isolated inside dedicated compatibility helpers such as MEGlowHelper.
Core listeners no longer require ModelEngine classes to exist.
Startup/runtime issues without MythicMobs
Fixed another optional-dependency isolation problem involving the MythicMobs compatibility helper.
The helper is now safely accessible from the required data-layer classes without forcing MythicMobs to be installed.
WorldGuard crash when WorldGuard was not installed
NPC interaction handling previously contained a direct reference to WorldGuard's UseEntityEvent.
Because the class existed inside the primary NPC listener, Bukkit could fail to load the entire listener when WorldGuard was absent.
WorldGuard handling has now been moved into a dedicated:
Code (Text):
WorldGuardNPCListener
This listener is only registered when WorldGuard is actually available.
Servers without WorldGuard can now use NPC interaction systems without loading any WorldGuard classes.
Hologram bouncing during movement and animations
Fixed holograms visibly bouncing up and down while NPCs rotated or played certain animations.
The hologram anchor system previously compared entity coordinates using exact floating-point equality.
Very small Y-axis changes caused by model animations could therefore be interpreted as actual NPC movement, forcing the hologram to repeatedly reposition itself.
A 0.08 block tolerance is now used to ignore insignificant vertical movement.
NoClassDefFoundError spam during chunk loading
Fixed repeated console errors when ModelEngine was not installed.
ModelEngineHandler.hasModelAttached() previously caught:
Code (Text):
Exception
However, missing JVM classes throw NoClassDefFoundError, which inherits from Error rather than Exception.
The compatibility boundary now safely handles this condition without generating error spam every time chunks load.
Double onDisable execution
Added protection against plugin shutdown cleanup executing more than once during unusual shutdown sequences.
ModeledNPCs now uses an internal AtomicBoolean guard so shutdown logic can only execute once.
Empty animation picker for BetterModel NPCs
The animation GUI previously relied on ModelEngine-specific logic to retrieve animations.
BetterModel NPCs therefore displayed an empty animation menu.
Animation discovery now routes through:
Code (Text):
IModelProvider.listAnimations()
The correct animations are automatically retrieved from whichever backend powers the NPC.
Hover scaling only working with ModelEngine
The hover system previously contained a hardcoded check requiring the NPC type to be modelengine.
That check has been removed.
Hover scaling now uses the active model provider and works with both ModelEngine and BetterModel.
Technical Changes
[]IModelProvider — shared abstraction for model operations.
[]ModelProviderRegistry — detects and provides the active model backend.
[]BetterModelProvider — native BetterModel 3.x implementation using BetterModel's typed API.
[]ModelEngineProvider — ModelEngine implementation using the same provider interface.
[]MEGlowHelper — isolates ModelEngine glow functionality from generic NPC listeners.
[]WorldGuardNPCListener — isolates optional WorldGuard API references.
[]DataFileHandler.bumpNextId(int) — safely updates the NPC ID floor during data loading.
[]Animation GUI renamed from ModelEngine Animations to Animations.
BetterModel support uses its native typed API rather than a reflection-based bridge.
This keeps the integration cleaner, easier to maintain, and properly integrated with BetterModel 3.x.
Compatibility
[]ModelEngine — Supported
[]BetterModel 3.x — Supported
[]MythicMobs — Optional
[]WorldGuard — Optional
ModelEngine and BetterModel should not currently be installed together.
If both are detected, ModeledNPCs will use ModelEngine.
Protection
ModeledNPCs v9.0 is protected using OreoObfuscator STANDARD mode.
This includes:
[]Class / member renaming
[]AES string encryption- Number obfuscation
ModeledNPCs v9.0
One plugin. Multiple model systems.
BetterModel 3.x support is now officially available alongside ModelEngine.
Thank you to everyone testing ModeledNPCs and reporting issues.
[New] Permanent NPC Scaling — /mnpc scale <id> <value>
- New field permanentScale saved to the NPC's data (persists across restarts)
- Scale is automatically re-applied when the NPC spawns/respawns
- Command sets it live and saves immediately
[Fix] Hover Effect Resets Custom Scale
- NPCs with a custom scale were being reset to 1.0 after a player stopped hovering
- Now restores to permanentScale instead of hardcoded 1.0
- Hover animation now multiplies on top of the permanent scale (e.g. a 0.5x NPC will hover at 0.5 × hoverMultiplier)
- Fixed NPC glow effects not working correctly when other plugins (e.g. CMI) send hologram packets
- The save now only happens once per timer tick (after the loop), only if any NPC actually needed correction, via a needsSave flag.
- The "Saving..." and "successfully saved" log lines are now gated behind debug: true in config, so they're silent in normal operation.
ModeledNPCS — New Escort System Update + Major Improvements
A huge update just landed for ModeledNPCS, bringing major improvements to the Escort System, fully configurable arrival behaviors, and important compatibility fixes.
Escort System — Arrival Animations (Clone NPCs)
Clone escort NPCs can now automatically play custom animations when reaching their destination.
New YAML fields:
Features:
- arrive-animation: <name>
- arrive-animation-duration: <seconds>
This allows cinematic escort endings directly from configuration without additional coding.
- Uses MEGAnimationHandler.playLoopedAnimationByName() directly on the clone
- Fully per-player — every escort session is completely isolated
- 0 duration keeps the animation playing until the clone is removed
Escort System — Arrival Commands
Clone escorts can now execute commands immediately upon arrival through YAML configuration.
New section:
Patrol:
arrival-commands:
Supported formats:
Additional features:
- console: <command>
- player: <command>
- No prefix → defaults to console execution
Perfect for:
- Full {player} placeholder support
- Commands execute before the destination dialog opens
- Fully session-based and independent for every player
New Dialog YAML Fields
- Rewards
- Teleports
- Quest progression
- Effects & cutscenes
- Dynamic story events
Added new configurable escort fields directly inside dialog trees:
FieldLocationDescription
arrive-animation Destination tree root Animation played on arrival
arrive-animation-duration Destination tree root Duration before removal
arrival-commands Under Patrol: Commands executed on arrival
priest.yml Fully Rewritten
The entire priest.yml escort configuration has been reworked.
Changes include:
- Added arrive-animation: idle
- Added arrive-animation-duration: 0
- Added arrival-commands for every patrol route and state
- All escort routes are now fully YAML-driven with zero database setup required
Patrol System Compatibility
The original /mnpcai patrol arrival system remains completely unchanged.
Existing SQLite-based features continue to work normally:
No migrstion required.
- Animations
- Wait times
- Arrival dialogs
- Commands
- Permissions
Dependency Update
Updated:
Fixes:
- GlowingEntities 1.4.3 → 1.4.11
No API changes required fully internal compatibility fix.
- IllegalArgumentException: Malformed version: 26.1.2.build.60-stable
- Startup crashes caused by Paper's custom version formatting
► Holograms (/mnpc name) not appearing near NPCs
Fixed a world-reference mismatch that caused holograms to be
immediately despawned after creation. World comparison now uses
name-based lookup instead of object equality, fixing compatibility
with Multiverse-Core and any plugin that reloads worlds.
The hologram location also now re-resolves its World reference
from Bukkit on each tick, preventing stale references after
world reloads.
► /mnpc name hologram silently skipped when name matched model ID
A check in the name reapply logic was nullifying the custom
display name if it happened to equal the NPC's internal model
name, causing the hologram to never be created. Removed.
► Color codes (&c, &l, etc.) not rendering in hologram text
TextDisplay entities were receiving raw legacy color strings
via Component.text(), which treated § as a literal character.
Now uses LegacyComponentSerializer so color and formatting
codes display correctly.
► LuxDialogues integration error on startup
"Failed to register events" console error when LuxDialogues
is not installed. The event listener is now only registered
when LuxDialogues is confirmed available, eliminating the
error entirely.
We get it, advertisements are annoying!
Sure, ad-blocking software does a great job at blocking ads, but it also blocks useful features of our website. For the best site experience please disable your AdBlocker.