Compare commits

...

12 Commits

10 changed files with 99 additions and 33 deletions

View File

@@ -64,7 +64,7 @@ WORKDIR /data
STOPSIGNAL SIGTERM
# End user MUST set EULA and change RCON_PASSWORD
ENV TYPE=VANILLA VERSION=LATEST EULA="" UID=1000 GID=1000
ENV TYPE=VANILLA VERSION=LATEST EULA="" UID=1000 GID=1000 LC_ALL=en_US.UTF-8
COPY --chmod=755 scripts/start* /
COPY --chmod=755 bin/ /usr/local/bin/

View File

@@ -46,6 +46,7 @@ dnf install -y \
libwebp \
findutils \
which \
glibc-langpack-en \
${EXTRA_DNF_PACKAGES}
# Install Git LFS

View File

@@ -16,7 +16,7 @@ A file called `.paused` is created in `/data` directory when the server is pause
A `.skip-pause` file can be created in the `/data` directory to make the server skip autopausing, for as long as the file is present. The autopause timer will also be reset.
A starting, example compose file has been provided in [examples/docker-compose-autopause.yml](https://github.com/itzg/docker-minecraft-server/blob/master/examples/docker-compose-autopause.yml).
A starting, example compose file has been provided in [the examples](https://github.com/itzg/docker-minecraft-server/blob/master/examples/autopause/compose.yml).
Auto-pause is not compatible with `EXEC_DIRECTLY=true` and the two cannot be set together.

View File

@@ -1,8 +1,8 @@
# Auto-download from Modrinth
[Modrinth](https://modrinth.com/) is an open source modding platform with a clean, easy to use website for finding [Fabric and Forge mods](https://modrinth.com/mods). At startup, the container will automatically locate and download the newest versions of mod/plugin files that correspond to the `TYPE` and `VERSION` in use. Older file versions downloaded previously will automatically be cleaned up.
[Modrinth](https://modrinth.com/) is an open source modding platform with a clean, easy to use website for finding [Fabric, Forge, etc mods](https://modrinth.com/mods) and [Paper, etc plugins](https://modrinth.com/plugins), and [datapacks](https://modrinth.com/datapacks). At startup, the container will automatically locate and download the newest versions of mod/plugin files that correspond to the `TYPE` and `VERSION` in use. Older file versions downloaded previously will automatically be cleaned up.
- **MODRINTH_PROJECTS** : comma or newline separated list of project slugs (short name) or IDs. The project ID is located in the "Technical information" section. The slug is the part of the page URL that follows `/mod/`:
- **MODRINTH_PROJECTS** : comma or newline separated list of project slugs (short name) or IDs. The project ID is located in the "Technical information" section. The project slug is the part of the URL that follows `/mod/`, `/plugin/`, or `/datapack/`. For example:
```
https://modrinth.com/mod/fabric-api
----------

View File

@@ -1,4 +1,4 @@
mkdocs-material == 9.5.47
mkdocs-material == 9.5.48
mkdocs-autorefs == 1.2.0
mkdocstrings == 0.27.0
mkdocs-literate-nav == 0.6.1

View File

@@ -0,0 +1,34 @@
services:
mc:
image: itzg/minecraft-server
tty: true
stdin_open: true
ports:
- "25565:25565"
environment:
EULA: true
ALLOW_FLIGHT: true
MOD_PLATFORM: AUTO_CURSEFORGE
# allocate from https://console.curseforge.com/ and set in .env file
CF_API_KEY: ${CF_API_KEY}
CF_SLUG: craftoria
MEMORY: 8G
CF_EXCLUDE_MODS: |
737481
363363
394468
986380
844662
568563
915902
690971
455508
1089803
511319
volumes:
# Use managed volume by default, but can change to a relative path like
# ./data:/data
# to use a host directory
- mc-data:/data
volumes:
mc-data:

View File

@@ -1,22 +1,21 @@
services:
mc:
# FTBA support is only available in non-Alpine images
image: itzg/minecraft-server:${IMAGE_TAG:-java8-multiarch}
image: itzg/minecraft-server
ports:
# expose the Minecraft server port outside of container
- 25565:25565
- "25565:25565"
environment:
# REQUIRED for all types
EULA: "TRUE"
# Set server type (vs the default of vanilla)
TYPE: FTBA
# Use Pack ID from https://ftb.neptunepowered.org/pack/ftb-presents-direwolf20-1-12/
FTB_MODPACK_ID: "31"
FTB_MODPACK_VERSION_ID: ""
# Use Pack ID from https://www.feed-the-beast.com/modpacks/119-ftb-presents-direwolf20-120?tab=about
FTB_MODPACK_ID: "119"
# FTB_MODPACK_VERSION_ID: ""
volumes:
# use a named, managed volume for data volume
- ftba:/data
- data:/data
volumes:
# declared the named volume, but use default/local storage engine
ftba: {}
data: {}

View File

@@ -125,6 +125,8 @@
"vanillafix",
"visuality",
"waila-harvestability",
"xaeroplus",
"yungs-menu-tweaks",
"zume"
],
"modpacks": {

View File

@@ -1,6 +1,8 @@
#!/bin/bash
: "${FTB_FORCE_REINSTALL:=false}"
: "${FTB_BASE_URL:=https://api.feed-the-beast.com/v1/modpacks}"
# Legacy base URL was https://api.modpacks.ch
ftbInstallMarker=".ftb-installed"
@@ -9,8 +11,30 @@ ftbInstallMarker=".ftb-installed"
isDebugging && set -x
set -e
function getVersion() {
jq -r --arg name "$1" '.targets|unique[] | select(.name == $name) | .version' version.json
#
#{
# "id": 119,
# "name": "FTB Presents Direwolf20 1.20",
# "versionName": "1.16.0",
# "versionId": 12252,
# "modPackTargets": {
# "modLoader": {
# "name": "neoforge",
# "version": "47.1.84"
# },
# "javaVersion": "17.0.7+7",
# "mcVersion": "1.20.1"
# },
ftbManifest=.manifest.json
function getModLoaderName() {
jq -r ".modPackTargets.modLoader.name" ${ftbManifest}
}
function getModLoaderVersion() {
jq -r ".modPackTargets.modLoader.version" ${ftbManifest}
}
function getMinecraftVersion() {
jq -r ".modPackTargets.mcVersion" ${ftbManifest}
}
if [[ $(getDistro) = alpine ]]; then
@@ -29,7 +53,7 @@ if ! [[ ${FTB_MODPACK_ID} =~ [0-9]+ ]]; then
fi
if [[ ! $FTB_MODPACK_VERSION_ID ]]; then
if ! FTB_MODPACK_VERSION_ID=$(curl -fsSL https://api.modpacks.ch/public/modpack/${FTB_MODPACK_ID} | jq -r '.versions | sort_by(.updated)[-1].id'); then
if ! FTB_MODPACK_VERSION_ID=$(curl -fsSL "${FTB_BASE_URL}/public/modpack/${FTB_MODPACK_ID}" | jq -r '.versions | sort_by(.updated)[-1].id'); then
logError "Unable to resolve latest modpack version ID for modpack ${FTB_MODPACK_ID}"
exit 1
fi
@@ -38,48 +62,54 @@ elif ! [[ ${FTB_MODPACK_VERSION_ID} =~ [0-9]+ ]]; then
exit 1
fi
if isTrue "$FTB_FORCE_REINSTALL" || ! [ -f "${ftbInstallMarker}" ] || [ "$(cat "${ftbInstallMarker}")" != "${FTB_MODPACK_ID}=${FTB_MODPACK_VERSION_ID}" ]; then
ftbInstaller=/data/ftb-installer
if isTrue "$FTB_FORCE_REINSTALL" ||
! [ -f "${ftbManifest}" ] ||
! [ -f "${ftbInstallMarker}" ] ||
[ "$(cat "${ftbInstallMarker}")" != "${FTB_MODPACK_ID}=${FTB_MODPACK_VERSION_ID}" ]; then
ftbInstaller=/data/ftb-installer-v2
arm=
if ! [[ -f "${ftbInstaller}" ]]; then
log "Downloading FTB installer"
if [ "$(uname -m)" == "aarch64" ]; then
log "Downloading ARM installer"
log "Downloading FTB installer for ARM"
arm="/arm"
else
log "Downloading x86 installer"
log "Downloading FTB installer for x86"
fi
# Example: https://api.feed-the-beast.com/v1/modpacks/public/modpack/119/12252/server/linux
# https://api.feed-the-beast.com/v1/modpacks/public/modpack/119/12252/server/arm/linux
# 1-1 is a placeholder modpack for just grabbing the installer
if ! get -o "${ftbInstaller}" "${FTB_BASE_URL}/public/modpack/1/1/server${arm}/linux"; then
logError "Failed to download FTB installer"
exit 1
fi
curl -fsSL https://api.modpacks.ch/public/modpack/1/1/server${arm}/linux -o "${ftbInstaller}"
chmod +x "${ftbInstaller}"
fi
log "Installing modpack ID ${FTB_MODPACK_ID}, version ID ${FTB_MODPACK_VERSION_ID}"
log "This could take a while..."
${ftbInstaller} "${FTB_MODPACK_ID}" "${FTB_MODPACK_VERSION_ID}" --noscript --auto > ftb-installer.log
${ftbInstaller} -pack "${FTB_MODPACK_ID}" -version "${FTB_MODPACK_VERSION_ID}" -auto -force | tee ftb-installer.log
rm -f forge*installer.jar
echo "${FTB_MODPACK_ID}=${FTB_MODPACK_VERSION_ID}" > ${ftbInstallMarker}
writeEula
# some modpacks result in --w----r-- permissions
chmod a+r version.json
else
log "FTB modpack ID ${FTB_MODPACK_ID}, version ID ${FTB_MODPACK_VERSION_ID} is ready to go"
fi
forgeVersion=$(getVersion "forge")
fabricVersion=$(getVersion "fabric")
mcVersion=$(getVersion "minecraft")
modLoader="$(getModLoaderName)"
modLoaderVersion="$(getModLoaderVersion)"
mcVersion=$(getMinecraftVersion)
VERSION="$mcVersion"
export VERSION
variants=(
"forge-${mcVersion}-${forgeVersion}.jar"
"forge-${mcVersion}-${forgeVersion}-universal.jar"
"forge-${mcVersion}-${forgeVersion}-${mcVersion}-universal.jar"
"fabric-${mcVersion}-${fabricVersion}-server-launch.jar"
run.sh
"${modLoader}-${mcVersion}-${modLoaderVersion}-universal.jar"
"${modLoader}-${mcVersion}-${modLoaderVersion}-${mcVersion}-universal.jar"
"${modLoader}-${mcVersion}-${modLoaderVersion}-server-launch.jar"
"${modLoader}-${mcVersion}-${modLoaderVersion}.jar"
)
for f in "${variants[@]}"; do
if [ -f $f ]; then

View File

@@ -15,7 +15,7 @@ if [[ $PURPUR_DOWNLOAD_URL ]]; then
if ! mc-image-helper install-purpur \
--output-directory=/data \
--results-file="$resultsFile" \
--url="$PURPUR_DOWNLOAD_URL}"; then
--url="${PURPUR_DOWNLOAD_URL}"; then
logError "Failed to download from custom Purpur URL"
exit 1
fi