# 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 "` 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: