Zum Hauptinhalt springen

Ghost

Zeige Spieler anderer Server deines Netzwerks als clientseitige Geister an, mit Schalter pro Spieler.

Privatv0.1Soziales
BenötigtTypeWriter0.9.0-beta-177 (BTC build)MySQL (TypeWriter extension)Redis or ValkeyPacketEventsMiniPlaceholdersUiCore (TypeWriter extension)optional

Für das BornToCraft-Netzwerk entwickelt. Diese Erweiterung ist zu Referenzzwecken dokumentiert und wird nicht verteilt.

Überblick​

In einem Netzwerk aus mehreren Backend-Servern können sich zwei Spieler, die in derselben Karte auf verschiedenen Servern stehen, nicht sehen. Ghost behebt das optisch: Jeder Server veröffentlicht Position, Rotation und Skin seiner Spieler über Redis, und die anderen Server zeichnen sie per Paket als spielerförmige Geister. Der Welt wird nichts hinzugefügt, und ein Geist hat keine serverseitige Entity, sodass er nicht geschlagen, geschoben oder anvisiert werden kann.

Jeder Spieler entscheidet selbst, ob er Geister sieht. Die Wahl wird in einem TypeWriter-Fact gespeichert, übersteht also Neustarts und folgt dem Spieler von Server zu Server. Geister erscheinen nur zwischen Servern, die dieselbe redis.group-id in der MySQL-Konfiguration teilen, und ein Server zeichnet seine eigenen Spieler nie als Geister.

Funktionen​

  • Serverübergreifende Geister — Spieler anderer Backend-Server erscheinen mit ihrem Skin, ihrer Position und ihrer Rotation.
  • Reines Paket-Rendering — auf PacketEvents aufgebaut, es werden keine serverseitigen Entities erzeugt.
  • Folia-sicher — jede Erfassung und jedes Rendern läuft im Scheduler des betroffenen Spielers.
  • Sichtbarkeitsschalter — /ghost toggle, eine TypeWriter-Aktion oder ein Menü-Button schaltet Geister pro Spieler ein und aus.
  • Dauerhafte Wahl — die Einstellung ist ein persistierbarer Fact, der über Server hinweg geteilt wird.
  • Server-Tag — ein konfigurierbares Suffix wie [survival-2] zeigt, woher ein Geist stammt.
  • Limits — Sichtweite, maximale Geister pro Betrachter, Aktualisierungsrate und Weltfilterung halten die Kosten begrenzt.
  • Nameplates — ist UiCore installiert, erhalten Geister ein Nameplate über dem Kopf.
  • Platzhalter — Sichtbarkeit und Geisteranzahl für MiniMessage-Text.

Installation​

  1. Installiere PacketEvents auf jedem Server.
  2. Installiere die Erweiterung MySQL und aktiviere Redis (oder Valkey) auf jedem Server. Gib jedem Server einen eindeutigen redis.server-name und dieselbe redis.group-id. Ghost hat keine eigenen Redis-Einstellungen.
  3. Lege die Ghost-JAR in plugins/Typewriter/extensions/ ab und starte neu. Die Datei plugins/Typewriter/ghost_player/config.yml wird beim ersten Start erstellt.
  4. Vergib die Berechtigung typewriter.ghost.use an die Spieler, die /ghost verwenden dürfen. Ohne Berechtigungs-Plugin können es nur Operatoren.
  5. Optional: Installiere UiCore, um Nameplates über Geistern zu zeichnen.

Erste Schritte​

Lass Spieler Geister über ein Menü oder einen Quest-NPC umschalten:

  1. Öffne im TypeWriter-Web-Panel eine Page und füge einen Ghost Visibility Fact-Fact-Entry hinzu. Behalte seine Standard-id, ghost_visibility_fact, bei: Die Erweiterung liest und schreibt den Fact unter dieser ID.
  2. Füge eine Ghost Toggle Visibility-Aktion in einer Sequence oder an einem Menü-Item hinzu. Fülle showMessage und hideMessage mit MiniMessage-Text oder lass sie für die Standardnachrichten leer.
  3. Füge optional ein Criteria für den Ghost-Visibility-Fact hinzu (Wert 1 bedeutet sichtbar, 0 verborgen), um in einem Menü ein anderes Icon anzuzeigen.
  4. Veröffentliche und tritt zwei Servern derselben Gruppe bei. Jeder Spieler sieht den anderen als Geist mit dem Server-Suffix.
Keine sichtbaren Geister auf einem einzelnen Server

Ein Server ignoriert seine eigenen Broadcasts. Starte zum Testen zwei Server mit derselben redis.group-id und unterschiedlichen redis.server-name und stelle dich in Welten, die zusammenpassen dürfen (siehe unten).

Funktionsweise​

Jeder Server veröffentlicht in der konfigurierten Rate einen Snapshot jedes lokalen Spielers sowie einen Heartbeat, damit untätige Spieler am Leben bleiben. Ein Geist verschwindet, wenn sein Besitzer den Server verlässt oder wenn innerhalb von timeout-millis kein Update eintrifft. Jede Nachricht enthält eine Sitzungs-ID und eine Sequenznummer, sodass verspätete oder doppelte Nachrichten ignoriert werden.

Ein Geist wird für einen Betrachter gezeichnet, wenn der Betrachter Geister aktiviert hat, die Welten kompatibel sind, der Geist innerhalb von view-distance liegt und der Betrachter weniger als max-ghosts-per-viewer Geister hat, wobei die nächsten zuerst kommen.

Konfiguration​

Die Datei ist plugins/Typewriter/ghost_player/config.yml. Ihre schema-version muss 1 oder 2 sein.

schema-version: 2

settings:
update-rate: 4
server-suffix: " <gray>[%server%]</gray>"
team-prefix: "Ghosts"
view-distance: 64.0
max-ghosts-per-viewer: 128
timeout-millis: 10000
allowed-worlds:
- "world"
- "dungeon_"
- "hub"

messages:
no-permission: "<red>You do not have permission to use ghost visibility."
players-only: "<red>This command can only be used by a player."
enabled: "<green>Ghost visibility enabled."
disabled: "<yellow>Ghost visibility disabled."
usage: "<gray>Usage: <white>/ghost toggle"

command:
permission: "typewriter.ghost.use"
SchlüsselBedeutung
settings.update-rateTicks zwischen Positionserfassungen. Auf 1 bis 20 begrenzt.
settings.server-suffixMiniMessage-Text, der nach dem Namen des Geistes angefügt wird. %server% wird zum Namen des Herkunftsservers.
settings.team-prefixPräfix des Scoreboard-Teams, das für jeden Herkunftsserver angezeigt wird.
settings.view-distanceMaximale Entfernung in Blöcken, von 0 bis 256. 0 deaktiviert die Entfernungsbegrenzung.
settings.max-ghosts-per-viewerPro Betrachter gezeichnete Geister, von 0 bis 2000. 0 zeigt keine.
settings.timeout-millisVerzögerung ohne Update, bevor ein Geist entfernt wird, von 2000 bis 120000.
settings.allowed-worldsWeltnamen-Muster, die serverübergreifend als dieselbe Karte gelten. Bis zu 64 Einträge.
messages.*MiniMessage-Texte, die von /ghost verwendet werden.
command.permissionVon /ghost benötigte Berechtigung.

Welten. Ein Geist ist sichtbar, wenn sich Betrachter und Geist in Welten mit demselben Namen befinden oder wenn beide Weltnamen dasselbe Muster aus allowed-worlds enthalten (zum Beispiel passt dungeon_ auf dungeon_1 und dungeon_2). Die Entfernung lässt sich nur innerhalb einer Welt messen, sodass bei einer view-distance über 0 Geister aus einer anders benannten Welt verborgen werden. Setze view-distance auf 0, wenn du dich auf Mustervergleich verlässt.

Redis-Verbindung, Servername und Gruppen-ID werden aus der MySQL-Konfiguration gelesen. Die Datei wird einmal beim Start gelesen: Starte den Server nach dem Bearbeiten neu.

Befehle​

BefehlBeschreibung
/ghost toggleSchaltet die Geistersichtbarkeit für dich ein oder aus.

Aliase: /ghosts, /ghostplayer. Nur für Spieler. Die Berechtigung ist command.permission, standardmäßig typewriter.ghost.use.

Berechtigungen​

BerechtigungGewährt
typewriter.ghost.use/ghost toggle. Der Name kann mit command.permission geändert werden. Die Berechtigung wird ohne Standardwert registriert und muss daher vergeben werden.

Die Aktion Ghost Toggle Visibility prüft diese Berechtigung nicht.

Platzhalter​

MiniPlaceholders-Tags für MiniMessage-Text. PlaceholderAPI wird nicht unterstützt.

PlatzhalterGibt zurück
<ghost_visibility>true, wenn der Spieler Geister sieht, sonst false.
<ghost_visible>1, wenn der Spieler Geister sieht, sonst 0.
<ghost_count>Anzahl der entfernten Geister, die diesem Server derzeit bekannt sind.

Entries​

2 Einträge, aus dem Quellcode der Erweiterung generiert.

Aktionen1
Fakten1

Fehlerbehebung​

Es erscheint kein Geist. Prüfe in dieser Reihenfolge: Beide Server verwenden dieselbe nicht leere redis.group-id und unterschiedliche redis.server-name-Werte, Redis ist verbunden (andernfalls steht im Log „BTC RedisService is not connected; Ghost updates will remain inactive“), der Betrachter hat Geister aktiviert, und die beiden Spieler befinden sich in kompatiblen Welten (gleicher Weltname oder ein gemeinsames allowed-worlds-Muster mit view-distance: 0).

Spieler desselben Servers erscheinen nie als Geister. Das ist erwartet: Ein Server ignoriert Nachrichten, die er selbst veröffentlicht hat.

Die Erweiterung startet nicht und meldet „Unsupported Ghost custom config schema“. schema-version in ghost_player/config.yml liegt außerhalb von 1..2. Setze sie auf 2.

Die Erweiterung startet wegen eines Servernamen-Fehlers nicht. redis.server-name in der MySQL-Konfiguration darf nur Buchstaben, Ziffern, ., _ oder - enthalten, bis zu 64 Zeichen.

/ghost meldet, dir fehle die Berechtigung. Die Berechtigung hat keinen Standardwert. Vergib typewriter.ghost.use (oder die in command.permission gesetzte Berechtigung) mit deinem Berechtigungs-Plugin.

Geister verschwinden nach einigen Sekunden. Innerhalb von timeout-millis ist kein Update eingetroffen. Prüfe die Redis-Latenz und dass der Herkunftsserver Ghost mit derselben redis.group-id ausführt.

Geister haben kein Nameplate. Nameplates kommen von UiCore. Installiere es auf dem Server des Betrachters. Ohne es wird nur das Server-Suffix im Namen angezeigt.

Verwandte Erweiterungen​

  • MySQL — verwaltet die von Ghost verwendete Redis-Verbindung, den Servernamen und die Gruppen-ID.
  • UiCore — zeichnet Nameplates über Geistern, wenn installiert.