MANUAL DEL ADMINISTRADOR & WIKI TÉCNICA

WarriorClasses — Sistema de Clases & Combate Táctico

WarriorClasses es un motor de combate RPG nativo y liviano para servidores Minecraft Purpur/Paper. Integra 5 clases especializadas, 35 habilidades, pericia de armas con reducción dinámica de cooldowns, mitigación de daño vanilla (Swing Softening), estados alterados (Sangrado, Herida Profunda) y un Motor de Amenaza Universal (Threat Engine) autónomo basado en la API nativa de Paper 1.21.1.

Plataforma Purpur 1.21.11 / Paper 1.21.1
Entorno Runtime Java 21 (JDK 21)
Package Base com.castlehill.classes
Threat Engine Universal / Agnóstico

1. Arquitectura & Rendimiento

Diseño thread-safe, 100% dirigido por eventos y sin bucles globales pesados.

Sistema de Pasivas Zero-Lag

Sin bucles globales por tick verificando jugadores. Todas las pasivas y estados alterados son dirigidos por eventos (EntityDamageEvent, EntityDeathEvent) y un único task por segundo para el gestor de estados.

Event-Driven Architecture
0% carga de CPU en reposo

I/O Asíncrono de Perfiles

Perfiles, historial de maestría y configuraciones se gestionan de forma asíncrona mediante ConcurrentHashMap y guardado I/O no bloqueante, protegiendo el TPS del hilo principal (Main Thread).

Thread-Safe Profile Caching
I/O Async sin caídas de TPS

Experiencia Móvil / Bedrock

Elimina la necesidad de escribir comandos en consolas y celulares. El Selector de Habilidades (Brújula) rota con un clic y dispara con otro, complementado con el Compendio Rápido /fl (GUI de 27 slots).

Ítem persistente al morir
Compatible con Java y Geyser/Bedrock

2. Instalación y Despliegue

Pasos para desplegar en tu servidor Purpur o Paper.

  1. 1
    Requisitos del Entorno Servidor Purpur 1.21.11 o Paper 1.21.1 ejecutando sobre Java 21.
  2. 2
    Colocar el Plugin Copia WarriorClasses.jar dentro de la carpeta /plugins/ del servidor.
  3. 3
    Dependencias Opcionales Instala PlaceholderAPI si deseas proyectar variables de clase en scoreboards, TAB o chat (el plugin opera de forma autónoma sin dependencias externas obligatorias).
  4. 4
    Iniciar el Servidor Se generará automáticamente la carpeta plugins/WarriorClasses/ con messages.yml y perfiles en userdata/.

3. Matriz de Clases & Habilidades

Parámetros exactos, fórmulas, cooldowns y efectos según messages.yml.

4. Mecánicas Avanzadas de Combate

Fórmulas implementadas en WeaponMechanicsManager.java y CombatListener.java.

1. Pericia de Arma (0 a 400 pts)

Escala el daño físico base de un 80% a un 160% y reduce los tiempos de recarga de habilidades activas hasta un 40%.

ratio = Math.min(1.0, (double) expertise / cap);
minCooldown = (int) Math.max(1, Math.round(baseCooldown * 0.60)); // Hasta 40% más rápido
return (int) Math.max(1, Math.round(baseCooldown - ratio * (baseCooldown - minCooldown)));
  • Cap por Tier: Tier 1 = 100 pts, Tier 2 = 200 pts, Tier 3 = 400 pts.
  • Reducción de Cooldowns: calculateDynamicCooldown() aplica hasta -40% al CD base (a 400 de pericia, 10s baja a 6s exactos).

2. Swing Softening (Mitigación Vanilla)

El spam-click en Vanilla castiga severamente el daño (hasta -80%). WarriorClasses suaviza esta penalización en proporción a la pericia acumulada por el guerrero.

vanillaFactor = 0.2 + (cd * cd) * 0.8
softened = vanillaFactor + (1.0 - vanillaFactor) * (ratio * 0.5)

3. Golpe Rozado (Glancing Blow)

Atacar a un mob o jugador de mayor nivel activa un Golpe Rozado (10% a 55% según diferencia de nivel), reduciendo el daño saliente en un 22% plano.

4. Estados Alterados Personalizados

🩸 Sangrado: Daño verdadero continuo que ignora armadura y escudos (0.8 daño/stack cada segundo).
🩹 Herida Profunda: Reduce en un -50% toda curación entrante (pociones, rezos, vendajes).

5. Threat Engine & Sistema de Progresión

Evaluación de amenaza en tiempo real, calibración del motor y avance por Tiers.

Fórmula de Amenaza (Dificultad Dinámica):

Threat = HealthWeight + DamageWeight + ArmorWeight + EffectWeight

Escanea atributos nativos de Paper API (vida máxima, daño base, armadura y efectos poción activos) al iniciar el combate, categorizando el objetivo automáticamente y asignando los Puntos de Amenaza ganados.

Threat < 15.0 pts Dificultad Básica
Threat 15.0 a 39.9 pts ★ Moderado (Apto Tier 1)
Threat ≥ 40.0 pts ★ Monstruos de Alto Riesgo / Jefes

Evolución de Clase, Ritmo y Topes Diarios (Modo Calibración)

La evolución entre Tiers (Tier 1 → Tier 2 → Tier 3) no depende de compras de monedas ni de matar enemigos comunes: está gobernada directamente por el Motor de Amenaza mediante el combate contra enemigos de élite y monstruos de alto riesgo.

Tope Diario (3.500 pts) Para premiar la constancia y evitar maratones abusivas, existe un límite estricto de 3.500 puntos de amenaza diarios acumulables (medianoche servidor).
Bono Primera Sangre (x4) Los primeros 250 puntos base del día rinden con un multiplicador x4, otorgando hasta 1.000 pts rápidos para jugadores casuales.
Metas & 10 Grados por Tier Cada Tier se divide en 10 Grados de maestría (1 grado cada 10% de amenaza requerida: 2.500 pts por grado en Tier 1).
Requisitos de Ascenso (/class evolve):
  • Tier 1 → Tier 2: 25.000 Puntos de Amenaza + 500 XP de Rol + 1 Desafío Vencido (calabozo/mob ≥150 amenaza).
  • Tier 2 → Tier 3: 62.500 Puntos de Amenaza + 2.000 XP de Rol + 5 Desafíos Vencidos (o Trofeo de Jefe ≥400 amenaza).
Reglas del Motor: Techo máximo de 50 pts por kill, fatiga de ráfaga (-50% si mueren mobs a menos de 5s entre sí), y exclusión de mobs pacíficos y granjas abusivas.

6. Comandos & Permisos

Comandos oficiales y matriz completa de nodos de permisos declarados en plugin.yml.

Comandos de Jugador

Default: Todos
/class [nombre] Abre el menú interactivo de clases (54 slots) o selecciona una clase directamente.
/class status Consulta Tier actual, pericia de arma, puntos en el Motor de Amenaza (diario/acumulado), Desafíos y XP de Rol.
/class evolve Asciende al siguiente Tier al cumplir los requisitos de Amenaza, XP de Rol y Desafíos/Trofeo.
/class reset Cambia de clase consumiendo un Cristal de Reasignación en mano (conserva el historial si ya alcanzaste Tier 3).
/skill preparar|quitar <habilidad> Equipa o retira habilidades activas en las ranuras de combate permitidas según tu Tier.
/fl Abre el Compendio Rápido de Habilidades (Fast Loadout GUI de 27 slots).
/warrior help Muestra la guía interactiva en el chat con los atajos de clase y el uso de la Brújula como selector oficial.

Comandos de Administración

Default: OP
/warrior reload .admin.reload
Recarga config.yml y messages.yml en memoria sin reiniciar el servidor.
/warrior reset <jugador> .admin.reset
Resetea por completo la clase, el Tier y la pericia de un jugador.
/warrior settier <jugador> <1-3> .admin.settier
Fuerza el Tier de combate del jugador de forma instantánea.
/warrior addkills|adddungeons <jugador> <n> .admin.addkills
Suma puntos de amenaza o desafíos completados al registro del jugador.
/warrior givetrophy <jugador> .admin.givetrophy
Otorga el Trofeo de Jefe indispensable para el ascenso a Tier 3.
/warrior givecrystal <jugador> .admin.givecrystal
Entrega Cristales de Reasignación de Clase (cambio con confirmación 10s).

Matriz de Permisos (plugin.yml)

Nodo de Permiso Descripción / Propósito Default
warriorclasses.admin.* Comodín maestro: Otorga acceso a todos los comandos y funciones administrativas del plugin. OP
warriorclasses.admin.reload Permite recargar config.yml y messages.yml con /warrior reload. OP
warriorclasses.admin.reset Permite resetear totalmente la clase, Tier y maestría de un jugador con /warrior reset. OP
warriorclasses.admin.settier Permite modificar el Tier de clase directamente con /warrior settier. OP
warriorclasses.admin.addkills Permite sumar bajas élite o calabozos manualmente a un jugador con /warrior addkills|adddungeons. OP
warriorclasses.admin.givetrophy Permite entregar el Trofeo de Jefe de Calabozo personalizado con /warrior givetrophy. OP
warriorclasses.admin.givecrystal Permite entregar Cristales de Reasignación de Clase con /warrior givecrystal. OP
Comandos de Jugador (/class, /warrior, /skill, /fl) Acceso libre y automático a selección de clase, preparación de habilidades, compendio y rotación sin necesidad de configurar nodos restrictivos. Todos

Soporte Multilingüe Dinámico en Comandos

Los comandos /class y /skill reconocen automáticamente dos formas de entrada en el juego:

Nombre Canónico en Inglés Siempre activo por defecto, independiente de la localización del servidor (ej. /class Bastion, /skill Shield Wall o el ID técnico /skill shield-wall).
Nombre Localizado (messages.yml) Si traduces los parámetros display_name (en clases) o alias (en habilidades) a cualquier idioma (español, portugués, etc.), el motor procesará el comando en ese idioma de forma automática al guardar o ejecutar /warrior reload.

7. Expansión PlaceholderAPI

Variables registradas en WarriorClassesExpansion.java para Tablist, Chat y Scoreboard.

Placeholder Descripción Ejemplo
%warriorclasses_class% Nombre de la clase actual Bastión / Bárbaro
%warriorclasses_tier% Nivel de Tier numérico (1, 2 o 3) 2
%warriorclasses_rank% Título del rango según el Tier Baluarte / Berserker
%warriorclasses_expertise% Puntos de pericia de arma actuales 145 / 200
%warriorclasses_role_xp% Experiencia de rol acumulada 620
%warriorclasses_slots_prepared% Ranuras de habilidades ocupadas vs máx 3/3
Recordatorio Técnico de Registro La expansión WarriorClassesExpansion se autoregistra automáticamente en el motor de PlaceholderAPI al arrancar el servidor. Si PlaceholderAPI se instala, actualiza o recarga con el servidor ya iniciado, simplemente ejecuta /papi reload para sincronizar los placeholders.

8. Archivos de Configuración

Ajustes de persistencia, multiplicadores de XP, conmutadores de combate y localización.

config.yml Motor Principal del Plugin
plugins/WarriorClasses/config.yml
# =========================================================
# WARRIORCLASSES — CONFIGURACIÓN PRINCIPAL (config.yml)
# =========================================================

# --- [ CONFIGURACIÓN GENERAL Y PERSISTENCIA ] ---
storage:
  # Intervalo de guardado automático de perfiles en disco (en minutos).
  auto-save-interval-minutes: 10
  # Ejecutar operaciones de lectura/escritura de forma asíncrona para proteger los TPS.
  async-io: true
  # Muestra información extendida en la consola del servidor para depuración.
  debug-mode: false

# --- [ PROGRESIÓN Y MULTIPLICADORES DE XP ] ---
progression:
  # Multiplicador global de experiencia de rol ganada en combate.
  role-xp-multiplier: 1.0
  # Ganancia base de puntos de pericia de arma por cada golpe efectivo.
  expertise-per-hit: 0.5
  # Puntos máximos de pericia permitidos según el Tier del jugador.
  expertise-caps:
    tier-1: 100.0
    tier-2: 200.0
    tier-3: 400.0

# --- [ CONMUTADORES Y MÓDULOS DE COMBATE ] ---
combat-mechanics:
  # Swing Softening: Atenúa la penalización vanilla del spam-click según la pericia.
  swing-softening:
    enabled: true
    # Porcentaje de mitigación máxima concedido al alcanzar el cap de pericia (0.50 = 50%).
    max-mitigation-bonus: 0.50

  # Glancing Blow: Activa la probabilidad de propinar un "Golpe Rozado" (-22% de daño)
  # si la diferencia de nivel o amenaza entre atacante y objetivo es elevada.
  glancing-blow:
    enabled: true
    min-chance: 0.10
    max-chance: 0.55
    damage-reduction: 0.22

  # Estados alterados personalizados.
  status-effects:
    bleeding:
      enabled: true
      damage-per-stack: 0.8
      interval-seconds: 1.0
    deep-wound:
      enabled: true
      healing-reduction-percentage: 0.50

# --- [ THREAT ENGINE UNIVERSAL ] ---
threat-engine:
  # Habilita la evaluación automática de amenaza al iniciar combate con cualquier entidad.
  enabled: true
  # Umbrales para clasificar el nivel de amenaza de un objetivo.
  thresholds:
    moderate: 15.0 # Requiere >= 15.0 pts para contar como baja valiosa en Tier 1
    epic: 40.0     # Requiere >= 40.0 pts para contar como baja de jefe en Tiers 2 y 3

Persistencia y Rendimiento

  • storage.auto-save-interval-minutes: Controla la frecuencia (en minutos) con la que los perfiles almacenados en userdata/ se sincronizan en el disco.
  • storage.async-io: Mantiene el guardado en un hilo secundario (asíncrono) para evitar micro-tirones (stuttering) y proteger los 20 TPS del hilo principal (Main Thread).
  • storage.debug-mode: Activa trazas detalladas de combate y eventos en la consola para administradores.

Progresión y Pericia de Arma

  • progression.role-xp-multiplier: Factor multiplicador para la XP de rol recibida por bajas de monstruos.
  • progression.expertise-per-hit: Puntos sumados a la pericia por golpe acertado (sujeto a cooldown interno anti-spam).
  • progression.expertise-caps: Topes máximos de pericia por Tier (Tier 1: 100, Tier 2: 200, Tier 3: 400 pts).

Conmutadores y Módulos de Combate

  • combat-mechanics.swing-softening: Mitiga dinámicamente hasta un 50% de la penalización vanilla por golpear antes de recargar el arma según tu pericia.
  • combat-mechanics.glancing-blow: Calcula si un golpe roza (-22% de daño) frente a mobs de amenaza muy superior (probabilidad entre 10% y 55%).
  • combat-mechanics.status-effects: Configura el tick de Sangrado (0.8 HP/s) y la reducción de curación por Herida Profunda (-50%).

Threat Engine Universal

  • threat-engine.enabled: Habilita el cálculo algorítmico de amenaza sobre cualquier entidad sin depender de plugins externos.
  • thresholds.moderate (15.0): Puntos requeridos para contar como baja meritoria en la evolución de Tier 1 a Tier 2.
  • thresholds.epic (40.0): Puntos de amenaza para categorizar jefes de élite y calabozos requeridos en la ascensión a Tier 3.
messages.yml Localización y Mensajes al Jugador (Español Oficial)
plugins/WarriorClasses/messages.yml
# ==============================================================================
# IMPORTANTE: /class y /skill siempre aceptan el nombre en inglés (Bastion,
# Shield Wall, etc.) además de lo que esté escrito acá abajo. Si traducís
# estos nombres a otro idioma, la traducción también funciona en el comando
# automáticamente — no hace falta tocar código para eso.
# ==============================================================================

prefix: "&8[&6WarriorClasses&8] &r"

class:
  current: "&cYa tienes seleccionada esta clase."
  already-has-class: "&c¡Ya has elegido una clase! Usa un &dCristal de Reasignación &cpara cambiarla."
  not-chosen: "&cNo has seleccionado ninguna clase guerrera. Usa &e/class&c."
  chosen-success: "&a¡Has elegido la clase &e%class%&a exitosamente!"
  status:
    header: "&8=== &6Estado del Guerrero &8==="
    class: "&eClase: &a%class%"
    rank: "&eRango: &b%rank% &7(Tier %tier%)"
    slots: "&eHabilidades equipadas: &f%current%/%max%"
    expertise: "&ePericia de Arma: &6%current%/%max%"

classes:
  bastion:
    display_name: "Bastión"
    tier_1: "Bastión"
    tier_2: "Baluarte"
    tier_3: "Fortaleza"
  barbarian:
    display_name: "Bárbaro"
    tier_1: "Bárbaro"
    tier_2: "Berserker"
    tier_3: "Devastador"
  assassin:
    display_name: "Asesino"
    tier_1: "Asesino"
    tier_2: "Cazador"
    tier_3: "Verdugo"
  sorcerer:
    display_name: "Hechicero"
    tier_1: "Hechicero"
    tier_2: "Conjurador"
    tier_3: "Archimago"
  cleric:
    display_name: "Clérigo"
    tier_1: "Clérigo"
    tier_2: "Adepto"
    tier_3: "Hierofante"

9. Calculadora Interactiva de Cooldowns

Simula cómo la pericia reduce el tiempo de recarga de tus habilidades.

Cooldown Final Dinámico: 13.5s -1.5s (-10%) más rápido