From 48367b7c1f8e50c0d1e4736f2f1942c7da2a1700 Mon Sep 17 00:00:00 2001 From: Geoff Bourne Date: Sun, 8 Jan 2023 19:15:24 -0600 Subject: [PATCH] Support automatically downloading and upgrading CurseForge modpacks (#1889) --- Dockerfile | 2 +- README.md | 41 +++++++++++++++++++++++++++++ docs/.gitignore | 1 + docs/cf-file-id.png | Bin 0 -> 5522 bytes docs/cf-slug.png | Bin 0 -> 3305 bytes scripts/start-autoDeployCF | 43 +++++++++++++++++++++++++++++++ scripts/start-configuration | 10 +++++--- scripts/start-deployFabric | 50 +++++++++++++++++++----------------- 8 files changed, 119 insertions(+), 28 deletions(-) create mode 100644 docs/.gitignore create mode 100644 docs/cf-file-id.png create mode 100644 docs/cf-slug.png create mode 100644 scripts/start-autoDeployCF diff --git a/Dockerfile b/Dockerfile index a653d743..e4fd12e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -46,7 +46,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ --var version=0.1.1 --var app=maven-metadata-release --file {{.app}} \ --from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz -ARG MC_HELPER_VERSION=1.23.1 +ARG MC_HELPER_VERSION=1.24.1 ARG MC_HELPER_BASE_URL=https://github.com/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION} RUN curl -fsSL ${MC_HELPER_BASE_URL}/mc-image-helper-${MC_HELPER_VERSION}.tgz \ | tar -C /usr/share -zxf - \ diff --git a/README.md b/README.md index 53dcef99..c6a8d0b1 100644 --- a/README.md +++ b/README.md @@ -610,6 +610,47 @@ docker run -d --name mc-ftb -e EULA=TRUE \ ## Running a server with a CurseForge modpack +### New approach + +> **NOTE** This approach is in early access. Please include as many details as possible when reporting issues for this. + +To manage a CurseForge modpack automatically with upgrade support, set `TYPE` to "AUTO_CURSEFORGE". The appropriate mod loader (Forge / Fabric) will also be automatically installed with the version declared by the modpack. + +Use one of the following to specify the modpack to install: + +Pass a page URL to the modpack or a specific file with `CF_PAGE_URL` such as the modpack page "https://www.curseforge.com/minecraft/modpacks/all-the-mods-8" or a specific file "https://www.curseforge.com/minecraft/modpacks/all-the-mods-8/files/4248390". For example: + +``` +-e TYPE=AUTO_CURSEFORGE -e CF_PAGE_URL=https://www.curseforge.com/minecraft/modpacks/all-the-mods-8 +``` + +Instead of a URL, the modpack slug can be provided as `CF_SLUG`. The slug is the short identifier visible in the URL after "/modpacks/", such as + +![img.png](docs/cf-slug.png) + +For example: +``` +-e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8 +``` + +With either the modpack page or slug approach, the latest file will be located and used. If a specific version is desired, set either `CF_FILE_ID` to the numerical file ID or use a matching substring with `CF_FILENAME_MATCHER`. + +The file ID can be located in the URL like + +![img.png](docs/cf-file-id.png) + +The following two examples both refer to version 1.0.7 of ATM8: + +``` +-e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8 -e CF_FILE_ID=4248390 +``` + +``` +-e TYPE=AUTO_CURSEFORGE -e CF_SLUG=all-the-mods-8 -e CF_FILENAME_MATCHER=1.0.7 +``` + +### Old approach + Enable this server mode by adding `-e TYPE=CURSEFORGE` to your command-line, but note the following additional steps needed... diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 00000000..1c97488d --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +/.*.bkp \ No newline at end of file diff --git a/docs/cf-file-id.png b/docs/cf-file-id.png new file mode 100644 index 0000000000000000000000000000000000000000..620541d92132e9191be4af6ba23c7d9699adf5d7 GIT binary patch literal 5522 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 literal 0 HcmV?d00001 diff --git a/scripts/start-autoDeployCF b/scripts/start-autoDeployCF new file mode 100644 index 00000000..fcdfb4dd --- /dev/null +++ b/scripts/start-autoDeployCF @@ -0,0 +1,43 @@ +#!/bin/bash +set -eu + +# shellcheck source=start-utils +. "${SCRIPTS:-/}start-utils" + +: "${CF_PAGE_URL:=}" +: "${CF_SLUG:=}" +: "${CF_FILE_ID:=}" +: "${CF_FILENAME_MATCHER:=}" + +resultsFile=/data/.install-curseforge.env + +isDebugging && set -x + +args=( + --results-file="$resultsFile" +) +if [[ $CF_PAGE_URL ]]; then + args+=(--modpack-page-url="$CF_PAGE_URL") +fi +if [[ $CF_FILE_ID ]]; then + args+=(--file-id="$CF_FILE_ID") +fi +if [[ $CF_SLUG ]]; then + args+=(--slug="$CF_SLUG") +fi +if [[ $CF_FILENAME_MATCHER ]]; then + args+=(--filename-matcher="$CF_FILENAME_MATCHER") +fi + +if ! mc-image-helper install-curseforge "${args[@]}"; then + log "ERROR failed to auto-install CurseForge modpack" + exit 1 +fi + +# grab SERVER, FAMILY and export it +set -a +# shellcheck disable=SC1090 +source "${resultsFile}" +set +a + +exec "${SCRIPTS:-/}start-setupWorld" "$@" diff --git a/scripts/start-configuration b/scripts/start-configuration index 8fc00414..d23ef2f6 100755 --- a/scripts/start-configuration +++ b/scripts/start-configuration @@ -136,11 +136,11 @@ cd /data || exit 1 export ORIGINAL_TYPE=${TYPE^^} if isTrue "${ENABLE_AUTOPAUSE}"; then - ${SCRIPTS:-/}start-autopause + "${SCRIPTS:-/}start-autopause" fi if isTrue "${ENABLE_AUTOSTOP}"; then - ${SCRIPTS:-/}start-autostop + "${SCRIPTS:-/}start-autostop" fi if @@ -152,7 +152,7 @@ if then log "Starting RCON commands" # shellcheck source=start-rconcmds - ${SCRIPTS:-/}start-rconcmds + "${SCRIPTS:-/}start-rconcmds" fi if versionLessThan 1.7; then @@ -196,6 +196,10 @@ case "${TYPE^^}" in exec "${SCRIPTS:-/}start-deployCF" "$@" ;; + AUTO_CURSEFORGE) + exec "${SCRIPTS:-/}start-autoDeployCF" "$@" + ;; + VANILLA) exec "${SCRIPTS:-/}start-deployVanilla" "$@" ;; diff --git a/scripts/start-deployFabric b/scripts/start-deployFabric index 131d770f..1a942839 100755 --- a/scripts/start-deployFabric +++ b/scripts/start-deployFabric @@ -4,47 +4,49 @@ set -eu # shellcheck source=start-utils . "${SCRIPTS:-/}start-utils" -requireVar VANILLA_VERSION export TYPE=FABRIC : "${FABRIC_LAUNCHER_VERSION:=${FABRIC_INSTALLER_VERSION:-LATEST}}" : "${FABRIC_LAUNCHER:=}" : "${FABRIC_LAUNCHER_URL:=}" : "${FABRIC_LOADER_VERSION:=LATEST}" +resultsFile=/data/.install-fabric.env + isDebugging && set -x # Custom fabric jar if [[ $FABRIC_LAUNCHER ]]; then - export SERVER=${FABRIC_LAUNCHER} + if ! mc-image-helper install-fabric-loader \ + --results-file=${resultsFile} \ + --from-local-file="$FABRIC_LAUNCHER"; then + log "ERROR failed to install Fabric launcher from $FABRIC_LAUNCHER" + exit 1 + fi # Custom fabric jar url elif [[ $FABRIC_LAUNCHER_URL ]]; then - export SERVER=fabric-server-$(echo -n "$FABRIC_LAUNCHER_URL" | mc-image-helper hash) + if ! mc-image-helper install-fabric-loader \ + --results-file=${resultsFile} \ + --from-url="$FABRIC_LAUNCHER_URL"; then + log "ERROR failed to install Fabric launcher from $FABRIC_LAUNCHER_URL" + exit 1 + fi # Official fabric launcher else - if [[ ${FABRIC_LAUNCHER_VERSION^^} = LATEST ]]; then - log "Checking Fabric Launcher version information." - FABRIC_LAUNCHER_VERSION=$(maven-metadata-release https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml) - fi - if [[ ${FABRIC_LOADER_VERSION^^} = LATEST ]]; then - log "Checking Fabric Loader version information." - FABRIC_LOADER_VERSION=$(maven-metadata-release https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml) - fi - export SERVER=fabric-server-mc.${VANILLA_VERSION}-loader.${FABRIC_LOADER_VERSION}-launcher.${FABRIC_LAUNCHER_VERSION}.jar - export FABRIC_LAUNCHER_URL="https://meta.fabricmc.net/v2/versions/loader/${VANILLA_VERSION}/${FABRIC_LOADER_VERSION}/${FABRIC_LAUNCHER_VERSION}/server/jar" -fi - -if [[ ! -e ${SERVER} && ! -z ${FABRIC_LAUNCHER_URL} ]]; then - log "Downloading $FABRIC_LAUNCHER_URL ..." - if ! get -o "$SERVER" "$FABRIC_LAUNCHER_URL"; then - log "Failed to download from given location $FABRIC_LAUNCHER_URL" - exit 2 + if ! mc-image-helper install-fabric-loader \ + --results-file=${resultsFile} \ + --minecraft-version="${VANILLA_VERSION}" \ + --installer-version="${FABRIC_LAUNCHER_VERSION}" \ + --loader-version="${FABRIC_LOADER_VERSION}"; then + log "ERROR failed to install Fabric launcher from $VANILLA_VERSION, $FABRIC_LAUNCHER_VERSION, $FABRIC_LOADER_VERSION" + exit 1 fi fi -if [[ ! -e ${SERVER} ]]; then - log "$SERVER does not exist, cannot launch server!" - exit 1 -fi +# grab SERVER and export it +set -a +# shellcheck disable=SC1090 +source "${resultsFile}" +set +a export FAMILY=FABRIC exec "${SCRIPTS:-/}start-setupWorld" "$@"