#!/bin/bash # LGSM command_mods_install.sh function # Author: Daniel Gibbs # Contributor: UltimateByte # Website: https://gameservermanagers.com # Description: List and installs available mods along with mods_list.sh. local commandname="MODS" local commandaction="Mod Installation" local function_selfname="$(basename $(readlink -f "${BASH_SOURCE[0]}"))" check.sh mods_list.sh fn_mods_install_init(){ fn_script_log "Entering mods & addons installation" echo "=================================" echo "${gamename} mods & addons installation" echo "" # Display available mods from mods_list.sh fn_mods_show_available echo "" # Keep prompting as long as the user input doesn't correspond to an available mod while [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; do echo -en "Enter a \e[36mmod\e[0m to install (or exit to abort): " read -r usermodselect # Exit if user says exit or abort if [ "${usermodselect}" == "exit" ]||[ "${usermodselect}" == "abort" ]; then fn_script_log "User aborted." echo "Aborted." core_exit.sh # Supplementary output upon invalid user input elif [[ ! " ${availablemodscommands[@]} " =~ " ${usermodselect} " ]]; then fn_print_error2_nl "${usermodselect} is not a valid mod." echo " * Enter a valid mod or input exit to abort." fi done # Gives a pretty name to the user and get all mod info currentmod="${usermodselect}" fn_mod_get_info_from_command fn_print_dots_nl "Installing ${modprettyname}" sleep 1 fn_script_log "Installing ${modprettyname}." } # Create mods directory if it doesn't exist # Assuming the game is already installed as mods_list.sh checked for it. fn_mods_dir(){ if [ ! -d "${modinstalldir}" ]; then fn_script_log_info "Creating mods directory: ${modinstalldir}" fn_print_dots "Creating mods directory" sleep 1 mkdir -p "${modinstalldir}" fn_print_ok_nl "Created mods directory" fi } # Clear mod download directory so that there is only one file in it since we don't the file name and extention fn_clear_tmp_mods(){ if [ -d "${modstmpdir}" ]; then rm -r "${modstmpdir}" fn_script_log "Clearing temp mod download directory: ${modstmpdir}" fi } # Create tmp download mod directory fn_mods_tmpdir(){ if [ ! -d "${modstmpdir}" ]; then mkdir -p "${modstmpdir}" fn_script_log "Creating temp mod download directory: ${modstmpdir}" fi } fn_mod_dl(){ # fn_fetch_file "${fileurl}" "${filedir}" "${filename}" "${executecmd}" "${run}" "${force}" "${md5}" fileurl="${modurl}" filedir="${modstmpdir}" filename="${modfilename}" fn_script_log "Downloading mods to ${modstmpdir}" fn_fetch_file "${fileurl}" "${filedir}" "${filename}" # Check if variable is valid checking if file has been downloaded and exists if [ ! -f "${modstmpdir}/${modfilename}" ]; then fn_print_fail "An issue occurred upon downloading ${modprettyname}" core_exit.sh fi } fn_mod_extract(){ # fn_dl_extract "${filedir}" "${filename}" "${extractdir}" filename="${modfilename}" extractdir="${modstmpdir}/extracted" if [ ! -d "${extractdir}" ]; then mkdir -p "${extractdir}" fi fn_script_log "Extracting ${modprettyname} to ${extractdir}" fn_dl_extract "${filedir}" "${filename}" "${extractdir}" } fn_mod_fileslist(){ # ${modsdatadir}/${modcommand}-files.list true; } fn_mod_copy_destination(){ # Destination directory: ${modinstalldir} fn_script_log "Copying ${modprettyname} to ${modinstalldir}" cp -Rf "${extractdir}/." "${modinstalldir}/" } # Check if the mod is already installed and warn the user fn_mod_already_installed(){ if [ -f "${modslockfilefullpath}" ]; then if [ -n "$(cat "${modslockfilefullpath}" | grep "${modcommand}")" ]; then echo "" fn_print_warning_nl "${modprettyname} has already been installed." echo " * Mod files will be overwritten." sleep 4 fi fi } # Add the mod to the installed mods list fn_mod_add_list(){ # Create lgsm/data directory if [ ! -d "${modsdatadir}" ]; then mkdir -p "${modsdatadir}" fn_script_log "Created ${modsdatadir}" fi # Create lgsm/data/${modslockfile} if [ ! -f "${modslockfilefullpath}" ]; then touch "${modslockfilefullpath}" fn_script_log "Created ${modslockfilefullpath}" fi # Input mod name to lockfile if [ ! -n "$(cat "${modslockfilefullpath}" | grep "${modcommand}")" ]; then echo "${modcommand}" >> "${modslockfilefullpath}" fn_script_log "${modcommand} added to ${modslockfile}" fi } # Run all required operation fn_mod_installation(){ # If a mod was selected if [ -n "${currentmod}" ]; then # Get mod info fn_mod_get_info_from_command # Check if mod is already installed fn_mod_already_installed # Check and create required directories fn_mods_dir # Clear lgsm/tmp/mods dir if exists then recreate it fn_clear_tmp_mods fn_mods_tmpdir # Download mod fn_mod_dl # Extract the mod fn_mod_extract # Build a file list fn_mod_fileslist # Copying to destination fn_mod_copy_destination # Ending with installation routines fn_mod_add_list fn_clear_tmp_mods fn_print_ok_nl "${modprettyname} installed." fn_script_log "${modprettyname} installed." else fn_print_fail "No mod was selected." core_exit.sh fi } fn_mods_install_init fn_mod_installation