Description
Crea un plugin completo para Spigot/Paper (Minecraft 1.21+, Java 17+) llamado KingWars. Debe ser autónomo, usar Vault para economía (compatible con EssentialsX) y almacenar datos en YAML (kingdoms.yml y playerdata.yml). Usa PersistentDataContainer para marcar nexos y soldados. Softdepend: [Vault].
Mecánicas obligatorias (todas deben implementarse):
Creación de reino: Coste 10.000 monedas (Vault). Comando /kw crear <nombre> o vía GUI. Nombre único (máx 20 chars, sin espacios). Al crear, el dueño recibe un ítem "Nexo" (bloque de hierro custom con PDC: kingwars.nexus y kingwars.level=0).
Colocación del nexo: Al colocar el ítem, verifica que el área 25x25 centrada no se superponga con otros reinos. Si válido, convierte el bloque en nexo (PDC), reclama todos los chunks que intersecten el cuadrado y protege el territorio.
Territorio: Cuadrado centrado en nexo. Nivel 0 → 25x25 bloques. Cada mejora +25 bloques al lado (nivel 1: 50x50, nivel 2: 75x75, etc.). Reclama chunks automáticamente al mejorar.
Mejora de nexo: Coste = 100.000 × (nivel_actual + 1). Sin límite de niveles. Verifica que el nuevo territorio no se superponga antes de permitirla. Cada nivel aumenta:
Territorio +25 bloques laterales
Máx soldados +5 (inicial 5)
Máx aliados +5 (inicial 5, máximo 50)
Soldados: Zombies y esqueletos spawneados con /kw soldado zombie|skeleton dentro del territorio propio. Límite según nivel nexo. Etiquetados con PDC (kingwars.kingdom y kingwars.soldier). No atacan a dueño, miembros ni aliados (cancelar daño vía listeners). Equipo mejora con nivel nexo (cuero → hierro → diamante; armas espada/hacha). Despawn tras 30 min o muerte.
Conquista: Solo enemigos pueden romper nexo enemigo. Al romperlo, el reino atacante absorbe todos sus chunks/territorio y el reino rival se elimina (soldados despawneados, datos borrados).
Protecciones:
Solo miembros/aliados colocan/rompen bloques en territorio propio.
PvP permitido solo entre reinos enemigos (no aliados).
Alianzas: Máximo según nivel (5 inicial, +5/nivel hasta 50). Mutuas. Solicitud/aceptación vía GUI. Aliados comparten protecciones y no PvP.
Reino público/privado: Toggle solo para dueño. Públicos permiten unirse libremente; privados solo por invitación.
Invitaciones: Dueño invita jugadores (online/offline) vía GUI. Jugadores ven invitaciones pendientes.
GUIs obligatorios:
GUI al entrar al servidor (si no está en reino): Inventario persistente (reabre al cerrar si no se une/crea). 3 botones:
Crear reino (abre Anvil GUI para nombre → confirma coste 10.000)
Unirse a reino público (lista paginada de reinos públicos con botón unirse)
Ver invitaciones (lista con botón aceptar por cada una)
Panel de control del reino (dueño, comando /kw o /reino):
Toggle público/privado
Invitar jugador (Anvil GUI nombre)
Mejorar nexo (muestra coste próximo + botón confirmar)
Gestionar alianzas (lista aliados + solicitar a otros reinos)
Comandos principales:
/kw → Abre panel control (dueño) o info reino
/kw crear <nombre>
/kw salir (miembros, no dueño)
/kw soldado zombie|skeleton
Datos YAML:
kingdoms.yml: por reino → owner UUID, members, allies, pending_allies, pending_invites (jugadores), nexus Location, level, claims (lista world:cx:cz), public
playerdata.yml: por UUID → kingdom, pending_invites (lista reinos)
Otros requisitos:
Caché en memoria para rendimiento.
Guardado automático periódico y en cambios importantes.
Mensajes en config.yml (español por defecto).
Feedback con sonidos/partículas.
Tab-complete y permisos básicos (opcional kingwars.admin).
Genera el código fuente completo y funcional (plugin.yml + todas las clases Java necesarias), listo para compilar, sin omitir ninguna de las mecánicas descritas.