#!/usr/bin/env bash # Retrieves the script's directory and cd's into it. script_dir="$(cd "$(dirname "$0")" && pwd)" cd ${script_dir} # Check if the current directory is inside a Git repository. if [ -d .git ] || git rev-parse --is-inside-work-tree > /dev/null 2>&1 ; then # Pull updated scripts from CoastalCommits. echo "Updating scripts..." git pull echo "Scripts updated!" echo "Server must be restarted for script updates to take effect." else echo "WARNING: This directory is not a Git repository. Script updates will not be automatically fetched." fi # If config.sh exists, fetch variables from it if [ -f "config.sh" ]; then source config.sh configpath="config.sh" echo "Loaded configuration from config.sh" else # If config.sh doesn't exist, check if config.sh.example exists if [ -f "config.sh.example" ]; then # Fetch variables from config.sh.example echo "WARNING: config.sh file does not exist, falling back on default configuration." source config.sh.example configpath="config.sh.example" echo "Loaded configuration from config.sh.example" else # Handle the scenario when both files are missing echo "FATAL: Configuration files are missing! Cannot start the Factorio server." exit 1 fi fi # Load the last downloaded Factorio version from config.sh, if available if [ "$configpath" = "config.sh" ]; then last_downloaded_version=$(grep -oP 'last_downloaded_version=\K[^"]*' "$configpath") if [ $? -ne 0 ]; then last_download_version="None" fi else last_downloaded_version="None" fi # Check if the last downloaded version matches the current version if [ "$last_downloaded_version" != "$version" ] || [ "$last_downloaded_version" = "stable" ] || [ "$last_downloaded_version" = "latest" ]; then echo "Fetching Factorio binary..." wget "https://factorio.com/get-download/${version}/headless/linux64" -O factorio_headless.tar.xz if [ $? -ne 0 ]; then echo "FATAL: There is not a headless linux64 build available for the version you've selected in your ${configpath} file." echo "FATAL: See this website for a list of all Factorio versions: https://factorio.com/download/archive/" rm -f factorio_headless.tar.xz exit 1 fi echo "Extracting Factorio binary..." tar -xf factorio_headless.tar.xz --strip-components=1 --overwrite echo "Factorio binary updated!" rm -f factorio_headless.tar.xz else echo "Not updating Factorio binary, as the existing version matches the version stated in the configuration file." fi # Update the last downloaded version in the config.sh file if [ "$configpath" = "config.sh" ]; then sed -i "/last_downloaded_version=.*/i # This parameter is used for auto-updating the Factorio binary." "$configpath" sed -i "/last_downloaded_version=.*/i # Do not change this parameter unless you know what you're doing!" "$configpath" sed -i "s/last_downloaded_version=.*/last_downloaded_version=\"$version\"/" "$configpath" fi # This checks if the ./saves/$save_name.zip save file exists or not... if [ ! -f "./saves/${save_name}.zip" ]; then # ...if not, create the save file ./bin/x64/factorio ${extra_params_create} --create "./saves/${save_name}.zip" fi # This creates a byobu session that starts the server. byobu new-session -d -s factorio "./bin/x64/factorio ${extra_params_start_server} --start-server ./saves/${save_name}.zip" # This attaches the current terminal to the byobu session. # Comment this out if you don't want this functionality. byobu attach -t factorio # Load the last downloaded Factorio version from config.sh, if available if [ "$configpath" = "config.sh" ]; then last_downloaded_version=$(grep -oP 'last_downloaded_version=\K[^"]*' "$configpath") if [ $? -ne 0 ]; then last_download_version="None" fi else last_downloaded_version="None" fi # Check if the last downloaded version matches the current version if [ "$last_downloaded_version" != "$version" ] || [ "$last_downloaded_version" = "stable" ] || [ "$last_downloaded_version" = "latest" ]; then echo "Fetching Factorio binary..." wget "https://factorio.com/get-download/${version}/headless/linux64" -O factorio_headless.tar.xz if [ $? -ne 0 ]; then echo "FATAL: There is not a headless linux64 build available for the version you've selected in your ${configpath} file." echo "FATAL: See this website for a list of all Factorio versions: https://factorio.com/download/archive/" rm -f factorio_headless.tar.xz exit 1 fi echo "Extracting Factorio binary..." tar -xf factorio_headless.tar.xz --strip-components=1 --overwrite echo "Factorio binary updated!" rm -f factorio_headless.tar.xz else echo "Not updating Factorio binary, as the existing version matches the version stated in the configuration file." # Update the last downloaded version in the config.sh file if [ -f "$configpath" ]; then sed -i "s/last_downloaded_version=.*/last_downloaded_version=\"$version\"/" "$configpath" fi fi