Zum Hauptinhalt springen

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.

EigenschaftTypBeschreibung
playerPlayerDer Spieler, der die Kanone ausgelöst hat
cannonIdStringDie Konfigurations-ID (Dateiname ohne .yml) der Kanone
cannonDisplayNameStringDas Feld displayName der Kanone
cannonLocationLocationDie genaue Platzierung, die ausgelöst wurde
destinationLocationDer 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.

EigenschaftTypBeschreibung
cannonIdStringDie Konfigurations-ID der suchenden Kanone
cannonDisplayNameStringDas Feld displayName der Kanone
candidateLocationDer 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.

EigenschaftTypBeschreibung
playerPlayerDer Spieler, der gerade gelandet ist
cannonIdStringDie Konfigurations-ID der Kanone, die ihn gestartet hat
cannonDisplayNameStringDas Feld displayName der Kanone
destinationLocationEine 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.
  • CannonRTPLocationValidationEvent wird 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.
  • CannonRTPLaunchEvent wird unmittelbar bevor eine LaunchSequence erstellt wird verteilt, sodass jeder Zustand, den du mutierst (Trankeffekte, Inventar, Spielmodus), vor Beginn der Suchphase wirksam wird.
  • CannonRTPLandingEvent wird 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.