ModeledNPCs: Ultimate NPC Plugin for MythicMobs & ModelEngine! Quests, Dialogues & Traders & more!

Plugins ModeledNPCs: Ultimate NPC Plugin for MythicMobs & ModelEngine! Quests, Dialogues & Traders & more! 7.6

Pro Download
Versions
  1. 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.

ChatGPT Image May 23, 2025, 09_49_04 AM-min.png


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
Create Dynamic NPCs Instantly
  • 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
    SQLite-Logo.wine.png
Advanced Interactions & Commands
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
Supports:
  • 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% itemsadder:eek:cean_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:
    # "yourplugin:eek:cean_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".
    ################################################################################

Quest Integration
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
Use commands like:
  • /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
NPC HIDE – Permission-Based Visibility
Want to create hidden NPCs only visible to VIPs or quest-eligible players?
  • Set a visibility permission with:
Code (Text):
/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
Dependencies
Required
:
Optional but recommended:

Documentation & Support
Whether you're building an epic RPG realm, creating merchant hubs, or scripting deep interactions—ModeledNPCs gives you full power to design the world you imagine.

Latest updates

  1. Update #1

    Ocassional updates - #1

Similar resources

2FA Guard - Ultimate Minecraft 2FA Plugin (2 Factor Authentication Plugin) 1.8 - 1.20 ArteffKods
Best Minecraft 2FA (2 Factor Authentication) plugin for Spigot, Bungeecord & Velocity
0.00 star(s) 0 ratings
Updated
DonutSMPCore - Ultimate DonutSMP Core ArteffKods
0.00 star(s) 0 ratings
Updated
Envoys - The Ultimate Supply Drop Plugin ArteffKods
Random locations, tiers, holograms, simple in-game config editing, Placeholder API support and more
0.00 star(s) 0 ratings
Updated
The most advanced and addicting Troll plugin there is, organized in a simple GUI.
0.00 star(s) 0 ratings
Updated
ExploitFixer - Ultimate AntiCrasher ArteffKods
Protect your Minecraft server against packets exploits with the ultimate Spigot security system.
0.00 star(s) 0 ratings
Updated
Back
Top Bottom