Zum Hauptinhalt springen

CannonRTP-Konfiguration

CannonRTP teilt seine globalen Einstellungen auf mehrere Dateien in plugins/CannonRTP/ auf, plus eine kanonenspezifische Konfigurationsdatei in plugins/CannonRTP/cannons/.

Dateistruktur​

DateiZweck
plugins/CannonRTP/config.ymlÜbergeordnete Laufzeitflags (Setup-Zustand, Sprache, Partikelintervall, Start-Abklingzeit, Kanonenmodell-Priorität, Spigot-Ressourcen-ID, Nightbreak-Update-Einstellungen)
plugins/CannonRTP/landing.ymlFeineinstellung der Landesuche (Warteschlangengröße, Timeout-Versuche, Langsam-Fall-Dauer, Listen unsicherer Materialien, Fail-Open-Verhalten)
plugins/CannonRTP/sounds.ymlWährend der Startsequenz abgespielte Sounds
plugins/CannonRTP/messages.ymlAlle spielerseitigen Nachrichten, Präfixe und Titelpools
plugins/CannonRTP/protection.ymlSchalter für plugin-spezifische Schutz-Integrationen
plugins/CannonRTP/cannons/<id>.ymlEine Datei pro Kanone (jede kann mehrere Platzierungen steuern)
plugins/CannonRTP/cannons_disabled/Aufbewahrungsordner für Kanonenkonfigurationen, die mit Content-Paketen geliefert werden, aber derzeit deaktiviert sind. Das /wc setup-Menü verschiebt Dateien zwischen cannons/ und cannons_disabled/, wenn du ein Content-Paket aktivierst oder deaktivierst.
plugins/CannonRTP/content_packages/<package>.ymlGenerierte Metadaten für jedes Nightbreak-Content-Paket (Version, Download-Link, Präfixe zum Auffinden seiner Dateien). Normalerweise nicht von Hand bearbeitet.
plugins/CannonRTP/imports/Ablageordner für manuelle Inhaltsimporte. Siehe Content-Pakete.
plugins/CannonRTP/nightbreak-changelogs.ymlGelesen-Status für den gemeinsamen Posteingang /wcchangelog. Siehe Changelog-Benachrichtigungen.

Das Plugin liefert drei Beispielkonfigurationen für Kanonen mit:

  • example_cannonrtp.yml -- leere Referenzvorlage (Anzeigename Example World Cannon), standardmäßig deaktiviert. Verwende sie als YAML-Referenz, wenn du Kanonendateien von Hand schreibst.
  • cannonrtp_free_cannon.yml -- aktiviert, keine Platzierungen, zeigt auf das kostenlose FMM-Modell cannonrtp.
  • cannonrtp_premium_cannon.yml -- aktiviert, keine Platzierungen, zeigt auf das Premium-FMM-Modell cannonrtp_premium.

Bei keiner davon ist standardmäßig cannonLocations befüllt, sodass nichts in der Welt erscheint, bis ein Admin /wc create oder /wc place ausführt. Keine davon setzt targetWorld, daher lässt jede Platzierung Spieler in der Welt landen, in der sie steht.

CannonRTP erstellt jede dieser drei Dateien neu, die in cannons/ fehlt, sobald es die Kanonenkonfigurationen lädt. Wird eine davon mit /wc delete gelöscht oder beim Deaktivieren ihres Content-Pakets verschoben, bleibt nach dem Reload eine frische Standardkopie ohne Platzierungen zurück.

config.yml​

SchlüsselStandardVerhalten
setupDonefalseVerfolgt, ob das Nightbreak-Erstinstallations-Setup abgeschlossen wurde
languageenglishZu ladende Übersetzungsdatei. Release 1 liefert nur Englisch; der Schlüssel existiert für zukünftige Übersetzungspakete
runtime.particleIntervalTicks15Exaktes Intervall zwischen dem Rendern von Leerlauf-Kanonenpartikeln, in Server-Ticks (Minimum 1; verwende 1, um in jedem Tick zu rendern)
runtime.launchCooldownSeconds30Sekunden, die ein Spieler zwischen angenommenen Kanonenstarts warten muss (Minimum 0; verwende 0, um zu deaktivieren). Abgebrochene CannonRTPLaunchEvents starten die Abklingzeit nicht.
runtime.cannonModelPriority[cannonrtp_premium, cannonrtp]Prioritätsliste von FreeMinecraftModels-Modellnamen, von oben nach unten geprüft. Das erste auf dem Server gefundene Modell wird für jede Kanone verwendet, die nicht ihr eigenes customModel setzt. Wenn keines gefunden wird, wird der Orbit-Partikel-Fallback verwendet.
runtime.spigotResourceId""Spigot-Ressourcen-ID, die vom Versions-Checker verwendet wird. Leer lassen, um zu deaktivieren.
nightbreak.autoDownloadPluginUpdatesfalseVon der eingebetteten MagmaCore-Bibliothek hinzugefügt. Wenn true, lädt CannonRTP verfügbare Plugin- und Content-Update-Dateien wenige Minuten nach dem Start automatisch herunter. Content-Updates werden nach dem nächsten Serverneustart verwendet; ein Plugin-Update folgt nightbreak.applyPluginUpdatesWithoutRestart. Automatische Plugin-Downloads erfordern einen gültigen Nightbreak-Konto-Token und eine aktive Supporter-Mitgliedschaft. Lasse false, um stattdessen den Update-Button im Spiel zu verwenden.
nightbreak.applyPluginUpdatesWithoutRestartneverVon der eingebetteten MagmaCore-Bibliothek hinzugefügt. Legt fest, wann ein heruntergeladenes Plugin-Update angewendet wird, indem CannonRTP aus der neuen Jar neu geladen wird. never wartet auf den nächsten Neustart. when-empty wendet es sofort an, wenn keine Spieler online sind; andernfalls wird alle 30 Sekunden geprüft und das Update angewendet, sobald der Server leer ist. immediately wendet es an, sobald der Download abgeschlossen ist. Jeder andere Wert gilt als never. Der Reload bricht laufende Starts ab, wie unter Interaktionsschutz beschrieben. /wc applypluginupdate wendet ein heruntergeladenes Update unabhängig von dieser Einstellung von Hand an.

landing.yml​

SchlüsselStandardVerhalten
preloadedLocationsPerCannon10Gesamtanzahl sicherer Ziele, die das Plugin pro Kanone in der Warteschlange zu halten versucht (Minimum 1)
chargedLocationsPerCannon1Wie viele Orte eine Kanone halten muss, bevor ihr Statuslabel auf Ready umschaltet (Minimum 1, begrenzt durch preloadedLocationsPerCannon). Kanonen starten Spieler, sobald die Warteschlange mindestens einen Ort hat -- dieser Schwellenwert beeinflusst nur das visuelle Label.
searchTimeoutAttempts100Wie viele fehlgeschlagene Suchversuche, bevor eine Kanone als Exhausted markiert wird (Minimum 10). Suchversuche sind global auf einen pro Tick (20 pro Sekunde) ratenbeschränkt und werden fair auf alle aktiven Kanonen verteilt.
slowFallingSeconds60Maximale Dauer von Langsamer Fall nach dem Luftabwurf (Minimum 1). Der Effekt wird vorzeitig entfernt, wenn der Spieler landet.
failOpenOnProtectionErrorsfalseWenn eine Schutz-Plugin-API einen Fehler wirft, blockiert die Landung standardmäßig. Auf true setzen, um Landungen weiterhin zuzulassen, wenn ein Schutz-Plugin nicht sicher abgefragt werden kann. Bei false hindert außerdem eine aktivierte Schutz-Integration, die nicht geladen werden konnte, jede Kanone am Suchen (siehe Schutz-Integrationen).
unsafeGroundMaterials[LAVA, MAGMA_BLOCK, CAMPFIRE, SOUL_CAMPFIRE, CACTUS, POWDER_SNOW]Materialien, die eine Landeoberfläche disqualifizieren
unsafeBodyMaterials[LAVA, WATER, FIRE, SOUL_FIRE, SWEET_BERRY_BUSH, POWDER_SNOW, COBWEB]Materialien, die in der gesamten senkrechten Lande- und Abwurfsäule einschließlich des Kopfraums am Ankunftspunkt verboten sind

Materialien sind Namen aus dem Bukkit-Material-Enum. Ungültige Einträge werden als Warnungen protokolliert und übersprungen.

sounds.yml​

SchlüsselStandardVerhalten
levitationStart.soundBLOCK_BEACON_ACTIVATESound, der zu Beginn der Suchphase abgespielt wird
levitationStart.volume1.0
levitationStart.pitch1.15
blastOff.soundENTITY_GENERIC_EXPLODESound, der zu Beginn der Feuerphase abgespielt wird
blastOff.volume1.0
blastOff.pitch0.9

Soundwerte können Namen aus dem Bukkit-Sound-Enum sein (z. B. BLOCK_BEACON_ACTIVATE) oder Namespaced Keys (z. B. minecraft:block.beacon.activate). Ein Name im Enum-Stil wird umgewandelt, indem jeder Unterstrich durch einen Punkt ersetzt wird. Ein Sound, dessen Key einen Unterstrich enthält, etwa minecraft:block.note_block.pling, muss daher als Namespaced Key angegeben werden. Ungültige Soundnamen werden als Warnungen protokolliert und der Sound wird an dieser Stelle stillschweigend übersprungen. Lass einen Sound leer, damit nichts abgespielt wird. Lautstärke und Tonhöhe unter 0 werden auf 0 angehoben.

messages.yml​

Alle Nachrichten unterstützen MagmaCore-Gradienten, MiniMessage-Tags und ältere &-Farbcodes. Der Platzhalter $prefix wird durch das konfigurierte Präfix ersetzt.

Eine vollständige Liste der Nachrichtenschlüssel, Platzhalter und der von der Startsequenz verwendeten Titelpools findest du auf der Seite Nachrichten und Titel.

Kanonenspezifische Konfigurationsfelder​

Jede Kanonendatei (plugins/CannonRTP/cannons/<id>.yml) speichert folgende Felder:

FeldStandardHinweise
isEnabledtrue (für neu erstellte Kanonen)Deaktivierte Kanonen werden nicht ausgelöst, erzeugen weder Label noch Modell und werden in /wc list und /wc status als Disabled angezeigt
displayNameCannonRTP (oder der bei der Erstellung übergebene Name)Wird in Nachrichten, Statusausgabe und im schwebenden Label verwendet
cannonLocationsleere ListeListe serialisierter world,x,y,z,yaw,pitch-Strings. Eine Kanonenkonfiguration kann viele Platzierungen in der Welt erzeugen. Verwaltet durch /wc create, /wc place, /wc remove.
targetWorldaktuelle Welt zum ErstellungszeitpunktWeltenübergreifendes Targeting wird unterstützt -- setze dies, um Spieler in einer anderen Welt landen zu lassen als der der Kanone. Ist der Wert leer oder fehlt er, lässt jede Platzierung Spieler in ihrer eigenen Welt landen. Muss zur Laufzeit geladen sein; solange das nicht der Fall ist, stoppt die Kanone das Vorladen und ihr /wc status-Detail lautet Target world <name> is not loaded.
searchCenternullWenn nicht gesetzt, sucht das Plugin um die Position der Kanone herum, sofern diese in der Zielwelt steht, sonst um den Spawn der Zielwelt. Ist der Wert auf einen Ort in einer anderen Welt gesetzt, werden dessen X- und Z-Koordinaten in der Zielwelt verwendet.
triggerRadius1.75Radius um die Kanone, der verwendet wird, um nahegelegene Spieler zu erkennen (Minimum 0,5 Blöcke)
minSearchRadius500Minimale Landesuchdistanz vom Suchzentrum (Minimum 0)
maxSearchRadius5000Maximale Landesuchdistanz (immer auf mindestens minSearchRadius + 1 begrenzt)
launchWarmupTicks42Länge der Searching-Phase in Ticks (Minimum 1)
verticalBoostTicks45Länge der Firing-Phase in Ticks (Minimum 0). 0 überspringt den Aufwärtsschub; Abschuss-Sound, Explosionseffekt und Zieltitel werden vor dem Teleport trotzdem abgespielt.
verticalBoostVelocity1.35Aufwärtsgeschwindigkeit, die in jedem Tick der Feuerphase angewendet wird (Minimum 0)
enableParticlestrueSteuert die Leerlauf-Orbit-Partikelanimation. Wird nur gerendert, wenn kein benutzerdefiniertes Modell aktiv ist und ein Spieler innerhalb von 36 Blöcken ist.
requiredPermission""Optionale zusätzliche Berechtigungssperre für diese spezifische Kanone. Spieler mit cannonrtp.use, aber ohne diesen Knoten sehen die konfigurierte Keine-Berechtigung-Nachricht.
customModel""Optionaler FreeMinecraftModels-Modellname für diese Kanone. Ist der Wert leer oder das Modell nicht verfügbar, verwendet das Plugin runtime.cannonModelPriority.

Standardwerte bei der Kanonenerstellung​

Wenn du /wc create <id> ausführst:

  • die Kanonen-ID wird kleingeschrieben und andere Zeichen als a-z, 0-9, _, - werden durch _ ersetzt
  • displayName ist standardmäßig CannonRTP, sofern nicht /wc create <id> <display_name> verwendet wurde (Unterstriche in <display_name> werden in Leerzeichen umgewandelt)
  • die aktuelle Position des Spielers wird an cannonLocations angehängt
  • targetWorld wird auf die aktuelle Welt des Spielers gesetzt
  • searchCenter wird nicht gesetzt (fällt auf die eigene Position der Kanone zurück, wenn sie in der Zielwelt ist, andernfalls auf den Spawn der Zielwelt)

Nach der Erstellung antwortet das Plugin mit dem absoluten Pfad zur Konfigurationsdatei, damit du displayName, customModel, requiredPermission, die Suchradien und die Start-Feinabstimmung manuell bearbeiten kannst.

FreeMinecraftModels-Integration​

Wenn eine Kanone zu einem gültigen FreeMinecraftModels-Modell auflöst -- entweder über ihr eigenes Feld customModel oder die globale Liste runtime.cannonModelPriority -- und FreeMinecraftModels installiert ist:

  • wird eine statische Modell-Entity an der Kanonenposition gespawnt
  • wird das schwebende Textlabel auf 2,0 Blöcke über der Kanone angehoben (gegenüber 1,2 ohne Modell), damit es das Modell nicht überdeckt
  • wird die Leerlauf-Orbit-Partikelanimation unterdrückt, solange ein Modell aktiv ist
  • spielt die Kanone während eines Starts ihre fire-Animation ab (falls eine existiert), zu Beginn der Suchphase; der Spieler wird während der Suchphase mit Unsichtbarkeit verborgen, damit die Animation klar zu sehen ist

Wird FreeMinecraftModels während des laufenden Servers aktiviert oder deaktiviert, wird der Kanonenmodell-Cache verworfen. Aktuelle FMM-Versionen benachrichtigen CannonRTP auch nach dem Neuladen von Inhalten. Dadurch werden veraltete Modellreferenzen entfernt und Modelle aus der aktualisierten Registrierung neu erstellt. CannonRTP erkennt entfernte Modellinstanzen außerdem direkt, auch mit FMM 2.4.0, das noch kein Reload-Abschluss-Event bietet. Solange FMM aktiviert ist, werden ausstehende Erstellungsversuche alle 20 Ticks wiederholt, bis ein nutzbares Modell verfügbar ist.

Ersatzpartikel im Leerlauf​

Wenn kein Modell aktiv ist, rendert die Kanone ein Paar umkreisender DUST_COLOR_TRANSITION- + FIREWORK-Partikel um das Kanonenzentrum. Die Farben verschieben sich je nach effektivem Zustand der Kanone:

ZustandPrimärAkzent
Readyorange (255, 179, 71)blassgold (255, 241, 168)
Searching (Charging / Maintaining)warmes Orange (255, 140, 66)gold (255, 209, 102)
Exhaustedrot (255, 107, 107)warmes Orange (255, 159, 104)

Leerlaufpartikel werden nur gerendert, wenn ein Spieler innerhalb von 36 Blöcken der Kanone ist, enableParticles auf true steht und kein benutzerdefiniertes Modell aktiv ist.

Schwebende Statusanzeige​

Jede aktivierte Kanone erzeugt über ihrer Basis ein zum Betrachter ausgerichtetes TextDisplay mit ihrem Anzeigenamen und aktuellen Status (Ready, Charging, Maintaining oder Exhausted). Deaktivierte Kanonen erzeugen keine Anzeige. Die Anzeige wird nicht in den Chunk-Daten gespeichert und beim erneuten Laden des Chunks automatisch neu erstellt. Sie befindet sich 1,2 Blöcke über der Kanone beziehungsweise 2,0 Blöcke darüber, wenn ein FreeMinecraftModels-Modell aktiv ist.

Validierung zur Laufzeit​

CannonRTP lehnt Kandidaten-Landeorte ab, wenn eine dieser Prüfungen fehlschlägt:

  • die Zielwelt ist entladen
  • das Suchzentrum kann nicht aufgelöst werden (was nur passiert, wenn die Zielwelt entladen ist)
  • die zufällige Probe landet außerhalb der Weltgrenze
  • der Kandidaten-Chunk kann nicht geladen werden
  • es wird keine sichere, feste, nicht-flüssige Oberfläche gefunden
  • ein Block der 52 Blöcke hohen Abwurfsäule über dem Landepunkt ist blockiert
  • die Oberfläche oder ein Block der Säule entspricht den konfigurierten Listen unsicherer Materialien
  • eine Schutz-Integration blockiert die Landung
  • ein CannonRTPLocationValidationEvent-Listener verwirft den Kandidaten

Nach searchTimeoutAttempts fehlgeschlagenen Suchen (Standard 100) kann das Vorladen den Zustand Exhausted erreichen. Bereits vorgemerkte Ziele bleiben nutzbar. Erst bei leerer Warteschlange erscheint die Fehlermeldung mit einer Zusammenfassung üblicher Ablehnungsgründe. Ein nach einem Start frei gewordener Platz setzt den Versuchszähler zurück.

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.

Interaktionsschutz​

CannonRTP verhindert, dass ein Spieler eine Kanone auslöst, während er sich bereits in einer aktiven Startsequenz befindet. Dieser Auslöser bleibt eingerastet, bis der Start vorbei ist und der Spieler den Auslöseradius der Kanone tatsächlich verlassen hat, sodass eine Rettung zurück auf den Kanonensitz nicht sofort einen weiteren Start beginnen kann. Nachdem ein Start angenommen wurde, blockiert außerdem eine managerweite, spielerbezogene Abklingzeit für runtime.launchCooldownSeconds (Standard 30 Sekunden) jede Kanone. Die Abklingzeit übersteht Verbindungsabbrüche, solange der Server läuft, verwendet eine monotone Uhr und wird geleert, sobald CannonRTP seine Kanonen neu aufbaut: bei /wc reload, einem Plugin-Update ohne Neustart, dem Herunterfahren des Plugins oder einem beliebigen Befehl zum Bearbeiten von Kanonen (create, place, remove, delete, target, center). Ein Neuaufbau bricht außerdem laufende Starts ab, setzt die betroffenen Spieler auf ihren Kanonensitz zurück und verwirft jedes wartende Ziel. Betritt man eine Kanone zu früh, wird die konfigurierbare Nachricht launchCooldown gesendet; setze den Konfigurationswert auf 0, um diese Sperre zu deaktivieren.