Minecraft Overviewer - Einrichtung

Einführung

Da Bukkit scheinbar bereits mit einem Fuß im Grabe steht, habe ich mich dazu entschlossen eine kurze Anleitung für die Serveradministratoren dort draußen zur Erstellung einer "Livemap" bzw. Karte von Minecraftwelten zu schreiben. Die Anleitung ist zunächst nur für Linux Betriebsysteme, da ich davon ausgehe, dass Minecraftserver zum Großteil unter diesem Betriebssystem laufen. Getestet habe ich die Installation mit Ubuntu 14.04 und CentOS 6.6.

Beispiel:

  • Brauhaus Livemap
  • Ausschnitt von der "Scary Halloween Coaster" vom Brauhaus der Hoffnung
  • Voraussetzungen

  • Eine Aktuelle Linux Distribution
  • Screen (apt-get install screen / yum install screen / aptitude install screen)
  • Python (2.6 oder 2.7, 3 wird leider noch nicht unterstützt)
  • Pillow (Installationsanleitung)
  • Numpy (apt-get install python-numpy / yum install python-numpy/ aptitude install python-numpy)
  • Einen Webserver - Apache/Nginx/Cherokee/...
  • Administrator/root Zugriff
  • Ein gewisses Maß an Linuxkenntnissen

    Installation

    In der Anleitung zeige ich, weil es einfacher ist, die Installation über einen Paketmanager. Sofern ihr das möchtet könnt ihr aber auch das Projekt über Git Klonen: https://github.com/overviewer/Minecraft-Overviewer/

    APT - (Debian/Ubuntu)

    echo "deb http://overviewer.org/debian ./" >> /etc/apt/sources.list
    wget -O - http://overviewer.org/debian/overviewer.gpg.asc | sudo apt-key add -
    apt-get update
    apt-get install minecraft-overviewer

    YUM - (CentOS)

    wget -O /etc/yum.repos.d/overviewer.repo http://overviewer.org/rpms/overviewer.repo
    yum update
    yum install Minecraft-Overviewer

    Einrichtung

    Nun könnt ihr zum Linux Benutzer wechseln, mit dem auch der Minecraft Server läuft. Fortführend nenne ich den Benutzer einfach mal minecraft, der minecraftserver läuft im Ordner /home/minecraft/server und wir haben die Welten hauptwelt und freebuild.

    Konfigurationsdatei

    Zunächst erstellt ihr euch einen Ordner für das Skript und die Konfigurationsdatei/en.

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Hier könnt ihr die Ordner der Welten festlegen
    worlds["hauptwelt"] = "/home/minecraft/server/hauptwelt"
    worlds["freebuild"] = "/home/minecraft/server/freebuild"
    renders["hauptwelt-day"] = {
        #Hier muss der oben definierte Mapname rein
        "world": "hauptwelt",
        #Titel der Map
        "title": "Hauptwelt Day",
        "rendermode": smooth_lighting,
        #Normale Welt, es gibt auch noch nether und end
        "dimension": "overworld",
        #Dateiformat 
        "imgformat": "png",
        #Hintergrundfarbe (hier grau)
        "bgcolor": "#696969",
        #Standardzoomstufe beim aufrufen der Map
        "defaultzoom": 4,
        #entfernt die höchste zoomstufe, total unnütz
        "maxzoom": -1,
    }
    
    renders["freebuild-day"] = {
        #Hier muss der oben definierte Mapname rein
        "world": "freebuild",
        #Titel der Map
        "title": "Freebuild Day",
        "rendermode": smooth_lighting,
        #Normale Welt, es gibt auch noch nether und end
        "dimension": "overworld",
        #Dateiformat
        "imgformat": "png",
        #Hintergrundfarbe (hier grau)
        "bgcolor": "#696969",
        #Standardzoomstufe beim aufrufen der Map
        "defaultzoom": 4,
        #entfernt die höchste zoomstufe, total unnütz
        "maxzoom": -1,
    }
    
    #Hier müsst ihr den Zielordner fürs www angeben. Oftmals /var/www, bei nginx /usr/share/nginx/html
    outputdir = "/usr/share/nginx/map.minecraft.name/"
     #Anzahl der Prozesse, die Overviewer startet. Wenn ihr einen Prozessor mit mehreren Kernen habt ist es sinnvoll diese hochzusetzen. Ansonsten auf 1 stellen.
    processes = 4

    Konfiguration für schwächere Server

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # Hier könnt ihr die Ordner der Welten festlegen
    worlds["hauptwelt"] = "/home/minecraft/server/hauptwelt"
    worlds["freebuild"] = "/home/minecraft/server/freebuild"
    
    renders["hauptwelt-day"] = {
        #Hier muss der oben definierte Mapname rein
        "world": "hauptwelt",
        #Titel der Map
        "title": "Hauptwelt Day",
        "rendermode": smooth_lighting,
        #Normale Welt, es gibt auch noch nether und end
        "dimension": "overworld",
        #Dateiformat
        "imgformat": "jpg",
        #Bildquali -> 100 max wert
        "imgquality": 75,
        #Hintergrundfarbe (hier grau)
        "bgcolor": "#696969",
        #Standardzoomstufe beim aufrufen der Map
        "defaultzoom": 4,
        #entfernt die höchste zoomstufe, total unnütz
        "maxzoom": -1,
    }
    
    renders["freebuild-day"] = {
        #Hier muss der oben definierte Mapname rein
        "world": "freebuild",
        #Titel der Map
        "title": "Freebuild Day",
        "rendermode": smooth_lighting,
        #Normale Welt, es gibt auch noch nether und end
        "dimension": "overworld",
        #Dateiformat
        "imgformat": "jpg",
        #Bildquali -> 100 max wert
        "imgquality": 75,
        #Hintergrundfarbe (hier grau)
        "bgcolor": "#696969",
        #Standardzoomstufe beim aufrufen der Map
        "defaultzoom": 4,
        #entfernt die höchste zoomstufe, total unnütz
        "maxzoom": -1,
    }
    
    #Hier müsst ihr den Zielordner fürs www angeben. Oftmals /var/www, bei nginx /usr/share/nginx/html
    outputdir = "/usr/share/nginx/map.minecraft.name/"
     #Anzahl der Prozesse, die Overviewer startet. Wenn ihr einen Prozessor mit mehreren Kernen habt ist es sinnvoll diese hochzusetzen. Ansonsten auf 1 stellen.
    processes = 2

    Berechtigungen im Zielordner beachten

    Im outputdir benötigt der minecraft Benutzer unbedingt Lese- und Schreibrechte. Da der Webserver nur lesen muss könnt ihr einfach den Besitzer ändern:

    chown minecraft /usr/share/nginx/map.minecraft.name/

Skript zum erstellen der Map

Erstellt euch eine Skriptdatei zum starten des Renders -> vi /home/minecraft/Minecraft-Overviewer/render-livemap.sh

    #!/bin/bash
     #Screen in der deine Minecraftsession läuft
    MINECRAFTSCREEN=Minecraft
     #Screen den der Overviewer nutzen soll
    OVERVIEWERSCREEN=Overviewer
     #Konfigurationspfad (Bitte mit / abschließen)
    CONFIGPATH=/home/minecraft/Minecraft-Overviewer/
     #Konfigurationsdatei
    CONFIGFILE=livemap.cfg

    # !!!!! Ab Hier nichts mehr ändern !!!!!

    #Aktuelle Minecraftversion -> wird für das aktuelle Texturepack benötigt
    VERSION=$(wget -q http://s3.amazonaws.com/Minecraft.Download/versions/versions.json -O- | grep -m1 -B4 -A1 '"release"' | grep '"release"'| awk -F'"' '{print $4}')

    if ! [ -d ~/.minecraft/versions/${VERSION}/ ]
      then
        wget https://s3.amazonaws.com/Minecraft.Download/versions/${VERSION}/${VERSION}.jar -P ~/.minecraft/versions/${VERSION}/
    fi
    cd ${CONFIGPATH}
    if [ "$(pgrep -f "SCREEN -U -dmS ${MINECRAFTSCREEN}")" ] ; then
        screen -p 0 -S ${MINECRAFTSCREEN} -X eval 'stuff "save-all\015"'
        screen -p 0 -S ${MINECRAFTSCREEN} -X eval 'stuff "save-off\015"'
        screen -p 0 -S ${MINECRAFTSCREEN} -X eval 'stuff "say [AR] Livemap wird aktualisiert - Kann zu leichten LAGs fuehren...\015"'
    fi
    Rendering="overviewer.py --config=${CONFIGFILE}"
    screen -dmS Overviewer $Rendering
    echo "Ctrl+C druecken um die Endlosschleife zu beenden. Prozess laeuft weiter in einem Screen (${OVERVIEWERSCREEN})"
    sleep 10
    while [ "$(pgrep -f "SCREEN -dmS ${OVERVIEWERSCREEN}")" ]; do
        sleep 10  
    done
    if [ "$(pgrep -f "SCREEN -U -dmS ${MINECRAFTSCREEN}")" ] ; then
        screen -p 0 -S ${MINECRAFTSCREEN} -X eval 'stuff "save-off\015"'
        screen -p 0 -S ${MINECRAFTSCREEN} -X eval 'stuff "say [AR] Livemap ist aktualisiert worden.\015"'
    fi

Unser erster Livemap render

Als Benutzer minecraft sh /home/minecraft/Minecraft-Overviewer/render-livemap.sh ausführen. Nun könnt ihr mit screen -rx Overviewer den Stand des Renders nachschauen. Regelmäßige Updates einplanen Um die Map regelmäßig zu aktualisieren erstellen wir einen Cronjob Dazu gebt ihr crontab -e als Benutzer minecraft ein.

     # Example of job definition: 
     # .---------------- minute (0 - 59)
     # |  .------------- hour (0 - 23)
     # |  |  .---------- day of month (1 - 31)
     # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
     # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
     # |  |  |  |  |
     # *  *  *  *  * command to be executed

    #So aktualisiert die Livemap alle 2 Stunden und >/dev/null sorg dafür, dass die logs nicht zugespamt werden
    0 */2 * * * /home/minecraft/Minecraft-Overviewer/render-livemap.sh>/dev/null

So das wars. Wenn ihr auch noch Spielermarkierungen hinzufügen möchtet könnt ihr folgendes Plugin nutzen: http://dev.bukkit.org/bukkit-plugins/mapmarkers/