Aller au contenu principal

API développeur d'EternalTD

La référence Java générée permet de rechercher les classes, méthodes et signatures, avec la version et le commit source indiqués pour chaque module.

EternalTD expose des événements Bukkit personnalisés sous com.magmaguy.eternaltd.api que d'autres plugins peuvent écouter à des fins d'intégration.

Événements de tour​

Ces événements se déclenchent lorsqu'un joueur interagit avec les tours pendant une session de niveau.

ÉvénementAnnulableDonnées exposées
TowerPlaceEventOuiTower tower
TowerSellEventOuiTower tower
TowerUpgradeEventOuiTower tower

Annuler un événement de tour empêche l'action de se terminer.

TowerPlaceEvent se déclenche après l'affectation de la case à la tour, mais avant la création de son entité, le paiement de son coût ou son ajout aux tours de la session. Ne supposez pas que getLivingEntity() est disponible dans ce callback. Les événements d'amélioration et de vente précèdent le changement de monnaie et la modification de la tour.

Événements de phase de vague​

Ces événements se déclenchent lors des transitions du cycle de vie des vagues. Aucun d'entre eux n'est annulable.

ÉvénementDonnées exposées
WaveConstructionPhaseStartEventLevelSession levelSession
WaveStartingPhaseStartEventLevelSession levelSession
WaveDefensivePhaseEventLevelSession levelSession
WaveEndingPhaseEventLevelSession levelSession

WaveStartingPhaseStartEvent se déclenche lorsque la session entre dans son état initial d'attente du lancement. WaveConstructionPhaseStartEvent se déclenche entre les vagues. WaveDefensivePhaseEvent est envoyé avant que la session incrémente le numéro de vague : lire ce numéro pendant le callback renvoie donc la valeur précédente. Malgré son nom, WaveEndingPhaseEvent se déclenche à la fin de la session, et non après chaque vague terminée.

Pendant l'événement initial, la session figure déjà dans LevelSession.getSessions() mais n'est pas encore marquée comme jouable, et le joueur se trouve encore hors du monde du niveau, sans les objets de partie ; la téléportation d'entrée a lieu au tick suivant. Pendant l'événement final, la vague courante a été arrêtée et un éventuel nouveau meilleur score a été enregistré, mais la session reste enregistrée et ses tours, l'état propre du joueur ainsi que le monde d'instance ne sont pas encore nettoyés. Lorsque la partie se termine parce que le joueur s'est déconnecté, celui-ci est déjà parti : son état est restauré et la session ne figure plus dans LevelSession.getSessions().

Événements d'entité de vague​

Ces événements se déclenchent lorsque les entités de vague subissent des dégâts ou meurent.

ÉvénementAnnulableDonnées exposées
WaveEntityDamageEventNonTower tower, WaveEntity waveEntity, boolean directDamage
WaveEntityDeathEventNonWaveEntity waveEntity

WaveEntityDamageEvent est une notification, pas un hook de modification des dégâts : il ne possède aucun setter de quantité. Un impact direct à dégâts de zone l'émet pour déclencher le traitement de zone sans appliquer un coup direct supplémentaire. Pour les dégâts ordinaires, un coup non mortel émet l'événement après la modification de la santé ; un coup mortel émet plutôt WaveEntityDeathEvent, après la suppression de l'entité. Les dégâts directs entièrement absorbés par l'armure n'émettent aucun des deux immédiatement ; des dégâts périodiques programmés séparément peuvent émettre des événements plus tard.

Exemple d'utilisation​

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
}
}

Notes​

  • Tous les événements sont des événements Bukkit synchrones standards.
  • Tower et WaveEntity sont des types internes d'EternalTD. Utilisez leurs getters publics pour accéder aux données.
  • Les getters de LevelSession exposent le numéro de vague, les tours et la configuration. Accédez au joueur par getMatchPlayer().getPlayer().
  • LevelSession hérite de la classe Match de MagmaCore. EternalTD intègre MagmaCore (shading) sous com.magmaguy.eternaltd.magmacore ; dans le jar du plugin, cette classe est donc com.magmaguy.eternaltd.magmacore.match.Match.