- Versions
- 1.21
ModeledNPCs – Advanced NPC Management for MythicMobs & ModelEngine
Transform your Minecraft world into a dynamic, interactive universe with ModeledNPCs—a complete NPC system that brings your custom entities to life. Whether you're building an immersive RPG, a quest-driven adventure, or a lively marketplace, this plugin gives you everything you need to create stunning, intelligent, and fully customizable NPCs.
Core Highlights
Trigger any command when players interact with NPCs:
Code (YAML):
npcs:
'0':
name: guardred
type: modelengine
commands:
- 'player: spawn'
autoLook: true
customDisplayName: elias
internalUUID: eeee23aa-4655-4fea-ae7c-fc301995f591
entityUUID: f8434a5e-720e-46d2-82ad-a2e760973cd2
location:
world: void
x: 668.4004370430782
y: 114.5
z: -481.95376398341114
yaw: 1.4
pitch: 3.75
'1':
name: guardred
type: modelengine
commands: []
autoLook: true
customDisplayName: eliasas
internalUUID: 61bbfbc4-49ca-49b3-abab-6c39d86e2d4b
entityUUID: b2f36557-0dd6-4eac-a5a1-bf2b9cda4d4d
location:
world: void
x: 667.4445800541569
y: 113.0
z: -479.03800417818377
yaw: -178.44878
pitch: -5.549968
'2':
name: adventurerNPC
type: mythicmobs
commands: []
autoLook: false
internalUUID: d06aef99-88c8-480e-ab93-3bce0996a808
entityUUID: 60cac161-9c96-443c-8daa-21ad2f479827
location:
world: void
x: 669.765871198872
y: 109.0
z: -469.3264074342184
yaw: 10.100135
pitch: 10.650009
'3':
name: adventurerNPC
type: mythicmobs
commands:
- 'player: spawn'
autoLook: false
internalUUID: e64d6b03-d235-4424-b9f8-8c15ca713474
entityUUID: a400da95-fe63-4140-a686-ffe2e93ebeb4
location:
world: void
x: 668.9977608912066
y: 109.0
z: -463.4940848081191
yaw: -173.79921
pitch: 2.2500105
'4':
name: archerNPC
type: mythicmobs
commands: []
autoLook: false
customDisplayName: sdffds
internalUUID: 3eec175b-f8da-4c11-9d6c-d34aebbb74b9
entityUUID: 2ee3deef-b848-45b2-8512-aedc40c905e8
location:
world: void
x: 667.8815271551339
y: 115.0
z: -483.44825838702076
yaw: 1.25
pitch: 3.9
'5':
name: archer
type: modelengine
commands: []
autoLook: true
customDisplayName: asdsa
internalUUID: 2c978b2e-160e-44bd-9228-cd14b07d6963
entityUUID: 694cbabe-cdfe-465e-81d6-a03f750aa90d
location:
world: void
x: 666.4484577368393
y: 112.0
z: -475.7628949632364
yaw: -21.399813
pitch: -0.6000005
'6':
name: quest_graywizard
type: modelengine
commands:
- 'player: enchanter'
autoLook: true
internalUUID: e0da7486-fd52-43ea-84c1-a4dbc4c4b21c
entityUUID: 1b1d0741-b527-40b4-9f84-ab8cea6a23b0
location:
world: void
x: 671.5105520189101
y: 109.0
z: -456.71635729297503
yaw: 75.32529
pitch: -19.94992
️Powerful Trader System
Create complex traders in trader.yml:
Plug into top quest systems:
Code (YAML):
CatchFishDialog:
npc: 1
yHeight: 20
questName: "Catch Fish"
displayName:
- "&b&lCatch Fish"
- "%dialogstatus_<Catch Fish>_status%"
dialog:
Action: DIALOG
Dialog:
- "Welcome to the quest Catch Fish!"
- "Options: <yellow>1: Continue</yellow>, <red>2: Cancel</red>"
Options:
1:
Action: DIALOG
Dialog:
- "Are you ready to help us catch fish?"
- "Options: <yellow>1: Start</yellow>, <red>2: Cancel</red>"
Options:
1:
Action: START
Dialog:
- "Great! Catch 10 fish and return to me."
2:
Action: CANCEL
Dialog:
- "Alright, maybe next time."
2:
Action: CANCEL
Dialog:
- "Maybe another time!"
wood:
npc: 2
questName: wood
displayName:
- "&c&lWood Quest"
- "%dialogstatus_<wood>_status%"
yHeight: 3
dialog:
Action: DIALOG
Dialog:
- The bridge is broken! Can you help fix it?
- "Options: <yellow>1: Yes</yellow>, <red>2: No</red>"
Options:
"1":
Action: START
Dialog:
- Great! Bring 10 wood planks to the carpenter.
"2":
Action: CANCEL
Dialog:
- No worries. Let me know if you change your mind.
SlayDragonDialog:
npc: 3
displayName:
- "&b&lSlay the Dragon"
- "%dialogstatus_<Slay the Dragon>_status%"
questName: "Slay the Dragon"
dialog:
Action: DIALOG
Dialog:
- "A dragon is terrorizing the village! Can you help us slay it?"
- "Options: <yellow>1: Yes</yellow>, <red>2: No</red>"
Options:
1:
Action: START
Dialog:
- "Prepare yourself for battle!"
2:
Action: CANCEL
Dialog:
- "We understand. It's a dangerous task."
️ModelEngine Animation Support
Bring your NPCs to life with animations:
Code (YAML):
# This file maps animations to specific NPCs by their ID.
# Define animations per NPC using:
# - looped_animation: animation that plays continuously
# - interact_animation: animation that plays when the player interacts
1:
looped_animation: walk
interact_animation: attack
2:
looped_animation: walk
interact_animation: attack
3:
looped_animation: walk
interact_animation: attack
4:
looped_animation: walk
interact_animation: attack
5:
looped_animation: fidget
interact_animation: greet
# Add more NPCs below
# Make sure animation names match your ModelEngine blueprints!
#
# Example:
# 6:
# looped_animation: idle
# interact_animation: greet
Visual Effects & AutoLook
Code (YAML):
1:
loop: FLAME
loop_count: 10
loop_yOffset: 2.5
onInteract:
particle: HEART
count: 40
yOffset: 2.5
sound: ENTITY_VILLAGER_YES
2:
loop: CLOUD
loop_count: 50
loop_yOffset: 2.7
onInteract:
particle: VILLAGER_HAPPY
count: 60
yOffset: 2.7
sound: ENTITY_PLAYER_LEVELUP
3:
onInteract:
sound: BLOCK_NOTE_BLOCK_BELL
yOffset: 2.4
4:
loop: ENCHANTMENT_TABLE
loop_count: 5
loop_yOffset: 2.3
lookdata.yml
Code (YAML):
autolook:
'5': true
'0': true
'1': true
'6': true
'2': false
'3': false
'4': false
Dynamic Reloading & Maintenance Tools
Reload any part of your NPC system without a restart:
Want to create hidden NPCs only visible to VIPs or quest-eligible players?
/mnpc hide <id> <permission>
Complete Command List
Code (YAML):
/mnpc create <modelengine|mythicmobs> <name> # Create an NPC
/mnpc remove <id> # Remove an NPC
/mnpc move <id> # Move an NPC to your location
/mnpc tp <id> # Teleport to an NPC
/mnpc name <id> <new_name> [height] # Change name and height
/mnpc addcmd <player|console|sudo> <cmd> # Add a command
/mnpc removecmd <cmd> # Remove a command
/mnpc hide <id> <perm|remove> # Manage visibility
/mnpc look <id> # Enable AutoLook (follow players)
/mnpc rotate <id> <deg> <left|right> # Rotate an NPC
/mnpc list # View all NPCs
/mnpc reload # Reload full config
/mnpc reloadname # Reload names/AutoLook
/mnpc reloadeffects # Reload particle effects
/mnpc debug # Check orphaned/bugged NPCs
All commands require permission: mnpc.use
️ Config Files Overview
Required:
Optional but recommended:
Documentation & Support
Transform your Minecraft world into a dynamic, interactive universe with ModeledNPCs—a complete NPC system that brings your custom entities to life. Whether you're building an immersive RPG, a quest-driven adventure, or a lively marketplace, this plugin gives you everything you need to create stunning, intelligent, and fully customizable NPCs.
Core Highlights
Supports both ModelEngine and MythicMobs- Assign complex command chains to NPCs
- Integrate with questing plugins like BetonQuest, Quests & QuestDialogs
- Dynamic trading system with GUI confirmation
- Full Adventure API support for rich text, hover events & translations
- Data-persistent NPCs with live reloading, debug tools & permission controls
- Spawn NPCs using ModelEngine or MythicMobs with a single command.
- Each NPC is registered with its ID, name, entity type, UUID, and position.
- Automatic support for custom names and holograms.
- Supports saving by SQLITE FOR MAXIMUM PERFORMANCE
Trigger any command when players interact with NPCs:
- player: – Run as the player
- console: – Run as the server console
- sudo: – Run as the player with OP
- Custom conditions
- Permission checks
- Delays and cooldowns
Creating a NPC Will happen with this command :
Code (YAML):
/mnpc create <modelengine|mythicmobs> <name> # Create an NPC
/mnpc addcmd <player|console|sudo> <cmd> # Add a command
/mnpc removecmd <cmd> # Remove a command[/FONT]
and data will be saved in npcdata.yml as follows :
Code (YAML):
npcs:
'0':
name: guardred
type: modelengine
commands:
- 'player: spawn'
autoLook: true
customDisplayName: elias
internalUUID: eeee23aa-4655-4fea-ae7c-fc301995f591
entityUUID: f8434a5e-720e-46d2-82ad-a2e760973cd2
location:
world: void
x: 668.4004370430782
y: 114.5
z: -481.95376398341114
yaw: 1.4
pitch: 3.75
'1':
name: guardred
type: modelengine
commands: []
autoLook: true
customDisplayName: eliasas
internalUUID: 61bbfbc4-49ca-49b3-abab-6c39d86e2d4b
entityUUID: b2f36557-0dd6-4eac-a5a1-bf2b9cda4d4d
location:
world: void
x: 667.4445800541569
y: 113.0
z: -479.03800417818377
yaw: -178.44878
pitch: -5.549968
'2':
name: adventurerNPC
type: mythicmobs
commands: []
autoLook: false
internalUUID: d06aef99-88c8-480e-ab93-3bce0996a808
entityUUID: 60cac161-9c96-443c-8daa-21ad2f479827
location:
world: void
x: 669.765871198872
y: 109.0
z: -469.3264074342184
yaw: 10.100135
pitch: 10.650009
'3':
name: adventurerNPC
type: mythicmobs
commands:
- 'player: spawn'
autoLook: false
internalUUID: e64d6b03-d235-4424-b9f8-8c15ca713474
entityUUID: a400da95-fe63-4140-a686-ffe2e93ebeb4
location:
world: void
x: 668.9977608912066
y: 109.0
z: -463.4940848081191
yaw: -173.79921
pitch: 2.2500105
'4':
name: archerNPC
type: mythicmobs
commands: []
autoLook: false
customDisplayName: sdffds
internalUUID: 3eec175b-f8da-4c11-9d6c-d34aebbb74b9
entityUUID: 2ee3deef-b848-45b2-8512-aedc40c905e8
location:
world: void
x: 667.8815271551339
y: 115.0
z: -483.44825838702076
yaw: 1.25
pitch: 3.9
'5':
name: archer
type: modelengine
commands: []
autoLook: true
customDisplayName: asdsa
internalUUID: 2c978b2e-160e-44bd-9228-cd14b07d6963
entityUUID: 694cbabe-cdfe-465e-81d6-a03f750aa90d
location:
world: void
x: 666.4484577368393
y: 112.0
z: -475.7628949632364
yaw: -21.399813
pitch: -0.6000005
'6':
name: quest_graywizard
type: modelengine
commands:
- 'player: enchanter'
autoLook: true
internalUUID: e0da7486-fd52-43ea-84c1-a4dbc4c4b21c
entityUUID: 1b1d0741-b527-40b4-9f84-ab8cea6a23b0
location:
world: void
x: 671.5105520189101
y: 109.0
z: -456.71635729297503
yaw: 75.32529
pitch: -19.94992
️Powerful Trader System
Create complex traders in trader.yml:
- Clean per-NPC config with feature flags: enableOffers / enableStock / enablePerPlayerLimits
- Paginated Offers GUI (6×9) with Prev/Next buttons (SmartInvs)
- Built-in stock & timed restock with persistent runtime file
- Per-player purchase limits with timed resets
- Costs: money (Vault), XP levels, and/or items
- Rewards: items, money, and/or commands
- Item builder: custom model data, enchants, attributes (amount/operation/slotGroup), PDC tags, unbreakable, names & lore
- Formatting everywhere: MiniMessage-style tags (<green>, <bold>, <br>) and classic & codes; PlaceholderAPI supported
- Optional confirmation GUI before purchases
- Legacy single-trade path still supported if you don’t want the per-offer GUI
- Code (YAML):
################################################################################
# Trader Config (for your current TraderManager)
# - Works on 1.21+
# - Requires Vault for money costs/rewards
# - Optional: PlaceholderAPI (PAPI) for %placeholders%
# - Color formatting:
# * Legacy & codes are supported (e.g., &a, &c, &l)
# * A light subset of MiniMessage tags is mapped to legacy automatically:
# <yellow>, <red>, <green>, <gold>, <bold>, <italic>, <underlined>, <strikethrough>, <br>
# - Commands:
# * "console:<cmd>" runs as console
# * "player:<cmd>" runs as the player
# * "%player%" is replaced with the player name
################################################################################
# ───────────────────────────────────────────────────────────────────────────────
# NPC 1 — LEGACY SINGLE-TRADE (no offers GUI)
# This mode uses a single set of requirements + commands/message.
# Set "features.enableOffers: false" (or omit "features") to use legacy mode.
# ───────────────────────────────────────────────────────────────────────────────
npc-1:
display-name: "&6Stone Trader &7(%player_name%)"
requireConfirmation: true # shows a small confirm GUI before completing
# In legacy mode, ONLY this section + commands/message are used
requirements:
exp: 10 # player must have at least 10 XP levels
money: 500 # needs $500 (Vault)
items: # items the player must have (will be removed on success)
"1":
material: STONE
amount: 1
modelId: 57 # optional CustomModelData match
fail: "<red>You lack 1x special Stone</red>" # shown if missing
# Run after successful trade
commands:
- "console:money give %player% 1000"
- "player:me just traded 1 stone!"
message: "&aTrade complete! You earned &e$1000&a."
# features section present but "enableOffers" is false, so legacy path is used
features:
enableOffers: false # ← important: keeps legacy mode
enableStock: false # ignored in legacy mode
enablePerPlayerLimits: false # ignored in legacy mode
# ───────────────────────────────────────────────────────────────────────────────
# NPC 2 — BASIC OFFERS SHOP (SmartInvs GUI, no stock/limits)
# Turn on offers and define "offers:"; legacy requirements are ignored.
# ───────────────────────────────────────────────────────────────────────────────
npc-2:
display-name: "&bFisherman &7| <yellow>Deals</yellow>"
requireConfirmation: false
features:
enableOffers: true
enableStock: false
enablePerPlayerLimits: false
# Each key under "offers" is a separate buy option (button in the GUI)
offers:
fish_kit:
title: "&eFish Starter Kit"
icon: # what the player sees in the GUI
material: SALMON
amount: 1
# modelId: 123 # optional CustomModelData for the icon
lore:
- "&7A simple kit to start fishing."
- "<gold>Price shows below</gold>"
- "&7Hello &f%player_name%&7!"
cost: # what the player pays
money: 250
exp: 0
items:
- material: STRING
amount: 5
gives: # what the player receives
items:
- material: FISHING_ROD
amount: 1
name: "&b&lStarter Rod"
lore:
- "&7Light and reliable."
- "<yellow>Good luck!</yellow>"
unbreakable: true
enchants:
LURE: 2
LUCK_OF_THE_SEA: 2
commands:
- "console:bc &a%player% bought a Fish Starter Kit!"
# No stock/limits here because features.disable those
# ───────────────────────────────────────────────────────────────────────────────
# NPC 3 — PREMIUM OFFER WITH STOCK & PER-PLAYER LIMITS
# Shows timed restock and daily purchase limits. Great for limited-time / rare items.
# ───────────────────────────────────────────────────────────────────────────────
npc-3:
display-name: "&dPremium Smith &8• <green>Limited Offers</green>"
requireConfirmation: true
features:
enableOffers: true
enableStock: true # enable timed stock management
enablePerPlayerLimits: true # enable per-player purchase caps
offers:
ocean_blade:
title: "&b&lOcean Blade"
icon:
material: DIAMOND_SWORD
lore:
- "&7A blade touched by the tide."
- "<gold>Limited stock — restocks hourly</gold>"
- "&7Your money: &a$%vault_eco_balance_formatted%"
cost:
money: 5000
exp: 10
items:
- material: PRISMARINE_CRYSTALS
amount: 16
gives:
# Option A — issue ItemsAdder (or any plugin) command(s)
commands:
- "console:ia give %player% itemsaddercean_blade 1"
# Option B — or give a fully custom ItemStack built by the plugin itself
# items:
# - material: DIAMOND_SWORD
# amount: 1
# name: "&b&lOcean Blade"
# lore:
# - "&7Forged in the deep."
# - "&7(&bLimited Edition&7)"
# modelId: 12345
# unbreakable: true
# enchants:
# SHARPNESS: 5
# LOOT_BONUS_MOBS: 3
# # Attributes can be simple numbers OR detailed objects (both supported):
# attributes:
# GENERIC_ATTACK_DAMAGE: 6.0
# generic.attack_speed:
# amount: -2.2
# operation: ADD_NUMBER # ADD_NUMBER | ADD_SCALAR | MULTIPLY_SCALAR_1
# slotGroup: MAINHAND # ANY|HAND|MAINHAND|OFFHAND|ARMOR|HEAD|CHEST|LEGS|FEET
# # PersistentDataContainer (namespace:key → string value)
# pdc:
# "yourplugincean_blade": "1"
# STOCK SETTINGS (persisted in trader_runtime.yml)
stock:
max: 10 # hard cap
initial: 5 # first load value (if runtime empty)
restock:
amount: 2 # add this much per tick
interval_seconds: 3600 # every 1 hour
# PER-PLAYER LIMITS
perPlayer:
limit: 1 # each player can buy once...
reset_seconds: 86400 # ...then resets after 24h
tide_token:
title: "&3Tide Token"
icon:
material: PRISMARINE_CRYSTALS
amount: 1
lore:
- "&7Trade these with rare vendors."
- "<yellow>Always in stock.</yellow>"
cost:
money: 250
gives:
money: 0
items:
- material: PRISMARINE_CRYSTALS
amount: 1
name: "&3Tide Token"
lore:
- "&7A coin minted under the waves."
# simple attribute example
attributes:
GENERIC_LUCK: 1.0
# ───────────────────────────────────────────────────────────────────────────────
# NPC 4 — FULLY CUSTOM ITEM (no external commands)
# Demonstrates attributes, slotGroup, enchants, PDC, modelId, etc.
# ───────────────────────────────────────────────────────────────────────────────
npc-4:
display-name: "&aArtifact Curator"
requireConfirmation: true
features:
enableOffers: true
enableStock: false
enablePerPlayerLimits: false
offers:
relic_bundle:
title: "&aRelic Bundle"
icon:
material: CHEST
lore:
- "&7A bundle of mysterious relics."
- "<gold>One per click</gold>"
cost:
items:
- material: EMERALD
amount: 8
gives:
items:
- material: TOTEM_OF_UNDYING
amount: 1
name: "&e&lGlimmering Totem"
lore:
- "&7It hums with quiet power."
- "<green>Handle with care.</green>"
modelId: 9001
enchants:
VANISHING_CURSE: 1
# slotGroup here acts as default for attribute entries that don't set their own
slotGroup: OFFHAND
attributes:
# "simple" style (number only → amount + ADD_NUMBER)
GENERIC_ARMOR: 2.0
# "object" style (full control)
generic.armor_toughness:
amount: 1.0
operation: ADD_NUMBER
slotGroup: OFFHAND
pdc:
"myplugin:relic": "glimmer_totem"
"myplugin:tier": "artifact"
# ───────────────────────────────────────────────────────────────────────────────
# NOTES
# • "display-name" and any "lore"/"title" strings support:
# - PlaceholderAPI, e.g. %player_name%, %vault_eco_balance_formatted%
# - Legacy color codes (&a, &c, &l…)
# - Light MiniMessage tags: <yellow>, <red>, <green>, <gold>, <bold>, <italic>, <underlined>, <strikethrough>, <br>
#
# • OFFERS vs LEGACY:
# - Set features.enableOffers: true → Offers GUI is used and "offers:" is required.
# - Set features.enableOffers: false (or omit "features") → Legacy single-trade path uses:
# requirements:, commands:, message:
#
# • COST ITEMS format (both legacy + offers):
# - items:
# - material: STONE
# amount: 3
# modelId: 57 # optional CustomModelData match
#
# • REWARD ITEMS format (offers → gives.items):
# - material: <MATERIAL>
# - amount: <int>
# - name: "<colored display name>"
# - lore: ["line1", "line2", ...]
# - modelId: <int> # resource-pack CustomModelData
# - unbreakable: true|false
# - enchants: { SHARPNESS: 5, LUCK_OF_THE_SEA: 2 } # namespaced/enchant names supported
# - attributes:
# # You can mix styles:
# GENERIC_ATTACK_DAMAGE: 5.0
# generic.attack_speed:
# amount: -2.0
# operation: ADD_NUMBER # ADD_NUMBER | ADD_SCALAR | MULTIPLY_SCALAR_1
# slotGroup: MAINHAND # ANY|HAND|MAINHAND|OFFHAND|ARMOR|HEAD|CHEST|LEGS|FEET
# - pdc:
# "namespace:key": "stringValue" # stored in PersistentDataContainer
#
# • STOCK (offers only; requires features.enableStock: true):
# stock:
# max: <int> # total cap
# initial: <int> # first value if runtime empty
# restock:
# amount: <int> # how many to add per tick
# interval_seconds: <int> # one restock tick every N seconds
#
# • PER-PLAYER LIMITS (offers only; requires features.enablePerPlayerLimits: true):
# perPlayer:
# limit: <int> # max purchases in the window
# reset_seconds: <int> # window length in seconds (e.g., 86400 = 24h)
#
# • RUNTIME:
# Current stock & per-player counters are saved in "trader_runtime.yml".
################################################################################
Plug into top quest systems:
Full compatibility with QuestDialogs (native)- Works with Quests and BetonQuest
- Dynamically shows holograms based on player progress
Code (YAML):
CatchFishDialog:
npc: 1
yHeight: 20
questName: "Catch Fish"
displayName:
- "&b&lCatch Fish"
- "%dialogstatus_<Catch Fish>_status%"
dialog:
Action: DIALOG
Dialog:
- "Welcome to the quest Catch Fish!"
- "Options: <yellow>1: Continue</yellow>, <red>2: Cancel</red>"
Options:
1:
Action: DIALOG
Dialog:
- "Are you ready to help us catch fish?"
- "Options: <yellow>1: Start</yellow>, <red>2: Cancel</red>"
Options:
1:
Action: START
Dialog:
- "Great! Catch 10 fish and return to me."
2:
Action: CANCEL
Dialog:
- "Alright, maybe next time."
2:
Action: CANCEL
Dialog:
- "Maybe another time!"
wood:
npc: 2
questName: wood
displayName:
- "&c&lWood Quest"
- "%dialogstatus_<wood>_status%"
yHeight: 3
dialog:
Action: DIALOG
Dialog:
- The bridge is broken! Can you help fix it?
- "Options: <yellow>1: Yes</yellow>, <red>2: No</red>"
Options:
"1":
Action: START
Dialog:
- Great! Bring 10 wood planks to the carpenter.
"2":
Action: CANCEL
Dialog:
- No worries. Let me know if you change your mind.
SlayDragonDialog:
npc: 3
displayName:
- "&b&lSlay the Dragon"
- "%dialogstatus_<Slay the Dragon>_status%"
questName: "Slay the Dragon"
dialog:
Action: DIALOG
Dialog:
- "A dragon is terrorizing the village! Can you help us slay it?"
- "Options: <yellow>1: Yes</yellow>, <red>2: No</red>"
Options:
1:
Action: START
Dialog:
- "Prepare yourself for battle!"
2:
Action: CANCEL
Dialog:
- "We understand. It's a dangerous task."
️ModelEngine Animation Support
Bring your NPCs to life with animations:
- Triggered or continuous animations
- Controlled via meganimation.yml or directly in-game
Code (YAML):
# This file maps animations to specific NPCs by their ID.
# Define animations per NPC using:
# - looped_animation: animation that plays continuously
# - interact_animation: animation that plays when the player interacts
1:
looped_animation: walk
interact_animation: attack
2:
looped_animation: walk
interact_animation: attack
3:
looped_animation: walk
interact_animation: attack
4:
looped_animation: walk
interact_animation: attack
5:
looped_animation: fidget
interact_animation: greet
# Add more NPCs below
# Make sure animation names match your ModelEngine blueprints!
#
# Example:
# 6:
# looped_animation: idle
# interact_animation: greet
Visual Effects & AutoLook
- Add ambient effects like particles, sounds, and flames
- Set up looping effects to enhance immersion
- Enable AutoLook: NPCs track the closest player automatically
- Fully persistent, toggleable with a simple tag
Code (YAML):
1:
loop: FLAME
loop_count: 10
loop_yOffset: 2.5
onInteract:
particle: HEART
count: 40
yOffset: 2.5
sound: ENTITY_VILLAGER_YES
2:
loop: CLOUD
loop_count: 50
loop_yOffset: 2.7
onInteract:
particle: VILLAGER_HAPPY
count: 60
yOffset: 2.7
sound: ENTITY_PLAYER_LEVELUP
3:
onInteract:
sound: BLOCK_NOTE_BLOCK_BELL
yOffset: 2.4
4:
loop: ENCHANTMENT_TABLE
loop_count: 5
loop_yOffset: 2.3
lookdata.yml
Code (YAML):
autolook:
'5': true
'0': true
'1': true
'6': true
'2': false
'3': false
'4': false
Dynamic Reloading & Maintenance Tools
Reload any part of your NPC system without a restart:
- NPCs
- Names
- AutoLook settings
- Visual effects
- /mnpc reload – Reload everything
- /mnpc reloadname – Reload names/AutoLook
- /mnpc reloadeffects – Reload visual effects
- /mnpc debug – Check for orphaned NPCs, chunk errors, and entity consistency
Want to create hidden NPCs only visible to VIPs or quest-eligible players?
- Set a visibility permission with:
/mnpc hide <id> <permission>
- Players without permission won’t see the NPC
- No restart needed—fully dynamic
Complete Command List
Code (YAML):
/mnpc create <modelengine|mythicmobs> <name> # Create an NPC
/mnpc remove <id> # Remove an NPC
/mnpc move <id> # Move an NPC to your location
/mnpc tp <id> # Teleport to an NPC
/mnpc name <id> <new_name> [height] # Change name and height
/mnpc addcmd <player|console|sudo> <cmd> # Add a command
/mnpc removecmd <cmd> # Remove a command
/mnpc hide <id> <perm|remove> # Manage visibility
/mnpc look <id> # Enable AutoLook (follow players)
/mnpc rotate <id> <deg> <left|right> # Rotate an NPC
/mnpc list # View all NPCs
/mnpc reload # Reload full config
/mnpc reloadname # Reload names/AutoLook
/mnpc reloadeffects # Reload particle effects
/mnpc debug # Check orphaned/bugged NPCs
All commands require permission: mnpc.use
️ Config Files Overview
- data.yml: Stores all created NPCs
- namedata.yml: Name and hologram height settings
- lookdata.yml: AutoLook state data
- meganimation.yml: Animation configurations
Required:
Optional but recommended:
Documentation & Support
- Docs: https://docs.oreo-studio.shop/modellednpcs
- Discord: https://discord.gg/xYeuK9dhfy
Ask questions, request help, or get a demo server set up!