CannonRTP-API
CannonRTP stellt drei Bukkit-Events bereit, in die sich andere Plugins einklinken können. Alle Events liegen im Paket com.magmaguy.cannonrtp.api und werden im Haupt-Server-Thread gefeuert.
Zum Mithören registriere einen normalen Bukkit-@EventHandler -- es gibt keinen separaten Registrierungsschritt.
CannonRTPLaunchEvent
Wird in dem Moment gefeuert, in dem ein Spieler im Begriff ist, eine Kanonenstartsequenz zu beginnen, bevor irgendwelche Visuals oder Effekte angewendet werden. Abbrechbar.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
player | Player | Der Spieler, der die Kanone ausgelöst hat |
cannonId | String | Die Konfigurations-ID (Dateiname ohne .yml) der Kanone |
cannonDisplayName | String | Das Feld displayName der Kanone |
cannonLocation | Location | Die genaue Platzierung, die ausgelöst wurde |
destination | Location | Der vorab validierte sichere Landeort, der für diesen Start gewählt wurde |
Das Abbrechen des Events bricht den Start komplett ab: Der Spieler bleibt, wo er ist, es werden keine Effekte angewendet, und das Ziel wird an den Anfang der Kanonenwarteschlange zur Wiederverwendung beim nächsten Start zurückgegeben. Nützlich für regionsbasierte Blacklists, Cooldown-Plugins, Economy-Sperren oder PvP-Regionsprüfungen.
@EventHandler
public void onLaunch(CannonRTPLaunchEvent event) {
if (event.getPlayer().getWorld().getName().equals("event_world")) {
event.setCancelled(true);
}
}
CannonRTPLocationValidationEvent
Wird für jeden Kandidaten-Landeort gefeuert, während CannonRTP ihn während der Vorlade-Suche validiert. Wird nur nachdem alle integrierten Prüfungen (Weltgrenze, Oberfläche, unsichere Materialien, Schutz-Integrationen) bestanden wurden, gefeuert.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
cannonId | String | Die Konfigurations-ID der suchenden Kanone |
cannonDisplayName | String | Das Feld displayName der Kanone |
candidate | Location | Der Kandidaten-Landeort, der in Betracht gezogen wird |
Dieses Event ist im Bukkit-Sinne nicht abbrechbar. Um einen Kandidaten zu verwerfen, rufe auf:
event.setRejected("inside arena spawn protection");
CannonRTP verwirft dann den Kandidaten, als hätte er eine interne Prüfung nicht bestanden, und setzt die Suche fort. Listener können benutzerdefinierte Regionsregeln über die integrierten Schutzadapter hinaus implementieren.
Hinweis: Wird während Vorladeversuchen im Haupt-Thread gefeuert (einer pro Tick global, Round-Robin über aktive Kanonen). Halte den Handler schnell.
CannonRTPLandingEvent
Wird gefeuert, nachdem ein Spieler zum Ziel teleportiert wurde und die Startsequenz vollständig abgeschlossen ist (die LANDING-Phase ist gelaufen, Langsamer Fall wurde entfernt und der Aufschlagsausbruch wurde abgespielt). Nicht abbrechbar -- verwende CannonRTPLaunchEvent, um einen Start zu verhindern, bevor er passiert.
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
player | Player | Der Spieler, der gerade gelandet ist |
cannonId | String | Die Konfigurations-ID der Kanone, die ihn gestartet hat |
cannonDisplayName | String | Das Feld displayName der Kanone |
destination | Location | Eine Kopie des Ziels, zu dem er gesendet wurde |
Nützlich, um Belohnungen bei der ersten Ankunft zu vergeben, Folgeeffekte auszulösen, Regionsberechtigungen zu gewähren, Ankünfte zu broadcasten oder für Analytik.
Threading und Lebenszyklus
- Alle drei Events werden im Haupt-Thread verteilt.
CannonRTPLocationValidationEventwird während des globalen Vorlade-Ticks verteilt (ein Versuch pro Server-Tick, Round-Robin über aktive Kanonen), daher verlangsamt schwere Arbeit in Listenern sichtbar, wie schnell Kanonen ihre Warteschlangen aufladen.CannonRTPLaunchEventwird unmittelbar bevor eineLaunchSequenceerstellt wird verteilt, sodass jeder Zustand, den du mutierst (Trankeffekte, Inventar, Spielmodus), vor Beginn der Suchphase wirksam wird.CannonRTPLandingEventwird einmal pro Start verteilt, im LANDING-Phasen-Tick, nach dem Aufschlagsausbruch.
Arbeiten mit cannonId
cannonId ist dieselbe ID, die von jedem Admin-Befehl (/wc place, /wc target, etc.) verwendet wird und entspricht dem Dateinamen der Kanonenkonfiguration ohne .yml. Beachte, dass eine einzelne Kanonenkonfiguration viele Platzierungen in der Welt steuern kann; alle teilen sich dieselbe cannonId und cannonDisplayName. Wenn du die genaue Platzierung benötigst, verwende cannonLocation aus CannonRTPLaunchEvent.