Du könntest evtl. die passenden Standardmethoden nachbauen und das Generieren der Chunk Sections auf mehrere Threads aufteilen, während die Methode blockt bis alle Sections fertig sind.
*Könnte* ein kleines Speedup geben, aber obs das bringt... hm.
Dieser kleine Spike ist immer noch da und Threads haben auch einen gewissen, kleinen Overhead.
Was mir mal in den Kopf kam, wo ich aber noch am forschen bin ist:
Die Methode zum Chunk generieren wird aufgerufen;
Ich bereite das Array für die Blockdaten vor, trage es in einen Queue ein und gebe das leere Array sofort zurück. => Ein Void Chunk.
Nun wird aus diesem Queue allerdings eins der Chunk Arrays genommen und Stück für Stück async befüllt.
Danach ein ChunkSave getriggert und Chunk Updates an die Spieler gesendet.
Das würde die Chunks instant generieren (aus Sicht des Servers, so dass er sich anderen Aufgaben widmet) während die richtigen Blöcke Stück für Stück hinterher generiert werden. Aber eben trotzdem so zackig, dass das nicht großartig auffallen dürfte.
Ähnlich dem Prinzip von AsyncWorldEdit bzw. FAWE.
Dort gibt es ja soweit ich mich erinnere sogar eine Chunk-API welche direkte Bearbeitungen vornimmt.
Ich glaube aber das war mit den Chunk Dateien anstatt den Arrays dahinter - wobei ich sowieso noch nicht weiß ob das so geht.
Das wäre meine Idee dazu^^
Am coolsten und einfachsten wäre es natürlich, wenn man sich hinsetzt und z.B. den FAWE Code mal durchsucht nach dieser Chunk API um zu sehen wie die das machen und dann mit diesen Mitteln quasi einen Non-Blocking Asynchronous Chunk Generator baut indem man Void Chunks erstellt und im Nachhinein bequem mit der Datei oder den Arrays (je nachdem was von beiden möglich bzw. besser ist) "spielt" und dann einfach den Chunk refreshen lässt und Spielern Updates sendet.
Allerdings ist das eher graue Theorie, ob das so gut läuft wie es klingt... who knows.
Ob's das braucht... hmm depends.
Allerdings glaube ich, dass sich das grade bei mehreren Welten, besonders frischen Farmwelten sehr gut machen täte und auch das vorgenerieren bis zum WorldBorder ersparen täte => weniger Patz nötig etc.
Was ist eure Meinung zu dieser Idee, kann das laufen?
Hab mich in diesen Teil von MC noch nicht so arg reingekniet... jedenfalls in keine komplexen Generatoren etc.