Compare commits

...

16 Commits

Author SHA1 Message Date
Miika Kankare
b393b22136 Interpret backslash escapes for RCON_CMDS (#3008) 2024-07-21 10:29:41 -05:00
Geoff Bourne
d7c6a7d2b6 paper: download default configs before patching (#3004) 2024-07-20 13:15:16 -05:00
Geoff Bourne
0ff8e68f01 auto-cf: added blur-forge to global excludes (#3003) 2024-07-19 21:11:25 -05:00
Geoff Bourne
a71c5384b4 paper: suggest other release channel when build not found (#3000) 2024-07-17 21:12:12 -05:00
Geoff Bourne
379cef3c7e Re-download Modrinth projects based on modified time rather than filename existence (#2999) 2024-07-17 10:50:22 -05:00
dependabot[bot]
163a268770 build(deps): bump mkdocs-material from 9.5.28 to 9.5.29 in /docs in the patches group (#2996) 2024-07-15 07:21:00 -05:00
Pawel
f84ae66af3 Fix typo in reference to REMOVE_OLD_MODS variable (#2988) 2024-07-14 09:59:07 -05:00
Geoff Bourne
58face9c1b Avoid logging userinfo from MODS/PLUGINS URLs (#2993) 2024-07-14 09:58:39 -05:00
Geoff Bourne
b8e6eea265 auto-cf: remove necronomicon from global exclusions (#2991) 2024-07-14 09:35:16 -05:00
Geoff Bourne
78b55df635 mcopy: support basic auth via URL (#2989) 2024-07-13 21:51:34 -05:00
Geoff Bourne
0f9941373b cf: copy files found in downloads repo (#2986) 2024-07-13 13:38:43 -05:00
Geoff Bourne
6ac313ae71 cf: check downloads repo before attempting download of mod in modpack (#2985) 2024-07-13 10:36:57 -05:00
Geoff Bourne
bc0a87cc53 modrinth: add default exclusions discovered for prominence 2 (#2982) 2024-07-12 15:00:19 -05:00
Felipe Paschoal Bergamo
5baf398af3 Optimize startup on versionLessThan function (#2979) 2024-07-11 14:24:02 -05:00
dependabot[bot]
8dac5d1428 build(deps): bump docker/build-push-action from 5.4.0 to 6.3.0 (#2975) 2024-07-11 08:18:04 -05:00
Jeff Sandberg
4232a981e8 Update the autopause server listener to be proxy aware (#2978) 2024-07-08 14:14:10 -05:00
13 changed files with 232 additions and 21 deletions

View File

@@ -138,7 +138,7 @@ jobs:
uses: docker/setup-qemu-action@v3.1.0
- name: Build for test
uses: docker/build-push-action@v5.4.0
uses: docker/build-push-action@v6.3.0
with:
platforms: linux/amd64
tags: ${{ env.IMAGE_TO_TEST }}
@@ -176,7 +176,7 @@ jobs:
password: ${{ github.token }}
- name: Build and push
uses: docker/build-push-action@v5.4.0
uses: docker/build-push-action@v6.3.0
if: github.actor == github.repository_owner
with:
platforms: ${{ matrix.platforms }}

View File

@@ -55,7 +55,7 @@ jobs:
uses: docker/setup-buildx-action@v3.4.0
- name: Confirm multi-arch build
uses: docker/build-push-action@v5.4.0
uses: docker/build-push-action@v6.3.0
with:
platforms: ${{ matrix.platforms }}
# ensure latest base image is used
@@ -65,7 +65,7 @@ jobs:
cache-from: type=gha,scope=${{ matrix.variant }}
- name: Build for test
uses: docker/build-push-action@v5.4.0
uses: docker/build-push-action@v6.3.0
with:
# Only build single platform since loading multi-arch image into daemon fails with
# "docker exporter does not currently support exporting manifest lists"

View File

@@ -23,11 +23,11 @@ EXPOSE 25565
ARG APPS_REV=1
ARG GITHUB_BASEURL=https://github.com
ARG EASY_ADD_VERSION=0.8.6
ARG EASY_ADD_VERSION=0.8.7
ADD ${GITHUB_BASEURL}/itzg/easy-add/releases/download/${EASY_ADD_VERSION}/easy-add_${TARGETOS}_${TARGETARCH}${TARGETVARIANT} /usr/bin/easy-add
RUN chmod +x /usr/bin/easy-add
ARG RESTIFY_VERSION=1.7.3
ARG RESTIFY_VERSION=1.7.4
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${RESTIFY_VERSION} --var app=restify --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
@@ -37,7 +37,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${RCON_CLI_VERSION} --var app=rcon-cli --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG MC_MONITOR_VERSION=0.12.12
ARG MC_MONITOR_VERSION=0.12.13
RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_MONITOR_VERSION} --var app=mc-monitor --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
@@ -47,7 +47,7 @@ RUN easy-add --var os=${TARGETOS} --var arch=${TARGETARCH}${TARGETVARIANT} \
--var version=${MC_SERVER_RUNNER_VERSION} --var app=mc-server-runner --file {{.app}} \
--from ${GITHUB_BASEURL}/itzg/{{.app}}/releases/download/{{.version}}/{{.app}}_{{.version}}_{{.os}}_{{.arch}}.tar.gz
ARG MC_HELPER_VERSION=1.39.3
ARG MC_HELPER_VERSION=1.39.9
ARG MC_HELPER_BASE_URL=${GITHUB_BASEURL}/itzg/mc-image-helper/releases/download/${MC_HELPER_VERSION}
# used for cache busting local copy of mc-image-helper
ARG MC_HELPER_REV=1

View File

@@ -44,7 +44,7 @@ do
if [[ "$RCON_CMDS_STARTUP" ]]; then
while read -r cmd; do
run_command "$cmd"
done <<< "$RCON_CMDS_STARTUP"
done <<< "$(echo -e "$RCON_CMDS_STARTUP")"
fi
if
[[ -z "$RCON_CMDS_ON_CONNECT" ]] &&
@@ -66,7 +66,7 @@ do
logRcon "First Clients has Connected, running first connect cmds"
while read -r cmd; do
run_command "$cmd"
done <<< "$RCON_CMDS_FIRST_CONNECT"
done <<< "$(echo -e "$RCON_CMDS_FIRST_CONNECT")"
fi
# When a client joins
@@ -74,13 +74,13 @@ do
logRcon "Clients have Connected, running connect cmds"
while read -r cmd; do
run_command "$cmd"
done <<< "$RCON_CMDS_ON_CONNECT"
done <<< "$(echo -e "$RCON_CMDS_ON_CONNECT")"
# When a client leaves
elif (( CURR_CLIENTCONNECTIONS < CLIENTCONNECTIONS )) && [[ "$RCON_CMDS_ON_DISCONNECT" ]]; then
logRcon "Clients have Disconnected, running disconnect cmds"
while read -r cmd; do
run_command "$cmd"
done <<< "$RCON_CMDS_ON_DISCONNECT"
done <<< "$(echo -e "$RCON_CMDS_ON_DISCONNECT")"
fi
# Last client connection
@@ -89,7 +89,7 @@ do
logRcon "ALL Clients have Disconnected, running last disconnect cmds"
while read -r cmd; do
run_command "$cmd"
done <<< "$RCON_CMDS_LAST_DISCONNECT"
done <<< "$(echo -e "$RCON_CMDS_LAST_DISCONNECT")"
fi
CLIENTCONNECTIONS=$CURR_CLIENTCONNECTIONS
;;

View File

@@ -1,4 +1,4 @@
mkdocs-material == 9.5.28
mkdocs-material == 9.5.29
mkdocs-autorefs == 1.0.1
mkdocstrings == 0.25.1
mkdocs-literate-nav == 0.6.1

View File

@@ -16,6 +16,14 @@ To allow for the selection of experimental builds, set `PAPER_CHANNEL` to "exper
docker run ... -e TYPE=PAPER -e PAPER_CHANNEL=experimental ...
```
!!! tip
If you see the following error, it likely means you need to set the env var `PAPER_CHANNEL` to "experimental"
```
No build found for version 1.21 with channel 'default'
```
If you are hosting your own copy of Paper you can override the download URL with `PAPER_DOWNLOAD_URL=<url>`.
If you have attached a host directory to the `/data` volume, then you can install plugins via the `plugins` subdirectory. You can also [attach a `/plugins` volume](../../mods-and-plugins/index.md#optional-plugins-mods-and-config-attach-points). If you add plugins while the container is running, you'll need to restart it to pick those up.

View File

@@ -1,5 +1,7 @@
#!/bin/bash
# shellcheck source=../scripts/start-utils
. "${SCRIPTS:-/}start-utils"
current_uptime() {
awk '{print $1}' /proc/uptime | cut -d . -f 1
}
@@ -16,14 +18,20 @@ rcon_client_exists() {
[[ -n "$(ps -ax -o comm | grep 'rcon-cli')" ]]
}
use_proxy() {
if isTrue "$USES_PROXY_PROTOCOL"; then
echo "--use-proxy"
fi
}
mc_server_listening() {
mc-monitor status --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --timeout 10s >& /dev/null
mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --timeout 10s >&/dev/null
}
java_clients_connections() {
local connections
if java_running ; then
if ! connections=$(mc-monitor status --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --show-player-count); then
if java_running; then
if ! connections=$(mc-monitor status $(use_proxy) --host "${SERVER_HOST:-localhost}" --port "$SERVER_PORT" --show-player-count); then
# consider it a non-zero player count if the ping fails
# otherwise a laggy server with players connected could get paused
connections=1

View File

@@ -17,6 +17,7 @@
"better-third-person",
"biomeinfo",
"block-drops-jei-addon",
"blur-forge",
"cherished-worlds",
"chunk-animator",
"clickable-advancements",
@@ -66,7 +67,6 @@
"more-overlays",
"mouse-tweaks",
"neat",
"necronomicon",
"nekos-enchanted-books",
"no-recipe-book",
"no-nv-flash",

View File

@@ -1,15 +1,78 @@
{
"globalExcludes": [
"3dskinlayers",
"ae2-emi-crafting",
"AmbientSounds",
"amecs",
"Animation_Overhaul",
"appleskin",
"auudio",
"axolotlbuckets",
"BadOptimizations",
"BetterAdvancements",
"betterbeds",
"BetterThirdPerson",
"BHMenu",
"blur",
"Boat-Item-View",
"bobby",
"cat_jam",
"chat_heads",
"chatanimation",
"cherishedworlds",
"citresewn",
"clickadv",
"connector",
"DisableCustomWorldsAdvice",
"drippyloadingscreen",
"eating-animation",
"emiffect",
"emitrades",
"entity_model_features",
"entity_texture_features",
"entityculling",
"euphoriapatcher",
"fallingleaves",
"fancymenu",
"fast-ip-ping",
"FauxCustomEntityData",
"GeckoLibIrisCompat",
"gpumemleakfix",
"Highlighter",
"ImmediatelyFast",
"indium",
"iris",
"iris-flywheel",
"ItemBorders",
"ItemLocks",
"language-reload",
"lazy-language-loader",
"LegendaryTooltips",
"loadmyresources",
"lootbeams",
"MindfulDarkness",
"MouseTweaks",
"nicer-skies",
"notenoughanimations",
"oculus",
"OverflowingBars",
"PickUpNotifier",
"PresenceFootsteps",
"Prism",
"reeses_sodium_options",
"ResourcePackOverrides",
"ryoamiclights",
"yungsmenutweaks"
"Searchables",
"seasonhud",
"ShoulderSurfing",
"skinlayers3d",
"sodium",
"sorted_enchantments",
"visuality",
"VR-Combat",
"YeetusExperimentus",
"yungsmenutweaks",
"Zoomify"
],
"globalForceIncludes": [],
"modpacks": {}

View File

@@ -52,6 +52,12 @@ else
fi
# Download default configs to allow for consistent patching
for c in paper-global.yml paper-world-defaults.yml spigot.yml; do
DOWNLOAD_DEFAULT_CONFIGS+=",${PAPER_CONFIG_DEFAULTS_REPO}/${VERSION}/$c"
done
export DOWNLOAD_DEFAULT_CONFIGS
# Normalize on Spigot for downstream operations
export FAMILY=SPIGOT

View File

@@ -64,6 +64,9 @@ patchLog4jConfig() {
canUseRollingLogs=false
}
# Temporarily disable debugging output
oldState=$(shopt -po xtrace || true)
shopt -u -o xtrace
# Patch Log4j remote code execution vulnerability
# See https://www.minecraft.net/en-us/article/important-message--security-vulnerability-java-edition
if versionLessThan 1.7; then
@@ -80,6 +83,7 @@ elif isType PURPUR && versionLessThan 1.18.1; then
elif versionLessThan 1.18.1; then
useFallbackJvmFlag=true
fi
eval "$oldState"
if ${useFallbackJvmFlag}; then
JVM_OPTS="-Dlog4j2.formatMsgNoLookups=true ${JVM_OPTS}"

View File

@@ -4,6 +4,7 @@
. "${SCRIPTS:-/}start-utils"
set -e
handleDebugMode
: "${REPLACE_ENV_IN_PLACE:=${REPLACE_ENV_VARIABLES:-false}}"
: "${REPLACE_ENV_PATHS:=/data}"
@@ -13,6 +14,7 @@ set -e
: "${REPLACE_ENV_VARIABLES_EXCLUDE_PATHS:=}"
: "${PATCH_DEFINITIONS:=}"
: "${DEBUG:=false}"
: "${DOWNLOAD_DEFAULT_CONFIGS:=}"
if isTrue "${REPLACE_ENV_IN_PLACE}"; then
log "Replacing env variables in ${REPLACE_ENV_PATHS} that match the prefix '$REPLACE_ENV_VARIABLE_PREFIX' ..."
@@ -25,6 +27,16 @@ if isTrue "${REPLACE_ENV_IN_PLACE}"; then
"${REPLACE_ENV_PATHS[@]}"
fi
if [[ $DOWNLOAD_DEFAULT_CONFIGS ]]; then
log "Downloading default configs, if needed"
if ! mc-image-helper mcopy \
--to /data/config \
--skip-existing --skip-up-to-date=false \
"$DOWNLOAD_DEFAULT_CONFIGS" 2> /dev/null; then
log "WARN: one or more default config files were not available from $DOWNLOAD_DEFAULT_CONFIGS"
fi
fi
if [[ ${PATCH_DEFINITIONS} ]]; then
log "Applying patch definitions from ${PATCH_DEFINITIONS}"
mc-image-helper patch \

View File

@@ -161,11 +161,121 @@ function normalizeMemSize() {
echo $((val * scale))
}
function compare_version() {
local left_version=$1
local comparison=$2
local right_version=$3
if [[ -z "$left_version" ]]; then
echo "Left version is required"
return 1
fi
if [[ -z "$right_version" ]]; then
echo "Right version is required"
return 1
fi
# Handle version channels ('a', 'b', or numeric)
if [[ $left_version == a* || $left_version == b* ]]; then
left_version=${left_version:1}
fi
if [[ $right_version == a* || $right_version == b* ]]; then
right_version=${right_version:1}
fi
local left_version_channel=${left_version:0:1}
if [[ $left_version_channel =~ [0-9] ]]; then
left_version_channel='r'
fi
local right_version_channel=${right_version:0:1}
if [[ $right_version_channel =~ [0-9] ]]; then
right_version_channel='r'
fi
if [[ $comparison == "lt" && $left_version_channel < $right_version_channel ]]; then
return 0
elif [[ $comparison == "lt" && $left_version_channel > $right_version_channel ]]; then
return 1
elif [[ $comparison == "gt" && $left_version_channel > $right_version_channel ]]; then
return 0
elif [[ $comparison == "gt" && $left_version_channel < $right_version_channel ]]; then
return 1
elif [[ $comparison == "le" && $left_version_channel < $right_version_channel ]]; then
return 0
elif [[ $comparison == "le" && $left_version_channel == $right_version_channel ]]; then
return 0
elif [[ $comparison == "ge" && $left_version_channel > $right_version_channel ]]; then
return 0
elif [[ $comparison == "ge" && $left_version_channel == $right_version_channel ]]; then
return 0
elif [[ $comparison == "eq" && $left_version_channel == $right_version_channel ]]; then
return 0
fi
# Compare the versions using sort -V
local result
case $comparison in
"lt")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | head -n1) == "$left_version" && "$left_version" != "$right_version" ]]; then
result=0
else
result=1
fi
;;
"le")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | head -n1) == "$left_version" ]]; then
result=0
else
result=1
fi
;;
"eq")
if [[ "$left_version" == "$right_version" ]]; then
result=0
else
result=1
fi
;;
"ge")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | tail -n1) == "$left_version" ]]; then
result=0
else
result=1
fi
;;
"gt")
if [[ $(echo -e "$left_version\n$right_version" | sort -V | tail -n1) == "$left_version" && "$left_version" != "$right_version" ]]; then
result=0
else
result=1
fi
;;
*)
echo "Unsupported comparison operator: $comparison"
return 1
;;
esac
return $result
}
function versionLessThan() {
local oldState
# The return status when listing options is zero if all optnames are enabled, non- zero otherwise.
oldState=$(shopt -po xtrace || true)
shopt -u -o xtrace
# Use if-else since strict mode might be enabled
if mc-image-helper compare-versions "${VERSION}" lt "${1?}"; then
if compare_version "${VERSION}" "lt" "${1?}"; then
eval "$oldState"
return 0
else
eval "$oldState"
return 1
fi
}
@@ -342,7 +452,7 @@ function ensureRemoveAllModsOff() {
reason=${1?}
if isTrue "${REMOVE_OLD_MODS:-false}"; then
log "WARNING using REMOVE_OLDS_MODS interferes with $reason -- it is now disabled"
log "WARNING using REMOVE_OLD_MODS interferes with $reason -- it is now disabled"
REMOVE_OLD_MODS=false
fi
}