[Server] MinetickMod - Multithreading für CraftBukkit

Dieses Thema im Forum "Mods und Plugin Vorstellung" wurde erstellt von Poweruser, 31. Dezember 2013.

  1. Poweruser
    Offline

    Poweruser

    Registriert seit:
    24. Dezember 2013
    Beiträge:
    7
    Minecraft:
    Poweruser
    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:
    • 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:
    [​IMG]

    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.
     
    #1
  2. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    Das ganze hört sich schon sehr gut. Hast du schonmal von Spigot gehört? Vielleicht solltest du das Modden, das hat schon viele ähnliche Funktionien, die sich prima mit deinen ergänzen würden.
     
    #2
  3. Poweruser
    Offline

    Poweruser

    Registriert seit:
    24. Dezember 2013
    Beiträge:
    7
    Minecraft:
    Poweruser
    Natürlich hab ich bereits von Spigot gehört, bzw mich mit deren Änderungen an CraftBukkit (Spigot ist ja auch ein Ableger von CraftBukkit, genau wie mein Mod) beschäftigt. Allerdings möchte ich meinen Mod auf einer stabilen Basis aufbauen, bei der ich mir sicher sein kann, dass wenn ein Fehler auftritt, dass der auch von mir stammt, und nicht von jemand anderen der zwischendrin etwas geändert hat.

    Und: Mittlerweile ist die 1.7.2er Version auch zum Testen verfügbar.
     
    #3
  4. Poweruser
    Offline

    Poweruser

    Registriert seit:
    24. Dezember 2013
    Beiträge:
    7
    Minecraft:
    Poweruser
    Ja, ich weiß. Grafikdesign ist nicht gerade meine Stärke.
    Allerdings finde ich diese Übersicht hier besser, als einen Haufen von Fachbegriffen, die die durchaus komplexen Zusammenhänge bei meinen Änderungen beschreiben. Damit man allerdings meine Grafik vollständig versteht, muss man zumindest grobe Kenntnisse über den Aufbau und die Funktionsweise des Minecraft Servers haben.

    Wer damit spontan nichts anfangen kann, sollte zumindest das verstehen:
    • Die horizontale Achse ist die Zeitachse (der schwarze horizontale Balken in der Mitte)
    • In der Grafik werden 2 Serverimplementierungen verglichen:
      • Oberhalb der Zeitachse: CraftBukkit
      • Unterhalb der Zeitachse: MinetickMod
    • Die unterschiedlichen Farben, markieren unterschiedliche Aufgaben des Servers, die meist abhängig von einander sind und deswegen in bestimmten Reihenfolgen ausgeführt werden müssen.
    • Je länger die Balken sind, bzw je weiter sie nach rechts reichen, desto länger braucht der Server um eine Aufgabe (und damit auch die davon abhängigen Aufgaben) zu erledigen.
    • Aufgaben die hintereinander gereiht sind, werden zeitlich nacheinander ausgeführt, Aufgaben die untereinander stehen werden zeitgleich in unterschiedlichen Threads ausgeführt.
     
    #4
  5. ImpactCP
    Offline

    ImpactCP

    Registriert seit:
    21. Oktober 2012
    Beiträge:
    23
    Minecraft:
    ImpactCP
    Dazu sollte man vielleicht folgendes noch anmerken:

    1 Tick dauert 50ms in Minecraft, man halt also 20 Tick's pro Sekunde. Die "Zeitachse" oben spiegelt die Dauer eines Ticks wieder. Ist die Dauer grösser schafft der Server in einer Sekunde halt nur 19, 18 oder weniger Ticks, was Lags sind. Die Grafik zeigt nun das der MinetickMod viele dieser Operationen die in einem Tick ausgeführt werden zeitgleich oder zeitnah ausführt und nicht nacheinander...
    So hat man wesentlich mehr Luft nach oben :)


    Ich durfte der erste Serverbetreiber sein der diesen Mod nutzen konnte und bin voll auf begeistert.
     
    #5
  6. Lingenplayer
    Offline

    Lingenplayer

    Registriert seit:
    18. Dezember 2013
    Beiträge:
    1
    frage zu FTB

    hallo hast du auch schon was draußen was mit FTB läuft:)
     
    #6
  7. Poweruser
    Offline

    Poweruser

    Registriert seit:
    24. Dezember 2013
    Beiträge:
    7
    Minecraft:
    Poweruser
    Nein hab ich nicht. Ich hab auch schon ne Anfrage bekommen, ob ich meine Änderungen in Spigot einbauen könne.
    Ich werde mich derzeit allerdings nur auf den Umbau von CraftBukkit beschränken, mindestens solange bis alles zuverlässig und fehlerfrei funktioniert.
     
    #7
  8. Arko93
    Offline

    Arko93

    Registriert seit:
    9. März 2012
    Beiträge:
    529
    Minecraft:
    Arko93
    Das ganze auf dem aktuellen Spigot würde mich aber auch intressieren.
    Zumal ja immer mehr Server auf Spigot umschwänken
    ich wüsste auch nicht was an Spigot fehlerhaft sein sollte
     
    #8
  9. Poweruser
    Offline

    Poweruser

    Registriert seit:
    24. Dezember 2013
    Beiträge:
    7
    Minecraft:
    Poweruser
    Damit meinte ich meinen Mod.
     
    #9
  10. bestoflouser
    Offline

    bestoflouser

    Registriert seit:
    12. Dezember 2013
    Beiträge:
    13
    Kann man die 1.7.2 Beta jetzt schon verwenden?
     
    #10
  11. Poweruser
    Offline

    Poweruser

    Registriert seit:
    24. Dezember 2013
    Beiträge:
    7
    Minecraft:
    Poweruser
    Ja, bei uns läuft die schon auf allen Servern, Irgendwer muss es ja testen.
    Es kann halt noch sein, dass manche Plugins damit nicht funktionieren. Das sollte aber nur auf ein paar zutreffen, die direkt mit den Serverklassen arbeiten die ich verändert habe, anstatt mit der Bukkit-API. Orebfuscator ist zB eines davon. Wenn du weitere ausmachst, melde mir die bitte.

    Ich empfehle dir erstmal einen Testserver mit den verwendeten Plugins aufzusetzen (falls du noch keinen hast), und dort meinen Mod mal anzutesten. Und bevor du ihn auf eurem Hauptserver einsetzt, sicherheitshalber ein Backup machen.
     
    #11
  12. bestoflouser
    Offline

    bestoflouser

    Registriert seit:
    12. Dezember 2013
    Beiträge:
    13
    Ok werde ich machen. Danke!
     
    #12
  13. Poweruser
    Offline

    Poweruser

    Registriert seit:
    24. Dezember 2013
    Beiträge:
    7
    Minecraft:
    Poweruser
    Update: 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.
     
    #13