From 89ae20012e5e40419cc8e9e52036b4385d26cf11 Mon Sep 17 00:00:00 2001 From: Florian Kinder Date: Tue, 22 Oct 2024 20:40:34 +0200 Subject: [PATCH] Added DLC_SPACE_AGE environment variable (#519) * Added DLC_SPACE_AGE environment variable to enable or disable dlc related mods Took 53 minutes * :art: Took 2 minutes --- README.md | 25 ++++++++++---------- docker/files/docker-dlc.sh | 38 +++++++++++++++++++++++++++++++ docker/files/docker-entrypoint.sh | 2 ++ 3 files changed, 53 insertions(+), 12 deletions(-) create mode 100755 docker/files/docker-dlc.sh diff --git a/README.md b/README.md index 09b3758..1980108 100644 --- a/README.md +++ b/README.md @@ -261,18 +261,19 @@ The `server-settings.json` file may then contain the variable references like th These are the environment variables which can be specified at container run time. -| Variable Name | Description | Default | Available in | -| - | - | - | - | -| GENERATE_NEW_SAVE | Generate a new save if one does not exist before starting the server | false | 0.17+ | -| LOAD_LATEST_SAVE | Load latest when true. Otherwise load SAVE_NAME | true | 0.17+ | -| PORT | UDP port the server listens on | 34197 | 0.15+ | -| BIND | IP address (v4 or v6) the server listens on (IP\[:PORT]) | | 0.15+ | -| RCON_PORT | TCP port the rcon server listens on | 27015 | 0.15+ | -| SAVE_NAME | Name to use for the save file | _autosave1 | 0.17+ | -| TOKEN | factorio.com token | | 0.17+ | -| UPDATE_MODS_ON_START | If mods should be updated before starting the server | | 0.17+ | -| USERNAME | factorio.com username | | 0.17+ | | -| CONSOLE_LOG_LOCATION | Saves the console log to the specifies location | | +| Variable Name | Description | Default | Available in | +|----------------------|----------------------------------------------------------------------|------------|--------------| +| GENERATE_NEW_SAVE | Generate a new save if one does not exist before starting the server | false | 0.17+ | +| LOAD_LATEST_SAVE | Load latest when true. Otherwise load SAVE_NAME | true | 0.17+ | +| PORT | UDP port the server listens on | 34197 | 0.15+ | +| BIND | IP address (v4 or v6) the server listens on (IP\[:PORT]) | | 0.15+ | +| RCON_PORT | TCP port the rcon server listens on | 27015 | 0.15+ | +| SAVE_NAME | Name to use for the save file | _autosave1 | 0.17+ | +| TOKEN | factorio.com token | | 0.17+ | +| UPDATE_MODS_ON_START | If mods should be updated before starting the server | | 0.17+ | +| USERNAME | factorio.com username | | 0.17+ | +| CONSOLE_LOG_LOCATION | Saves the console log to the specifies location | | | +| DLC_SPACE_AGE | Enables or disables the mods for DLC Space Age in mod-list.json | true | 2.0.8+ | **Note:** All environment variables are compared as strings diff --git a/docker/files/docker-dlc.sh b/docker/files/docker-dlc.sh new file mode 100755 index 0000000..f589c77 --- /dev/null +++ b/docker/files/docker-dlc.sh @@ -0,0 +1,38 @@ +#!/bin/bash +set -eou pipefail + +# Path to the mod-list.json file +MOD_LIST_FILE="$MODS/mod-list.json" + +enable_mod() +{ + echo "Enable mod $1 for DLC" + jq --arg mod_name "$1" 'if .mods | map(.name) | index($mod_name) then .mods |= map(if .name == $mod_name and .enabled == false then .enabled = true else . end) else . end' "$MOD_LIST_FILE" > "$MOD_LIST_FILE.tmp" + mv "$MOD_LIST_FILE.tmp" "$MOD_LIST_FILE" +} + +disable_mod() +{ + echo "Disable mod $1 for DLC" + jq --arg mod_name "$1" 'if .mods | map(.name) | index($mod_name) then .mods |= map(if .name == $mod_name and .enabled == true then .enabled = false else . end) else .mods += [{"name": $mod_name, "enabled": false}] end' "$MOD_LIST_FILE" > "$MOD_LIST_FILE.tmp" + mv "$MOD_LIST_FILE.tmp" "$MOD_LIST_FILE" +} + +# Enable or disable DLCs if configured +if [[ ${DLC_SPACE_AGE:-} == "true" ]]; then + # Define the DLC mods + DLC_MODS=("elevated-rails" "quality" "space-age") + + # Iterate over each DLC mod + for MOD in "${DLC_MODS[@]}"; do + enable_mod "$MOD" + done +else + # Define the DLC mods + DLC_MODS=("elevated-rails" "quality" "space-age") + + # Iterate over each DLC mod + for MOD in "${DLC_MODS[@]}"; do + disable_mod "$MOD" + done +fi diff --git a/docker/files/docker-entrypoint.sh b/docker/files/docker-entrypoint.sh index 420bedd..569dfa5 100755 --- a/docker/files/docker-entrypoint.sh +++ b/docker/files/docker-entrypoint.sh @@ -43,6 +43,8 @@ if [[ ${UPDATE_MODS_ON_START:-} == "true" ]]; then ./docker-update-mods.sh fi +./docker-dlc.sh + EXEC="" if [[ $(id -u) = 0 ]]; then # Update the User and Group ID based on the PUID/PGID variables