> For the complete documentation index, see [llms.txt](https://realisticnode.gitbook.io/rnsetups/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://realisticnode.gitbook.io/rnsetups/es/rncombatpvp/reference/api.md).

# API para desarrolladores

Los eventos que pueden escuchar otros plugins.

rnCombatPvP lanza tres eventos de Bukkit, en el paquete `com.realisticnode.rncombat.api`. Agrega el jar de rnCombatPvP a tu proyecto como dependencia solo de compilación (compile-only), y `rnCombatPvP` a `depend` o `softdepend` en tu `plugin.yml`.

## CombatTagEvent

Un jugador está por **entrar** en combate. No se lanza cuando una pelea que ya está en marcha solo se renueva con otro golpe. **Cancelable**: cancélalo para dejar al jugador fuera del combate.

| Método                                    | Qué da                                                                              |
| ----------------------------------------- | ----------------------------------------------------------------------------------- |
| `getPlayer()`                             | El jugador                                                                          |
| `getEnemy()`                              | Contra quién pelea: un jugador, un mob, o `null` si entró en combate por un comando |
| `getSeconds()` / `setSeconds(int)`        | El tiempo de combate (mínimo 1)                                                     |
| `isCancelled()` / `setCancelled(boolean)` | Cancelar la entrada en combate                                                      |

```java
@EventHandler
public void onTag(CombatTagEvent event) {
    // nadie entra en combate dentro de una arena de eventos
    if (arenas.isInArena(event.getPlayer())) {
        event.setCancelled(true);
    }
}
```

## CombatUntagEvent

Un jugador **salió** del combate. `getReason()` dice por qué:

| Motivo         | Cuándo                                                                   |
| -------------- | ------------------------------------------------------------------------ |
| `EXPIRED`      | Se acabó el tiempo                                                       |
| `DEATH`        | El jugador murió                                                         |
| `ENEMIES_GONE` | Todos los enemigos murieron o se fueron (`combat.end-when-enemies-gone`) |
| `COMMAND`      | `/combat untag`                                                          |
| `QUIT`         | El jugador salió del servidor                                            |
| `PLUGIN`       | Otras causas                                                             |

## CombatLogEvent

Un jugador salió del servidor estando en combate y **está por recibir el castigo**. Se lanza antes de la multa de dinero, los comandos y el NPC. No se puede cancelar; usa `rncombat.bypass.combatlog` para los jugadores que no deben ser castigados.

| Método            | Qué da                                                          |
| ----------------- | --------------------------------------------------------------- |
| `getPlayer()`     | El jugador que salió                                            |
| `getPunishment()` | `NPC`, `KILL` o `NOTHING` (el valor de `combat-log.punishment`) |

```java
@EventHandler
public void onCombatLog(CombatLogEvent event) {
    getLogger().info(event.getPlayer().getName() + " se desconectó en combate (" + event.getPunishment() + ")");
}
```

{% hint style="info" %}
En Folia los eventos se lanzan en el hilo de la región del jugador.
{% endhint %}
