Crear NPCs
Guarda las definiciones en plugins/EliteMobs/npcs/, con nombres de archivo únicos que incluyan .yml. Guarda el archivo y ejecuta /em reload antes de colocar un NPC nuevo. Un jugador con elitemobs.place.npc puede usar /em place npc <npcfilename.yml> desde la posición y orientación deseadas. Un archivo admite varias ubicaciones.
Reutilizar otro archivo de NPC
Un archivo de NPC puede partir de otro archivo de NPC con extends y cambiar solo lo que sea distinto:
extends: my_base_npc.yml
name: "&aSecond Guard"
spawnLocations:
- my_world,20,64,20,90,0
El archivo hereda todos los valores de la base y sobrescribe las claves que define. Las secciones anidadas, como patrol, se combinan clave por clave; una lista, como dialog, sustituye por completo la lista de la base. Indica la base solo por su nombre de archivo, sin ruta de carpeta. Debe ser otro archivo de npcs, incluidas sus subcarpetas, y puede a su vez extender otra base.
isEnabled, spawnLocation y spawnLocations nunca se heredan, así que cada archivo conserva sus propias ubicaciones. Una base con isEnabled: false puede servir de plantilla: los archivos que la extienden se cargan igualmente. EliteMobs no escribe valores por defecto en un archivo que usa extends. Una base que no existe, una ruta en extends o un bucle de referencias extends desactiva el archivo con una advertencia en la consola. El editor de patrullas usa extends cuando separa una ubicación de un archivo que tiene varias.
Ajustes de configuración
isEnabled
Habilita la definición al cargar la configuración. Recarga después de cambiarlo. Un SCROLL_APPLIER también necesita que useEliteItemScrolls esté habilitado para aparecer.
| Clave | Valores | Predeterminado |
|---|---|---|
isEnabled | Booleano | true |
Ejemplo
isEnabled: true
name
Establece el nombre visible. Admite códigos de color. EliteMobs registra este texto en su CSV de traducciones y utiliza la traducción del idioma configurado cuando existe.
| Clave | Valores | Predeterminado |
|---|---|---|
name | Texto | cadena vacía |
Ejemplo
name: "&aEnn Peecee"

Disposición de las etiquetas
El nombre y el rol usan una disposición fija. No hay ajustes nameplateScale ni nameplateLineGap por NPC. Las etiquetas normales y las de disfraces siguen la altura de la entidad o del disfraz. Los modelos compatibles de FreeMinecraftModels gestionan sus etiquetas; ModelEngine conserva su propio nombre mientras EliteMobs muestra el rol. Los indicadores personales de misión se sitúan por encima.
Con las apuestas habilitadas, el NPC especial gambling_den_owner.yml añade las ganancias de la casa a estas mismas etiquetas y las actualiza aproximadamente cada segundo.
scale
Establece la escala del aldeano subyacente mediante el atributo de escala de Minecraft. Un modelo o disfraz puede gestionar su propio tamaño visual; este ajuste no garantiza que su apariencia cambie con el aldeano.
| Clave | Valores | Predeterminado |
|---|---|---|
scale | Multiplicador | 1.0 |
Al escalar, 1.0 representa el tamaño predeterminado. Para hacer la entidad más grande, aumenta el valor (por ejemplo, 1.2). Para hacer la entidad más pequeña, disminuye el valor (por ejemplo, 0.8).
Ejemplo
scale: 1.2
role
Establece la etiqueta de rol bajo el nombre. Es solo visual, admite códigos de color y se registra en el CSV de traducciones.
| Clave | Valores | Predeterminado |
|---|---|---|
role | Texto | cadena vacía |
Ejemplo
role: "&c<Red Fellow>"

profession
Establece la profesión del aldeano y su apariencia cuando no utiliza ni disfraz ni modelo personalizado.
| Clave | Valores | Predeterminado |
|---|---|---|
profession | Profesión | NITWIT |
Ejemplo
profession: NITWIT

greetings
Define los saludos que se intentan cuando un escaneo detecta por primera vez al jugador dentro de activationRadius. Se elige uno al azar para un bocadillo flotante visible solo para ese jugador durante unos 5 segundos. La lista se registra en el CSV de traducciones. Se requiere canTalk y que haya terminado la espera compartida entre diálogos.
| Clave | Valores | Predeterminado |
|---|---|---|
greetings | Lista de textos | ninguno |
El saludo solo se intenta al detectar la entrada. Si la espera compartida lo bloquea, permanecer dentro no vuelve a intentarlo.
Ejemplo
greetings:
- Hi there!
- Good day.

dialog
Define las líneas del bocadillo flotante. Cada vez se elige una al azar, sin seguir el orden de la lista. Se registra en el CSV de traducciones.
Cuándo se dispara depende del interactionType:
- Los NPC
CHATintentan hablar al interactuar, normalmente con clic derecho. FreeMinecraftModels también envía los clics izquierdos sobre el modelo al controlador de interacciones. - Los demás tipos intentan dialogar en los escaneos posteriores mientras el jugador permanece dentro de
activationRadius; el primer escaneo intenta un saludo.
Un \n literal divide el bocadillo en líneas apiladas. Usa comillas simples en YAML para conservarlo, o escribe \\n dentro de comillas dobles. También se aplica a saludos y despedidas.
| Clave | Valores | Predeterminado |
|---|---|---|
dialog | Lista de textos | ninguno |
Ejemplo
dialog:
- I like apples!
- Sure is hot.

farewell
Define las despedidas. Se elige una al azar para un bocadillo flotante. La lista se registra en el CSV de traducciones.
| Clave | Valores | Predeterminado |
|---|---|---|
farewell | Lista de textos | ninguno |
Cerrar cualquier vista de inventario con un título no vacío intenta activar las despedidas de los NPC cercanos. La búsqueda abarca 5 bloques por cada eje alrededor del jugador; no se limita al NPC cuyo menú se abrió. Pueden hablar varios NPC. Salir de activationRadius no activa una despedida.
Ejemplo
farewell:
- Until next time!
- Bye!

canTalk
Controla los bocadillos integrados. false suprime greetings, dialog y farewell, pero no desactiva menús, comandos, scripts Lua, diálogos de misión, detección de proximidad ni indicadores de misión.
| Clave | Valores | Predeterminado |
|---|---|---|
canTalk | Booleano | true |
Ejemplo
canTalk: true
activationRadius
Establece el radio, en bloques, en el que un NPC puede detectar a un jugador acercándose.
| Clave | Valores | Predeterminado |
|---|---|---|
activationRadius | Decimal | 3.0 |
La proximidad se comprueba cada 100 ticks, unos 5 segundos, con distancia tridimensional y sin comprobar la línea de visión. Los NPC quietos pueden mirar al jugador, saludar al detectar su entrada y dialogar en escaneos posteriores. 0 o menos desactiva estas interacciones, incluidos los hooks Lua de proximidad. Los indicadores de QUEST_GIVER y CUSTOM_QUEST_GIVER usan un radio independiente de 30 bloques y pueden aparecer con activationRadius: 0; reflejan las misiones disponibles y entregas de cada jugador.
El escaneo y los bocadillos se suspenden mientras una patrulla se mueve o se edita. patrol.pauseNearPlayersRadius y patrol.faceNearbyPlayers controlan la pausa y la orientación ante jugadores; consulta Patrullas.
Ejemplo
activationRadius: 3.0
scripts
Establece los scripts Lua adjuntos a este NPC. Los archivos de script se cargan desde plugins/EliteMobs/npc_scripts/. La extensión .lua es opcional: se añade automáticamente si la omites.
| Clave | Valores | Predeterminado |
|---|---|---|
scripts | Lista de textos | ninguno |
El motor Lua compartido de MagmaCore admite on_spawn, on_game_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter y on_zone_leave. El hook de tick de NPC es on_game_tick. Cada NPC tiene sus propias instancias; las prioridades menores se ejecutan primero. Un script que solo tenga el hook de tick necesita también un on_spawn, que puede estar vacío, para inicializarse. Consulta Scripts Lua de NPC para ver la API y los ejemplos.
Si el nombre no corresponde a una definición de script cargada, se omite con una advertencia y el NPC aparece igualmente. Respeta las mayúsculas del archivo y recarga tras editar los scripts.
Un diálogo de misión puede consumir el clic antes de on_npc_interact. En caso contrario, el hook se ejecuta antes de la interacción configurada y no la cancela.
Ejemplo
scripts:
- wave.lua
interactionType
Establece el tipo de interacción que realizará el NPC.
| Clave | Valores | Predeterminado |
|---|---|---|
interactionType | Especial [1] | NONE |
Ejemplo
interactionType: TELEPORT_BACK
noPreviousLocationMessage
Mensaje de TELEPORT_BACK cuando no existe una ubicación de retorno guardada. Esta ubicación es el origen guardado por un teletransporte de EliteMobs desde fuera de un mundo de EliteMobs; no es la última posición caminada ni el lugar de muerte. El retorno usa el proceso normal de teletransporte de EliteMobs, con sus reglas de demora y cancelación. Admite códigos de color y se registra en el CSV de traducciones.
| Clave | Valores | Predeterminado |
|---|---|---|
noPreviousLocationMessage | Texto | cadena vacía |
Ejemplo
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

timeout
Tiempo en minutos antes de retirar el NPC. 0 o menos desactiva el temporizador. No borra la ubicación guardada ni deshabilita la definición: el NPC puede regresar al recargar, reiniciar o restaurar el chunk.
Para eliminar una ubicación, activa /em remove, golpea el NPC y vuelve a ejecutar /em remove para salir del modo. Requiere elitemobs.remove. En una lista se elimina la entrada correspondiente; una definición con la antigua ubicación única se deshabilita. Al migrar a spawnLocations, elimina la clave antigua spawnLocation, o podría volver a activarse al vaciar la lista.
| Clave | Valores | Predeterminado |
|---|---|---|
timeout | Decimal | 0 (nunca) |
Ejemplo
timeout: 0
questFileName
Lista archivos de plugins/EliteMobs/customquests/, con .yml, para CUSTOM_QUEST_GIVER. La clave singular acepta una lista. El menú ofrece misiones elegibles y acepta entregas asignadas al nombre de archivo de este NPC; un NPC de entrega puede tener la lista vacía. Todas las ubicaciones del mismo archivo comparten esta identidad. Se siguen aplicando los permisos y requisitos individuales de cada misión.
| Clave | Valores | Predeterminado |
|---|---|---|
questFileName | Lista de textos | ninguno |
Ejemplo
questFileName:
- my_quest_one.yml
- my_quest_two.yml
disguise
Establece el disfraz y requiere LibsDisguises. Un modelo personalizado cargado correctamente tiene prioridad.
| Clave | Valores | Predeterminado |
|---|---|---|
disguise | Formato de LibsDisguises | ninguno |
Ejemplo
disguise: SKELETON

customDisguiseData
Establece los datos de un disfraz personalizado de LibsDisguises.
| Clave | Valores | Predeterminado |
|---|---|---|
customDisguiseData | Formato de LibsDisguises | ninguno |
Ejemplo
disguise: custom:my_cool_disguise_name
customDisguiseData: player my_cool_disguise_name setskin {"id":"364acb6d-9050-46f7-b5fb-f8c3fd83a6fc","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTYxMTk4ODA4Nzc1NSwKICAicHJvZmlsZUlkIiA6ICJkZGVkNTZlMWVmOGI0MGZlOGFkMTYyOTIwZjdhZWNkYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEaXNjb3JkQXBwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliYmVkODQzNWY4YmYyNzhhZmUyNmU2NGZkOTI2YjhiMzc3MzJkODhlMzM0ODk3ZGJkNTI3ZDU2ZmY5MTk5MGUiCiAgICB9CiAgfQp9","signature":"ujLq1joYVktuQAp1xpFKlxQFUVinSePiDBiVCAxxix/mA5vP86i/eAOfb1mtGjaAZ6sO0l2olbzvycnGXNBtbAxgqprguROXY4tpWiePVTDmy3iD4GdOCxHAkYLoyMV5qTT4SNsldUFFuND8GSEgbNMltKDLmhNKwzm08iCigPfpeuYpwljgJPxu6ka54PKNaQu4doI0ZDZXKqq4hPhR3Bs2Sz9MI0SmdmQWwcCzUz3DFdVno27fmQ6LwqmT+eSoOv0EttVG/XMaTYQ5lhBY61mqf6WlJyYVUSfjJk1AbYsctu7dWM+sbY8jFq5ljvXJGGr5TyKi+fs8vHy06Z2go20QgTYOw+caFxFijAS6fgm3oY57VEO/+/9OLHdD+Z9BrWqQWcIIrVeIfxjue/yt4pyeVv9jX59hjNFjhcPEwotkxJ+vZ96WlTLWDG4BiqauDr2VeGyLlVaygO9ZU0wwsN65iSh91GI3tMIA5wbDR0Hts/9ABvt9eafHbowS+4SZXN0i9mYnKg7op1eiB8nMEAGsPJg3DwsmUrh3ACAapQ6eYHiJpo59RXDqKlRcXwo7wsEFp//5LgQWbPj0NP3nxnywdpozqSAeq6236qlhE9BT9eiyJ41V9sMelYFEWMlUAltR40NdbIrHB0J3nmfuLJz44/sTwWf6P1khOy//XX0="}],"legacy":false}

customModel
Establece un modelo de FreeMinecraftModels o ModelEngine. Instálalo en el proveedor seleccionado antes de indicar su ID. Si ambos están disponibles, se prefiere FreeMinecraftModels; un modelo FMM ausente no hace que se seleccione ModelEngine. Si ningún modelo se carga, se usa el disfraz configurado o la apariencia de aldeano. Consulta Modelos personalizados.
| Clave | Valores | Predeterminado |
|---|---|---|
customModel | Texto | ninguno |
Ejemplo
customModel: MY_MODEL_ONE
Entrenadores de clase y transporte
Usa interactionType: CLASS_TRAINER con classRoot para seleccionar la rama de clase. Parte de las definiciones incluidas class_trainer_*.yml. Las pruebas y la progresión se explican en Advanced Combat System.
Con interactionType: TRANSPORT, transportRoutes es una lista de IDs de ruta sin .yml; hacer clic abre la selección de destinos. Consulta Rutas de transporte.
arena
Establece el nombre de archivo de la arena para la que el NPC abrirá un menú (requiere el interactionType ARENA_MASTER).
| Clave | Valores | Predeterminado |
|---|---|---|
arena | Nombre de archivo | ninguno |
Ejemplo
arena: my_arena.yml
command
Comando para COMMAND. Se ejecuta como el jugador que hace clic en el tick siguiente y exige sus permisos normales. Omite la barra inicial (/). Este campo no sustituye automáticamente marcadores del jugador ni usa el formato de comandos de consola de EliteMobs.
| Clave | Valores | Predeterminado |
|---|---|---|
command | Texto | ninguno |
Ejemplo
command: say Look at me running a command, how cool!
![]()
spawnLocation
Establece una única ubicación de aparición para el NPC. Esta es la clave antigua de ubicación única: solo se lee cuando spawnLocations está ausente o vacía. Las nuevas ubicaciones colocadas dentro del juego se escriben en spawnLocations, así que es preferible usar esa clave.
El formato recomendado es world,x,y,z,yaw,pitch. El mundo debe estar cargado; este ajuste no lo carga.
| Clave | Valores | Predeterminado |
|---|---|---|
spawnLocation | Texto | ninguno |
Ejemplo
spawnLocation: my_world,10,50,10,0,0
spawnLocations
Define varias ubicaciones para el mismo NPC. /em place npc <npcfilename.yml> añade tu posición y orientación, redondeadas a dos decimales, y establece isEnabled: true. Repetir una ubicación serializada idéntica no crea otra entrada. Los NPC se restauran cuando sus chunks pueden procesar entidades.
El formato de cada entrada es world,x,y,z,yaw,pitch.
| Clave | Valores | Predeterminado |
|---|---|---|
spawnLocations | Lista de textos | ninguno |
Ejemplo
spawnLocations:
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0
instanced
Establece si el NPC debe estar instanciado (para uso en mazmorras instanciadas). Cuando se establece en true, el NPC no aparece en el mundo plantilla; en su lugar se registra como plantilla y se clona para cada instancia de mazmorra, y cada clon existe en el mundo de instancia correspondiente.
| Clave | Valores | Predeterminado |
|---|---|---|
instanced | Booleano | false |
Ejemplo
instanced: false
syncMovement
Establece si el modelo personalizado del NPC debe tener su movimiento sincronizado con la entidad subyacente. Esto solo tiene efecto cuando customModel está establecido y el modelo está cargado: se ignora en los NPC normales y en los de LibsDisguises.
Una patrol válida habilita la sincronización incluso cuando está pausada o este valor es false. La opción sigue siendo útil para modelos que no patrullan.
| Clave | Valores | Predeterminado |
|---|---|---|
syncMovement | Booleano | true |
Ejemplo
syncMovement: true
patrol
Añade al NPC una ruta nativa con búsqueda automática de caminos. Los nodos son desplazamientos desde su punto de aparición configurado, o coordenadas exactas en su mundo con patrol.relative: false. Los tramos largos se dividen automáticamente y no se fuerza la carga de chunks. patrol.startNodeWaitSeconds hace que el NPC descanse en el primer nodo una vez por vuelta, patrol.pauseNearPlayersRadius (solo para NPCs) lo detiene cerca de los jugadores y patrol.faceNearbyPlayers lo gira hacia ellos mientras está detenido. Consulta Patrullas de NPCs y jefes para ver el esquema, el editor, el comportamiento a larga distancia y los controles Lua.
Ejemplo de configuración de NPC
isEnabled: true
name: "&cRed Rubin"
role: "&a<Generic NPC>"
profession: NITWIT
greetings:
- Hiya!
- Hello!
dialog:
- Great conversation!
- Pleasure talking with you!
farewell:
- Goodbye!
- Laters!
canTalk: true
activationRadius: 4
interactionType: CHAT
timeout: 0
spawnLocations:
- my_world,584,55,127,90,10

Especial [1]
La siguiente es la lista de tipos de interacción de NPC válidos:
| Tipo | Descripción |
|---|---|
GUILD_GREETER | Abre las bonificaciones de habilidades de armas. Requiere elitemobs.skill.npc. |
CLASS_TRAINER | Abre la rama de classRoot. Requiere elitemobs.command. |
TRANSPORT | Abre los destinos de transportRoutes. |
CHAT | Intenta decir una línea aleatoria de dialog al interactuar. |
CUSTOM_SHOP | Abre la tienda personalizada. Requiere elitemobs.shop.custom.npc. |
PROCEDURALLY_GENERATED_SHOP | Abre la tienda generada. Requiere elitemobs.shop.dynamic.npc. |
BAR | Sin implementar. Indica al jugador que la característica llegará pronto. |
ARENA | No hace nada. Usa ARENA_MASTER en su lugar. |
QUEST_GIVER | Abre misiones generadas. Requiere elitemobs.quest.npc. |
CUSTOM_QUEST_GIVER | Ofrece misiones elegibles de questFileName y acepta entregas asignadas. |
NONE | Sin acción integrada; aún pueden ejecutarse scripts, proximidad y diálogos de misión. |
SELL | Abre ventas. Requiere elitemobs.shop.sell.npc. |
TELEPORT_BACK | Usa la ubicación de retorno guardada por EliteMobs. Requiere elitemobs.back.npc. |
SCRAPPER | Abre desguace. Requiere elitemobs.scrap.npc. |
REPAIRMAN | Abre reparaciones. Requiere elitemobs.repair.npc. |
ENCHANTER | Abre encantamientos. Requiere elitemobs.enchant.npc. |
REFINER | REEMPLAZADO - Indica al jugador que la característica fue reemplazada; a los administradores se les indica que eliminen el NPC |
SMELTER | REEMPLAZADO - Indica al jugador que la característica fue reemplazada; a los administradores se les indica que eliminen el NPC |
ENHANCER | REEMPLAZADO - Indica al jugador que la característica fue reemplazada; a los administradores se les indica que eliminen el NPC |
UNBINDER | Abre desvinculación. Requiere elitemobs.unbind.npc. |
ARENA_MASTER | Abre el menú de la arena establecida en arena |
COMMAND | Ejecuta el comando establecido en command |
SCROLL_APPLIER | Abre pergaminos de objeto élite. Requiere elitemobs.scroll.npc; no aparece con useEliteItemScrolls desactivado. |
ARROW_SHOP | Abre la tienda de flechas. Requiere elitemobs.shop.arrow.npc. |
GAMBLING_BLACKJACK | Abre blackjack. Requiere elitemobs.gambling.npc. |
GAMBLING_COINFLIP | Abre cara o cruz. Requiere elitemobs.gambling.npc. |
GAMBLING_SLOTS | Abre tragaperras. Requiere elitemobs.gambling.npc. |
GAMBLING_HIGHERLOWER | Abre mayor/menor. Requiere elitemobs.gambling.npc. |
Para más información sobre lo que hacen el SCRAPPER y tipos de interacción similares haz clic aquí.
Notas sobre el comportamiento de los NPCs
El comportamiento integrado también incluye:
- Movimiento: normalmente permanecen quietos y miran a jugadores cercanos. Las patrullas y los scripts pueden moverlos; la patrulla controla la ruta en lugar del comportamiento normal del aldeano.
- Orden de interacción: un diálogo de misión puede consumir el clic antes de Lua y de la acción integrada. En otro caso se ejecuta Lua, seguido de la acción y sus comprobaciones de permisos. Una protección de un tick impide interacciones repetidas del mismo jugador entre NPC. Editar una patrulla bloquea las interacciones; su movimiento normal no.
- Protección: los cuerpos no colisionan normalmente. EliteMobs cancela daños, transformaciones de aldeano y la apertura del inventario normal de comercio.
- Etiquetas: nombre y rol usan la disposición fija descrita arriba. Los NPC normales y disfrazados usan su altura actual, de modo que la escala también puede desplazar las etiquetas. Los modelos FMM compatibles gestionan nombre y rol juntos.
- Bedrock: la presentación depende de la integración de modelos y etiquetas activa. El renderizador actual no utiliza la clave conservada
bedrockNPCRoleYOffset. - Espera de diálogo: cada NPC comparte una espera de 3 segundos entre todos los jugadores. Un saludo para uno puede impedir el saludo de otro durante ese intervalo. Los bocadillos individuales desaparecen tras unos 5 segundos.
- Invisibilidad: Un NPC bajo el efecto de poción de invisibilidad no mostrará bocadillos de chat.
- Chunks: desaparecen al descargar el chunk y se restauran cuando vuelve a procesar entidades. No se guardan entidades NPC en el mundo; las ubicaciones proceden de la configuración.
- Renombrado: el clic derecho normal sobre el aldeano con una etiqueta de nombre en la mano principal se cancela y muestra un mensaje. Los modelos usan sus propios callbacks; FreeMinecraftModels envía tanto clics izquierdos como derechos al controlador del NPC.
