Minecraft-Server - meine Best Practises

Da ich über 10 Jahre Erfahrung im Betrieb von Minecraft-Servern habe und das zwischenzeitlich auch im größeren Stil gemacht habe, möchte ich hier einmal meine Best Practises dokumentieren.

Vieles werde ich hier anhand meines eigenen Servers beschreiben. Dabei handelt es sich um einen Survival-Server, der seit bald 6 Jahren aktiv ist (gestartet während der ersten Corona-Zeiten). Der Server hat einige Plugins, das meiste davon aber rein serverseitig und ohne direkten Einfluss auf das Spielerlebnis.

Dieser Post bezieht sich komplett auf die Java-Edition. Mit der Bedrock-Edition habe ich wenig Erfahrung, da ich diese selbst nicht spiele.

Nutzungsprofil erstellen

Bevor man überhaupt mit der genaueren Planung bzw. Umsetzung beginnt, sollte feststehen, was überhaupt das Ziel ist, wie viele Spieler erwartet werden (Gesamt/Peak/Durchschnitt). Auch ist es ein großer Unterschied, ob die Spieler in einem recht kleinen Bereich aktiv sind (bspw. bei Minigames) oder verteilt auf einer großen Welt spielen. Ich habe auch häufig beobachtet, dass der Ressourcenbedarf bei einem Server z.B. in einer Freundesgruppe in den ersten Tagen deutlich höher ist als in der darauf folgenden Zeit. Dort kann es sinnvoll sein, erst kurzzeitig einen größeren virtuellen Server bei einem Anbieter zu mieten, der stundenweise bzw. tagesweise abrechnet und danach für den längerfristigen Betrieb auf einen günstigeren Server oder z.B. auch den Betrieb im Homelab zu wechseln.

Hardware bzw. Plattform

CPU

Bei Minecraft läuft, wie bei vielen anderen Spielen auch, ein großer Teil der Spiellogik in einem Haupt-Thread ab. Das heißt, dass man eher wenige schelle CPU-Kerne benötigt als viele. Große Server-CPUs mit vielen Kernen sind hier meistens eher weniger geeignet, außer man möchte viele Minecraft-Server parallel betreiben. Die (halbwegs) aktuellen Desktop-CPUs von Intel und AMD mit min. 4 (Performance) Cores sind hier meistens eine solide Wahl.

RAM

Als Minimum sehe ich 4GB, darunter kommt es schnell zu Problemen. Mehr ist bis zu einem gewissen Punkt besser, über ca 30GB RAM würde ich unter normalen Umständen nicht gehen. Mehr Mods und Plugins benötigen mehr RAM, die Sichtweite und Verteilung der Spieler (und damit die Zahl der geladenen Chunks) ist hier auch relevant. Mein eigener Server läuft normalerweise mit 8GB.

SSD vs HDD

Minecraft profitiert von schnellem Speicher. SSD ist in meinen Augen ein Muss, NVMe ist zu bevorzugen. Die benötigte Größe hängt hauptsächlich von der Weltgröße und eingesetzten Plugins (bspw. Dynmap) ab, 20GB reichen meistens aber mehr als aus.

Internetanbindung

Ein Punkt, der beim Betrieb zuhause öfter mal übersehen wird. Leistungsstarke Hardware bringt wenig, wenn nicht genügend Bandbreite zur Verfügung steht. Ich kalkuliere normalerweise mit ca 2-5 MBit/s pro gleichtzeitigem Spieler. Wenn keine Chunks geladen werden, ist der Bedarf an Bandbreite niedriger, bei einem Weltwechsel oder schnellem Bewegen auf der Karte entstehen deutlich größere Peaks. Mit ca 50 MBit/s an verfügbarer Upload-Bandbreite kann man aber schon einige Spieler bedienen.

Wenn man zuhause hostet, ist aus verschiedenen Gründen das Tunneln über einen Server in einem Rechenzentrum hilfreich. Einerseits gibt man damit seine Heim-IP nicht preis, andererseits ist durch bessere Peerings von Rechenzentren im Vergleich zu ISPs untereinander auch die Verbindungsqualität höher. Nebenbei kann man damit auch Einschränkungen durch CGNAT umgehen und den Server auch bei Nutzung einer zweiten Internetleitung für Failover erreichbar halten.

Software

Betriebssystem

Hier ist irgendeine gängige Linux-Distribution, die Docker-Support hat, sinnvoll. Ich verwende meistens Debian oder Ubuntu. Docker benötige ich für die verwendete Verwaltungssoftware, aber auch ohne ist der Betrieb von einem MC-Server in Docker häufig angenehmer als direkt auf dem Server.

Management-Tool

Ich nutze bisher Pterodactyl (pterodactyl.io) als webbasiertes Gameserver-Panel. Lange Jahre kam bei mir Multicraft zum Einsatz - da ist allerdings das letzte Release von Februar 2022 und die letzte Preview-Version von November 2023. Alternativ zu Pterodactyl möchte ich zeitnahe Pelican (pelican.dev) testen. Pelican ist ein Fork von Pterodactyl und soll trotz Beta-Stadiums sehr gut nutzbar sein. Daneben gibt es noch einige weitere erwähnenswerte Panels:

Vor ein paar Jahren hätte ich noch Multicraft empfohlen, das fand ich insgesamt am angenehmsten in der Nutzung; aber da dieses Produkt scheinbar nicht mehr gepflegt wird, würde ich es nicht mehr einsetzen.

Server-Software

Kommen wir zum Kernpart. Hier ist erst einmal entscheidend, ob Mods, Plugins oder keins von beidem zum Einsatz kommen sollen. Plugins sind hierbei rein serverseitige Modifikationen bzw. Erweiterungen, normalerweise basierend auf der Spigot-API. Mods sind client- und/oder serverseitige Erweiterungen/Modifikationen, meistens geht es dabei mehr um Erweiterung des Spielinhalts (neue Blöcke, Biome, Kreaturen, Spielmechaniken, …).

Server mit Mods

Hier wird meistens Fabric (fabricmc.net) als Modloader verwendet, dieser startet dann den eigentlichen Server.

Server mit Plugins

Für Plugins und generell als Serversoftware ist PaperMC (papermc.io) der Quasi-Standard. Es fing mit Bukkit an (Vanilla-Server mit Pluginfähigkeit), daraus entstand dann SpigotMC (optimiertes Bukkit), wovon dann wieder PaperMC geforkt wurde. Auch unterhalb von PaperMC geht die Fork-Kette weiter, wobei PaperMC als guter Kompromiss von Performance und akkuraten Spielmechaniken gilt und meistens empfohlen wird. Es gibt im Wiki von PaperMC auch einen Artikel, der beschreibt, wie man PaperMC vom Gameplay-Verhalten möglichst nahe an Vanilla annähern kann.

Kurz erwähnen möchte ich hier auch Folia, eine weitere Serversoftware von PaperMC - allerdings ausgelegt auf wirklich große survival-artige Server. Die Besonderheit bei Folia ist, dass es den einen großen Haupt-Game-Thread gibt, in dem alle Aktionen passieren. Folia teilt die Welt in distinkte Regionen auf, die getrennt voneinander arbeiten. Dadurch gibt es einen Game-Thread pro Region, wodurch sich die Last deutlich besser auf viele CPU-kerne verteilen lässt. Relevant wird das aber erst bei großen Spielerzahlen, Folia hat zudem auch viele Nachteile (Plugin-Kompatibilität, Entwicklungsstadium der Software, Bugs in Spielmechaniken, …).

Proxies

Es gibt für Minecraft spezielle Proxy-Software. Damit lassen sich mehrere Server zu einem “Netzwerk” verbinden und Spieler können via Commands oder andere Wege zwischen den Servern wechseln. Seit einiger Zeit gibt es im originalen Minecraft auch den Befehl /transfer, mit dem Spieler zu einem anderen Server transferiert werden können.

Ein Proxy ist sinnvoll, wenn man z.B. mehrere Minecraft-Server betreibt und zwischen diesen nahtlos wechseln können möchte oder auch dann, wenn man den eigentlichen Server zuhause betreibt, die Spieler aber über einen vServer beitreten sollen.

Wenn nur ein einzelner Server hinter einem Proxy betrieben werden soll, kann auch einfach eine Software wie HAProxy eingesetzt werden; PaperMC unterstützt bspw. das Proxy-Protokoll, mit dem die originale Client-IP erhalten bleibt.

Von den Entwicklern von SpigotMC gibt es hier Bungeecord, von den Entwicklern von PaperMC Velocity. Ich selbst nutze Velocity, da es die modernere Software ist und viele Plugins dafür existieren.

GeyserMC

Ein Spezialfall bei den Proxies ist Geyser. Das ist eine Software, die es Client mit der Bedrock Edition erlaubt, auf einem Server der Java-Edition zu spielen. Dazu werden fehlende Blöcke und Features möglichst nahe mit dem angehähert, was die Bedrock Edition bietet. Spieler verbinden sich mit Geyser, der dann wiederum die Verbindung zum eigentlichen Server aufbaut und übersetzt. Geyser läuft entweder als Plugin/Mod direkt auf dem Server, als Plugin auf dem Proxy oder Standalone, ich selbst habe es als Plugin auf dem Proxy installiert.

Empfohlene Plugins

Sofern der Server mit Plugins betrieben wird, habe ich hier einige Empfehlungen für Plugins, die ich fast immer installiere. Für Fabric gibt es diverse der genannten Plugins allerdings auch.

Chunky (Plugin und Mod)

Chunky gibt es für alle relevanten Modloader und Servertypen, also sowohl PaperMC als auch Fabric (und weitere). Das ist ein Tool, mit dem man Weltteile bzw. Chunks vorgenerieren kann. Vor dem Start eines neuen Servers generiere ich meistens mindestens 1000 Blöcke um den Spawn herum vor, da das Generieren von Chunks einer der rechenintensiveren Vorgänge auf einem Minecraft-Server ist. Vor allem am Anfang, wenn noch viele Spieler aktiv sind, merkt man einen Unterschied. Auch im Nether sollte man Weltteile vorgenerieren. Im End geht das auch, bringt aber aufgrund der Verteilung der End-Cities meiner Erfahrung nach nicht ganz so viel.

WorldEdit (bzw. FastAsyncWorldEdit)

Einer der Klassiker, das Plugin gibt es gefühlt schon immer. Wer es nicht kennt: Damit kann man schnell große Teile der Welt bearbeiten, Blöcke ersetzen, neu generieren usw.

FastAsyncWorldEdit ist für Server die bessere Wahl, da die Änderungen an der Welt asynchron ausgeführt werden und damit der Server nicht einfriert.

WorldGuard

Auch ein Klassiker. Damit kann z.B. festgelegt werden, dass nur bestimmte Spieler/Gruppen in einem Bereich bauen dürfen, auch Mob-Spawning lässt sich damit für einzelne Bereiche deaktiveren.

Dynmap

Das ist auch ein eher altes Plugin, allerdings bis heute gut gepflegt. Es erlaubt das Generieren einer webbasierten Karte des Servers, und das in 2D und auch in 3D. Das Plugin benötigt (vor allem bei den höheren Detailstufen) viel Rechenpower zum Rendern und auch einiges an Speicher bei größeren Welten. Ein Webserver ist integriert, es lässt sich allerdings auch ein externer Webserver dafür nutzen. Ich habe lowres als Qualitätslevel einstellt, das genügt mir. Wer etwas leichtgewichtigeres sucht, ist beim nächsten Plugin besser aufgehoben.

squaremap

squaremap bietet, ähnlich wie Dynmap, auch eine webbasierte Karte des Servers mit integriertem Webserver an, allerdings in geringerer Auflösung und ausschließlich in 2D. Dafür geht das Rendern sehr viel schneller und das Plugin ist generell auch leichtgewichtiger. Für einen kleinen privaten Server genügt squaremap vollkommen.

BlueMap

Das nächste Tool für eine webbasierte Karte. Bluemap hat die große Besonderheit, dass die Karte als 3D-Modelle gespeichert wird und sich die Welt im Browser daher frei erkunden lässt. Man kann beliebig zoomen, drehen usw, da die 3D-Modelle an den Browser übertragen werden und erst dort gerendet werden. BlueMap lässt sich zudem auch komplett unabhängig vom Server benutzen, so habe ich es auch im Einsatz. Ein kleines Script kopiert in regelmäßigen Abständen die Welt des Servers, führt BlueMap-CLI aus und stellt die generierten Daten über einen Webserver (Caddy, was auch sonst) bereit. Damit belastet es den Server selbst nicht, trotzdem finde ich es eine schöne Ergänzung zu Dynmap oder squaremap. Vor allem, um “mal eben” Freunden eigene Bauten auf dem Server auf dem Handy zeigen zu können, ist BlueMap wirklich super.

Plan

Plan ist ein Statistikplugin, das Einblicke in die Nutzung des Servers bietet. Man erfährt damit beispielsweise, wie die Auslastung des Servers aussieht, wann meistens gespielt wird und kann auch erkennen, ob neue Spieler erhalten bleiben oder eine hohe Fluktuation herrscht. Plan unterstützt auch diverse Plugins, um zusätzliche Daten anzuzeigen.

ViaVersion (und ViaBackwards)

Mit ViaVersion können Spieler mit neueren Minecraft-Versionen als der Server trotzdem beitreten. ViaBackwards hingegen erlaubt das Beitreten mit älteren Client-Versionen als der Server. Es gibt zusätzlich auch noch ViaRewind, damit können selbst Clients mit Version 1.7 und 1.8 noch beitreten - ob das sinnvoll ist, sei mal dahingestellt.

LuckPerms

LuckPerms ist so mit das bekannteste Plugin, um Permissions und Benutzergruppen zu verwalten. Mit MySQL oder einer anderen Datenbank als Backend lassen sich damit Berechtigungen auch über mehrere Server hinweg synchronisieren. Es gibt davon auch Versionen für Velocity, Fabric, Forge und weitere Server.

DiscordSRV

DiscordSRV ist eine Verbindung zwischen Discord und einem Minecraft-Server. Damit lässt sich bspw. der Ingame-Chat mit einem Discord-Channel verbinden. Auch lassen sich Discord-Rollen mit Permissions-Gruppen koppeln.

Distant Horizons server plugin

Distant Horizons ist eine Client-Mod, die eine deutlich höhere Sichtweite erlaubt. Dafür werden Versionen der Karte mit niedrigeren “Auflösungen” (LODs) generiert und alles außerhalb der gerade normal geladenen Chunks damit aufgefüllt. Damit ist der Performance-Einfluss eher gering. Distant Horizons braucht an sich keinen serverseitigen Support, die Mod speichert einfach Weltteile vom Server zwischen und generiert die LODs lokal.

Seit einiger Zeit gibt es ein Plugin für Server, womit die LOD-Dateien serverseitig generiert und vorgehalten werden können. Damit muss man nicht mehr jeden Weltteil besucht haben, um LODs dafür zu sehen. Es ist allerdings empfehlenswert, in der Config generate_new_chunks: false zu setzen, da sonst für die LODs neue Chunks generiert werden, was deutlich Ressourcen kostet.

Weitere Plugins

TabTPS

Damit lässt sich die aktuelle Performance des Servers (TPS, MSPT und weitere) an verschiedenen Positionen (Tabliste, Bossbar, Actionbar) anzeigen. Ich nutze das Plugin gerne, um die Leistung beim Spielen laufend im Auge zu behalten.

Multiverse-Core

Damit lassen sich mehrere Welten anlegen und verwalten, Spieler können auch zwischen den Welten wechseln. Ich habe auf meinem Server beispielsweise eine Kreativwelt, wo Spieler Gebäude vorbauen oder mit Redstone experimentieren können.

Mit weiteren Addons wie Multiverse-Inventories lassen sich die Features von Multiverse-Core noch erweitern.

SimpleVoiceChat

Das ist ein Plugin, was Ingame Voicechat hinzufügt. Dieser ist auf die direkte Umgebung des Spielers begrenzt und ermöglicht ein realistischeres Spielerlebnis. Es wird allerdings auch Client-Seitig eine Mod benötigt.

CoreProtect

Mit CoreProtect werden alle Aktionen auf dem Server geloggt und können damit auch rückgängig gemacht werden. Das ist vor allem für Survival-Server ohne ein System für “Grundstücke” praktisch und hat sich bei vergangenen Projekten bewährt.

EssentialsX

Ein Plugin, was viele kleinere Features (z.B. Befehle für Home oder Teleport-Anfragen) bündelt. Den Vorgänger habe ich früher viel genutzt, heutzutage installiere ich die benötigten Features als einzelne Plugins.