
In unserem Blog haben wir bereits , wie man seinen eigenen Minecraft-Server erstellt, aber seitdem sind 5 Jahre vergangen und es hat sich viel geändert. Wir teilen mit Ihnen aktuelle Methoden zur Erstellung und Optimierung des Serverteils dieses beliebten Spiels.
In seiner 9-jährigen Geschichte (wenn man das Erscheinungsdatum zählt) hat Minecraft eine erstaunliche Anzahl von Fans und Kritikern gewonnen, sowohl unter gewöhnlichen Spielern als auch unter Geekern. Das einfache Konzept einer Welt aus Blöcken hat sich von einem gewöhnlichen Vergnügen zu einer universellen Umgebung für Kommunikation und den Bau verschiedener Objekte aus der realen Welt entwickelt.
Neben dem Bauen bietet das Spiel die Möglichkeit, , die es ermöglichen, vollständige Algorithmen innerhalb von Minecraft zu realisieren. Auf YouTube gibt es viele beeindruckende Videos, in denen Menschen, die enorme Anstrengungen und viel Zeit investiert haben, eine Kopie von verschiedenen elektronischen Geräten oder eine detaillierte Nachbildung von und architektonischen Strukturen gebaut haben. Alles ist nur durch die Fantasie des Spielers und die Möglichkeiten des Spieluniversums begrenzt.

Doch lassen Sie uns nicht weiter darüber sprechen, was Spieler kreieren, sondern schauen wir uns den Serverteil der Anwendung an und beleuchten die Probleme (manchmal recht komplex), die während des Betriebs unter Last auftreten können. Zuvor sei gesagt, dass wir uns nur mit der Java Edition befassen werden.
Arten von Servern
Die einfachste Variante ist ein in den Spiel-Client integrierter Server. Sie haben eine Welt erschaffen, drücken einen Knopf, und schon ist der Server im lokalen Netzwerk verfügbar. Eine solche Variante kann jedoch keine ernsthaften Lasten tragen, weshalb wir sie nicht weiter betrachten werden.
Vanilla
Mojang Studios bietet den Serverteil des Spiels als Java-Anwendung kostenlos an . Dies ermöglicht es, eine eigene und persönliche Welt zu schaffen, die von jedem Punkt der Erde aus zugänglich ist. Für diejenigen, die dies zum ersten Mal tun, gibt es eine großartige , die in der entsprechenden Spiel-Wiki verfügbar ist.
Dieser Ansatz hat einen ernsthaften Nachteil: Es fehlen "out-of-the-box" Möglichkeiten zur Anbindung von Plugins, die die Funktionalität des Servers erweitern und nicht nur viele Prozesse automatisieren, sondern auch die Leistung optimieren können. Darüber hinaus hat der offizielle Server einen relativ hohen RAM-Verbrauch pro angeschlossenem Spieler.
Bukkit
Eine von Enthusiasten basierende Serveranwendung auf Vanilla-Basis erweitert die Spielmöglichkeiten erheblich durch die Unterstützung von Plugins und Mods (Modifikationen). Sie ermöglichte es nicht nur, neue Blöcke ins Gameplay einzufügen, sondern auch verschiedene Manipulationen durchzuführen, die mit der Vanilla-Software nicht möglich waren. Interessanterweise benötigte diese Anwendung deutlich weniger Speicher.
Die Installation von Bukkit ist nicht besonders schwierig; eine entsprechende Anleitung finden Sie auf der Website . Aber das macht keinen Sinn, da das Bukkit-Team seit 2014 aufgelöst wurde, die Entwickler des Projekts zu Mojang Studios wurden und aufgegeben wurde. Damit ist Bukkit faktisch tot, und es ist sinnvoll, sich auf die nächsten beiden Projekte zu konzentrieren.
SpigotMC
Um das Leben von Plugin-Entwicklern zu erleichtern, bestand die Notwendigkeit eines APIs zur Interaktion mit der Spielwelt. Diese Herausforderung haben die Schöpfer übernommen. , basierend auf dem Bukkit-Kern, wurde umgestaltet, um bessere Zuverlässigkeit und Leistung zu erreichen. Dennoch wurde das Projekt aufgrund des Digital Millennium Copyright Act () blockiert, und es ist nicht möglich, die Quellcodes von dort herunterzuladen.
Aktuell wird SpigotMC aktiv weiterentwickelt und genutzt. Es unterstützt alle Plugins, die für Bukkit erstellt wurden, ist jedoch nicht rückwärtskompatibel. Um das DMCA Takedown-Verbot zu umgehen, wurde eine elegante Lösung entwickelt, genannt BuildTools. Dieses Tool beseitigt die Notwendigkeit der Distribution einer kompilierten Anwendung und ermöglicht es den Nutzern, Spigot, CraftBukkit und Bukkit aus dem Quellcode selbst zu kompilieren. All dies macht das DMCA-Verbot überflüssig.
PaperMC
Es scheint also, dass alles hervorragend läuft, und Spigot ist eine hervorragende Wahl. Doch einige Enthusiasten waren damit nicht zufrieden und haben ihren eigenen 'auf Steroiden' basierenden Fork von Spigot erstellt. Das Hauptmerkmal besagt: „Es ist extrem schnell“. Eine entwickelte ermöglicht es, auftretende Fragen schnell zu klären, während die erweiterte API spannende Plugins ermöglicht. PaperMC kann mit einem einfachen Befehl gestartet werden, der in .
Bezüglich der Kompatibilität ist PaperMC hervorragend, sodass die für SpigotMC geschriebenen Plugins problemlos auch auf PaperMC funktionieren, jedoch ohne offizielle Unterstützung. Es gibt auch Rückwärtskompatibilität zu SpigotMC. Nachdem wir nun die verschiedenen Optionen zur Erstellung eines Servers aufgezählt haben, wenden wir uns den möglichen Leistungsproblemen zu.
Probleme und Lösungen
Wichtig zu verstehen ist, dass alles, was die Verarbeitung der Spielwelt betrifft, nur auf einem Rechenkern des physischen Servers verarbeitet wird. Wenn Sie also einen tollen Server mit mehreren Rechenkernen haben, wird nur einer davon verwendet. Alle anderen bleiben faktisch ungenutzt. So ist die Architektur der Anwendung, da können Sie nichts machen. Daher sollten Sie bei der Auswahl eines Servers nicht auf die Anzahl der Kerne, sondern auf die Taktrate achten. Je höher diese ist, desto besser ist die Leistung.
In Bezug auf den Arbeitsspeicher sollten folgende Kriterien berücksichtigt werden:
- geplante Anzahl der Spieler;
- geplante Anzahl der Welten auf dem Server;
- Größe jeder Welt.
Es ist wichtig zu beachten, dass Java-Anwendungen immer einen Puffer im Arbeitsspeicher benötigen. Wenn Sie mit einem Speicherbedarf von 8 Gigabyte rechnen, sollten Sie tatsächlich 12 Gigabyte einplanen. Diese Zahlen sind indikativ, ändern jedoch nichts an der grundlegenden Fragestellung.
Für den Start des Serverteils empfehlen wir, die in dem Artikel angegebenen Flags zu verwenden . Diese „schwarze Magie“ ermöglicht es dem Server, den „Garbage Collector“ effektiv einzustellen und optimiert den Arbeitsspeicherverbrauch. Sie sollten nicht mehr Speicher zuweisen, als der Server bei maximaler Spielerzahl tatsächlich benötigt.
Blockkarten-Generierung
“Glauben Sie wirklich, dass der Mond nur existiert, wenn Sie ihn ansehen?” (Albert Einstein)
Ein absolut neuer Server. Sobald ein Spieler sich zum ersten Mal erfolgreich verbindet, erscheint die Spielfigur an einem gemeinsamen Sammelpunkt (Spawn). Dies ist der einzige Ort, an dem die Spielwelt vorher vom Server generiert wird. In diesem Moment überprüft der Client die Einstellungen, wobei ein entscheidendes Parameter die Sichtweite ist. Diese wird in Chunks (ein Bereich der Karte von 16×16 und 256 Blöcken Höhe) gemessen. Die Anzahl der angegebenen Chunks bestimmt, wie viele vom Server angefordert werden.
Auf dem Server wird die globale Karte der Welt gespeichert, und wenn an dem Punkt, wo die Spielfigur erscheint, noch keine generierten Blöcke vorhanden sind, generiert der Server sie dynamisch und speichert sie. Das erfordert nicht nur erhebliche Rechenressourcen, sondern vergrößert auch ständig die Größe der Weltkarte. Auf einem der ältesten anarchischen Server, (2builders2tools), hat die Kartengröße bereits 8 Tb überschritten, und die Weltgrenze liegt bei 30 Millionen Blöcken. Mit diesem Server sind Tausende von Geschichten verbunden, und er verdient einen eigenen Artikel oder sogar eine Reihe von Artikeln.
Die Welt um einen Spieler zu generieren, ist kein Problem. Die Welt um hundert Spieler zu generieren, kann jedoch kurzfristig zu leichten Serververzögerungen führen, die danach wieder abklingen. Die Welt um tausend Spieler zu generieren, kann den Server bereits "herunterfahren" und alle Clients aufgrund von Timeout abwerfen.
In der Server-Software gibt es einen Wert namens TPS (Ticks pro Server — Taktungen pro Sekunde). Normalerweise entspricht 1 Takt 50 ms. (1 Sekunde der realen Welt entspricht 20 Takten der Spielwelt). Wenn die Verarbeitung eines Taktes auf 60 Sekunden ansteigt, wird die Serveranwendung geschlossen und alle Spieler werden abgeworfen.
Die Lösung besteht darin, die Welt durch bestimmte Koordinaten zu begrenzen und eine Vorausgenerierung der Blöcke durchzuführen. Dadurch entfällt die Notwendigkeit der dynamischen Generierung während des Spiels, und der Server muss lediglich die bereits vorhandene Karte lesen. Beide Aspekte werden durch ein einziges Plugin gelöst. .
Am einfachsten lässt sich die Grenze der Welt in Form eines Kreises um den Spawnpunkt festlegen (obwohl sie auch jede beliebige Form haben kann) mit einem einzigen Befehl:
/wb set <радиус в блоках> spawnWenn eine Spielfigur versucht, die Grenze zu überschreiten, wird sie um mehrere Blöcke zurückgesetzt. Wenn dies mehrmals innerhalb einer bestimmten Zeitspanne erfolgt, wird der Verstöße gezwungen, zum Spawnpunkt teleportiert zu werden. Die Weltgenerierung erfolgt noch einfacher mit dem Befehl:
/wb fillDa diese Aktion potenziell Spieler, die sich auf dem Server befinden, betreffen kann, vergessen Sie bitte nicht, die Ausführung zu bestätigen:
/wb confirmInsgesamt hat die Generierung einer Welt mit einem Radius von 5000 Blöcken (~40 Milliarden Blöcke) etwa 2 Stunden auf einem Intel® Xeon® Gold 6240-Prozessor gedauert. Wenn Sie also eine größere Karte vorab generieren möchten, bedenken Sie, dass dieser Prozess eine beträchtliche Zeit in Anspruch nehmen wird und die TPS des Servers erheblich gesenkt wird. Darüber hinaus sollten Sie bedenken, dass selbst ein Radius von 5000 Blöcken etwa 2 GB Speicherplatz auf der Festplatte benötigt.
Obwohl die neueste Version des Plugins für Minecraft Version 1.14 entwickelt wurde, hat sich gezeigt, dass sie auch in späteren Versionen einwandfrei funktioniert. Eine vollständige Liste der Befehle mit Erklärungen finden Sie .
Problematische Blöcke
Es gibt eine Vielzahl von Blockarten in Minecraft. Wir möchten jedoch die Aufmerksamkeit der Leser auf einen speziellen Block lenken, und zwar auf TNT. Wie der Name schon sagt, handelt es sich bei diesem Block um Sprengstoff (Anmerkung der Redaktion – es ist ein Spielelement der virtuellen Welt und hat nichts mit echten Sprengstoffen zu tun). Seine Besonderheit besteht darin, dass beim Aktivieren die Schwerkraft auf ihn wirkt. Dadurch muss der Server alle Koordinaten berechnen, wenn der Block zu fallen beginnt.
Wenn mehrere TNT-Blöcke vorhanden sind, löst die Detonation eines Blocks auch die Detonation und die Aktivierung der Schwerkraft der benachbarten Blöcke aus, wodurch sie in alle Richtungen verstreut werden. Diese beeindruckende Mechanik bedeutet für den Server eine Vielzahl von Berechnungen zur Flugbahn jedes Blocks sowie deren Wechselwirkungen mit benachbarten Blöcken. Die Aufgabe ist extrem ressourcenintensiv, was jeder leicht testen kann. Generieren Sie einen Würfel aus TNT-Blöcken mit mindestens 30x30x30 und wenn Sie dachten, dass Ihr Gaming-PC leistungsstark genug ist, dann haben Sie sich stark getäuscht 😉
/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt 
Ein ähnlicher 'Experiment' auf einem Server mit Intel® Xeon® Gold 6240 führte zu einem erheblichen Rückgang der TPS und einer CPU-Auslastung von 80 % während der gesamten Detonation der Blöcke. Das bedeutet, dass, wenn ein Spieler so etwas schafft, das Leistungsproblem alle Spieler auf dem Server betreffen wird.
Eine noch drastischere Variante — Die Ende-Kristalle. Wenn TNT jedoch nacheinander explodiert, detonieren die Ende-Kristalle alle gleichzeitig, was theoretisch die Funktion der Serveranwendung vollständig stoppen könnte.
Um dieses Szenario zu vermeiden, kann die Verwendung dieser Blöcke in der Spielwelt nur vollständig durch ein Plugin verboten werden. . Beachten Sie, dass dieses Plugin für sich allein nicht funktioniert, ohne ein anderes Plugin, . Installieren Sie also zuerst WorldEdit und dann WorldGuard.
Fazit
Die kompetente Verwaltung eines Spielservers ist eine anspruchsvolle Herausforderung. Schwierigkeiten und Leistungseinbußen lauern an jeder Ecke, insbesondere wenn man die Mechanik des Spiels nicht berücksichtigt. Es ist unmöglich, alles vorherzusehen, denn Spieler sind oft sehr einfallsreich darin, die Server dazu zu bringen, Dinge zu tun, wofür sie nicht ausgelegt sind. Nur ein vernünftiges Gleichgewicht zwischen Risiken und festgelegten Einschränkungen ermöglicht es dem Server, kontinuierlich zu arbeiten, ohne dass seine Leistung kritische Werte erreicht.
Während der Quarantäne haben einige unserer Mitarbeiter ihre geliebten Büros vermisst und beschlossen, diese in Minecraft nachzubauen. Auch Sie haben die Möglichkeit, uns zu besuchen, ohne Ihre Gesundheit zu gefährden und Zeit mit Reisen zu vergeuden.
Dazu laden wir alle Interessierten auf unseren Server ein minecraft.selectel.ru (Clientversion 1.15.2), wo die Rechenzentren Blüten-1 und Blüten-2 nachgebildet wurden. Vergessen Sie nicht, dem Download zusätzlicher Ressourcen zuzustimmen, diese sind notwendig, um einige Standorte korrekt darzustellen.
Sie erwarten Quests, Rabattcodes, „Easter Eggs“ und angenehme Gespräche.
Quelle: habr.com
