Files
MinecraftScripts/readme.md
2021-05-06 13:52:11 +02:00

1.7 KiB
Executable File

Auto Shutdown

Fährt den Minecraft Server automatisch nach 14 Tagen leerlauf herunter.

  • lp_stamp: Timestamp an dem das letzte mal ein Spieler gesehen wurde
  • lp_shutdown: Flag die dem Serverskript mitteilt, warum der Server heruntergefahren wurde
    • 0: Normaler täglicher Shutdown, bzw. unerwarteter Shutdown -> automatischer Neustart
    • 1: Shutdown wegen leerstand -> kein automatischer Neustart, warten auf Verbindung

Erkennung einer Minecraft Verbindung

Theoretisch könnte man mit nc -l 25500 -c :, aber dadurch startet sich der Server durch jede Verbindung.

Besser ist es, wenn man sich das Packet vorher anschaut, und nur den Server neu startet, wenn wirklich jemand in Minecraft sich versucht zu verbinden.

Das Packet sieht (zumindest mit Valhelsia) ungefähr so aus:

  • Automatischer Verbindungstest von Minecraft wenn man das Multiplayer Menu öffnet:
^X^@M-r^E^Q[SERVERNAME]^@FML2^@cM-^\^A^A^@
  • Wenn man auf "Connect" klickt:
^X^@M-r^E^Q[SERVERNAME]^@FML2^@cM-^\^B
^@^H[SPIELERNAME]

Auf eine legitime Verbindung zu warten kann dann z.B. so aussehen:

mcconn=0
until [ $mcconn -ne 0 ]; do
    mcconn=$(nc -l 25500 | cat -v | grep -cF '^@cM-^\^B')
    if [ $mcconn -eq 0 ]; then
        echo "Something connected, but it doesn't look like a minecraft connection"
    else
        echo "Someone tried to connect to the minecraft server, starting..."
    fi
done

Ein vollständigeres Regex, dass auf eine korrekte Verbindung prüft sieht so aus, doch leider scheint das nicht in grep zu funktionieren:

^\^X\^@M-r\^E\^Q[a-zA-Z0-9\.]+\^@[a-zA-Z0-9]+\^@cM-\^\\\^B\n\^@\^H[a-zA-Z0-9]+