mirror of
https://github.com/itzg/docker-minecraft-server
synced 2024-11-13 23:57:08 +00:00
86 lines
2.9 KiB
Bash
Executable file
86 lines
2.9 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# shellcheck source=start-utils
|
|
. "${SCRIPTS:-/}start-utils"
|
|
set -o pipefail
|
|
handleDebugMode
|
|
|
|
: "${PAPER_CUSTOM_JAR:=}"
|
|
|
|
ourScript="$0"
|
|
ourArgs=("$@")
|
|
|
|
# Check if we're running Folia.
|
|
if [[ -z $PAPER_PROJECT ]]; then
|
|
PAPER_PROJECT="paper"
|
|
PAPER_NAME="PaperMC"
|
|
fi
|
|
|
|
function handleMissingVersion() {
|
|
expectedVersion=${VANILLA_VERSION}
|
|
versions=$(curl -fsSL "https://papermc.io/api/v2/projects/${PAPER_PROJECT}" -H "accept: application/json")
|
|
if [[ $VERSION = LATEST ]]; then
|
|
tries=0
|
|
while ((tries++ < 5)); do
|
|
VANILLA_VERSION=$(echo "$versions" | jq -r ".versions[$((- tries))]")
|
|
if [[ $(curl -fsSL "https://papermc.io/api/v2/projects/${PAPER_PROJECT}/versions/${VANILLA_VERSION}" -H "accept: application/json" \
|
|
| jq '.builds[-1]') != null ]]; then
|
|
log "WARN: using ${VANILLA_VERSION} since that's the latest provided by ${PAPER_NAME}"
|
|
# re-execute the current script with the newly computed version
|
|
exec "$ourScript" "${ourArgs[@]}"
|
|
fi
|
|
done
|
|
fi
|
|
log "ERROR: ${expectedVersion} is not published by ${PAPER_NAME}"
|
|
log " Set VERSION to one of the following: "
|
|
log " $(echo "$versions" | jq -r '.versions | join(", ")')"
|
|
exit 1
|
|
}
|
|
|
|
if [[ $PAPER_CUSTOM_JAR ]]; then
|
|
export SERVER="$PAPER_CUSTOM_JAR"
|
|
elif [[ $PAPER_DOWNLOAD_URL ]]; then
|
|
SERVER=$(getFilenameFromUrl "${PAPER_DOWNLOAD_URL}")
|
|
export SERVER
|
|
|
|
log "Downloading custom ${PAPER_NAME} jar from $PAPER_DOWNLOAD_URL"
|
|
if ! mc-image-helper mcopy \
|
|
--scope=papermc \
|
|
--to=/data \
|
|
"${PAPER_DOWNLOAD_URL}"; then
|
|
echo "ERROR: failed to download ${PAPER_NAME} from $PAPER_DOWNLOAD_URL"
|
|
exit 1
|
|
fi
|
|
|
|
else
|
|
# Paper API v2 docs : https://papermc.io/api/docs/swagger-ui/index.html?configUrl=/api/openapi/swagger-config
|
|
|
|
if ! build=${PAPERBUILD:=$(get --json-path=".builds[-1]" "https://papermc.io/api/v2/projects/${PAPER_PROJECT}/versions/${VANILLA_VERSION}")}; then
|
|
log "ERROR: failed to lookup build number for ${PAPER_NAME} version=${VANILLA_VERSION}"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ $build = null ]]; then
|
|
handleMissingVersion
|
|
fi
|
|
|
|
if ! SERVER=$(get --json-path=.downloads.application.name "https://papermc.io/api/v2/projects/${PAPER_PROJECT}/versions/${VANILLA_VERSION}/builds/${build}"); then
|
|
echo "ERROR: failed to lookup ${PAPER_NAME} download file from version=${VANILLA_VERSION} build=${build}"
|
|
exit 1
|
|
fi
|
|
export SERVER
|
|
|
|
log "Downloading ${PAPER_NAME} $VANILLA_VERSION (build $build) ..."
|
|
if ! mc-image-helper mcopy \
|
|
--scope=papermc \
|
|
--to=/data \
|
|
"https://papermc.io/api/v2/projects/${PAPER_PROJECT}/versions/${VANILLA_VERSION}/builds/${build}/downloads/${SERVER}"; then
|
|
echo "ERROR: failed to download ${PAPER_NAME} from version=${VANILLA_VERSION} build=${build} download=${SERVER}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Normalize on Spigot for downstream operations
|
|
export FAMILY=SPIGOT
|
|
|
|
exec "${SCRIPTS:-/}start-spiget" "$@"
|