Guten Tag allerseits,
heute möchte ich euch ein von mir Projekt vorstellen, an dem ich schon mehrere Monate lang arbeite:
Und zwar einen multithreadfähigen CraftBukkit-Ableger unter dem Projektnamen MinetickMod.
Projektseiten auf GitHub (mit Quellcode):
Für 1.6.2/1.6.4: https://github.com/Poweruser/MinetickMod
Für 1.7.2: https://github.com/Poweruser/MinetickMod-1.7.2
Dabei habe ich mir von der Spiellogik die Codeteile mit den längsten Ausführungszeiten rausgesucht, die mit halbwegs vertretbarem Aufwand optimierbar/parallelisierbar sind:
Für den Fall, dass sich mancher darunter nichts vorstellen kann, hab ich noch eine (sehr abstrakte) Grafik dazu erstellt:
Wie ihr sicherlich schon erkannt habt, dreht sich mein Projekt sehr stark um ein Einsatz mehrerer Spielwelten. Der Grund dafür ist recht einfach: Innerhalb einer Spielwelt sind die Abhängigkeiten der Spielelemente bei dem momentanen Servercode recht hoch. Der Aufwand der notwendig wäre alles so umzubauen, damit diese einzelnen Elemente nahezu unabhängig von einander sind, ist einfach zu groß und lohnt sich damit nicht. Die Welten hingegen sind von hausaus so entworfen, dass sie unabhängig von einander sind. Dort gibt es lediglich nur noch ein paar wenige Programmeinheiten (aber dennoch große), die sich über alle Welten erstrecken, an denen ich hauptsächlich arbeite/gearbeitet habe.
À propos Plugins (ganz wichtig!):
Es kann sein, dass das ein oder andere Plugin (hauptsächlich die, welche sich an der Bukkit-API vorbei in die Serverklassen reinhacken) mit meinem Servermod nicht kompatibel ist. Orebfuscator ist zum Beispiel eines davon, deswegen habe ich auch eine AntiXRay-Maßnahme direkt in den Server mit eingebaut, um diesen Verlust auszugleichen. Wenn ihr bei meinem Servermod Fehlermeldungen/Exceptions von Plugins erhaltet, bitte meldet mir diese. Ich werd mir jedes dieser Plugins dann vornehmen um herauszufinden, ob ich ausversehen etwas kaputt gemacht habe (kann auch mal vorkommen), oder ob das Plugin etwas tut, was gegen alle Prinzipien der Softwareentwicklung verstößt.
Update (08.03.14): Vorerst gibt es keine fertig kompilierten Versionen mehr zum Download. Ich hab auch die bereits Veröffentlichten wieder entfernt. Man hat mich auf ein größeres Problem bezüglich Plugins und dem simultanen Ticken von mehreren Welt aufmerksam gemacht, welches zuerst gelöst werden muss. Bis es soweit ist besteht auch kein Bedarf an Testern mehr.
heute möchte ich euch ein von mir Projekt vorstellen, an dem ich schon mehrere Monate lang arbeite:
Und zwar einen multithreadfähigen CraftBukkit-Ableger unter dem Projektnamen MinetickMod.
Projektseiten auf GitHub (mit Quellcode):
Für 1.6.2/1.6.4: https://github.com/Poweruser/MinetickMod
Für 1.7.2: https://github.com/Poweruser/MinetickMod-1.7.2
Dabei habe ich mir von der Spiellogik die Codeteile mit den längsten Ausführungszeiten rausgesucht, die mit halbwegs vertretbarem Aufwand optimierbar/parallelisierbar sind:
- Die Tile-/Entities verschiedener Welten werden gleichzeitig berechnet
- Jede Welt kann jetzt zeitgleich neue Chunks generieren
- Chunks werden nicht mehr sofort generiert, sobald ein Spieler ein neues Gebiet erkundet, sondern etwas verzögert über eine Warteschlange (momentan beschränkt auf eine Rate von 10 Chunks/s [in normalen Welten, bei Flatland sinds mehr], damit man damit den Server nicht mehr zum Laggen bringt)
- Chunkpakete, die an die Spieler geschickt werden, werden unabhängig vom Hauptthread erstellt und komprimiert
(... und optional auch gegen Xray präpariert. Anti-Xray ist fest miteingebaut und kann für jede Welt an- und ausgeschalten werden) - Beim Autosave werden die Welten in einem Abstand von je 5 Sekunden gespeichert, damit der Server dort nicht solange hängt
Für den Fall, dass sich mancher darunter nichts vorstellen kann, hab ich noch eine (sehr abstrakte) Grafik dazu erstellt:
Wie ihr sicherlich schon erkannt habt, dreht sich mein Projekt sehr stark um ein Einsatz mehrerer Spielwelten. Der Grund dafür ist recht einfach: Innerhalb einer Spielwelt sind die Abhängigkeiten der Spielelemente bei dem momentanen Servercode recht hoch. Der Aufwand der notwendig wäre alles so umzubauen, damit diese einzelnen Elemente nahezu unabhängig von einander sind, ist einfach zu groß und lohnt sich damit nicht. Die Welten hingegen sind von hausaus so entworfen, dass sie unabhängig von einander sind. Dort gibt es lediglich nur noch ein paar wenige Programmeinheiten (aber dennoch große), die sich über alle Welten erstrecken, an denen ich hauptsächlich arbeite/gearbeitet habe.
À propos Plugins (ganz wichtig!):
Es kann sein, dass das ein oder andere Plugin (hauptsächlich die, welche sich an der Bukkit-API vorbei in die Serverklassen reinhacken) mit meinem Servermod nicht kompatibel ist. Orebfuscator ist zum Beispiel eines davon, deswegen habe ich auch eine AntiXRay-Maßnahme direkt in den Server mit eingebaut, um diesen Verlust auszugleichen. Wenn ihr bei meinem Servermod Fehlermeldungen/Exceptions von Plugins erhaltet, bitte meldet mir diese. Ich werd mir jedes dieser Plugins dann vornehmen um herauszufinden, ob ich ausversehen etwas kaputt gemacht habe (kann auch mal vorkommen), oder ob das Plugin etwas tut, was gegen alle Prinzipien der Softwareentwicklung verstößt.
Update (08.03.14): Vorerst gibt es keine fertig kompilierten Versionen mehr zum Download. Ich hab auch die bereits Veröffentlichten wieder entfernt. Man hat mich auf ein größeres Problem bezüglich Plugins und dem simultanen Ticken von mehreren Welt aufmerksam gemacht, welches zuerst gelöst werden muss. Bis es soweit ist besteht auch kein Bedarf an Testern mehr.
Zuletzt bearbeitet: