Files

98 lines
4.1 KiB
YAML

# Minecraft Crossplay-Server: Java Edition + Bedrock Edition
# ----------------------------------------------------------
# Basis : PaperMC (Java-Server, Plugin-faehig)
# Bruecke: GeyserMC uebersetzt Bedrock-Pakete -> Java-Protokoll
# Auth : Floodgate authentifiziert Bedrock-Spieler ueber Xbox Live,
# d.h. Konsolen-/Mobile-Spieler brauchen KEINEN Java-Account.
#
# Alle Stellschrauben liegen in .env
name: mc-crossplay
services:
minecraft:
# Minecraft 26.x setzt Java 25 voraus - Tag nicht auf java21 zuruecksetzen.
image: itzg/minecraft-server:stable-java25
container_name: mc-crossplay
restart: unless-stopped
# noetig, damit die Server-Konsole via `docker attach` bedienbar bleibt
stdin_open: true
tty: true
ports:
- "${JAVA_PORT:-25565}:25565/tcp" # Java Edition (TCP)
- "${BEDROCK_PORT:-19132}:19132/udp" # Bedrock Edition via Geyser (UDP!)
environment:
# --- Mojang EULA -------------------------------------------------
EULA: "TRUE"
# --- Server-Software ---------------------------------------------
TYPE: "PAPER"
VERSION: "${MC_VERSION:-LATEST}"
# --- Speicher / JVM ----------------------------------------------
INIT_MEMORY: "${MC_MEMORY:-4G}"
MAX_MEMORY: "${MC_MEMORY:-4G}"
USE_AIKAR_FLAGS: "true"
# --- Plugins ------------------------------------------------------
# Immer der aktuellste Build. Wichtig, weil Bedrock-Clients (Konsole,
# Handy) sich selbst updaten und Geyser hinterherziehen muss.
# Eigene Plugins hier einfach als weitere Zeile (URL) ergaenzen.
PLUGINS: |
https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot
https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot
# --- Konfigurations-Seeding ---------------------------------------
# Inhalt von ./config wird nach /data kopiert, also z.B.
# ./config/plugins/Geyser-Spigot/config.yml -> /data/plugins/Geyser-Spigot/config.yml
COPY_CONFIG_DEST: "/data"
# --- server.properties --------------------------------------------
MOTD: "${MC_MOTD:-Crossplay Server - Java & Bedrock}"
DIFFICULTY: "${MC_DIFFICULTY:-normal}"
MAX_PLAYERS: "${MC_MAX_PLAYERS:-20}"
VIEW_DISTANCE: "${MC_VIEW_DISTANCE:-10}"
SIMULATION_DISTANCE: "${MC_SIMULATION_DISTANCE:-8}"
SPAWN_PROTECTION: "0"
OPS: "${MC_OPS:-}"
# --- Whitelist ----------------------------------------------------
# MC_WHITELIST nimmt ausschliesslich *Java*-Profilnamen auf - itzg loest
# sie beim Start via PlayerDB/Mojang in UUIDs auf. Xbox-Gamertags von
# Bedrock-Spielern lassen sich hier NICHT eintragen, die kommen ueber
# `rcon-cli "fwhitelist add <Gamertag>"` direkt von Floodgate dazu.
ENABLE_WHITELIST: "${MC_WHITELIST_ENABLED:-false}"
ENFORCE_WHITELIST: "${MC_WHITELIST_ENABLED:-false}"
WHITELIST: "${MC_WHITELIST:-}"
# MERGE ist hier entscheidend: ohne das wuerde die whitelist.json bei
# jedem Start auf MC_WHITELIST reduziert - und alle per fwhitelist
# eingetragenen Bedrock-Spieler waeren wieder raus.
EXISTING_WHITELIST_FILE: "MERGE"
# Muss TRUE bleiben: Floodgate haengt sich in die Online-Auth ein.
ONLINE_MODE: "TRUE"
# Muss false sein: Bedrock-Spieler haben keine Java-Chat-Signatur und
# wuerden sonst beim Chatten rausfliegen.
ENFORCE_SECURE_PROFILE: "false"
# --- Fernsteuerung / Betrieb ---------------------------------------
ENABLE_RCON: "true"
RCON_PASSWORD: "${RCON_PASSWORD:?RCON_PASSWORD fehlt - bitte in .env setzen}"
TZ: "${TZ:-Europe/Berlin}"
# Zeit fuers saubere Speichern der Welt beim Stoppen
STOP_DURATION: "120"
volumes:
# Welt + Plugin-Daten in einem Named Volume (schnelle I/O, auch unter
# Docker Desktop/WSL2). Zugriff via `docker compose cp` oder Backup s. README.
- mc-data:/data
# Vorgegebene Konfigurationsdateien, versionierbar im Projektordner
- ./config:/config:ro
stop_grace_period: 2m
volumes:
mc-data: