Ich habe vor ein paar Jahren angefangen ein kleines Stück zu schreiben mit dem Namen
Mindmap.
Es handelt sich um einen Minecraft-Karten-Renderer.
Das Ganze nimmt ein Savegame von Minecraft, von der Java-Edition und erzeugt, rendert
dann so aus der Vogelperspektive solche Karten, wie man das hier sehen kann.
Genau, und dann erzeugt das solche schönen Karten, die man mit dem Browser sich mit
dem Video anschauen kann, wie man das so von Google Maps kennt.
Man kann da auch ein bisschen rausrollen oder wieder reinzoomen.
Und als weiteres Feature gibt es noch einen Illumination-Layer, den man aktivieren kann,
um sich dann anzuschauen, wie diese Minecraft-Karte bei Nacht aussieht.
Genau, ich habe das Ganze inzwischen vor über acht Jahren angefangen und der Code ist inzwischen
so ein bisschen gealtert.
Insbesondere der Generator-Code ist in der ursprünglichen C++ geschrieben.
Aber ganz neu, noch gar nicht veröffentlicht, gibt es jetzt eine neue RUF-Version, die ich
schon ein paar Monate angefangen habe, die inzwischen mehr oder weniger Feature-konkret ist,
also die gleichen Karten generieren kann.
Viel performanter ist es als der alte Code und sehr viel einfacher, als für die neuen
Minecraft-Versionen anzupassen, weil doch über die acht Jahre viel passiert ist in
Minecraft und das Datenformat sich ziemlich stark verändert hat.
Ja, ich wollte eigentlich noch ein bisschen was bedarf, das Datenformat erzählen, aber
ich glaube, dafür habe ich gar keine Zeit mehr.
Du hast noch drei Minuten Zeit.
Krass.
Dann erzähle ich noch ein bisschen was über das Datenformat von Minecraft.
Minecraft speichert seine Daten in einem JSON-ähnlichen Binärformat in so einer Baumstruktur,
die dann so blockweise gedreht wird.
Ich zeige da einfach mal so ein paar Beispiele, damit ihr euch das vorstellen könnt.
Zum Beispiel "PlayerData" wäre jetzt einfach die Daten für einen Spieler drin und da gibt's
dann so irgendwelche Felder drin.
Da kann man so sehen, wo befindet sich diese Spielfigur gerade, was ist in dem Inventar
drin.
Oder jetzt die Bekannterisierung ist relevanter, die "Region Files", die dann tatsächlich
die Blockdaten enthalten, die dann immer in so 16x16 Chunks gespeichert sind.
Und dann hat man da viele sehr wilde Datenstrukturen, die über viele Jahre in Minecraft-Entwicklung
auch immer seltsamer geworden sind.
Und deswegen muss der Minecraft-Karten-Generator jetzt auch drei verschiedene Formate unterstützen,
weil Chunks auch nur on-demand abgedatet werden von Minecraft.
Das heißt, du kannst in einem aktuellen Save-Game, wenn das über Jahre immer wieder weiter genutzt
wurde, auch noch ganz alte Chunks haben, die seit 10 Jahren nicht konvertiert wurden.
Und genau, dann hast du hier so irgendwelche, was ist das, ich kann es als ob ich es nicht
erkenne.
Irgendwelche Biom-IDs, die dann sagen, welcher Chunk.
Welches Biom gilt es an der Stelle.
Block-IDs, die dann eben zuweisen, welcher Block ist an welcher Koordinate.
Und praktischerweise sind auch die Beleuchtungsdaten schon vorberechnet in diesem Save-Game drin,
sodass ich das für die Beleuchtungskarte nicht nochmal neu berechnen muss, sondern einfach
nur aus der Datei extrahieren muss.
Ja, ich denke, das war alles.
Vielen Dank, Matze.
Genau, das findet man auf meinem Blog.
Unter meinem Github, unter meinem LinkedIn-Reader, Mindmap, demnächst auch die neue Rust-Version.
Und dich findet man im Moin-Village, wenn man sich das mal erklären lassen will.
Exakt.
Wunderbar.