Zum Hauptinhalt springen

CannonRTP-API

Die generierte Java-Referenz bietet durchsuchbare Klassen, Methoden und Signaturen. Für jedes Modul sind Quellversion und Commit angegeben.

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, es startet keine eingebaute Start-Abklingzeit, und das Ziel wird an den Anfang der Kanonenwarteschlange zurückgegeben. Damit nicht bei jedem Spieler-Scan-Tick ein dauerhaft abgebrochenes Event gefeuert wird, staffelt CannonRTP die Wiederholungen von 1 Sekunde bis auf 30 Sekunden hoch, solange dieser Spieler im Auslöser bleibt; das Verlassen des Auslösers oder ein abgeschlossener angenommener Start setzt die Staffelung zurück. 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 während der Vorlade-Suche für jeden möglichen Landeort ausgelöst, den CannonRTP validiert, und erneut für das entnommene Ziel bei der abschließenden Validierung des Starts, unmittelbar vor der Abwurf-Teleportation. Beim Vorladen erfolgt dies nach bestandenen Prüfungen auf Weltgrenze, Oberfläche, unsichere Materialien und Schutz. Beim Abschluss des Starts werden die aktuelle Weltreferenz, die Blocksäule am Landeort und die Schutzintegrationen vor dem Event erneut geprüft. Die Weltgrenzenprüfung wird dabei nicht wiederholt.

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");

Während des Vorladens verwirft CannonRTP den Kandidaten dann, als hätte er eine interne Prüfung nicht bestanden, und setzt die Suche fort. Der übergebene Grund erscheint im /wc status-Detail der Kanone als Rejected by another plugin: <reason>, bis eine spätere Statusänderung ihn ersetzt, etwa ein in die Warteschlange gestellter Ort oder eine erschöpfte Suche. Zum Festlegungszeitpunkt bricht ein Verwerfen stattdessen den Start ab und rettet den Spieler, statt ihn an einen Ort zu teleportieren, den ein Listener nicht mehr akzeptiert. Listener können benutzerdefinierte Regionsregeln über die integrierten Schutzadapter hinaus implementieren.

Hinweis: Beide Auslösungen erfolgen im Haupt-Thread, und Vorladeversuche laufen global einer pro Tick, im Round-Robin über aktive Kanonen. Halte den Handler schnell.

CannonRTPLandingEvent​

Wird ausgelöst, nachdem ein Spieler zum Ziel teleportiert wurde und die Startsequenz vollständig abgeschlossen ist: Die LANDING-Phase ist gelaufen, CannonRTP hat seinen eigenen Effekt „Langsamer Fall“ entfernt und der Aufschlagseffekt wurde abgespielt. Ein zuvor bestehender Effekt kann mit seiner Restdauer wiederhergestellt werden; ein neuerer Effekt aus einer anderen Quelle bleibt erhalten. 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. Es wird pro Start noch einmal verteilt, zum Festlegungszeitpunkt, wenn das Ziel aus der Warteschlange neu validiert wird.
  • 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.

Hilfsmethode für die Schutzprüfung​

Die Hauptklasse des Plugins stellt außerdem die Schutzprüfung bereit, die /wc probe verwendet:

boolean allowed = CannonRTP.getInstance().isPotentialLandingLocationAllowed(location);

Sie gibt true zurück, wenn jede aktivierte Schutzintegration den Ort erlaubt, und folgt dabei failOpenOnProtectionErrors. Gelände, die Airdrop-Säule, die Weltgrenze und Listener von CannonRTPLocationValidationEvent prüft sie nicht. Bis CannonRTP beim Start seine Kanonen geladen hat, gibt sie false zurück. CannonRTP ist com.magmaguy.cannonrtp.CannonRTP.

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.