Zum Hauptinhalt springen

CannonRTP (WorldCannon)

CannonRTP ist ein Multi-Kanonen-Zufallsteleportations-Plugin für Minecraft-Server. "WorldCannon" ist ein älterer Name bzw. der Name dieses Wiki-Abschnitts; das Plugin registriert sich in Bukkit als CannonRTP, wird als CannonRTP.jar ausgeliefert und das ist der Name, den Spieler und Admins sehen.

Wichtige Namensdetails:

  • Plugin-Name: CannonRTP
  • Hauptbefehl: /cannonrtp
  • Aliase: /crtp, /wc
  • Berechtigungen: cannonrtp.admin, cannonrtp.use
  • Konfigurationsordner: plugins/CannonRTP/

Funktionen​

CannonRTP unterstützt mehrere Kanonen mit zufälligen Landezielen. Jede konfigurierte Kanone kann an einer oder mehreren Stellen in der Welt platziert werden. Jede Platzierung erkennt Spieler, die ihren Auslöseradius betreten.

Jede Kanone kann:

  • mehrfach über /wc create und /wc place platziert werden -- eine einzige Kanonenkonfiguration steuert jede Platzierung
  • Spieler erkennen, die einen kanonenspezifischen Auslöseradius betreten (Standard 1,75 Blöcke)
  • eine Warteschlange sicherer Landeorte in einer konfigurierten Zielwelt vorladen und pflegen (weltenübergreifendes Targeting wird unterstützt)
  • unsicheres Gelände, blockierte Räume, geschütztes Land und Orte außerhalb der Weltgrenze ablehnen
  • optional eine zusätzliche kanonenspezifische Berechtigung erfordern
  • Spieler mit einer filmischen Sequenz in fünf Phasen abschießen
  • ein FreeMinecraftModels 3D-animiertes Kanonenmodell anzeigen (pro Kanone customModel oder über eine globale Prioritätsliste); fällt auf farbwechselnde Orbitpartikel zurück, wenn FMM nicht installiert ist
  • eine schwebende, zum Betrachter ausgerichtete Statusanzeige über der Kanone anzeigen (Ready / Charging / Maintaining / Exhausted); eine deaktivierte Kanone erzeugt weder Anzeige noch Modell und erscheint nur in /wc list und /wc status als Disabled

Schnellstart​

  1. Lege CannonRTP.jar in plugins/ und starte den Server.
  2. Führe im Spiel /wc initialize aus und dann /wc setup, um die Kanonenmodell-Pakete herunterzuladen. Downloads brauchen ein verknüpftes Nightbreak-Konto, und die Modelle brauchen FreeMinecraftModels. Ohne Modelle verwenden Kanonen Partikeldarstellungen.
  3. Stelle dich dorthin, wo die Kanone stehen soll, und führe /wc create spawn aus. Die neue Kanone setzt Spieler in der Welt ab, in der sie steht.
  4. Optional: Führe /wc target spawn <world> aus, um Spieler in einer anderen geladenen Welt landen zu lassen, oder /wc center spawn, um rund um deine aktuelle Position zu suchen.
  5. Stelle sicher, dass der Suchbereich als generiertes Gelände existiert (standardmäßig 500 bis 5000 Blöcke vom Suchzentrum), und führe dann /wc status aus. Die Kanone katapultiert Spieler, sobald sie mindestens ein geprüftes Ziel hält.

Startablauf​

Erzeuge oder erkunde vor der Nutzung den konfigurierten Suchbereich in der Zielwelt. CannonRTP lädt vorhandene Chunks ohne neue Landschaft zu generieren; ein unerforschter Suchradius kann deshalb ohne Ziele bleiben.

Die Startsequenz wird von einer fünfphasigen Zustandsmaschine gesteuert (SEARCHING -> FIRING -> TELEPORTING -> DROPPING -> LANDING). Wenn ein Spieler den Auslöseradius einer berechtigten Kanone betritt:

  1. CannonRTP prüft cannonrtp.use.
  2. Es prüft die optionale requiredPermission der Kanone.
  3. Es prüft die spielerbezogene Start-Abklingzeit (runtime.launchCooldownSeconds, Standard 30 Sekunden). Die Sperre gilt über alle Kanonen hinweg und verbraucht kein Ziel aus der Warteschlange.
  4. Es verifiziert, dass die Kanone mindestens einen vorgeladenen Landeort in der Warteschlange hat. (Deaktivierte Kanonen, Kanonen in einer nicht geladenen Welt und Kanonen in einem nicht geladenen Chunk erreichen diesen Punkt nie -- sie werden vollständig aus der Tick-Schleife ausgeschlossen und lassen sich daher gar nicht auslösen.)
  5. Es entnimmt einen vorgeladenen sicheren Landeort aus der Warteschlange dieser Kanone.
  6. Es feuert CannonRTPLaunchEvent (abbrechbar). Wenn ein Listener es abbricht, wird das Ziel an die Warteschlange zurückgegeben und es startet keine Abklingzeit.
  7. Suchphase (Standard 42 Ticks, konfigurierbar über launchWarmupTicks): Der Spieler erhält Levitation, die Kanone spielt ihre fire-Animation ab, falls ein benutzerdefiniertes Modell aktiv ist, und zufällige Koordinatenvorschauen flackern durch Titel/Untertitel. Solange ein Modell aktiv ist, erhält der Spieler außerdem Unsichtbarkeit, damit die Animation klar zu sehen ist.
  8. Feuerphase (Standard 45 Ticks über verticalBoostTicks): Levitation/Unsichtbarkeit werden entfernt, der Abschuss-Sound wird abgespielt, ein Flammen-+Rauch-+Explosionsausbruch erscheint, und verticalBoostVelocity wird bei jedem Tick angewendet. Die echten Zielkoordinaten werden offenbart.
  9. Teleportphase (einzelner Tick): Das Ziel aus der Warteschlange wird erneut validiert (Geländesäule, Schutz-Integrationen, API-Listener). Besteht es weiterhin, wird der Spieler exakt 50 Blöcke darüber teleportiert und Langsamer Fall wird angewendet. Die Abwurfhöhe wird nie gedeckelt -- der Landevalidierer stellt bereits sicher, dass der Ankunftsblock unterhalb der maximalen Welthöhe liegt, und ein Ziel, das nicht mehr validiert, bricht den Start ab und rettet stattdessen den Spieler.
  10. Fallphase: Der Spieler treibt mit einer Rauchspur (LARGE_SMOKE + CAMPFIRE_SIGNAL_SMOKE) nach unten.
  11. Landephase: Beginnt, wenn der Spieler am Boden ist und seine vertikale Geschwindigkeit unter 0,08 Blöcken pro Tick liegt. CannonRTP entfernt seinen eigenen Effekt „Langsamer Fall“, spielt den Aufschlagseffekt ab (Wolken-Schockwelle, Flammenring, Staubübergang) und löst CannonRTPLandingEvent aus. Dauert der Fall länger als slowFallingSeconds x 20 Ticks, rettet CannonRTP den Spieler und löst kein Landeereignis aus.

Sicherheitsregeln für Landeziele​

Bevor ein Ort in die Vorladewarteschlange aufgenommen wird, prüft der aktuelle Code in dieser Reihenfolge:

  • die Zielwelt ist geladen (solange das nicht der Fall ist, stoppt die Kanone das Vorladen und meldet Target world <name> is not loaded.)
  • das Suchzentrum lässt sich auflösen -- das konfigurierte searchCenter, sonst der eigene Standort der Kanone, wenn sie in der Zielwelt steht, sonst der Spawn der Zielwelt
  • der Kandidat liegt innerhalb der Weltgrenze
  • der Kandidaten-Chunk ist geladen (bei Bedarf geladen, ohne zu generieren)
  • ein höchster nicht-leerer Block existiert in der Kandidatenspalte
  • der Oberflächenblock direkt unter dem Landepunkt ist fest und nicht-flüssig
  • dieser Oberflächenblock steht nicht in der konfigurierten Liste unsicherer Bodenmaterialien und ist nicht das Nether-Bedrock-Dach
  • der Landepunkt liegt auf oder über der minimalen Welthöhe, und der Ankunftsblock 51 Blöcke darüber bleibt unterhalb der maximalen Welthöhe
  • jeder Block der 52 Blöcke hohen Abwurfsäule (vom Landepunkt bis hinauf zum Kopfblock der Ankunft) ist Luft oder passierbar
  • kein Block in dieser Säule steht in der konfigurierten Liste unsicherer Körpermaterialien
  • alle aktivierten Schutz-Plugin-Integrationen erlauben den Ort
  • kein CannonRTPLocationValidationEvent-Listener verwirft den Kandidaten

Im Nether lehnt CannonRTP das Bedrock-Dach ab und sucht abwärts nach einem freiliegenden Höhlenboden, dessen komplette Abwurfsäule sicher ist. Das ermöglicht Nether-Ziele, ohne den Spieler über der Decke oder durch festes Gelände abzuwerfen.

Global findet höchstens ein Suchversuch pro Tick statt, also 20 pro Sekunde. Die Versuche werden reihum gleichmäßig auf alle aktiven Kanonen verteilt. Jede Kanone hat ihren eigenen Timeout-Zähler (searchTimeoutAttempts, Standard 100, Minimum 10).

Kanonenzustände​

Jede Kanone hat einen internen Zustand, der über /wc status oder /wc list sichtbar ist:

AnzeigeInterner ZustandBedeutung
Disabled--Die Kanone ist in ihrer Konfiguration explizit deaktiviert
ChargingSEARCHING (Warteschlange leer)Lädt noch ihren ersten Stapel sicherer Orte vor
MaintainingSEARCHING (Warteschlange nicht leer)Hat einige Orte, füllt aber noch verbrauchte Plätze auf
ReadyREADYHat genügend vorgeladene Orte (>= chargedLocationsPerCannon), um Spieler zu starten
ExhaustedEXHAUSTEDHat searchTimeoutAttempts aufgebraucht, ohne die Reserve zu füllen

Der interne Suchzustand ist genau einer von drei Werten (READY, SEARCHING, EXHAUSTED); Disabled wird entschieden, bevor er überhaupt herangezogen wird, und Charging / Maintaining sind die zwei Darstellungen von SEARCHING. Ready gewinnt gegen Exhausted -- eine Kanone, die ihre aufgeladene Reserve noch hält, wird als Ready angezeigt, selbst wenn ihr letztes Suchfenster abgelaufen ist.

Eine Kanone zeigt außerdem Exhausted, ohne Gelände zu prüfen, wenn die Integration eines aktivierten Schutz-Plugins nicht geladen werden konnte und failOpenOnProtectionErrors auf false steht. Siehe Schutz-Integrationen.

Es gibt keinen separaten Zustand für eine „ungültige Konfiguration“. Wird die Zielwelt einer Kanone nicht mehr verfügbar, werden Ziele für diese Welt aus der Warteschlange entfernt und der Suchzustand auf SEARCHING zurückgesetzt. Eine leere Warteschlange zeigt Charging an; die Spalte $reason von /wc status meldet Target world <name> is not loaded.. Die Suche wird fortgesetzt, sobald die Zielwelt geladen wird. Der Schlüssel statusLabels.invalid existiert in messages.yml, wird aber nicht angezeigt.

Eine Kanone startet Spieler, sobald sie mindestens ein Ziel in der Warteschlange hat. Der Schwellenwert chargedLocationsPerCannon betrifft nur das visuelle READY-Label.

Laufzeitanforderungen​

  • Minecraft: plugin.yml deklariert api-version: 1.21.4; der aktuelle Quellbaum wird gegen die Spigot-API 26.3-R0.1-SNAPSHOT gebaut
  • Java: 21
  • Empfohlene Serversoftware: Paper oder ein aktueller kompatibler Fork
  • MagmaCore: 2.2.0 oder neuer (gemeinsam genutzte Bibliothek, in das Plugin geshaded)
  • Optionale Abhängigkeit: FreeMinecraftModels (für 3D-animierte Kanonenmodelle)
  • Metriken: CannonRTP meldet anonyme Nutzungsstatistiken an bStats (Plugin-ID 34460). Zum Abmelden setze enabled: false in plugins/bStats/config.yml; das gilt für jedes Plugin auf dem Server, das bStats nutzt.

Verhalten bei Welt- und Plugin-Änderungen​

CannonRTP hält seine Visuals und Warteschlangen über Welt- und Chunk-Lebenszyklusereignisse hinweg konsistent:

  • wenn der Chunk einer Kanone entladen wird, werden ihr Label und Modell entfernt; sie tauchen beim erneuten Laden des Chunks wieder auf
  • wenn die Welt einer Kanone entladen wird, wird die Kanone ausgesetzt; sie erwacht wieder, wenn die Welt erneut geladen wird
  • wenn FreeMinecraftModels aktiviert oder deaktiviert wird oder auf einer Version mit dem Reload-Abschluss-Event das Neuladen seiner Inhalte beendet, werden veraltete Kanonenmodelle verworfen und aus der aktuellen Modellregistrierung neu erstellt; entfernte Modellinstanzen werden auch auf älteren FMM-Versionen ohne dieses Event direkt erkannt
  • vor der Abwurf-Teleportation wird das Ziel aus der Warteschlange erneut gegen Gelände, Schutz-Integrationen und API-Listener geprüft; ist es unsicher geworden, rettet der Start den Spieler, statt sich auf veraltete Koordinaten festzulegen
  • die Start-Aufräumung entfernt nur die Effekte Levitation, Unsichtbarkeit und Langsamer Fall, die CannonRTP noch gehören, und stellt einen älteren Effekt wieder her, den es vorübergehend ersetzt hat, statt den neueren Zustand eines anderen Plugins zu löschen
  • wenn ein Start nicht fortgesetzt werden kann, weil seine Zielwelt entladen wird, rettet CannonRTP den Spieler zum Kanonensitz oder zum Spawn einer anderen geladenen Welt und behält Langsamer Fall bei, wenn keine sichere Rettungswelt verfügbar ist
  • /wc reload, ein Plugin-Update ohne Neustart und jeder Befehl zum Bearbeiten von Kanonen (create, place, remove, delete, target, center) bauen alle Kanonen neu auf: Laufende Starts werden abgebrochen und die Spieler auf den Kanonensitz zurückgesetzt, wartende Ziele werden verworfen und neu gesucht, und Start-Abklingzeiten werden zurückgesetzt
  • trennt ein Spieler während eines Starts die Verbindung, endet der Start und CannonRTP entfernt die Effekte, die es angewendet hat; der Spieler wird nicht teleportiert

Fehlerbehebung​

  • Eine Kanone bleibt auf Charging oder wechselt zu Exhausted. Führe /wc status aus und lies den Grund. Häufige Ursachen sind eine nicht geladene Zielwelt, ein Suchbereich, der nie generiert wurde, Oberflächen, die die Sicherheitsregeln für Landeziele nicht erfüllen (Wasser ist standardmäßig ein unsicheres Material, offener Ozean qualifiziert sich also nie), sowie Claims oder Regionen, die den Bereich abdecken. /wc probe testet die Schutzprüfungen dort, wo du stehst. Eine aktivierte Schutz-Integration, die nicht geladen werden konnte, hindert jede Kanone am Suchen; siehe Schutz-Integrationen.
  • Spieler laufen in eine Kanone und nichts passiert. Prüfe cannonrtp.use, die requiredPermission der Kanone, ob die Kanone aktiviert ist, und die Abklingzeit des Starts (runtime.launchCooldownSeconds, standardmäßig 30 Sekunden).
  • Bevor du eine Kanone löschst oder ein aktives Ziel verschiebst, sichere ihre Datei in plugins/CannonRTP/cannons/.

Wenn du um Hilfe bittest, gib die Ausgabe von /wc status, die Versionen von CannonRTP und des Servers, die Konfigurationsdatei der betroffenen Kanone und das vollständige Server-Log an. /logify lädt das Log hoch und gibt einen Link zurück.

Hier starten​