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.
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, brauchtreports. 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: trueundapi.shared-secretinplugins/Eternal/config.yml. server-nameinconfig.ymlmuss 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 ProtocolLib | ohne | |
|---|---|---|
| Nachgespielte Spieler ingame | echte Spieler-NPCs mit aufgezeichnetem Skin und Laufanimation | Rüstungsständer mit Spielerkopf |
| Kisten-Deckel ingame | öffnen/schließen sich | keine Animation |
| Browser-Player | unabhängig davon voll nutzbar |
So funktioniert die Aufnahme
- 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.
- Ein Report friert die letzten
retention-secondsdes gemeldeten Spielers und der Spieler in Sichtweite ein und nimmt danach weiter auf. - Die Aufnahme endet, wenn ein Mod den Report annimmt/schließt oder nach
max-followup-seconds. Dann wird sie als Datei gespeichert. - Zusätzlich wird ein Welt-Schnappschuss der Umgebung gespeichert (Blöcke, Kisteninhalte, Schildtexte).
- 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üssel | Standard | Untergrenze | Hinweis |
|---|---|---|---|
retention-seconds | 60 | 10 s | Mehr Sekunden = mehr RAM pro Online-Spieler |
frame-interval-ticks | 1 | 1 | Auf vollen Servern 2 spart die Hälfte |
inventory-snapshot-ticks | 100 | 20 | |
max-followup-seconds | 600 | 60 s | |
world-capture.chunks | 16 | – | Sichtweite im Web-Player (16 Chunks = 256 Blöcke), höchstens 32 |
world-capture.radius / up / down | 64 / 32 / 16 | – | Nur mit chunks: 0 (alter Kasten), insgesamt maximal ca. 2,5 Mio. Blöcke |
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
| Ort | Inhalt |
|---|---|
plugins/Eternal/replays/<id>.dat.gz | Aufnahme (gzip, Binärformat) auf dem Spielserver |
plugins/Eternal/replays/index.txt | Index 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
| Befehl | Recht | Beschreibung |
|---|---|---|
/replay bzw. /replay status | eternal.replay.debug | Recorder-Zustand: aktive Puffer, Ereignisse im RAM |
/replay list [Anzahl] | eternal.replay.rewatch | Letzte Aufnahmen (Standard 10, max. 100) |
/replay reports [Anzahl] | eternal.replay.rewatch | Nur Report-Aufnahmen |
/replay play <id> | eternal.replay.rewatch | Aufnahme abspielen |
/replay exit | eternal.replay.rewatch | Wiedergabe 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:
| Slot | Item | Funktion |
|---|---|---|
| 1 | Smaragd | Play / Pause |
| 2 | Pfeil | 10 s zurück |
| 3 | Kiste | Inventar des nächsten Spielers |
| 4 | Lehmklumpen | langsamer (−0,25) |
| 5 | Karte | Replay-Info im Chat |
| 6 | Schleimball | schneller (+0,25) |
| 8 | Spektralpfeil | 10 s vor |
| 9 | Barriere | Replay verlassen |
Rechtsklick auf einen Container im Replay zeigt seinen Inhalt zum aktuellen Replay-Zeitpunkt (nur lesen) – nie die echte Kiste.
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:
| Seite | Recht | Inhalt |
|---|---|---|
Moderation → Replays (/replays) | eternal.replay.rewatch | Liste aller hochgeladenen Aufnahmen |
Report → Replay im Browser (/replays/report/<Report-ID>) | eternal.replay.rewatch | Aufnahme zum Report |
Bann → Replay (/replays/ban/<Bann-ID>) | eternal.replay.rewatch | Aufnahme zum Bann |
| Mein Konto → Replays zu deinen Banns | eternal.replay.own | Gebannte 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 mitWASD, Leertaste/Ehoch, Shift/Qrunter, Strg schneller, Mausrad = Fluggeschwindigkeit. Linksklick fängt die Maus (Esclöst), Rechtsklick ziehen = umsehen ohne Fangen.
| Taste | Funktion |
|---|---|
Leertaste / K | Play / Pause |
← / → | ±5 s (mit Shift ±1 s) |
, / . | einen Tick zurück / vor |
↑ / ↓ | Geschwindigkeit (⅛× bis 8×) |
1–9 | Spieler folgen |
Tab | nä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/tpposin 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-excludedfür Ausnahmen. Vorgeneriert werden Farm- und Plotwelten; die Hauptwelt füllt sich durch die Spieler (map.pregenerate-main-world: truenimmt sie dazu), Nether und End nur mitmap.pregenerate-nether-end: true. Untermap.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
| Recht | Standard-Stufe | Zweck |
|---|---|---|
eternal.replay.rewatch | Team | /replay list, reports, play, exit und alle Replays im Dashboard |
eternal.replay.debug | Admin | /replay status |
eternal.replay.own | Alle | Replay 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-namestimmt nicht mit dem Proxy-Namen überein. - Kein Replay im Dashboard –
api.enabledist aus oder das Secret stimmt nicht mitinternal.shared-secretinapi.ymlüberein; der Upload schlägt dann fehl. - Hoher RAM-Verbrauch –
retention-secondssenken oderframe-interval-ticks: 2setzen. - Fehlende Blöcke im Web-Player – der Bereich lag außerhalb von
world-captureoder die Chunks waren nicht geladen.