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

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

"Unleash the Power of MythicMobs and ModelEngine—Bring Your NPCs to Life!"



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:ocean_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:ocean_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.
Resource Information
Author:
----------
Total Downloads: 81
First Release: Dec 13, 2024
Last Update: Oct 1, 2025
Category: ---------------
All-Time Rating:
14 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings