wer-ist-online-Anzeige

„mmh..ist gerade jemand am ALsheim-Bauen?“

das ist ne interessante Frage und kann entscheidend dafür sein, selbst auch dazuzukommen und mitzumachen oder miteinander zu sprechen und zu planen.

Deshalb gibt es jetzt die „wer-ist-online“-Anzeige rechts unten in der Seitenleiste bzw in der mobilen Ansicht ganz unten.

Wer das so oder ähnlich auch auf dem eigenen Minecraft-Server nutzen will hier meine Umsetzung

Alle 10 Minuten wird dieses Skript gestartet, was „info“ an die screen-Session „paperserver“ schickt, danach das logfile grept und in eine html-Datei schreibt. Diese html-Datei curlt das Skript dann auf den Webseite über ftp hoch. In unserem Beispiel diese hier –klick– ..und diese Datei muss dann nur noch in die Webseite iframig eingebettet werden.

Und hier für Interessierte das Skript:

#!/bin/bin/bash
# ─── KONFIGURATION ───────────────────────────────────────────
MC_LOG="/home/sb/paperserver/logs/latest.log" # Pfad zum Paper-Log
OUTPUT_FILE="/home/sb/mc-online.html"         # Temporäre HTML-Datei
FTP_HOST="**********"
FTP_USER="*********"
FTP_PASS="**********"
FTP_PATH="/mc-online.html"  # Zielpfad auf dem WP-Server
SERVER_NAME="Alsheim in Minecraft"
# ─────────────────────────────────────────────────────────────

# Spieler aus dem Log holen:
# Paper schreibt bei /list: "[HH:MM:SS INFO]: There are X of a max of Y players online: Name1, Name2"
# Wir nehmen die letzte solche Zeile im Log

screen -S paperserver -X stuff "/list$(printf '\r')"

PLAYER_LINE=$(grep -a "players online:" "$MC_LOG" 2>/dev/null | tail -n 1)

if [[ -z "$PLAYER_LINE" ]]; then
    PLAYERS=()
    COUNT=0
else
    # Alles nach dem letzten ":" extrahieren → "Name1, Name2" oder leer
    PLAYER_STRING=$(echo "$PLAYER_LINE" | sed 's/.*players online: //')
    PLAYER_STRING=$(echo "$PLAYER_STRING" | sed 's/\r//' | xargs)

    if [[ -z "$PLAYER_STRING" ]]; then
        PLAYERS=()
        COUNT=0
    else
        # Komma-getrennte Namen in Array aufteilen
        IFS=',' read -ra PLAYERS <<< "$PLAYER_STRING"
        # Leerzeichen trimmen
        PLAYERS=("${PLAYERS[@]// /}")
        # Leere Einträge entfernen
        PLAYERS=($(printf '%s\n' "${PLAYERS[@]}" | grep -v '^$'))
        COUNT=${#PLAYERS[@]}
    fi
fi

TIMESTAMP=$(date "+%d.%m.%Y %H:%M Uhr")



cp /home/sb/mc-online_head.html $OUTPUT_FILE
echo '<div class="time">' >> $OUTPUT_FILE
echo "$TIMESTAMP:" >> $OUTPUT_FILE
echo '</div>    <div class="players">' >> $OUTPUT_FILE

if [[ $COUNT -eq 0 ]]; then
	echo "Niemand online – Stand: $TIMESTAMP" >> $OUTPUT_FILE
else
	for PLAYER in "${PLAYERS[@]}"; do
	    TRIMMED=$(echo "$PLAYER" | xargs)
	    echo "<div class=\"player\"> $TRIMMED </div>" >> $OUTPUT_FILE
	done
fi

echo "</div>  </div> </body> </html>" >> $OUTPUT_FILE


curl --silent --show-error --ftp-create-dirs \
  -u "${FTP_USER}:${FTP_PASS}" \
  -T "$OUTPUT_FILE" \
  "ftp://${FTP_HOST}${FTP_PATH}"