#!/bin/bash . ${SCRIPTS:-/}start-utils : ${FORGEVERSION:=RECOMMENDED} isDebugging && set -x get_installer() { if [[ -z $FORGE_INSTALLER_URL ]]; then log "Downloading $normForgeVersion" forgeFileNames=" $normForgeVersion/forge-$normForgeVersion-installer.jar $shortForgeVersion/forge-$shortForgeVersion-installer.jar " for fn in $forgeFileNames; do downloadUrl=https://maven.minecraftforge.net/net/minecraftforge/forge/$fn log "...trying $downloadUrl" if curl -o $FORGE_INSTALLER -fsSL $downloadUrl; then return fi done log "Unable to locate usable URL for $normForgeVersion" exit 2 else log "Downloading $FORGE_INSTALLER_URL ..." if ! curl -o $FORGE_INSTALLER -fsSL $FORGE_INSTALLER_URL; then log "Failed to download from given location $FORGE_INSTALLER_URL" exit 2 fi fi } install() { if [ ! -e $FORGE_INSTALLER ]; then get_installer $normForgeVersion $shortForgeVersion fi log "Installing Forge $shortForgeVersion using $FORGE_INSTALLER" mkdir -p mods tries=3 while ((--tries >= 0)); do java -jar $FORGE_INSTALLER --installServer if [ $? == 0 ]; then break fi done if (($tries < 0)); then log "Forge failed to install after several tries." >&2 exit 10 fi # NOTE $shortForgeVersion will be empty if installer location was given to us log "Finding installed server jar..." unset -v latest for file in *forge*.jar; do if ! [[ $file =~ installer ]]; then if [[ -z $latest ]] || [[ $file -nt $latest ]]; then latest=$file fi fi done if [[ -z $latest ]]; then log "Unable to derive server jar for Forge" exit 2 fi export SERVER=$latest log "Using server $SERVER" echo $SERVER > $installMarker } resolve_versions() { if [[ -z $FORGE_INSTALLER && -z $FORGE_INSTALLER_URL ]]; then norm=$VANILLA_VERSION case $VANILLA_VERSION in *.*.*) norm=$VANILLA_VERSION ;; *.*) norm=${VANILLA_VERSION}.0 ;; esac ################################################################################# log "Checking Forge version information." case $FORGEVERSION in RECOMMENDED) curl -fsSL -o /tmp/forge.json http://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json FORGE_VERSION=$(cat /tmp/forge.json | jq -r ".promos[\"$VANILLA_VERSION-recommended\"]") if [ $FORGE_VERSION = null ]; then FORGE_VERSION=$(cat /tmp/forge.json | jq -r ".promos[\"$VANILLA_VERSION-latest\"]") if [ $FORGE_VERSION = null ]; then log "ERROR: Version $VANILLA_VERSION is not supported by Forge" log " Refer to http://files.minecraftforge.net/ for supported versions" exit 2 fi fi ;; *) FORGE_VERSION=$FORGEVERSION ;; esac normForgeVersion=$VANILLA_VERSION-$FORGE_VERSION-$norm shortForgeVersion=$VANILLA_VERSION-$FORGE_VERSION FORGE_INSTALLER="/tmp/forge-$shortForgeVersion-installer.jar" elif [[ -z $FORGE_INSTALLER ]]; then FORGE_INSTALLER="/tmp/forge-installer.jar" elif [[ ! -e $FORGE_INSTALLER ]]; then log "ERROR: the given Forge installer doesn't exist : $FORGE_INSTALLER" exit 2 else shortForgeVersion=$VANILLA_VERSION-${FORGE_INSTALLER_CUSTOM_VERSION:-custom} fi } ### main resolve_versions installMarker="/data/.forge-installed-$shortForgeVersion" if [ ! -e $installMarker ]; then install else export SERVER=$(cat $installMarker) if [ ! -e "$SERVER" ] && versionLessThan 1.17; then rm "$installMarker" install fi fi exec ${SCRIPTS:-/}start-setupWorld $@