Paper 26.3 is the newest stable release; Geyser 2.12.0 and Floodgate 2.2.5 support it, and it still runs on Java 25. Updates .env.example, the README and the .env inside the Oracle deploy package. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
204 lines
6.8 KiB
Markdown
204 lines
6.8 KiB
Markdown
# Minecraft Crossplay-Server (Java + Bedrock)
|
|
|
|
Ein PaperMC-Server im Container, der per **GeyserMC** zusaetzlich Bedrock-Clients
|
|
(Konsole, Handy, Windows-10-Edition) annimmt. **Floodgate** authentifiziert diese
|
|
Spieler ueber Xbox Live, ein gekaufter Java-Account ist fuer sie nicht noetig.
|
|
|
|
Es bleibt ein **Java-Server**: Redstone, Kampfsystem und Mob-Verhalten folgen den
|
|
Java-Mechaniken. Geyser sitzt als Uebersetzungsschicht dazwischen.
|
|
|
|
```
|
|
Java-Client ──TCP 25565──┐
|
|
├──► PaperMC (Java-Server)
|
|
Bedrock-Client ─UDP 19132─┴──► Geyser ──► Floodgate ──► Xbox-Live-Auth
|
|
```
|
|
|
|
## Dateien
|
|
|
|
| Datei | Zweck |
|
|
|---|---|
|
|
| `docker-compose.yml` | Der Stack: Image, Ports, Plugins, server.properties |
|
|
| `.env` | Alle Stellschrauben (Version, RAM, Ports, MOTD, Ops, RCON-Passwort) |
|
|
| `config/plugins/Geyser-Spigot/config.yml` | Geyser-Vorgabe, u.a. `auth-type: floodgate` |
|
|
|
|
Die Welt und alle Plugin-Daten liegen im Docker-Volume `mc-crossplay_mc-data`,
|
|
nicht im Projektordner (deutlich schnellere I/O unter Docker Desktop).
|
|
|
|
## Schnellstart
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Der erste Start dauert ein paar Minuten: Paper-Jar, Geyser und Floodgate werden
|
|
geladen und die Welt wird generiert.
|
|
|
|
Logs mitlesen:
|
|
|
|
```bash
|
|
docker compose logs -f
|
|
```
|
|
|
|
Fertig ist der Server, sobald `Started Geyser on UDP port 19132` und danach
|
|
`Done (…)! For help, type "help"` in den Logs stehen.
|
|
|
|
Eingestellt ist Minecraft/Paper 26.3 (dazu Geyser 2.12.0, Floodgate 2.2.5).
|
|
Zuletzt getestet mit Paper 26.2, Geyser 2.11.1 und Floodgate 2.2.5: Java-Ping auf
|
|
25565/TCP und RakNet-Ping auf 19132/UDP antworten beide, MOTD und Spielerzahl
|
|
werden vom Java-Server an die Bedrock-Serverliste durchgereicht.
|
|
|
|
## Verbinden
|
|
|
|
* **Java Edition:** Adresse `<Server-IP>`, Port `25565`
|
|
* **Bedrock Edition:** Server hinzufuegen, Adresse `<Server-IP>`, Port `19132`
|
|
* **Vom selben Rechner:** `localhost` bzw. `127.0.0.1`
|
|
|
|
Auf Konsolen (Switch, PS, Xbox) laesst sich oft keine freie Serveradresse
|
|
eintragen. Ueblicher Weg dort: DNS-Umleitung im Heimnetz oder ein Dienst wie
|
|
BedrockConnect.
|
|
|
|
Bedrock-Spieler erscheinen mit einem Punkt vor dem Namen, z.B. `.MeinGamertag`.
|
|
Das ist der Floodgate-Praefix; er verhindert Namenskollisionen mit Java-Accounts.
|
|
Aendern laesst er sich in `plugins/floodgate/config.yml` (`username-prefix`).
|
|
|
|
## Firewall (Windows)
|
|
|
|
Docker Desktop oeffnet die Ports nur lokal. Fuer Zugriff aus dem LAN muessen
|
|
beide Ports durch die Windows-Firewall — in einer **Admin-PowerShell**:
|
|
|
|
```powershell
|
|
New-NetFirewallRule -DisplayName "Minecraft Java 25565" -Direction Inbound -Protocol TCP -LocalPort 25565 -Action Allow
|
|
```
|
|
|
|
```powershell
|
|
New-NetFirewallRule -DisplayName "Minecraft Bedrock 19132" -Direction Inbound -Protocol UDP -LocalPort 19132 -Action Allow
|
|
```
|
|
|
|
Fuer Zugriff aus dem Internet zusaetzlich im Router portforwarden:
|
|
**25565/TCP** und **19132/UDP**. Bedrock laeuft ueber UDP — ein reines
|
|
TCP-Forwarding reicht nicht.
|
|
|
|
## Erreichbarkeit pruefen
|
|
|
|
Sobald der Router-Port offen ist, testet Geyser die Erreichbarkeit von aussen
|
|
selbst — das fragt einen oeffentlichen GeyserMC-Testdienst an, uebermittelt also
|
|
deine oeffentliche IP und den Port dorthin:
|
|
|
|
```bash
|
|
docker compose exec minecraft rcon-cli "geyser connectiontest"
|
|
```
|
|
|
|
## Betrieb
|
|
|
|
```bash
|
|
docker compose ps
|
|
```
|
|
|
|
Serverkonsole (Befehle wie `op`, `whitelist`, `save-all`):
|
|
|
|
```bash
|
|
docker compose exec minecraft rcon-cli
|
|
```
|
|
|
|
Einzelner Befehl:
|
|
|
|
```bash
|
|
docker compose exec minecraft rcon-cli op DeinName
|
|
```
|
|
|
|
Sauber stoppen (die Welt wird gespeichert, bis zu 2 Minuten Zeit):
|
|
|
|
```bash
|
|
docker compose down
|
|
```
|
|
|
|
## Updates
|
|
|
|
* **Geyser/Floodgate:** werden bei jedem Containerstart in der aktuellsten
|
|
Version geladen. Nach einem Bedrock-Update also einfach
|
|
`docker compose restart` — Geyser zieht dann den passenden Build nach.
|
|
* **Paper/Minecraft:** `MC_VERSION` in der `.env` ist fest auf `26.3` gepinnt. Fuer ein
|
|
Update die Zahl anheben (oder `LATEST` fuer immer die neueste Version).
|
|
* **Image:** `docker compose pull && docker compose up -d`
|
|
|
|
## Weitere Plugins
|
|
|
|
URL in `docker-compose.yml` unter `PLUGINS` als weitere Zeile ergaenzen, dann
|
|
`docker compose up -d`. Aus der Liste entfernte Plugins werden beim naechsten
|
|
Start auch aus dem `plugins`-Ordner geloescht.
|
|
|
|
Fuer Bedrock-Spieler gilt: Plugins moeglichst simpel halten. Komplexe
|
|
Chest-GUI-Menues (Auktionshaeuser, Shop-Menues) funktionieren ueber Geyser oft
|
|
nur fehlerhaft. Plugins mit Formular-Unterstuetzung fuer Bedrock sind die
|
|
bessere Wahl.
|
|
|
|
## Konfiguration aendern
|
|
|
|
* **server.properties:** ueber die `.env` bzw. die Environment-Variablen in
|
|
`docker-compose.yml`. Direkte Aenderungen an der `server.properties` im Volume
|
|
werden bei diesen Werten beim naechsten Start ueberschrieben.
|
|
* **Geyser:** `config/plugins/Geyser-Spigot/config.yml` bearbeiten, dann
|
|
`docker compose restart`. Die Datei aus dem Projektordner gewinnt, sobald sie
|
|
neuer ist als die im Volume.
|
|
* **Alles andere (Floodgate, weitere Plugins):** liegt im Volume. Anschauen mit
|
|
|
|
```bash
|
|
docker compose exec minecraft cat /data/plugins/floodgate/config.yml
|
|
```
|
|
|
|
Dauerhaft vorgeben laesst es sich, indem man die Datei unter
|
|
`config/plugins/<Plugin>/` im gleichen Pfadaufbau ablegt.
|
|
|
|
## Backup
|
|
|
|
Welt und Plugin-Daten aus dem Volume in eine Datei sichern:
|
|
|
|
```bash
|
|
docker run --rm -v mc-crossplay_mc-data:/data -v "$PWD":/backup alpine tar czf /backup/mc-backup.tar.gz -C /data .
|
|
```
|
|
|
|
Vorher `docker compose exec minecraft rcon-cli save-all` ausfuehren oder den
|
|
Server stoppen, damit die Welt konsistent auf der Platte liegt.
|
|
|
|
## Deployment in die Oracle Cloud
|
|
|
|
Der Umzug auf die OCI-Instanz hinter `minecraft.djnizz.at` ist in
|
|
[DEPLOY-ORACLE.md](DEPLOY-ORACLE.md) beschrieben.
|
|
|
|
## Bekannte Einschraenkungen
|
|
|
|
* Bedrock unterstuetzt nicht alle Java-Features grafisch 1:1 (bestimmte
|
|
Bannermuster, manche Offhand-Interaktionen) — kleine optische Abweichungen
|
|
sind normal.
|
|
* Geyser erzeugt einen leichten CPU-Overhead pro Bedrock-Spieler. Auf moderner
|
|
Hardware faellt das nicht ins Gewicht.
|
|
* Bedrock-Spieler haben keine Java-Chatsignatur, deshalb ist
|
|
`enforce-secure-profile=false` gesetzt. Ohne das fliegen sie beim Chatten raus.
|
|
|
|
## Troubleshooting
|
|
|
|
**Bedrock-Client findet den Server nicht** — meist die Firewall oder ein
|
|
fehlendes UDP-Forwarding. Test vom Host aus:
|
|
|
|
```bash
|
|
docker compose exec minecraft sh -c "netstat -uln | grep 19132"
|
|
```
|
|
|
|
**„Unable to connect to world"** — pruefen, ob Geyser sauber gestartet ist:
|
|
|
|
```bash
|
|
docker compose logs | grep -i geyser
|
|
```
|
|
|
|
**Container startet in einer Schleife neu, Log sagt „requires Java 25 or
|
|
above"** — dann zeigt das Image-Tag auf eine zu alte JVM. Minecraft 26.x braucht
|
|
Java 25, das Tag in `docker-compose.yml` muss `stable-java25` (oder neuer)
|
|
bleiben.
|
|
|
|
**Bedrock-Spieler wird nach Java-Account gefragt** — dann greift `auth-type`
|
|
nicht. Kontrolle:
|
|
|
|
```bash
|
|
docker compose exec minecraft grep -A2 "^java:" /data/plugins/Geyser-Spigot/config.yml
|
|
```
|