Mapcrafter unter Ubuntu aufsetzen

Eine Welt in Minecraft hat die Angewohnheit, mit der Zeit immer größer zu werden. In einem solchen Fall ist eine Karte natürlich sehr praktisch. Mithilfe des Tools Mapcrafter kann eine solche Karte erstellt werden. Der Mapcrafter erzeugt neben den Kartenkacheln auch eine JavaScript-Anwendung, mit der diese betrachtet werden können.

Eine Mapcrafter-Karte

Im ers­ten Schritt muss das Mapcrafter-Repository mittels:

git clone https://github.com/mapcrafter/mapcrafter.git

auf den Ser­ver geholt werden. Mit dem Befehl wird das Git-Repository, in welchem sich der Quelltext befindet, auf den Server geklont. Im Git-Kontext bedeutet dies, dass das gesamte Repository heruntergeladen wird. Falls Git nicht installiert ist, muss das entsprechende Paket mittels:

apt install git

installiert werden. Die aktuelle Entwicklung findet im Branch world113 statt, so das in diesen gewechselt werden muss:

cd mapcrafter
git checkout world113

Bevor die Software kompiliert werden kann, müssen einige Abhängigkeiten installiert werden:

apt install build-essential cmake libboost-all-dev libjpeg-dev libpng-dev

Anschließen kann die Software kompiliert und installiert werden:

cmake .
make 
make install
ldconfig

Nach der Installation könnte Mapcrafter über den Befehl:

/usr/local/bin/mapcrafter -c example.conf -b -j 4

ausgeführt werden. Allerdings muss vor dem ersten Start noch eine Konfigurationsdatei erstellt werden. In dieser Konfigurationsdatei ist definiert, wie die Karte gerendert werden soll. Die Datei und die Skripte zur Aktualisierung werden im Kontext des Nutzers minecraft angelegt:

su minecraft
cd
mkdir map
nano example.conf

Exemplarisch könnte die Konfigurationsdatei wie folgt aussehen:

output_dir = /home minecraft/map
background_color = #000000

[marker:teleporter]
name = Teleporter
prefix = Hauptteleporter
icon = beacon.png
icon_size = [32, 32]
show_default = false
title_format = %(textp)

[marker:signs]
name = Signs
icon = sign.png
icon_size = [32, 32]
show_default = false
title_format = %(textp)

[world:world]
input_dir = world
world_name = Example

[global:map]
image_format = png
png_indexed = true
rotations = top-left
texture_size = 16

[map:day_isometric]
name = Day (isometric)
render_view = isometric
render_mode = daylight
world = world

Nachdem die Konfigurationsdatei angelegt wurde, kann die Karte testweise mittels des Befehls:

/usr/local/bin/mapcrafter -c example.conf -b -j 4

erzeugt werden. Damit die Aktualisierung später automatisch geschieht, werden die Befehle zur Aktualisierung der Skripte in eine Skript-Datei geschrieben:

nano updateMap.sh

Diese Datei wird mit folgendem Inhalt befüllt:

#!/bin/bash
/usr/local/bin/mapcrafter -c example.conf -b -j 4
/usr/local/bin/mapcrafter_markers -v -c example.conf

Anschließend soll ein Cronjob eingerichtet werden. Dazu wird der Crontab-Editor geöffnet:

crontab -e

In der sich öffnende Datei muss nun folgende Zeile hinzugefügt werden:

0    1    * * *   (. ~/.profile; /usr/bin/screen -dmS mapcrafter /home/minecraft/updateMap.sh)

Danach kann die Datei geschlossen werden. Der Cronjob startet nun um 1 Uhr die tägliche Aktualisierung der Karte.

Mapcrafter für Minecraft 1.14 nutzbar

Minecraft 1.14 ist bereits seit einigen Tagen veröffentlicht und nun wurde die freie Software Mapcrafter soweit nachgezogen, das sie mit der Minecraft-Version 1.14 genutzt werden kann. Mapcrafter dient der Erzeugung einer interaktiven Karte einer Minecraft-Welt. Unter Ubuntu kann das Projekt aus dem Repository geklont werden und anschließend kompiliert und installiert werden:

git clone https://github.com/mapcrafter/mapcrafter.git
cd mapcrafter
git checkout world113
cmake .
make 
make install

Anschließend kann Mapcrafter ausgeführt werden:

/usr/local/bin/mapcrafter -c akaria.conf -b -j 4

Die Konfiguration (in diesem Fall: akaria.conf) legt fest, welche Ebenen und Dimensionen wie gerendert werden sollen. Beispielhaft könnte die Konfiguration wie folgt aussehen:

output_dir = /var/www/map
background_color = #000000

[marker:teleporter]
name = Teleporter
prefix = Hauptteleporter
icon = beacon.png
icon_size = [32, 32]
show_default = false
title_format = %(textp)

[marker:signs]
name = Signs
icon = sign.png
icon_size = [32, 32]
show_default = false
title_format = %(textp)

[world:akaria]
input_dir = akaria
world_name = Akaria

[world:akaria_without_liquid]
input_dir = akaria
block_mask = !8 !9 !10 !11
world_name = Akaria

[global:map]
image_format = png
png_indexed = true
rotations = top-left
texture_size = 16

[map:day_isometric]
name = Day (isometric)
render_view = isometric
render_mode = daylight
world = akaria

[map:day_withoutliquid_isometric]
name = Day (without liquid, isometric)
render_view = isometric
render_mode = daylight
world = akaria_without_liquid

[map:day_spawn_isometric]
name = Day (spawn, isometric)
render_view = isometric
render_mode = daylight
overlay = spawnday
world = akaria

...

Im Zuge der Umstellung von Mapcrafter auf Minecraft 1.13 und jetzt 1.14, kam es bei Mapcrafter zu größeren Umbauten, welche leider noch nicht abgeschlossen sind. So fehlt im Moment noch die Möglichkeit der Blockfilter und auch beim Rendering von Schildern scheint es Probleme zu geben. Es bleibt zu hoffen, dass das Release in nächster Zeit fertiggestellt wird. Der aktuelle Status kann in dem entsprechenden Pull-Request eingesehen werden.

Blöcke welche mit 1.14 eingeführt wurden, werden nun ebenfalls gerendert

Die offizielle Seite des Projektes ist unter mapcrafter.org zu finden. Der Quelltext kann über GitHub bezogen werden. Lizenziert ist das Projekt unter der GPL3-Lizenz und damit freie Software. Wer eine Mapcrafter-Karte in Aktion sehen möchte, kann dies unter map.akaria.q1z.net tun.

Konvertierung der Map von Minecraft 1.12 auf 1.13 durchführen

Vor einigen Wochen erschien Version 1.13 des Open-Word-Spieles Minecraft. Im Zuge dieser Aktualisierung wurden unter anderem die Daten der Blöcke verändert. Beim Erzeugen der Weltkarte über die freie Minecraft-Rendersoftware Mapcrafter traten nach dem Update Probleme auf.

Nur die bereits konvertierten Chunks werden gerendert

Während der Server ohne Probleme lief, wurden in der Karte nur bestimmte Chunks gerendert. Der Grund hierfür war das nur die Chunks in das neue Format der Version 1.13 konvertiert wurden, die von den Spielern auf dem Server besucht worden waren. Alle anderen Chunks lagen noch im Format der Version 1.12 vor. Eine Lösung für dieses Problem schafft der mit 1.13 neu eingeführte Kommandozeilen-Parameter –forceUpgrade des Minecraft-Servers. Wenn man diesen entsprechend startet:

java -Xmx4096M -Xms2048M -jar minecraft_server.jar nogui --forceUpgrade

beginnt der Server alle Chunks in das neue Format zu überführen:

[06:42:34] [Server thread/INFO]: Starting minecraft server version 1.13.1
...
[06:42:34] [Server thread/INFO]: Forcing world upgrade!
[06:42:34] [Server thread/INFO]: Counting chunks...
[06:42:48] [Server thread/INFO]: Upgrading structure data...
[06:42:48] [Server thread/INFO]: 0% completed (0 / 1630135 chunks)...
[06:42:49] [Server thread/INFO]: 0% completed (0 / 1630135 chunks)...
..
[08:52:58] [Server thread/INFO]: 99% completed (1629866 / 1630135 chunks)...
[08:52:59] [Server thread/INFO]: 99% completed (1630017 / 1630135 chunks)...
[08:53:00] [pool-4-thread-1/INFO]: World optimizaton finished after 7812721 ms

Je nach der Größe der eigenen Welt kann dieser Vorgang durchaus einige Stunden in Anspruch nehmen. Nachdem alle Chunks konvertiert wurden, funktioniert das Rendering der Weltkarte wieder wie gewohnt.

Minecraft-Karten mittels Mapcrafter rendern

Bis vor einiger Zeit nutzte ich zum Rendern von größeren Minecraft-Karten den Minecraft Overviewer. Bei immer größer werdenden Karten lässt die Performance beim Minecraft Overviewer leider zu wünschen übrig. Abhilfe schafft hier der Mapcrafter, welcher unter mapcrafter.org zu finden ist. Mapcrafter wurde von Anfang an auf eine hohe Rendergeschwindigkeit optimiert. Dies merkt man vor allem dann, wenn eine komplette Karte neu gerendert werden muss. Gegenüber dem Minecraft Overviewer kann man hier teilweise Tage sparen.

Eine mittels des Mapcrafter gerenderte Minecraft-Karte

Neben der Unterstützung von isometrischen Karten können auch Karten in 2D-Perspektive (Draufsicht) gerendert werden. Die darzustellenden Blöcke können dabei fein konfiguriert werden, so das z.B. eine Karte ohne Wasser und Lava möglich ist. Der Quellcode des Mapcrafter ist auf GitHub zu finden. Lizenziert ist das Projekt unter der GPL3-Lizenz und damit freie Software.