Crear Misiones
Misión de ejemplo
Este ejemplo simplificado sigue el formato del archivo incluido test_quest.yml.
Crea archivos .yml con nombres únicos en plugins/EliteMobs/customquests/, dentro de la carpeta del servidor. Carga la misión y el contenido al que hace referencia con /em reload, y asígnala a un NPC como se explica más abajo.
test_quest.yml
isEnabled: true
customObjectives:
Objective1:
amount: '1'
filename: test_boss.yml
objectiveType: KILL_CUSTOM
customRewards:
- filename=magmaguys_toothpick.yml:amount=1:chance=1
name: "&aKill the Test Boss"
questLore:
- "&cEnd the test boss' reign of terror!"

La captura muestra la antigua interfaz de libro. /em alt cambia la preferencia de menú: los jugadores de Java con esa preferencia reciben libros antes de Minecraft 1.21.6 y diálogos de Minecraft en versiones posteriores. Bedrock y quienes eligen menús de inventario reciben una interfaz de inventario.
Esta misión de ejemplo dará a los jugadores la tarea de matar 1 test_boss.yml. (El nombre real del boss mostrado en el rastreador de misiones será el name: establecido en test_boss.yml.) Y como recompensa por completar la misión serán recompensados con 1 Magmaguy's Toothpick.
Los objetivos se activan juntos al aceptar la misión; las claves Objective1, Objective2, etc. no establecen un orden. Hay que cumplirlos todos para recibir recompensas. Por defecto, después se entrega la misión a su NPC. Con requireQuestTurnIn: false en Quests.yml, cumplir los objetivos intenta completar la misión inmediatamente, incluidas la comprobación y el consumo de objetos. maximumActiveQuests limita las misiones aceptadas a 10 por defecto.
Crear misiones personalizadas
isEnabled
Establece si la misión está habilitada.
| Clave | Valores | Predeterminado |
|---|---|---|
isEnabled | Booleano | true |
Ejemplo
isEnabled: true
customObjectives
Establece los objetivos de la misión.
| Clave | Valores | Predeterminado |
|---|---|---|
customObjectives | Especial [1] | ninguno |
Para un jefe con varias fases, usa el archivo de la primera fase. El progreso se concede cuando muere el jefe, no en cada cambio de fase. KILL_CUSTOM compara el nombre del archivo sin exigir questLevel como nivel mínimo de la muerte.
Ejemplos
KILL_CUSTOM:
customObjectives:
Objective1:
amount: '1'
filename: my_cool_boss.yml
objectiveType: KILL_CUSTOM
DIALOG:
customObjectives:
Objective1:
dialog:
- "&a[Dialog NPC] &fCome here often?"
- "&7&oI should eat more apples."
filename: dialog_npc.yml
npcName: Dialog NPC
location: at dialog location.
objectiveType: DIALOG
FETCH_ITEM:
Los objetivos de recolección cuentan las etiquetas de objetos personalizados de EliteMobs presentes en el inventario. Al entregar la misión, se comprueban todos contra una única copia del inventario antes de quitar objetos o conceder recompensas. Si dos objetivos piden el mismo objeto, hacen falta sus cantidades sumadas; una misma pila no puede satisfacer ambos. Soltar un objeto puede volver a dejar incompleto un objetivo.
customObjectives:
Objective1:
amount: '99'
itemName: Red Apples
filename: my_quest_item_red_apples.yml
objectiveType: FETCH_ITEM
ARENA:
customObjectives:
Objective1:
objectiveType: ARENA
filename: my_arena.yml
name: "Complete the Arena"

Especial [1]
Expandir Tabla
Los Objetivos Personalizados se construyen usando los siguientes valores:
| Clave | Descripción |
|---|---|
objectiveType | Tipo de objetivo: KILL_CUSTOM mata un jefe personalizado, FETCH_ITEM reúne un objeto personalizado, DIALOG habla con un NPC, ARENA completa una arena y CLASS_UNLOCK observa el desbloqueo de una clase. |
filename | Archivo .yml obligatorio del jefe, objeto, NPC de diálogo, arena o entrenador. Usa una definición cargada, no su nombre visible. Un objetivo sin filename, o con un objectiveType ausente o desconocido, desactiva toda la misión con una advertencia en la consola. Un CLASS_UNLOCK inválido permanece en la misión, pero no se puede completar. Corrige todas las advertencias antes de ofrecer la misión. |
amount | Número entero positivo de jefes que matar u objetos que reunir; por defecto 1. Un valor inferior a 1 desactiva la misión. DIALOG, ARENA y CLASS_UNLOCK tienen un objetivo de uno e ignoran este campo. |
dialog | Solo DIALOG: las líneas que dice el NPC cuando el jugador habla con él. |
location | Solo DIALOG: una pista en texto libre sobre dónde está el NPC, mostrada como $location en la línea de resumen del menú de misiones. |
name / npcName / itemName | Alias opcionales para la etiqueta de FETCH_ITEM, DIALOG, ARENA y CLASS_UNLOCK. Define solo uno. Los tres son traducibles; permiten redactar el objetivo o evitar revelar información. Sin una etiqueta propia, FETCH_ITEM usa el nombre traducido del objeto y DIALOG el del NPC. KILL_CUSTOM usa el nombre configurado del jefe. |
class | Solo CLASS_UNLOCK: ID de la forma de clase que se observa, por ejemplo adventurer. |
Define un mapa customObjectives no vacío, con una clave única por objetivo (Objective1, Objective2, ...). Los nombres de campo distinguen mayúsculas y minúsculas; los tipos usan los valores en mayúsculas de la tabla. Los archivos antiguos con cadenas como KILL_CUSTOM:filename=X.yml:amount=Y se convierten automáticamente al cargarlos por primera vez y se guardan en disco.
Las etiquetas tienen entradas de traducción propias, identificadas por el archivo de misión y una ruta como customObjectives.Objective1.itemName. Traduce esa entrada del CSV aunque el objeto ya tenga traducción. Si falta la traducción, se conserva la etiqueta original para no revelar un nombre oculto. El texto fuente permanece en el YAML y se conservan las traducciones ya editadas.
Comportamiento de FETCH_ITEM
FETCH_ITEM identifica la etiqueta del archivo del objeto, no su material, nombre visible o descripción. Cuentan los objetos obtenidos antes de aceptar la misión, incluidos los de armadura y mano secundaria. La aceptación, recoger o soltar objetos coincidentes y recibir recompensas de misión programan un recuento para el siguiente tick. Otros cambios del inventario pueden tardar en reflejarse, pero la entrega siempre vuelve a comprobarlo. Si se completa, consume los objetos necesarios; si falta la cantidad combinada, cancela la entrega sin retirar objetos parcialmente.
DIALOG progresa al interactuar con una colocación del NPC correspondiente, antes de abrir su menú habitual. No exige terminar de leer el diálogo. location es una pista de texto, no coordenadas para la brújula. ARENA progresa al completar la arena indicada mientras la misión está activa; no reconoce victorias anteriores.
Objetivos de desbloqueo de clase
CLASS_UNLOCK observa una clase desbloqueada mediante el Sistema de Combate Avanzado. No concede la clase. Por ejemplo:
customObjectives:
Objective1:
objectiveType: CLASS_UNLOCK
class: adventurer
filename: class_trainer_adventurer.yml
class debe identificar una forma existente. filename orienta el seguimiento hacia su entrenador y name permite cambiar la etiqueta. El objetivo tiene una meta de uno y reconoce clases desbloqueadas antes de aceptar la misión, aunque no estén equipadas. La progresión de clases debe estar disponible y el desbloqueo se comprueba otra vez al completar. Una clase inválida o un archivo de entrenador ausente deja un objetivo imposible de completar; no se omite.
Seguimiento y abandono
Cada jugador solo puede seguir una misión. Con autoTrackNextQuestOnCompletion: true en Quests.yml, completar la misión seguida selecciona otra misión activa que permita seguimiento en el siguiente tick. questAutoTrackNextMessage admite $questName. autoTrackQuestsOnAccept también vale true por defecto, pero actualmente usa el interruptor de seguimiento: aceptar una misión mientras ya se sigue otra puede detenerlo en lugar de cambiarlo. Si ocurre, vuelve a seleccionar el seguimiento en el menú.
La brújula busca destinos compatibles: jefes personalizados, NPC de diálogo o entrenadores, y jefes o cofres cuyas tablas de botín contengan el objeto solicitado. No encuentra todas las posibles fuentes de objetos; los objetivos de arena o eliminación dinámica no tienen una búsqueda de destino específica. Para otro mundo puede señalar un portal directo adecuado o mostrar el mundo de destino, sin garantizar una ruta transitable. No encontrar destino no impide avanzar.
La acción normal de abandonar pide una segunda confirmación. El texto y su descripción usan questAbandonConfirmationText y questAbandonConfirmationHover. Abandonar elimina la misión activa y su seguimiento; no inicia el bloqueo de finalización de questLockoutMinutes ni concede el marcador de finalización. Se puede aceptar de nuevo si cumple sus condiciones habituales.
Los indicadores de misión de los NPC son personales y aparecen a menos de 30 bloques. La brújula incluye indicaciones verticales. Durante el diálogo mediante barras de jefe, esa zona es exclusiva: se ocultan las demás barras gestionadas y se elimina la antigua opción hideKeyedBossBarsDuringQuestDialogue. hideQuestScoreboardDuringQuestDialogue controla el marcador lateral por separado.
En Java, agacharse revela la página actual del diálogo y después permite avanzar. Se aplica Lentitud III durante un máximo de 30 segundos, sin inmovilizar completamente al jugador. Recibir daño no cancelado superior a cero cierra las pantallas y el diálogo de misión. Bedrock recibe este diálogo en el chat. Su diseño gráfico necesita los recursos correspondientes del paquete de recursos.
customRewards
Establece las recompensas de la misión.
| Clave | Valores | Predeterminado |
|---|---|---|
customRewards | Formato universal de botín de EliteMobs | ninguno |
Ejemplo
customRewards:
- currencyAmount=50:amount=1:chance=0.05
- material=COOKED_COD:amount=3:chance=1.0
- filename=magmaguys_toothpick.yml:amount=1:chance=1.0

Las misiones personalizadas no generan entradas de recompensa automáticamente. Si customRewards está vacío, esa tabla no concede objetos ni moneda; los comandos de finalización configurados por separado sí se ejecutan. Las recompensas automáticas corresponden a las misiones dinámicas.
Las recompensas de objetos escalables usan el nivel seleccionado de la mazmorra dinámica o el nivel de combate actual del jugador, con un 10 % de probabilidad de sumar uno. Los objetos fijos y limitados conservan sus reglas de escalado. questLevel no determina el nivel real del objeto.
Las recompensas de misión se entregan directamente: los objetos van al inventario del jugador (lo que no quepa se suelta a sus pies) y la moneda se añade a su saldo. Para ejecutar comandos al completarse, usa questCompleteCommands en lugar de una entrada de botín command=.
La vista previa y la entrega hacen tiradas separadas. Mostrar una recompensa aleatoria o un nivel adicional no los reserva para el jugador.
questAcceptPermission
Exige un marcador de finalización de EliteMobs para aceptar la misión. Conceder un permiso ordinario del mismo nombre no satisface esta comprobación.
| Clave | Valores | Predeterminado |
|---|---|---|
questAcceptPermission | Cadena | ninguno |
Ejemplo
questAcceptPermission: elitequest.my_permission
questAcceptPermissions
Exige todos los marcadores de finalización enumerados. Si también se define questAcceptPermission, ese marcador es necesario además de la lista.
| Clave | Valores | Predeterminado |
|---|---|---|
questAcceptPermissions | Lista de cadenas | ninguno |
Ejemplo
questAcceptPermissions:
- elitequest.my_previous_quest_one.yml
- elitequest.my_previous_quest_two.yml
questLockoutPermission
Define el marcador concedido tras completar la misión. Puede desbloquear otras misiones y, con questLockoutMinutes igual o inferior a cero, impide repetir esta. Omitirlo no desactiva un bloqueo temporal positivo.
| Clave | Valores | Predeterminado |
|---|---|---|
questLockoutPermission | Cadena | ninguno |
Ejemplo
questLockoutPermission: elitequest.my_quest.yml
questLockoutMinutes
Establece cuánto tiempo, en minutos, tendrá que esperar el jugador antes de poder hacer la misión de nuevo.
| Clave | Valores | Predeterminado |
|---|---|---|
questLockoutMinutes | Entero | -1 (usa la regla del marcador) |
Hay dos sistemas de bloqueo, y esta clave decide cuál se usa:
- Cualquier valor superior a
0usa el rastreador de bloqueo temporizado. El jugador queda bloqueado para esta misión durante esos minutos tras entregarla, se le indica cuánto queda cuando intenta volver a cogerla, yquestLockoutPermissionse ignora en la comprobación de disponibilidad. 0o menos recurre al marcador antiguoquestLockoutPermission, que se otorga de forma permanente al completarla. Si tampoco hay ningúnquestLockoutPermissionestablecido, la misión sigue siendo repetible.
Si ambos campos están definidos y la duración es positiva, el marcador también se concede, pero caduca al terminar ese plazo. Una misión posterior que lo exija debe aceptarse antes de que caduque. El bloqueo temporal se guarda por nombre de archivo de misión y es independiente del marcador de requisitos.
Ejemplo
questLockoutMinutes: 60
name
Establece el nombre de la misión. Admite códigos de color.
| Clave | Valores | Predeterminado |
|---|---|---|
name | Cadena | vacío |
Ejemplo
name: "&aMy Great Quest Name"
questLore
Establece la descripción (lore) de la misión que aparecerá en el menú de misiones del juego.
| Clave | Valores | Predeterminado |
|---|---|---|
questLore | Lista de cadenas | ninguno |
Ejemplo
questLore:
- "Interesting lore sentence."
- "Yet another interesting lore sentence."

temporaryPermissions
Concede nodos de permiso Bukkit reales al aceptar la misión y los vuelve a aplicar al restaurar una misión activa tras iniciar sesión. Completar o abandonar la misión los retira, y desconectarse los libera hasta el siguiente inicio de sesión. Cada misión concede sus nodos por separado, así que dos misiones activas pueden compartir un nodo: terminar una de ellas deja el nodo concedido por la otra.
Para la generación normal, configura el mismo permiso en el objeto. Esta comprobación no cubre todas las vías de entrega.
| Clave | Valores | Predeterminado |
|---|---|---|
temporaryPermissions | Lista de cadenas | ninguno |
Ejemplo
temporaryPermissions:
- elitequest.item_that_should_drop_only_during_quest.yml
questAcceptDialog
Establece el diálogo que aparece en el chat al aceptar la misión.
Cuando las barras de jefe de diálogo de misión están activadas, esta lista sirve además como el diálogo que pronuncia quien da la misión en el cuadro de diálogo antes de que se acepte. Si está vacía, se usa questLore para ese diálogo.
| Clave | Valores | Predeterminado |
|---|---|---|
questAcceptDialog | Lista de cadenas | ninguno |
Ejemplo
questAcceptDialog:
- "My hero! You are so helpful!"
- "I wish you the best of luck!"

questCompleteMessage
Define el diálogo de entrega. Con useQuestDialogueBossBars activado en Quests.yml, puede aparecer antes de abrir el menú de entrega; en caso contrario se muestra al completar correctamente. Si se mostró hace poco, no se repite al completar. Bedrock recibe texto en el chat. Ver este diálogo no demuestra por sí solo que se hayan concedido las recompensas.
| Clave | Valores | Predeterminado |
|---|---|---|
questCompleteMessage | Lista de cadenas | ninguno |
Ejemplo
questCompleteMessage:
- "My hero! You have completed my difficult quest!"
- "As a reward you can have this loaf of bread!"

questCompleteCommands
Establece los comandos que se ejecutarán al completar la misión. Los comandos se lanzan desde la consola, así que no incluyas la barra inicial ni cuentes con que el jugador tenga permiso para ellos.
Marcadores de posición admitidos: $player para el nombre del jugador, $getWorld para el nombre del mundo en el que está, y $getX, $getY, $getZ para las coordenadas de su ubicación.
| Clave | Valores | Predeterminado |
|---|---|---|
questCompleteCommands | Lista de cadenas | ninguno |
Ejemplo
questCompleteCommands:
- say $player has finished a quest at $getX, $getY, $getZ!
- give $player diamond 1
![]()
turnInNPC
Define el archivo del NPC al que se entrega la misión. Puede ser distinto del que la ofrece; si se omite, se usa el original. Un NPC de entrega separado debe usar interactionType: CUSTOM_QUEST_GIVER, aunque su lista de ofertas esté vacía.
| Clave | Valores | Predeterminado |
|---|---|---|
turnInNPC | Nombre de archivo | ninguno |
Ejemplo
turnInNPC: my_cool_quest_npc.yml
NPC que ofrecen misiones
Para asignar una misión a un NPC que se la dará a los jugadores, necesitas configurar el archivo del NPC, no el archivo de la misión.
En el archivo del NPC (plugins/EliteMobs/npcs/), añade:
interactionType: CUSTOM_QUEST_GIVER
questFileName:
- my_quest.yml
Para NPCs que dan varias misiones:
interactionType: CUSTOM_QUEST_GIVER
questFileName:
- quest_one.yml
- quest_two.yml
Usa una lista YAML incluso para una sola misión; el valor escalar questFileName: my_quest.yml no se carga como lista de ofertas. Para abrirla hace falta interactionType: CUSTOM_QUEST_GIVER.
Consulta la documentación de creación de NPCs para más información sobre cómo configurar NPCs.
trackable
Permite seguir la misión mediante brújula, manual o automáticamente. El valor false no detiene el progreso, las recompensas ni los marcadores temporales de progreso.
| Clave | Valores | Predeterminado |
|---|---|---|
trackable | Booleano | true |
Ejemplo
trackable: true
questLevel
Establece el nivel de la misión. Esto es solo una guía visual para que los jugadores puedan saber lo desafiante que será la misión. Esto no modifica de ninguna manera los niveles de boss, objetos u otros.
| Clave | Valores | Predeterminado |
|---|---|---|
questLevel | Entero | 0 |
Ejemplo
questLevel: 10

questAcceptSound
Establece el sonido que se reproduce cuando se acepta una misión. Es posible reproducir tanto sonidos de Minecraft como sonidos de un paquete de recursos. Cuando no se establece, EliteMobs reproduce en su lugar el sonido global de aceptación de misión de SoundsConfig.
| Clave | Valores | Predeterminado |
|---|---|---|
questAcceptSound | Cadena | ninguno |
Ejemplo
questAcceptSound: entity.experience_orb.pickup

questCompleteSound
Establece el sonido que se reproduce cuando se completa (se entrega) una misión. Es posible reproducir tanto sonidos de Minecraft como sonidos de un paquete de recursos. Cuando no se establece, EliteMobs reproduce en su lugar el sonido global de misión completada de SoundsConfig.
| Clave | Valores | Predeterminado |
|---|---|---|
questCompleteSound | Cadena | ninguno |
Ejemplo
questCompleteSound: entity.player.levelup

Traducción
Los siguientes campos admiten localización para servidores multilingües:
namequestLorequestAcceptDialogquestCompleteMessage- Dentro de cada entrada de
customObjectives:dialog,name,npcName,itemNameylocation
Esto te permite proporcionar traducciones para distintos idiomas en tu servidor.
Permisos
Los permisos se escriben como cadenas o listas de cadenas. Estos ejemplos explican cómo bloquear y desbloquear misiones.
Importante: questAcceptPermission y questAcceptPermissions comprueban marcadores internos de EliteMobs, no permisos ordinarios. Completar una misión con el questLockoutPermission correspondiente crea ese marcador. Conceder el mismo nombre mediante LuckPerms no desbloquea la misión. temporaryPermissions, en cambio, concede permisos reales mientras la misión está activa.
Supongamos que estás haciendo quest_3 en una serie de misiones que has planeado y no quieres que los jugadores puedan tomar quest_3 antes de terminar quest_2. Configuraríamos el archivo de la misión así:
questAcceptPermission: elitequest.quest_2.yml
questLockoutPermission: elitequest.quest_3.yml
La misión 2 debe conceder elitequest.quest_2.yml mediante su propio questLockoutPermission. La misión 3 exige ese marcador con questAcceptPermission. Con la duración predeterminada no positiva, completar la misión 3 concede su marcador permanente e impide repetirla. Ofrecer una misión ya activa desde otro NPC no crea una segunda copia independiente.
Si quieres hacer una misión que solo esté disponible después de que los jugadores hayan completado una serie de misiones, entonces configurarías el archivo de la misión así:
questAcceptPermissions:
- elitequest.quest_2.yml
- elitequest.quest_3.yml
- elitequest.quest_4.yml
Para que aceptar una misión conceda acceso a la generación normal de un objeto, añade un nodo a temporaryPermissions y usa el mismo en el campo permission del objeto.
Por ejemplo, abriríamos nuestro archivo de misión y añadiríamos lo siguiente:
temporaryPermissions:
- elitequest.my_cool_item.yml
Luego abriríamos el archivo del objeto, en nuestro caso my_cool_item.yml, y añadiríamos lo siguiente:
permission: elitequest.my_cool_item.yml
La misión concede ahora, mientras está activa, el nodo que comprueba la generación normal del objeto, y lo retira al completarla o abandonarla.
Grupos y crédito de eliminación compartido
Las misiones son personales: unirse a un grupo no acepta, entrega ni recompensa misiones de otros jugadores. Cuando un miembro obtiene crédito por una muerte, los miembros conectados en el mismo mundo y dentro de sharedProgressRange (128 bloques por defecto en Party.yml) también progresan en sus objetivos de eliminación activos coincidentes, incluidos los de jefes personalizados.
No se comparten objetos de recolección, diálogos ni objetivos de arena. Los destinatarios deben tener su propia misión activa coincidente y sus datos cargados. Si su partida ha superado la espera o el inicio, deben pertenecer a su lista inicial de participantes. La comprobación no compara por separado su instancia con la de la muerte; sí exige proximidad en el mismo mundo.
Misiones dinámicas
Las Misiones Dinámicas son misiones generadas procedimentalmente que EliteMobs crea y actualiza automáticamente. A diferencia de las misiones personalizadas definidas en archivos de configuración, las misiones dinámicas no requieren ninguna configuración manual y se adaptan a la progresión de cada jugador.
Funcionamiento
- NPC: usa
interactionType: QUEST_GIVER. Sus ofertas proceden del conjunto dinámico, no dequestFileName. - Categoría de misión: limita el nivel de combate a 1–100, divídelo entre cinco con división entera y limita la categoría a 1–20. El nivel 45 usa la categoría 9. La categoría determina las plantillas y la cantidad de muertes; el nivel mínimo del enemigo usa el nivel de combate limitado del jugador.
- Tres plantillas por categoría: cada plantilla elige un tipo de entidad de
questEntityTypesenQuests.yml. Los tipos de entidad desconocidos y los que no tienen propiedades de mob de EliteMobs se omiten con una advertencia, y una lista sin entradas utilizables desactiva las ofertas de misiones dinámicas. Cada plantilla elige también una cantidad entretier + 1ytier * 10, ambos incluidos. El Elite Mob del tipo correcto debe alcanzar o superar el nivel mínimo; un mob normal de Minecraft no cuenta. - Renovación: las plantillas cambian cada 1200 ticks, unos 60 segundos a 20 TPS. Se conservan las misiones existentes y su progreso. El menú combina estas con las tres plantillas de la categoría actual, evitando IDs de plantilla duplicados; puede mostrar más de tres entradas.
- Adaptación a mazmorras dinámicas: entrar actualiza el nivel mínimo del enemigo, el nivel visible y el nombre de las misiones dinámicas existentes al nivel seleccionado, limitado a 1–100. Conserva las cantidades y el progreso. No recalcula la recompensa monetaria.
- Recompensas: la moneda se fija al crear la oferta como
floor(questLevel / 2 * targetKillCount). El objeto se genera mediante el sistema normal de botín al entregar, usando el nivel seleccionado de mazmorra dinámica o el nivel de combate actual, con un 10 % de probabilidad de sumar uno y un límite final de 1–100. Se aplican las reglas de disponibilidad y escalado; la vista previa hace una tirada aparte.
