#!/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" "$@"