API para desarrolladores de EternalTD
La referencia Java generada permite buscar clases, métodos y firmas, e indica la versión y el commit del código fuente de cada módulo.
EternalTD expone eventos Bukkit personalizados en com.magmaguy.eternaltd.api que otros plugins pueden escuchar para integrarse.
Eventos de torres
Se emiten cuando un jugador interactúa con torres durante una sesión de nivel.
| Evento | Cancelable | Datos expuestos |
|---|---|---|
TowerPlaceEvent | Sí | Tower tower |
TowerSellEvent | Sí | Tower tower |
TowerUpgradeEvent | Sí | Tower tower |
Cancelar un evento de torre impide completar la acción.
TowerPlaceEvent se emite después de asignar la celda a la torre, pero antes de generar su entidad, cobrar su coste o añadirla al conjunto de torres de la sesión. No supongas que getLivingEntity() está disponible en ese callback. Los eventos de mejora y venta se emiten antes del cambio de moneda y de modificar la torre.
Eventos de fases de oleada
Se emiten durante las transiciones del ciclo de vida de las oleadas. Ninguno se puede cancelar.
| Evento | Datos expuestos |
|---|---|
WaveConstructionPhaseStartEvent | LevelSession levelSession |
WaveStartingPhaseStartEvent | LevelSession levelSession |
WaveDefensivePhaseEvent | LevelSession levelSession |
WaveEndingPhaseEvent | LevelSession levelSession |
WaveStartingPhaseStartEvent se emite al entrar en el estado inicial de espera del inicio. WaveConstructionPhaseStartEvent se emite entre oleadas. WaveDefensivePhaseEvent se emite antes de incrementar el número de oleada, por lo que consultarlo durante ese callback devuelve el valor anterior. Pese a su nombre, WaveEndingPhaseEvent se emite al terminar la sesión, no después de cada oleada completada.
Durante el evento inicial, la sesión ya está en LevelSession.getSessions(), pero todavía no está marcada como jugable, y el jugador sigue fuera del mundo del nivel y sin los objetos de la partida; el teletransporte de entrada ocurre en el tick siguiente. Durante el evento final ya se ha cerrado la oleada actual y se ha registrado cualquier nueva puntuación máxima, pero la sesión sigue registrada y aún no se han limpiado sus torres, el estado del propio jugador ni el mundo de instancia. Cuando la partida termina porque el jugador se desconectó, el jugador ya se ha ido: su estado está restaurado y la sesión ya no está en LevelSession.getSessions().
Eventos de entidades de oleada
Se emiten cuando las entidades de oleada reciben daño o mueren.
| Evento | Cancelable | Datos expuestos |
|---|---|---|
WaveEntityDamageEvent | No | Tower tower, WaveEntity waveEntity, boolean directDamage |
WaveEntityDeathEvent | No | WaveEntity waveEntity |
WaveEntityDamageEvent es una notificación y no permite editar el daño: no tiene un método para establecer su cantidad. Un impacto directo de área lo emite para activar el daño de área sin aplicar otro impacto directo independiente. En el daño normal, los golpes no letales emiten el evento después de cambiar la salud; los letales emiten WaveEntityDeathEvent en su lugar, después de eliminar la entidad. El daño directo absorbido por completo por la armadura no emite ninguno inmediatamente; el daño periódico programado por separado puede emitir eventos más tarde.
Ejemplo de uso
import com.magmaguy.eternaltd.api.TowerPlaceEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
public class MyETDIntegration implements Listener {
@EventHandler
public void onTowerPlace(TowerPlaceEvent event) {
// React to tower placement
}
}
Notas
- Todos son eventos Bukkit síncronos estándar.
ToweryWaveEntityson tipos internos de EternalTD. Usa sus getters públicos para acceder a los datos.- Los getters de
LevelSessionexponen el número de oleada, las torres y la configuración. Accede al jugador mediantegetMatchPlayer().getPlayer(). LevelSessionextiende la claseMatchde MagmaCore. EternalTD incluye MagmaCore (shade) reubicado encom.magmaguy.eternaltd.magmacore, así que en el JAR del plugin esa clase escom.magmaguy.eternaltd.magmacore.match.Match.