diff --git a/.dockerignore b/.dockerignore index 510536d7..1db22cbb 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,5 @@ data examples k8s-examples -.idea \ No newline at end of file +.idea +.git \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index c1d05f9c..d55c2877 100644 --- a/Dockerfile +++ b/Dockerfile @@ -49,7 +49,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ --from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ - --var version=1.3.5 --var app=mc-server-runner --file {{.app}} \ + --var version=1.4.2 --var app=mc-server-runner --file {{.app}} \ --from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \ diff --git a/examples/docker-compose-curseinstance.yml b/examples/docker-compose-curseinstance.yml new file mode 100644 index 00000000..c1d62f7f --- /dev/null +++ b/examples/docker-compose-curseinstance.yml @@ -0,0 +1,20 @@ +version: "3.7" + +services: + mc: + image: itzg/minecraft-server + ports: + - 25565:25565 + volumes: + # Attach .../Curse/Minecraft/Instances for use at /instances + - ./Instances:/instances:ro + # Attach /data as usual + - ./ServerData:/data + environment: + EULA: "TRUE" + # Modpacks generally need more memory, so let's give at 2 GB + MEMORY: 2G + # Use new CURSE_INSTANCE type + TYPE: CURSE_INSTANCE + # Reference directory of or full path to minecraftinstance.json + CURSE_INSTANCE_JSON: /instances/FTB Presents SkyFactory 3 diff --git a/start-configuration b/start-configuration index aa014998..90dde0fd 100644 --- a/start-configuration +++ b/start-configuration @@ -20,8 +20,8 @@ if [ ! -e /data/eula.txt ]; then fi echo "# Generated via Docker on $(date)" > eula.txt - echo "eula=$EULA" >> eula.txt - if [ $? != 0 ]; then + + if ! echo "eula=$EULA" >> eula.txt; then log "ERROR: unable to write eula to /data. Please make sure attached directory is writable by uid=${UID}" exit 2 fi @@ -49,56 +49,61 @@ export VERSIONS_JSON=https://launchermeta.mojang.com/mc/game/version_manifest.js case "X$VERSION" in X|XLATEST|Xlatest) - export VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.release'` + VANILLA_VERSION=$(curl -fsSL $VERSIONS_JSON | jq -r '.latest.release') ;; XSNAPSHOT|Xsnapshot) - export VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.snapshot'` + VANILLA_VERSION=$(curl -fsSL $VERSIONS_JSON | jq -r '.latest.snapshot') ;; X[1-9]*) - export VANILLA_VERSION=$VERSION + VANILLA_VERSION=$VERSION ;; *) - export VANILLA_VERSION=`curl -fsSL $VERSIONS_JSON | jq -r '.latest.release'` + VANILLA_VERSION=$(curl -fsSL $VERSIONS_JSON | jq -r '.latest.release') ;; esac +export VANILLA_VERSION log "Resolved version given ${VERSION} into ${VANILLA_VERSION}" -cd /data +cd /data || exit 1 export ORIGINAL_TYPE=${TYPE^^} log "Resolving type given ${TYPE}" case "${TYPE^^}" in *BUKKIT|SPIGOT) - exec /start-deployBukkitSpigot $@ + exec /start-deployBukkitSpigot "$@" ;; PAPER) - exec /start-deployPaper $@ + exec /start-deployPaper "$@" ;; FORGE) - exec /start-deployForge $@ + exec /start-deployForge "$@" ;; FABRIC) - exec /start-deployFabric $@ + exec /start-deployFabric "$@" ;; FTB|CURSEFORGE) - exec /start-deployFTB $@ + exec /start-deployFTB "$@" ;; VANILLA) - exec /start-deployVanilla $@ + exec /start-deployVanilla "$@" ;; SPONGEVANILLA) - exec /start-deploySpongeVanilla $@ + exec /start-deploySpongeVanilla "$@" ;; CUSTOM) - exec /start-deployCustom $@ + exec /start-deployCustom "$@" + ;; + + CURSE_INSTANCE) + exec /start-validateCurseInstance "$@" ;; *) diff --git a/start-minecraftFinalSetup b/start-minecraftFinalSetup index 05337c40..c092e1d5 100644 --- a/start-minecraftFinalSetup +++ b/start-minecraftFinalSetup @@ -164,8 +164,15 @@ if isTrue "${USE_LARGE_PAGES}"; then fi mcServerRunnerArgs="--stop-duration 60s" - -if [[ ${TYPE} == "FEED-THE-BEAST" ]]; then +if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then + JVM_OPTS="-Xms${INIT_MEMORY} -Xmx${MAX_MEMORY} ${JVM_OPTS}" + if isTrue ${DEBUG_EXEC}; then + set -x + fi + exec mc-server-runner ${mcServerRunnerArgs} \ + --cf-instance-file "${CURSE_INSTANCE_JSON}" \ + java $JVM_XX_OPTS $JVM_OPTS $expandedDOpts -jar _SERVERJAR_ "$@" $EXTRA_ARGS +elif [[ ${TYPE} == "FEED-THE-BEAST" ]]; then mcServerRunnerArgs="${mcServerRunnerArgs} --shell bash" if [ ! -e "${FTB_DIR}/ops.json" -a -e /data/ops.txt ]; then diff --git a/start-validateCurseInstance b/start-validateCurseInstance new file mode 100755 index 00000000..09af3ab5 --- /dev/null +++ b/start-validateCurseInstance @@ -0,0 +1,18 @@ +#!/bin/bash + +. /start-utils + +if ! [[ -v CURSE_INSTANCE_JSON ]]; then + log "ERROR: CURSE_INSTANCE_JSON needs to be set" + exit 2 +elif ! [ -f "${CURSE_INSTANCE_JSON}" ] && [ -f "${CURSE_INSTANCE_JSON}/minecraftinstance.json" ]; then + CURSE_INSTANCE_JSON="${CURSE_INSTANCE_JSON}/minecraftinstance.json" +elif ! [ -f "${CURSE_INSTANCE_JSON}" ]; then + log "ERROR: CURSE_INSTANCE_JSON file does not exist: ${CURSE_INSTANCE_JSON}" + exit 2 +fi + +log "Resolved CURSE_INSTANCE_JSON as ${CURSE_INSTANCE_JSON}" + +# Continue to Final Setup +exec /start-finalSetup01World "$@"