Crear eventos
Los eventos se definen como archivos .yml dentro de la carpeta plugins/EventUI/events/. Cada archivo puede contener un evento con sus objetivos, recompensas y metadatos.
Estructura de un evento
Este es un evento completo con todos los campos disponibles. Los marcados como obligatorios deben estar siempre presentes.
# ── CAMPOS OBLIGATORIOS ──────────────────────────────────────
id: "mi-evento" # Identificador único del evento
display_name: "Mi Evento" # Nombre visible en la UI
description: "Descripción." # Descripción del evento
# ── METADATOS (opcionales) ────────────────────────────────────
metadata:
icon: "minecraft:diamond" # Ítem usado como ícono en la UI
difficulty: "medium" # easy | medium | hard (solo visual)
category: "combate" # Categoría libre (solo visual)
repeatable: "false" # "true" = se puede repetir al completar
# ── COMPORTAMIENTO ────────────────────────────────────────────
always_active: true # true = se inicia automáticamente
# false = requiere /eventui start
# Si no se define, usa el valor global de config.yml
# ── DEPENDENCIAS (opcionales) ─────────────────────────────────
dependencies:
- "evento-anterior" # IDs de eventos que deben completarse antes
# ── OBJETIVOS (al menos uno) ──────────────────────────────────
objectives:
- id: "obj-1"
type: KILL_ENTITY
description: "Mata zombies"
target_amount: 10
parameters:
entity_type: "minecraft:zombie"
# ── RECOMPENSAS (opcionales) ──────────────────────────────────
rewards:
xp: 500
items:
- "minecraft:diamond 3"
- "minecraft:cooked_beef 16"
Campos raíz
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id |
String | ✅ Sí | Identificador único. Solo letras, números y guiones. Debe ser único entre todos los eventos. |
display_name |
String | ✅ Sí | Nombre visible en la UI y en mensajes del chat. Acepta § para colores. |
description |
String | ✅ Sí | Descripción mostrada en la pantalla de detalle del evento. |
objectives |
Lista | ✅ Sí | Lista de objetivos que el jugador debe completar. Al menos uno requerido. |
metadata |
Mapa | No | Datos adicionales del evento: ícono, dificultad, categoría, repeatable. |
always_active |
Boolean | No | Si es true, el evento se inicia automáticamente. Si no se define, usa el valor global de config.yml. |
dependencies |
Lista de IDs | No | Eventos que deben estar completados antes de que este esté disponible. |
rewards |
Mapa | No | Recompensas entregadas al completar el evento: XP e ítems. |
Campos de metadata
| Campo | Ejemplo | Descripción |
|---|---|---|
icon |
minecraft:diamond |
ResourceLocation del ítem usado como ícono en la UI. Si no se define, usa minecraft:paper. |
difficulty |
easy |
Valor libre — solo visual. Sugeridos: easy, medium, hard, expert. |
category |
combate |
Categoría libre — solo visual. Útil para organizar eventos en la UI. |
repeatable |
"false" |
"true" para que el evento se pueda repetir una vez completado. Por defecto "false". Nota: debe escribirse entre comillas. |
Definición de objetivos
Cada objetivo dentro de objectives requiere estos campos:
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id |
String | ✅ Sí | Identificador único del objetivo dentro del evento. |
type |
Enum | ✅ Sí | Tipo de objetivo. Ver la lista completa de tipos. |
description |
String | ✅ Sí | Texto mostrado en el HUD y en los mensajes de progreso. |
target_amount |
Número | ✅ Sí | Cantidad necesaria para completar el objetivo. Debe ser un número sin comillas. |
parameters |
Mapa | Varía | Parámetros específicos del tipo de objetivo (entity_type, block_id, item_id, etc.). |
optional |
Boolean | No | Si es true, el objetivo no es necesario para completar el evento. |
target_amount debe ser un número sin comillas. Escribir target_amount: "10" causará un error YAML en la consola del servidor. La forma correcta es target_amount: 10.
Formato alternativo con target:
El parser también acepta el formato target: con subcampos, útil para objetivos donde el parámetro principal y el contador van juntos:
objectives:
- id: "minar-piedra"
type: MINE_BLOCK
description: "Mina bloques de piedra"
# Formato A — recomendado
target_amount: 10
parameters:
block_id: "minecraft:stone"
- id: "minar-piedra-alt"
type: MINE_BLOCK
description: "Mina bloques de piedra"
# Formato B — alternativo, equivalente al anterior
target:
count: 10
block_id: "minecraft:stone"
Recompensas
El bloque rewards soporta XP e ítems. Ambos son opcionales y se pueden combinar:
# Solo XP
rewards:
xp: 1000
# Solo ítems
rewards:
items:
- "minecraft:diamond 5" # 5 diamantes
- "minecraft:golden_apple 1" # 1 manzana dorada
- "minecraft:bread 32" # 32 panes
# XP + ítems combinados
rewards:
xp: 500
items:
- "minecraft:emerald 3"
- "minecraft:experience_bottle 10"
El formato de cada ítem es "namespace:id cantidad". Si no se especifica cantidad, se entrega 1 unidad.
Ejemplos completos
Evento simple — un solo objetivo
id: "matar-zombies"
display_name: "§cCazador de no-muertos"
description: "Elimina zombies para ganar experiencia."
metadata:
icon: "minecraft:rotten_flesh"
difficulty: "easy"
category: "combate"
repeatable: "false"
always_active: true
objectives:
- id: "kill-zombies"
type: KILL_ENTITY
description: "Mata zombies"
target_amount: 25
parameters:
entity_type: "minecraft:zombie"
rewards:
xp: 300
items:
- "minecraft:iron_sword 1"
Evento con múltiples objetivos
id: "supervivencia-basica"
display_name: "§eSupervivencia básica"
description: "Reúne los recursos esenciales para sobrevivir tu primera noche."
metadata:
icon: "minecraft:crafting_table"
difficulty: "easy"
category: "tutorial"
repeatable: "false"
always_active: true
objectives:
- id: "minar-madera"
type: MINE_BLOCK
description: "Recolecta madera"
target_amount: 16
parameters:
block_id: "minecraft:oak_log"
- id: "craftear-pico"
type: CRAFT_ITEM
description: "Fabrica un pico de madera"
target_amount: 1
parameters:
item_id: "minecraft:wooden_pickaxe"
- id: "minar-piedra"
type: MINE_BLOCK
description: "Mina bloques de piedra"
target_amount: 8
parameters:
block_id: "minecraft:stone"
- id: "craftear-cama"
type: CRAFT_ITEM
description: "Fabrica una cama"
target_amount: 1
parameters:
item_id: "minecraft:white_bed"
optional: true # No es obligatorio para completar el evento
rewards:
xp: 150
items:
- "minecraft:cooked_beef 8"
- "minecraft:torch 16"
Evento con dependencias
id: "mineria-avanzada"
display_name: "§6Minería avanzada"
description: "Desciende hasta el bedrock y encuentra diamantes."
metadata:
icon: "minecraft:diamond_pickaxe"
difficulty: "hard"
category: "mineria"
repeatable: "false"
# Este evento solo aparece si "supervivencia-basica" está completado
dependencies:
- "supervivencia-basica"
objectives:
- id: "alcanzar-nivel"
type: REACH_LEVEL
description: "Alcanza el nivel 10"
target_amount: 10
- id: "minar-diamantes"
type: MINE_BLOCK
description: "Extrae diamantes"
target_amount: 5
parameters:
block_id: "minecraft:diamond_ore"
rewards:
xp: 1000
items:
- "minecraft:diamond_pickaxe 1"
Organización de archivos
El plugin carga archivos .yml de forma recursiva desde la carpeta events/. Puedes usar subcarpetas para organizar tus eventos sin ningún problema:
plugins/EventUI/events/
├── tutoriales/
│ ├── supervivencia-basica.yml
│ └── primera-noche.yml
├── combate/
│ ├── matar-zombies.yml
│ ├── matar-esqueletos.yml
│ └── boss/
│ └── derrotar-wither.yml
└── mineria/
├── mineria-basica.yml
└── mineria-avanzada.yml
id dentro del YAML para identificar cada evento. Dos archivos con el mismo id causarán que el segundo sobreescriba al primero.
Errores comunes en el YAML
| Error en consola | Causa | Solución |
|---|---|---|
| Un campo numérico tiene comillas | target_amount: "10" |
Quita las comillas: target_amount: 10 |
| Un campo de texto necesita comillas | Descripción con caracteres especiales sin comillas | Envuelve el valor entre comillas: description: "Mata 25: enemigos" |
| Falta un campo obligatorio | Falta id, type o description |
Verifica que todos los campos obligatorios estén presentes |
| Tipo de objetivo inválido | type: kill_entity (minúsculas) |
El tipo debe estar en mayúsculas: type: KILL_ENTITY |
| Verifica la indentación | Uso de tabs en lugar de espacios | YAML solo acepta espacios. Usa 2 o 4 espacios por nivel de indentación |
Hot reload
No necesitas reiniciar el servidor para aplicar cambios en los archivos de eventos ni uis. Al hacer un cambio en cualquier archivo de UI y guardarlo, esta se recargará automaticamente despues de 2-3s.
Esto recarga todos los archivos de events/ y uis/, y notifica a los clientes conectados del cambio. El progreso de los jugadores no se pierde al hacer reload.