# -*- mode: shell-script -*- MINECRAFT_PATH="$SERVICE_CONFIGSTORE/opt/apps/minecraft" MINECRAFT_DATA="/var/lib/minecraft" minecraft:init-binary() { local type="$1" version="$2" case "$type" in "legacy") MINECRAFT_URL="https://docker.0k.io/downloads/minecraft_server.${version}.jar" MINECRAFT_BINARY="minecraft_server.${version}.jar" ;; "paper") MINECRAFT_URL="https://api.papermc.io/v2/projects/paper/versions/${version%-*}/builds/${version##*-}/downloads/paper-${version}.jar" MINECRAFT_BINARY="paper.${version}.jar" ;; *) err "Unknown ${WHITE}type${NORMAL} '$type'. Please use on of: legacy, paper" exit 1 ;; esac if ! [ -f "$MINECRAFT_BINARY" ]; then mkdir -p "${MINECRAFT_PATH}" wget "$MINECRAFT_URL" -O "$MINECRAFT_PATH/$MINECRAFT_BINARY" || exit 1 fi init-config-add " $SERVICE_NAME: volumes: - \"$MINECRAFT_PATH/${MINECRAFT_BINARY}:${MINECRAFT_DATA}/server.jar\" " } minecraft:init-command() { local threads="${1:-4}" mem="${2:-2048M}" init-config-add " $SERVICE_NAME: command: - java - -Xmx${mem} - -Xms${mem} - -XX:ParallelGCThreads=${threads} - -jar - server.jar - nogui " echo "eula=TRUE" > "$SERVICE_DATASTORE/${MINECRAFT_DATA}/eula.txt" } minecraft:make-whitelist() { local whitelist="$1" { e "$whitelist" | yq -o=json \ 'to_entries | map({"uuid": .key, "name": .value})' } > "$SERVICE_DATASTORE/${MINECRAFT_DATA}/whitelist.json" } minecraft:make-ops() { local ops="$1" { e "$ops" | yq -o=json \ 'to_entries | map({ "uuid": .value.uuid, "name": .key, "level": .value.level, "bypassesPlayerLimit": .value.bypassesPlayerLimit })' } > "$SERVICE_DATASTORE/${MINECRAFT_DATA}/ops.json" } minecraft:make-properties() { local properties="$1" { e "$properties" | yq 'to_entries | map(.key + "=" + .value) | .[]' } > "$SERVICE_DATASTORE/${MINECRAFT_DATA}/server.properties" } minecraft:config-hash() { local opts="$1" debug "Adding config hash to enable recreating upon config change." config_hash=$(e "$opts" | md5_compat) || exit 1 init-config-add " $SERVICE_NAME: labels: - compose.config_hash=$config_hash " }