mirror of
https://github.com/itzg/docker-minecraft-server.git
synced 2026-02-18 15:36:22 +00:00
Compare commits
26 Commits
2021.18.0-
...
2021.17.0-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9b6b813fe8 | ||
|
|
1f39283fd0 | ||
|
|
2086562d03 | ||
|
|
67404c017a | ||
|
|
41e97454a9 | ||
|
|
31d082574d | ||
|
|
0f59ec97b7 | ||
|
|
a1ce1b5a24 | ||
|
|
fb3504ec1a | ||
|
|
b75f83cbf1 | ||
|
|
dc5192e2e7 | ||
|
|
76b5ec75cc | ||
|
|
4663723b84 | ||
|
|
2acb45dc62 | ||
|
|
de42f62031 | ||
|
|
7e690849b6 | ||
|
|
0a1c00f701 | ||
|
|
dc8c9e5d1a | ||
|
|
9577c84d6a | ||
|
|
575197a109 | ||
|
|
2b621b8236 | ||
|
|
14d3446f52 | ||
|
|
83a7481027 | ||
|
|
4c3a329e31 | ||
|
|
6c94e49732 | ||
|
|
af77b29509 |
@@ -1,4 +1,4 @@
|
|||||||
FROM adoptopenjdk:16-jre
|
FROM adoptopenjdk:11-jre
|
||||||
|
|
||||||
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
LABEL org.opencontainers.image.authors="Geoff Bourne <itzgeoff@gmail.com>"
|
||||||
|
|
||||||
@@ -52,7 +52,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
|
--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} \
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
--var version=1.6.0 --var app=mc-server-runner --file {{.app}} \
|
--var version=1.5.0 --var app=mc-server-runner --file {{.app}} \
|
||||||
--from https://github.com/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
|
--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} \
|
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
|
||||||
|
|||||||
46
README.md
46
README.md
@@ -13,11 +13,30 @@ To simply use the latest stable version, run
|
|||||||
|
|
||||||
docker run -d -it -p 25565:25565 -e EULA=TRUE itzg/minecraft-server
|
docker run -d -it -p 25565:25565 -e EULA=TRUE itzg/minecraft-server
|
||||||
|
|
||||||
where, in this case, the standard server port 25565, will be exposed on your host machine.
|
where the standard server port, 25565, will be exposed on your host machine.
|
||||||
|
|
||||||
> If you plan on running a server for a longer amount of time it is highly recommended using a management layer such as [Docker Compose](#using-docker-compose) or [Kubernetes](#deployment-templates-and-examples) to allow for incremental reconfiguration and image upgrades.
|
If you want to serve up multiple Minecraft servers or just use an alternate port,
|
||||||
|
change the host-side port mapping such as
|
||||||
|
|
||||||
> Be sure to always include `-e EULA=TRUE` in your commands and container definitions, as Mojang/Microsoft requires EULA acceptance.
|
... -p 25566:25565 ...
|
||||||
|
|
||||||
|
will serve your Minecraft server on your host's port 25566 since the `-p` syntax is
|
||||||
|
`host-port`:`container-port`.
|
||||||
|
|
||||||
|
Speaking of multiple servers, it's handy to give your containers explicit names using `--name`, such as naming this one "mc"
|
||||||
|
|
||||||
|
... --name mc itzg/minecraft-server
|
||||||
|
|
||||||
|
With that you can easily view the logs, stop, or re-start the container:
|
||||||
|
|
||||||
|
docker logs -f mc
|
||||||
|
( Ctrl-C to exit logs action )
|
||||||
|
|
||||||
|
docker stop mc
|
||||||
|
|
||||||
|
docker start mc
|
||||||
|
|
||||||
|
> Be sure to always include `-e EULA=TRUE` in your commands, as Mojang/Microsoft requires EULA acceptance.
|
||||||
|
|
||||||
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](#versions) and the [`TYPE`](#server-types) can be configured to create many variations of desired Minecraft server.
|
By default, the container will download the latest version of the "vanilla" [Minecraft: Java Edition server](https://www.minecraft.net/en-us/download/server) provided by Mojang. The [`VERSION`](#versions) and the [`TYPE`](#server-types) can be configured to create many variations of desired Minecraft server.
|
||||||
|
|
||||||
@@ -57,8 +76,8 @@ By default, the container will download the latest version of the "vanilla" [Min
|
|||||||
* [Upgrading](#upgrading)
|
* [Upgrading](#upgrading)
|
||||||
* [Example](#example)
|
* [Example](#example)
|
||||||
* [Running a server with a CurseForge modpack](#running-a-server-with-a-curseforge-modpack)
|
* [Running a server with a CurseForge modpack](#running-a-server-with-a-curseforge-modpack)
|
||||||
* [Modpack data directory](#modpack-data-directory)
|
* [Modpack data directory](#modpack-data-directory)
|
||||||
* [Buggy start scripts](#buggy-start-scripts)
|
* [Buggy start scripts](#buggy-start-scripts)
|
||||||
* [Fixing "unable to launch forgemodloader"](#fixing-unable-to-launch-forgemodloader)
|
* [Fixing "unable to launch forgemodloader"](#fixing-unable-to-launch-forgemodloader)
|
||||||
* [Working with mods and plugins](#working-with-mods-and-plugins)
|
* [Working with mods and plugins](#working-with-mods-and-plugins)
|
||||||
* [Optional plugins, mods, and config attach points](#optional-plugins-mods-and-config-attach-points)
|
* [Optional plugins, mods, and config attach points](#optional-plugins-mods-and-config-attach-points)
|
||||||
@@ -112,7 +131,6 @@ By default, the container will download the latest version of the "vanilla" [Min
|
|||||||
* [Memory Limit](#memory-limit)
|
* [Memory Limit](#memory-limit)
|
||||||
* [JVM Options](#jvm-options)
|
* [JVM Options](#jvm-options)
|
||||||
* [Interactive and Color Console](#interactive-and-color-console)
|
* [Interactive and Color Console](#interactive-and-color-console)
|
||||||
* [Server Shutdown Options](#server-shutdown-options)
|
|
||||||
* [OpenJ9 Specific Options](#openj9-specific-options)
|
* [OpenJ9 Specific Options](#openj9-specific-options)
|
||||||
* [Enabling rolling logs](#enabling-rolling-logs)
|
* [Enabling rolling logs](#enabling-rolling-logs)
|
||||||
* [Timezone Configuration](#timezone-configuration)
|
* [Timezone Configuration](#timezone-configuration)
|
||||||
@@ -127,7 +145,7 @@ By default, the container will download the latest version of the "vanilla" [Min
|
|||||||
* [Enabling Autopause](#enabling-autopause)
|
* [Enabling Autopause](#enabling-autopause)
|
||||||
* [Running on RaspberryPi](#running-on-raspberrypi)
|
* [Running on RaspberryPi](#running-on-raspberrypi)
|
||||||
|
|
||||||
<!-- Added by: runner, at: Sun Aug 1 17:09:36 UTC 2021 -->
|
<!-- Added by: runner, at: Thu Jul 15 13:34:00 UTC 2021 -->
|
||||||
|
|
||||||
<!--te-->
|
<!--te-->
|
||||||
|
|
||||||
@@ -471,9 +489,7 @@ A [Magma](https://magmafoundation.org/) server, which is a combination of Forge
|
|||||||
|
|
||||||
-e TYPE=MAGMA
|
-e TYPE=MAGMA
|
||||||
|
|
||||||
By default, the "stable" channel is used, but you can set `MAGMA_CHANNEL` to "dev" to access dev channel versions.
|
> **NOTE** there are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2"
|
||||||
|
|
||||||
> **NOTE** there are limited base versions supported, so you will also need to set `VERSION`, such as "1.12.2", "1.16.5", etc.
|
|
||||||
|
|
||||||
|
|
||||||
### Running a Mohist server
|
### Running a Mohist server
|
||||||
@@ -604,13 +620,13 @@ The following example uses `/modpacks` as the container path as the pre-download
|
|||||||
-e CF_SERVER_MOD=/modpacks/SkyFactory_4_Server_4.1.0.zip \
|
-e CF_SERVER_MOD=/modpacks/SkyFactory_4_Server_4.1.0.zip \
|
||||||
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
-p 25565:25565 -e EULA=TRUE --name mc itzg/minecraft-server
|
||||||
|
|
||||||
### Modpack data directory
|
#### Modpack data directory
|
||||||
|
|
||||||
By default, CurseForge modpacks are expanded into the sub-directory `/data/FeedTheBeast` and executed from there. (The default location was chosen for legacy reasons, when Curse and FTB were maintained together.)
|
By default, CurseForge modpacks are expanded into the sub-directory `/data/FeedTheBeast` and executed from there. (The default location was chosen for legacy reasons, when Curse and FTB were maintained together.)
|
||||||
|
|
||||||
The directory can be changed by setting `CF_BASE_DIR`, such as `-e CF_BASE_DIR=/data`.
|
The directory can be changed by setting `CF_BASE_DIR`, such as `-e CF_BASE_DIR=/data`.
|
||||||
|
|
||||||
### Buggy start scripts
|
#### Buggy start scripts
|
||||||
|
|
||||||
Some modpacks have buggy or overly complex start scripts. You can avoid using the bundled start script and use this image's standard server-starting logic by adding `-e USE_MODPACK_START_SCRIPT=false`.
|
Some modpacks have buggy or overly complex start scripts. You can avoid using the bundled start script and use this image's standard server-starting logic by adding `-e USE_MODPACK_START_SCRIPT=false`.
|
||||||
|
|
||||||
@@ -1211,12 +1227,6 @@ If you would like to `docker attach` to the Minecraft server console with color
|
|||||||
>
|
>
|
||||||
> Make to enable stdin and tty with `-it` when using `docker run` or `stdin_open: true` and `tty: true` when using docker compose.
|
> Make to enable stdin and tty with `-it` when using `docker run` or `stdin_open: true` and `tty: true` when using docker compose.
|
||||||
|
|
||||||
### Server Shutdown Options
|
|
||||||
|
|
||||||
To allow time for players to finish what they're doing during a graceful server shutdown, set `STOP_SERVER_ANNOUNCE_DELAY` to a number of seconds to delay after an announcement is posted by the server.
|
|
||||||
|
|
||||||
> **NOTE** be sure to adjust Docker's shutdown timeout accordingly, such as using [the -t option on docker-compose down](https://docs.docker.com/compose/reference/down/).
|
|
||||||
|
|
||||||
### OpenJ9 Specific Options
|
### OpenJ9 Specific Options
|
||||||
|
|
||||||
The openj9 image tags include specific variables to simplify configuration:
|
The openj9 image tags include specific variables to simplify configuration:
|
||||||
|
|||||||
@@ -98,14 +98,12 @@ case "${TYPE^^}" in
|
|||||||
;;
|
;;
|
||||||
|
|
||||||
FORGE)
|
FORGE)
|
||||||
if versionLessThan 1.17; then
|
|
||||||
log "**********************************************************************"
|
log "**********************************************************************"
|
||||||
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
|
log "WARNING: The image tag itzg/minecraft-server:java8 is recommended"
|
||||||
log " since some mods require Java 8"
|
log " since some mods require Java 8"
|
||||||
log " Exception traces reporting ClassCastException: class jdk.internal.loader.ClassLoaders\$AppClassLoader"
|
log " Exception traces reporting ClassCastException: class jdk.internal.loader.ClassLoaders\$AppClassLoader"
|
||||||
log " can be fixed with java8"
|
log " can be fixed with java8"
|
||||||
log "**********************************************************************"
|
log "**********************************************************************"
|
||||||
fi
|
|
||||||
exec ${SCRIPTS:-/}start-deployForge "$@"
|
exec ${SCRIPTS:-/}start-deployForge "$@"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ if [ "${VERSION}" != "LATEST" ] && [ "${VERSION}" != "1.16" ] && [ "${VERSION}"
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
: ${AIRPLANE_BUILD:=lastSuccessfulBuild}
|
: ${AIRPLANE_BUILD:=lastSuccessfulBuild}
|
||||||
: ${AIRPLANE_TYPE:=airplane}
|
|
||||||
|
|
||||||
if [ "${VERSION}" = "LATEST" ] || [ "${VERSION}" = "1.17" ]; then
|
if [ "${VERSION}" = "LATEST" ] || [ "${VERSION}" = "1.17" ]; then
|
||||||
AIRPLANE_BRANCH="1.17"
|
AIRPLANE_BRANCH="1.17"
|
||||||
@@ -23,12 +22,10 @@ fi
|
|||||||
|
|
||||||
if [ "${VERSION}" = "PURPUR" ]; then
|
if [ "${VERSION}" = "PURPUR" ]; then
|
||||||
AIRPLANE_BRANCH="Purpur-1.17"
|
AIRPLANE_BRANCH="Purpur-1.17"
|
||||||
AIRPLANE_TYPE="airplanepurpur"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${VERSION}" = "PURPUR-1.16" ]; then
|
if [ "${VERSION}" = "PURPUR-1.16" ]; then
|
||||||
AIRPLANE_BRANCH="Purpur-1.16"
|
AIRPLANE_BRANCH="Purpur-1.16"
|
||||||
AIRPLANE_TYPE="airplanepurpur"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "Using Airplane-${AIRPLANE_BRANCH} branch"
|
log "Using Airplane-${AIRPLANE_BRANCH} branch"
|
||||||
@@ -36,7 +33,7 @@ log "Using Airplane-${AIRPLANE_BRANCH} branch"
|
|||||||
export SERVER=airplane-${AIRPLANE_BRANCH}-${AIRPLANE_BUILD}.jar
|
export SERVER=airplane-${AIRPLANE_BRANCH}-${AIRPLANE_BUILD}.jar
|
||||||
|
|
||||||
if [ ! -f "$SERVER" ] || isTrue "${FORCE_REDOWNLOAD:-false}"; then
|
if [ ! -f "$SERVER" ] || isTrue "${FORCE_REDOWNLOAD:-false}"; then
|
||||||
downloadUrl="https://ci.tivy.ca/job/Airplane-${AIRPLANE_BRANCH}/${AIRPLANE_BUILD}/artifact/launcher-${AIRPLANE_TYPE}.jar"
|
downloadUrl="https://ci.tivy.ca/job/Airplane-${AIRPLANE_BRANCH}/${AIRPLANE_BUILD}/artifact/launcher-airplane.jar"
|
||||||
log "Downloading Airplane from $downloadUrl ..."
|
log "Downloading Airplane from $downloadUrl ..."
|
||||||
curl -fsSL -o "$SERVER" "$downloadUrl"
|
curl -fsSL -o "$SERVER" "$downloadUrl"
|
||||||
if [ ! -f "$SERVER" ]; then
|
if [ ! -f "$SERVER" ]; then
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
. ${SCRIPTS:-/}start-utils
|
. ${SCRIPTS:-/}start-utils
|
||||||
|
export TYPE=FORGE
|
||||||
: ${FORGEVERSION:=RECOMMENDED}
|
: ${FORGEVERSION:=RECOMMENDED}
|
||||||
isDebugging && set -x
|
isDebugging && set -x
|
||||||
|
|
||||||
@@ -46,7 +47,7 @@ elif [[ ! -e $FORGE_INSTALLER ]]; then
|
|||||||
log "ERROR: the given Forge installer doesn't exist : $FORGE_INSTALLER"
|
log "ERROR: the given Forge installer doesn't exist : $FORGE_INSTALLER"
|
||||||
exit 2
|
exit 2
|
||||||
else
|
else
|
||||||
shortForgeVersion=$VANILLA_VERSION-${FORGE_INSTALLER_CUSTOM_VERSION:-custom}
|
shortForgeVersion=$VANILLA_VERSION-custom
|
||||||
fi
|
fi
|
||||||
|
|
||||||
installMarker="/data/.forge-installed-$shortForgeVersion"
|
installMarker="/data/.forge-installed-$shortForgeVersion"
|
||||||
|
|||||||
@@ -1,93 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
. ${SCRIPTS:-/}start-utils
|
. ${SCRIPTS:-/}start-utils
|
||||||
export SKIP_LOG4J_CONFIG=true
|
|
||||||
|
|
||||||
isDebugging && set -x
|
export SERVER="/data/magma-server-${VANILLA_VERSION}.jar"
|
||||||
|
|
||||||
: ${VANILLA_VERSION?}
|
# Always download since new updates of each base version are published frequently
|
||||||
# stable, dev
|
if ! curl -o /data/magma-server-${VANILLA_VERSION}.jar -fsSL \
|
||||||
: ${MAGMA_CHANNEL:=stable}
|
https://api.magmafoundation.org/api/resources/Magma/${VANILLA_VERSION}/stable/latest/download; then
|
||||||
|
log "ERROR unable to download version ${VANILLA_VERSION} of Magma"
|
||||||
|
log " Check https://magmafoundation.org/ for available versions"
|
||||||
magmaDownloadServer() {
|
|
||||||
url=${1?}
|
|
||||||
tagName=${2?}
|
|
||||||
markerFile=${3?}
|
|
||||||
|
|
||||||
export SERVER="/data/magma-server-${VANILLA_VERSION}.jar"
|
|
||||||
|
|
||||||
log "Downloading Magma server file for ${VANILLA_VERSION} @ ${tagName}"
|
|
||||||
if ! curl -o /data/magma-server-${VANILLA_VERSION}.jar -fsSL "$url"; then
|
|
||||||
log "ERROR failed to download Magma server from $url (status=$?)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -n "$SERVER" > "$markerFile"
|
|
||||||
}
|
|
||||||
|
|
||||||
magmaHandleInstaller() {
|
|
||||||
url=${1?}
|
|
||||||
tagName=${2?}
|
|
||||||
markerFile=${3?}
|
|
||||||
|
|
||||||
installerFile="magma-installer-${VANILLA_VERSION}-${tagName}.jar"
|
|
||||||
log "Downloading Magma installer file for ${VANILLA_VERSION} @ ${tagName}"
|
|
||||||
if ! curl -o "$installerFile" -fsSL "$url"; then
|
|
||||||
log "ERROR failed to download Magma installer from $url (status=$?)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "forge" > "$markerFile"
|
|
||||||
|
|
||||||
export FORGE_INSTALLER="$installerFile"
|
|
||||||
export FORGE_INSTALLER_CUSTOM_VERSION="$tagName"
|
|
||||||
|
|
||||||
# now hand off the rest to forge
|
|
||||||
exec ${SCRIPTS:-/}start-deployForge "$@"
|
|
||||||
}
|
|
||||||
|
|
||||||
latestMeta=$(curl -fsSL https://api.magmafoundation.org/api/resources/Magma/${VANILLA_VERSION}/${MAGMA_CHANNEL}/latest || exit $?)
|
|
||||||
if [ $? != 0 ]; then
|
|
||||||
log "ERROR failed to locate latest Magma info for ${VANILLA_VERSION} in channel ${MAGMA_CHANNEL} (error=$?)"
|
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
tagName=$(echo "${latestMeta}" | jq -r '.tag_name')
|
export SKIP_LOG4J_CONFIG=true
|
||||||
markerFile=".magma-installed-${VANILLA_VERSION}-${tagName}"
|
|
||||||
if [ -f "${markerFile}" ]; then
|
|
||||||
installedTagName=$(cat "${markerFile}")
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "${markerFile}" ]; then
|
|
||||||
|
|
||||||
if versionLessThan 1.16; then
|
|
||||||
assetType=server
|
|
||||||
else
|
|
||||||
assetType=installer
|
|
||||||
fi
|
|
||||||
|
|
||||||
assetUrl=$(echo "${latestMeta}" | jq -r ".assets | .[].browser_download_url | select(test(\"${assetType}\"))")
|
|
||||||
if [ $? != 0 ] || [ -z "$assetUrl" ]; then
|
|
||||||
log "ERROR failed to extract ${assetType} asset type for ${VANILLA_VERSION} in channel ${MAGMA_CHANNEL}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${assetType} = server ]]; then
|
|
||||||
magmaDownloadServer "$assetUrl" "$tagName" "$markerFile"
|
|
||||||
else
|
|
||||||
magmaHandleInstaller "$assetUrl" "$tagName" "$markerFile"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
export SERVER=$(cat "${markerFile}")
|
|
||||||
|
|
||||||
if [[ $SERVER == "forge" ]]; then
|
|
||||||
export FORGE_INSTALLER="magma-installer-${VANILLA_VERSION}-${tagName}.jar"
|
|
||||||
export FORGE_INSTALLER_CUSTOM_VERSION="$tagName"
|
|
||||||
# now hand off the rest to forge
|
|
||||||
exec ${SCRIPTS:-/}start-deployForge "$@"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Continue to Final Setup
|
# Continue to Final Setup
|
||||||
exec ${SCRIPTS:-/}start-finalSetupWorld $@
|
exec ${SCRIPTS:-/}start-finalSetupWorld $@
|
||||||
|
|||||||
@@ -173,10 +173,6 @@ function copyFilesForCurseForge() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
mcServerRunnerArgs="--stop-duration ${STOP_DURATION:-60}s"
|
mcServerRunnerArgs="--stop-duration ${STOP_DURATION:-60}s"
|
||||||
if [[ ${STOP_SERVER_ANNOUNCE_DELAY} ]]; then
|
|
||||||
mcServerRunnerArgs="${mcServerRunnerArgs} --stop-server-announce-delay ${STOP_SERVER_ANNOUNCE_DELAY}s"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then
|
if [[ ${TYPE} == "CURSE_INSTANCE" ]]; then
|
||||||
if isTrue ${DEBUG_EXEC}; then
|
if isTrue ${DEBUG_EXEC}; then
|
||||||
set -x
|
set -x
|
||||||
@@ -229,10 +225,6 @@ EOF
|
|||||||
else
|
else
|
||||||
exec mc-server-runner ${mcServerRunnerArgs} "${finalArgs[@]}"
|
exec mc-server-runner ${mcServerRunnerArgs} "${finalArgs[@]}"
|
||||||
fi
|
fi
|
||||||
elif [[ -x run.sh ]]; then
|
|
||||||
log "Using Forge supplied run.sh script..."
|
|
||||||
echo $JVM_XX_OPTS $JVM_OPTS $expandedDOpts > user_jvm_args.txt
|
|
||||||
exec mc-server-runner ${mcServerRunnerArgs} --shell bash run.sh
|
|
||||||
else
|
else
|
||||||
# If we have a bootstrap.txt file... feed that in to the server stdin
|
# If we have a bootstrap.txt file... feed that in to the server stdin
|
||||||
if [ -f /data/bootstrap.txt ]; then
|
if [ -f /data/bootstrap.txt ]; then
|
||||||
|
|||||||
70
start-spiget
70
start-spiget
@@ -6,7 +6,6 @@ IFS=$'\n\t'
|
|||||||
handleDebugMode
|
handleDebugMode
|
||||||
|
|
||||||
: ${SPIGET_RESOURCES:=}
|
: ${SPIGET_RESOURCES:=}
|
||||||
: ${SPIGET_DOWNLOAD_TOLERANCE:=5} # in minutes
|
|
||||||
|
|
||||||
containsJars() {
|
containsJars() {
|
||||||
file=${1?}
|
file=${1?}
|
||||||
@@ -29,61 +28,26 @@ getResourceFromSpiget() {
|
|||||||
|
|
||||||
mkdir -p /data/plugins
|
mkdir -p /data/plugins
|
||||||
|
|
||||||
versionfile="/data/plugins/.${resource}-version.json"
|
if [ -f /data/plugins/.${resource} ]; then
|
||||||
versionfileNew="/tmp/.${resource}-version.json"
|
log "Resource '${resource}' already downloaded"
|
||||||
|
else
|
||||||
|
tmpfile="/tmp/${resource}.zip"
|
||||||
|
url="https://api.spiget.org/v2/resources/${resource}/download"
|
||||||
|
if ! curl -o "${tmpfile}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${url}"; then
|
||||||
|
log "ERROR failed to download resource '${resource}' from ${url}"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -f "$versionfile" ]; then
|
if containsJars "${tmpfile}"; then
|
||||||
if [[ -n $(find "$versionfile" -mmin +${SPIGET_DOWNLOAD_TOLERANCE}) ]]; then
|
log "Extracting contents of resource ${resource} into plugins"
|
||||||
urlVersion="https://api.spiget.org/v2/resources/${resource}/versions/latest"
|
unzip -o -q -d /data/plugins "${tmpfile}"
|
||||||
if ! curl -o "${versionfileNew}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${urlVersion}"; then
|
touch "/data/plugins/.${resource}"
|
||||||
log "ERROR failed to download resource version meta data '${resource}' from ${urlVersion}"
|
rm "${tmpfile}"
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
installedVersion=$(jq -r '.name' $versionfile)
|
|
||||||
newVersion=$(jq -r '.name' $versionfileNew)
|
|
||||||
|
|
||||||
if [ "$installedVersion" = "$newVersion" ]; then
|
|
||||||
log "resource '${resource}' not downloaded because installed version '${installedVersion}' already up to date ('${newVersion}')"
|
|
||||||
mv "${versionfileNew}" "${versionfile}"
|
|
||||||
else
|
|
||||||
if downloadResourceFromSpiget "${resource}"; then
|
|
||||||
mv "${versionfileNew}" "${versionfile}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
log "resource '${resource}' not checked because version meta file newer than '${SPIGET_DOWNLOAD_TOLERANCE}' minutes"
|
log "Moving resource ${resource} into plugins"
|
||||||
|
mv "${tmpfile}" "/data/plugins/${resource}.jar"
|
||||||
|
touch "/data/plugins/.${resource}"
|
||||||
fi
|
fi
|
||||||
else
|
|
||||||
if downloadResourceFromSpiget "${resource}"; then
|
|
||||||
urlVersion="https://api.spiget.org/v2/resources/${resource}/versions/latest"
|
|
||||||
if ! curl -o "${versionfileNew}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${urlVersion}"; then
|
|
||||||
log "ERROR failed to download resource version meta data '${resource}' from ${urlVersion}"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
mv "${versionfileNew}" "${versionfile}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
downloadResourceFromSpiget() {
|
|
||||||
resource=${1?}
|
|
||||||
|
|
||||||
tmpfile="/tmp/${resource}.zip"
|
|
||||||
url="https://api.spiget.org/v2/resources/${resource}/download"
|
|
||||||
if ! curl -o "${tmpfile}" -fsSL -H "User-Agent: itzg/minecraft-server" "${extraCurlArgs[@]}" "${url}"; then
|
|
||||||
log "ERROR failed to download resource '${resource}' from ${url}"
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
|
|
||||||
if containsJars "${tmpfile}"; then
|
|
||||||
log "Extracting contents of resource ${resource} into plugins"
|
|
||||||
unzip -o -q -d /data/plugins "${tmpfile}"
|
|
||||||
rm "${tmpfile}"
|
|
||||||
else
|
|
||||||
log "Moving resource ${resource} into plugins"
|
|
||||||
mv "${tmpfile}" "/data/plugins/${resource}.jar"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user