EternalTD Entwickler-API
Die generierte Java-Referenz enthält durchsuchbare Klassen, Methoden und Signaturen. Für jedes Modul sind die Quellversion und der Commit vermerkt.
EternalTD stellt benutzerdefinierte Bukkit-Events unter com.magmaguy.eternaltd.api bereit, auf die andere Plugins zur Integration lauschen können.
Turm-Events
Diese Events werden ausgelöst, wenn ein Spieler während einer Level-Sitzung mit Türmen interagiert.
| Event | Abbrechbar | Bereitgestellte Daten |
|---|---|---|
TowerPlaceEvent | Ja | Tower tower |
TowerSellEvent | Ja | Tower tower |
TowerUpgradeEvent | Ja | Tower tower |
Das Abbrechen eines Tower-Events verhindert, dass die Aktion ausgeführt wird.
TowerPlaceEvent läuft nach der Zuweisung der Rasterzelle, aber bevor die Turm-Entity spawnt, die Kosten abgezogen werden oder der Turm zur Turmmenge der Sitzung hinzukommt. Verlasse dich in diesem Callback nicht auf ein verfügbares getLivingEntity(). Upgrade- und Verkaufs-Events laufen vor der Währungsänderung und der Änderung am Turm.
Wellenphasen-Events
Diese Events werden während Wellenlebenszyklusübergängen ausgelöst. Keines davon ist abbrechbar.
| Event | Bereitgestellte Daten |
|---|---|
WaveConstructionPhaseStartEvent | LevelSession levelSession |
WaveStartingPhaseStartEvent | LevelSession levelSession |
WaveDefensivePhaseEvent | LevelSession levelSession |
WaveEndingPhaseEvent | LevelSession levelSession |
WaveStartingPhaseStartEvent wird ausgelöst, wenn die Sitzung in ihren anfänglichen Wartezustand vor dem Start wechselt. WaveConstructionPhaseStartEvent wird zwischen Wellen ausgelöst. WaveDefensivePhaseEvent wird gesendet, bevor die Sitzung die Wellennummer erhöht. Wer die Nummer in diesem Callback liest, erhält daher noch den vorherigen Wert. Trotz seines Namens wird WaveEndingPhaseEvent beim Ende der Sitzung ausgelöst, nicht nach jeder abgeschlossenen Welle.
Beim Start-Event steht die Sitzung bereits in LevelSession.getSessions(), ist aber noch nicht als spielbar markiert, und der Spieler befindet sich noch außerhalb der Level-Welt und hat die Partie-Items noch nicht; der Teleport hinein erfolgt im nächsten Tick. Beim End-Event ist die aktuelle Welle bereits beendet und ein eventueller neuer Highscore gespeichert. Die Sitzung ist aber noch registriert, und ihre Türme, der Zustand des Spielers selbst und die Instanzwelt sind noch nicht bereinigt. Endet der Lauf, weil der Spieler die Verbindung getrennt hat, ist der Spieler bereits weg: Sein Zustand ist wiederhergestellt und die Sitzung steht nicht mehr in LevelSession.getSessions().
Wellen-Entity-Events
Diese Events werden ausgelöst, wenn Wellen-Entities Schaden nehmen oder sterben.
| Event | Abbrechbar | Bereitgestellte Daten |
|---|---|---|
WaveEntityDamageEvent | Nein | Tower tower, WaveEntity waveEntity, boolean directDamage |
WaveEntityDeathEvent | Nein | WaveEntity waveEntity |
WaveEntityDamageEvent ist eine Benachrichtigung und bietet keine Möglichkeit, den Schaden zu ändern. Es hat keinen Setter für den Schadensbetrag. Ein direkter AOE-Treffer löst es für die Flächenschadensverarbeitung aus, ohne einen zusätzlichen direkten Treffer anzuwenden. Bei gewöhnlichem Schaden lösen nicht tödliche Treffer das Schadens-Event nach der Änderung der Gesundheit aus. Tödliche Treffer lösen stattdessen WaveEntityDeathEvent aus, nachdem die Entity entfernt wurde. Vollständig von Rüstung abgefangener direkter Schaden löst unmittelbar keines der beiden Events aus; separat geplanter Schaden über Zeit kann später Events auslösen.
Verwendungsbeispiel
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
}
}
Hinweise
- Alle Events sind standardmäßige synchrone Bukkit-Events.
TowerundWaveEntitysind interne EternalTD-Typen. Verwende ihre öffentlichen Getter für den Datenzugriff.LevelSessionbietet Getter für Wellennummer, Türme und Konfiguration. Den Spieler erhältst du übergetMatchPlayer().getPlayer().LevelSessionerweitert die KlasseMatchvon MagmaCore. EternalTD bindet MagmaCore per Shading untercom.magmaguy.eternaltd.magmacoreein, daher heißt diese Klasse in der Plugin-Jarcom.magmaguy.eternaltd.magmacore.match.Match.