Replays

Das Modul replay zeichnet laufend auf, was auf einem Server passiert, und friert bei einem Report die letzten Sekunden ein. Das Team sieht sich die Szene danach ingame (als Zuschauer mit nachgespielten Spielern) oder im Dashboard im 3D-Player an – ohne nach dem Report erst hinteleportieren zu müssen.

Hinweis

Lizenz: replay braucht eine EternalSystem-Lizenz. Kostenlos in der Base sind standardmäßig core, punishments, reports und lobby; welche Module frei sind, kann sich ändern – gesperrte Module zeigt das Dashboard ausgegraut.

Einschalten

  • Modul-Schlüssel: replay, braucht reports. Siehe Module & Presets.
  • Auf jedem Spielserver einschalten, auf dem aufgezeichnet werden soll. Die Aufnahme entsteht auf dem Server des gemeldeten Spielers.
  • Für den Browser-Player und den Report-Flow im Dashboard: api.enabled: true und api.shared-secret in plugins/Eternal/config.yml.
  • server-name in config.yml muss dem Servernamen im Proxy entsprechen (bei Cloud-Services z. B. Lobby-1). Nur so findet der Proxy den Server, auf dem das Replay liegt.
  • Das Eternal-Jar auf dem Proxy muss aktuell sein – der Proxy leitet Aufnahmen und Zuschauer an den richtigen Server weiter.

ProtocolLib

ProtocolLib ist optional (softdepend):

mit ProtocolLibohne
Nachgespielte Spieler ingameechte Spieler-NPCs mit aufgezeichnetem Skin und LaufanimationRüstungsständer mit Spielerkopf
Kisten-Deckel ingameöffnen/schließen sichkeine Animation
Browser-Playerunabhängig davon voll nutzbar

So funktioniert die Aufnahme

  1. Der Recorder läuft immer und hält für jeden Online-Spieler ein gleitendes Fenster im Arbeitsspeicher: Bewegung, Treffer, Chat, Block-Änderungen, Item-Drops, Item-Nutzung, Container-Nutzung, Inventar-Schnappschüsse.
  2. Ein Report friert die letzten retention-seconds des gemeldeten Spielers und der Spieler in Sichtweite ein und nimmt danach weiter auf.
  3. Die Aufnahme endet, wenn ein Mod den Report annimmt/schließt oder nach max-followup-seconds. Dann wird sie als Datei gespeichert.
  4. Zusätzlich wird ein Welt-Schnappschuss der Umgebung gespeichert (Blöcke, Kisteninhalte, Schildtexte).
  5. Jede gespeicherte Aufnahme wird als JSON zur REST-API hochgeladen und steht im Dashboard bereit.

config.yml

replay:
  # Sekunden rückwirkend, die beim Report eingefroren werden (~180 KB pro Spieler bei 20 Hz)
  retention-seconds: 60
  # Ticks zwischen Bewegungs-Frames: 1 = 20 Hz, 2 = 10 Hz, 4 = 5 Hz
  frame-interval-ticks: 1
  # Ticks zwischen Inventar-Schnappschüssen (100 = 5 s)
  inventory-snapshot-ticks: 100
  # maximale Nachlaufzeit nach dem Report
  max-followup-seconds: 600
  # Welt-Schnappschuss für den Web-Player
  world-capture:
    enabled: true
    chunks: 16   # Chunks in jede Richtung um den gemeldeten Spieler (0 = alter Block-Kasten)
    radius: 64   # nur für chunks: 0 – Blöcke horizontal
    up: 32
    down: 16
SchlüsselStandardUntergrenzeHinweis
retention-seconds6010 sMehr Sekunden = mehr RAM pro Online-Spieler
frame-interval-ticks11Auf vollen Servern 2 spart die Hälfte
inventory-snapshot-ticks10020
max-followup-seconds60060 s
world-capture.chunks16–Sichtweite im Web-Player (16 Chunks = 256 Blöcke), höchstens 32
world-capture.radius / up / down64 / 32 / 16–Nur mit chunks: 0 (alter Kasten), insgesamt maximal ca. 2,5 Mio. Blöcke
Tipp

Bestehende config.yml werden nicht automatisch angepasst. Wer noch die alten Werte 32/24/12 für world-capture hat, sollte sie von Hand erhöhen.

Beim Einfrieren kopiert der Server auf dem Haupt-Thread die Chunk-Schnappschüsse der geladenen Chunks im Umkreis plus Kisteninhalte und Schildtexte; ausgewertet und komprimiert wird asynchron. Gespeichert wird pro Chunk nur, was man sehen kann – von der höchsten Stelle bis zum tiefsten Boden der Nachbar-Chunks (Meeresgrund und Waldboden inklusive) –, so bleiben 16 Chunks bei ein bis zwei MB. Wie weit die Umgebung reicht, hängt davon ab, was geladen ist: mit der Server-Sichtweite 16 oder mehr (Task-Feld Sichtweite) die vollen 16 Chunks.

Speicherort und Aufbewahrung

OrtInhalt
plugins/Eternal/replays/<id>.dat.gzAufnahme (gzip, Binärformat) auf dem Spielserver
plugins/Eternal/replays/index.txtIndex der Aufnahmen (keine Datenbank nötig)
replays.directory in api.yml (Standard replays)Web-Kopien für den Browser-Player, plus Zeile in eternal_replays

Es gibt keine Löschung nach Alter. Aufnahmen werden gelöscht, wenn

  • ein Report ohne Bann geschlossen wird (Server-Datei und Web-Kopie),
  • ein Bann über das Dashboard aufgehoben wird (alle Replays der Reports zu diesem Bann).

Ein Mute aus einem Report behält das Replay. Der Ordner wächst also mit der Zahl der Banns – bei Bedarf alte Dateien von Hand aufräumen.

Ingame ansehen

BefehlRechtBeschreibung
/replay bzw. /replay statuseternal.replay.debugRecorder-Zustand: aktive Puffer, Ereignisse im RAM
/replay list [Anzahl]eternal.replay.rewatchLetzte Aufnahmen (Standard 10, max. 100)
/replay reports [Anzahl]eternal.replay.rewatchNur Report-Aufnahmen
/replay play <id>eternal.replay.rewatchAufnahme abspielen
/replay exiteternal.replay.rewatchWiedergabe verlassen

Bequemer: Im Dashboard beim Report auf TP klicken. Ist der Mod auf einem anderen Server, schickt der Proxy ihn auf den Server mit der Aufnahme, und das Replay startet dort.

Während der Wiedergabe ist der Zuschauer im Zuschauermodus und hat diese Hotbar:

SlotItemFunktion
1SmaragdPlay / Pause
2Pfeil10 s zurück
3KisteInventar des nächsten Spielers
4Lehmklumpenlangsamer (−0,25)
5KarteReplay-Info im Chat
6Schleimballschneller (+0,25)
8Spektralpfeil10 s vor
9BarriereReplay verlassen

Rechtsklick auf einen Container im Replay zeigt seinen Inhalt zum aktuellen Replay-Zeitpunkt (nur lesen) – nie die echte Kiste.

Hinweis

Nach einem Serverwechsel startet das Replay erst, wenn der Inventar-Sync des Mods fertig ist. Während ein Mod ein Replay schaut, wird sein Inventar nicht gespeichert – sein echtes Inventar ist danach unverändert.

Im Browser ansehen (3D-Player)

Seiten im Dashboard:

SeiteRechtInhalt
Moderation → Replays (/replays)eternal.replay.rewatchListe aller hochgeladenen Aufnahmen
Report → Replay im Browser (/replays/report/<Report-ID>)eternal.replay.rewatchAufnahme zum Report
Bann → Replay (/replays/ban/<Bann-ID>)eternal.replay.rewatchAufnahme zum Bann
Mein Konto → Replays zu deinen Bannseternal.replay.ownGebannte Spieler sehen die Aufnahme zu ihrem eigenen Bann

Ein Spieler sieht ein Replay nur, wenn er die Hauptperson ist und aus dem Report ein Bann entstanden ist. Offene Reports bleiben teamintern.

Bedienung

Kamera-Modi (Buttons links oder Tasten):

  • Folgen (Standard): Kamera kreist hinter dem gewählten Spieler. Maus ziehen = drehen, Mausrad = Zoom.
  • Ego (V): durch die Augen des Spielers, mit seiner Blickrichtung – gut für Aim- und Reach-Prüfungen.
  • Frei (F): Zuschauer-Flug mit WASD, Leertaste/E hoch, Shift/Q runter, Strg schneller, Mausrad = Fluggeschwindigkeit. Linksklick fängt die Maus (Esc löst), Rechtsklick ziehen = umsehen ohne Fangen.
TasteFunktion
Leertaste / KPlay / Pause
← / →±5 s (mit Shift ±1 s)
, / .einen Tick zurück / vor
↑ / ↓Geschwindigkeit (⅛× bis 8×)
1–9Spieler folgen
Tabnächster Spieler

Doppelklick auf einen Spieler = folgen. Die Zeitleiste hat Marker (blau Chat, rot Treffer, gelb Block, lila Drop) – anklicken springt hin. Rechts läuft der Ereignis-Feed, pro Spieler zeigt Inventar den letzten Schnappschuss bis zum aktuellen Zeitpunkt. Ein Klick auf einen Block – am Handy Antippen – zeigt Name und Koordinaten, bei Containern den Inhalt (Doppelkiste = 54 Slots), bei Schildern den Text.

Dargestellt werden echte Vanilla-Blockmodelle mit Licht, Kisten, Shulker, Betten, Schilder, Köpfe und Banner sowie die getragene Rüstung. Die Minecraft-Texturen liefert das Dashboard selbst aus (Ordner mc/ im Build). Skins kommen aus der Aufnahme, sonst von mc-heads.net. Aufnahmen ohne Welt-Schnappschuss zeigen ein Bodenraster.

Live-Ansicht

Unter Cloud › Betrieb › Live-Ansicht (Recht eternal.web.live) schaut man einem Server live zu – im selben 3D-Player wie bei Replays, etwa eine halbe Sekunde verzögert (der Puffer sorgt für flüssige Bewegungen):

  • Start am Spawn einer Welt oder direkt bei einem Spieler. Auf der Spieler-Seite steht bei Online-Spielern der Knopf Live zusehen.
  • Kamera: Frei (WASD, Leertaste/Shift hoch/runter, Klick fängt die Maus, Mausrad = Tempo), Folgen (dritte Person) oder Ego (durch die Augen des Spielers). Doppelklick auf einen Spieler folgt ihm; „Auf dem Server“ springt zu Spielern außerhalb des Blickfelds.
  • Handy / Tablet: Steuerung wie in Minecraft Bedrock – Steuerkreuz unten links (Daumen zwischen zwei Pfeilen = schräg, Tippen auf die Mitte schaltet Sprinten), rechts unten hoch/runter fliegen, Wischen auf dem Bild schaut sich um. Kamera-, Spieler- und Chat-Fenster klappen hinter die Knöpfe oben in der Mitte.
  • Vollbild: Knopf oben in der Mitte der Ansicht. Auf Android und am PC echtes Vollbild (am Handy nach Möglichkeit quer), auf dem iPhone füllt die Ansicht die ganze Seite – Safari lässt Webseiten seine Leisten nicht ausblenden. Ganz ohne Leisten: in Safari Teilen → „Zum Home-Bildschirm“ und das Dashboard über das Eternal-Symbol öffnen (dort einmal neu anmelden, die Home-Bildschirm-App hat einen eigenen Speicher).
  • Sichtweite 16 Chunks: Die Umgebung kommt Chunk für Chunk, die nächsten zuerst (nach wenigen Sekunden steht alles, gut 1–2 MB). Fliegt die Kamera weiter, kommen fehlende Chunks nach und entfernte werden vergessen; Umgebung lädt alles neu. Steht dort niemand, lädt der Server die Chunks dafür kurz selbst; noch nie besuchte erzeugt Paper nur in der Nähe der Kamera (4 Chunks).
  • Gestreamt werden alle Spieler im Umkreis von 256 Blöcken um die Kamera (10× pro Sekunde), Blockänderungen und der Chat der Welt.
  • Kisten öffnen: Klick (am Handy Antippen) auf eine Kiste, ein Fass, einen Ofen, Trichter … zeigt den Inhalt jetzt – der Server liest ihn in dem Moment aus (Doppelkiste ganz). Schilder zeigen ihren Text.
  • Welt-Auswahl: die Hauptwelt des Servers steht immer oben und ist vorausgewählt.
  • Ingame ist der Zuschauer nie sichtbar – keine Figur, kein Eintrag in der Spielerliste.
  • Unsichtbare (/vanish) und Spieler ohne Datenschutz-Zustimmung werden nie gestreamt.
  • Voraussetzung: das Eternal-Plugin mit API-Verbindung (api.enabled); das Replay-Modul muss dafür nicht an sein. Die Umgebung braucht 1.13+, Spieler gibt es auf jeder Version.
  • Last: Ohne Zuschauer fragt jeder Server alle 2 s kurz bei der API nach; während jemand zusieht alle 250 ms.

Karte

Cloud › Karte (/cloud/map) ist die Live-Ansicht von oben – 3D wie bei Google Earth. In der Live-Ansicht schaltet der Kamera-Knopf Karte genauso um.

  • Bedienung: ziehen = verschieben, rechte Maus = drehen/neigen, Mausrad = zum Cursor zoomen. Am Handy: zwei Finger zoomen (auseinander/zusammen), drehen (Finger drehen) und neigen (beide hoch/runter) – der Blickwinkel geht nur mit zwei Fingern. Ein Finger verschiebt von oben (Blickwinkel 70°–90°, 90° = senkrecht), flacher als 70° dreht er. Doppeltippen zoomt rein. Die Kamera bleibt mindestens 5 Blöcke über dem Boden bzw. 1 Block über Bäumen und Gebäuden.
  • Alle Spieler der Welt erscheinen live – bis 200 Blöcke von der Kamera als 3D-Figur mit Skin, weiter weg als Kopf mit Namen (auch weit außerhalb der geladenen Umgebung). Die Liste links springt per Klick zum Spieler.
  • Spieler anklicken/antippen: Name, Koordinaten, Leben, Hunger, Level und Spielmodus. Dazu Verfolgen (die Karte bleibt am Spieler), Hinzoomen, 3D (zurück in die normale Live-Ansicht hinter dem Spieler), Profil und Teleport (mit eternal.web.tracking.teleport: du ingame zu ihm, sonst /tppos in die Zwischenablage).
  • Gesamte Karte: Um den Punkt, auf den du schaust, steht die volle 3D-Umgebung (16 Chunks in jede Richtung). Rundherum zeigt die Karte die ganze Welt als Gelände (weiter weg gröber). Steil von oben und ab 1000 Blöcken über dem höchsten Punkt darunter ist es eine einheitliche Karte in den Farben einer Minecraft-Karte mit Höhen-Schattierung, wie Google Maps (nicht erzeugt = dunkel). Unter 800 Blöcken oder flacher als 70° ist es die normale Ansicht mit Himmel und Blockfarben (die echten 3D-Blöcke bis 400 Blöcke über dem Gelände), dazwischen ein Übergang; unten links steht die Höhe über dem Gelände.
  • Das Gelände merkt sich jeder Server selbst (Feature task:map-tiles): Beim ersten Start erfasst er jede Welt einmal komplett – alle Chunks, die es auf der Platte gibt, gedrosselt, ohne neue zu erzeugen, mit Pause wenn die TPS unter 18 fallen; ein Neustart setzt fort. Danach generiert er Gelände, das noch niemand besucht hat, im Hintergrund vor (wie Chunky, Ring für Ring von der Mitte aus): config.yml → map.pregenerate-radius (Standard 1000 Blöcke um die Mitte der Weltgrenze bzw. den Spawn, nie über die Weltgrenze, 0 = aus), map.pregenerate-excluded für Ausnahmen. Vorgeneriert werden Farm- und Plotwelten; die Hauptwelt füllt sich durch die Spieler (map.pregenerate-main-world: true nimmt sie dazu), Nether und End nur mit map.pregenerate-nether-end: true. Unter map.pregenerate-min-free-gb (Standard 5) freiem Speicher pausiert das Vorgenerieren. Leere Void-Welten werden erkannt und übersprungen. Nach einem Farmwelt-Reset wird ihre Karte gelöscht und die neue Welt neu erfasst. Auf Paper asynchron, gedrosselt solange Spieler online sind, Pause unter 18 TPS; auf Spigot nur, wenn niemand online ist. Das kostet Zeit und Speicherplatz: 1000 Blöcke sind ~16 000 Chunks (rund 1 GB) je Welt, 10 000 Blöcke ~1,5 Mio. Chunks – viele Stunden und zig GB. Ältere Versionen hatten 10 000 als Standard; beim Update wird das auf 1000 umgestellt. Das Dashboard lädt davon immer nur, was in Sicht ist (fern gröber). Und live: wenn Spieler Chunks laden und verlassen und wenige Sekunden nach Bauen, Abbauen oder Explosionen. Wo niemand ist, bleibt der letzte Stand. Nether: ohne Dach – die Karte zeigt den Boden unter der Bedrock-Decke (wie der Höhlenmodus anderer Karten-Mods: massiver Fels ist auf Höhe 120 abgeschnitten), mit Grundlicht statt Himmel. Gespeichert wird alle 10 s in der Datenbank (Regionen à 32×32 Chunks).
  • Unsichtbare (vanish) und Spieler ohne Zustimmung erscheinen nicht.

Rechte

RechtStandard-StufeZweck
eternal.replay.rewatchTeam/replay list, reports, play, exit und alle Replays im Dashboard
eternal.replay.debugAdmin/replay status
eternal.replay.ownAlleReplay zum eigenen Bann im Dashboard

Typische Stolperfallen

  • „Kein Replay: Modul replay ist auf … nicht aktiv — Live-TP“ – auf dem Server des Gemeldeten ist das Modul aus. Der Mod wird live teleportiert.
  • „Der Spieler war zu lange offline — Replay nicht verfügbar“ – im Puffer lag nichts mehr.
  • Replay startet auf dem falschen Server – server-name stimmt nicht mit dem Proxy-Namen überein.
  • Kein Replay im Dashboard – api.enabled ist aus oder das Secret stimmt nicht mit internal.shared-secret in api.yml überein; der Upload schlägt dann fehl.
  • Hoher RAM-Verbrauch – retention-seconds senken oder frame-interval-ticks: 2 setzen.
  • Fehlende Blöcke im Web-Player – der Bereich lag außerhalb von world-capture oder die Chunks waren nicht geladen.