#!/usr/bin/env bash function init() { createNetwork "${2}" if [[ -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then log e "Directory '${1}' already exists!" exit 1 fi local newdir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}" mkdir -p "${newdir}/data/world/datapacks" populateConfig "${newdir}/config.json" "${2}" } function populateConfig() { local config="${1}" local network_name="${2}" local runnertype local build local software local software_url local release local version # software log i "What would you like to install?" while [[ ! ${softwareAns} =~ [1-2] ]]; do echo -ne "[1] Server\n[2] Proxy\n" read -p "Answer: " softwareAns done case "${softwareAns}" in 1) runnertype="server" log i "Which server-software would you like to install?" local servers=($(getValueByKey 'SERVERRUNNERS|keys[]')) while [[ ! ${serverAns} =~ [0-9] ]]; do for (( i = 0; i<${#servers[@]}; i++ )); do if [[ -n ${servers[${i}]} ]]; then echo "[$((${i} + 1))] ${servers[${i}]}" fi done read -p "Answer: " serverAns done if [[ ${serverAns} -gt ${#servers[@]} ]]; then log e "The answer '${serverAns}' is not valid!" exit 1 fi software="${servers[$((${serverAns} - 1))]}" software_url="$(getValueByKey SERVERRUNNERS.${software})" ;; 2) runnertype="proxy" log i "Which proxy-software would you like to install?" local proxies=($(getValueByKey 'PROXYRUNNERS|keys[]')) while [[ ! ${proxyAns} =~ [0-9] ]]; do for (( i = 0; i<${#proxies[@]}; i++ )); do if [[ -n ${proxies[${i}]} ]]; then echo "[$((${i} + 1))] ${proxies[${i}]}" fi done read -p "Answer: " proxyAns done if [[ ${proxyAns} -gt ${#proxies[@]} ]]; then log e "The answer '${proxyAns}' is not valid!" exit 1 fi software="${proxies[$((${proxyAns} - 1))]}" software_url="$(getValueByKey PROXYRUNNERS.${software})" ;; *) log e "The answer '${softwareAns}' is not valid!" exit 1 ;; esac # version log i "Which version of '${software}' would you like to install?" local versions=($(curl -s "${software_url}" | jq -r '.versions[]' )) while [[ -z ${versionAns} ]]; do for (( i = 0; i<${#versions[@]}; i++ )); do echo "[$((${i} + 1))] ${versions[${i}]}" done read -p "Answer: " versionAns done if [[ ${versionAns} -gt ${#versions[@]} ]]; then log e "The answer '${versionAns}' is not valid!" exit 1 fi version="${versions[$((${versionAns} - 1))]}" # releasecycle log i "Which release-cycle do you want to go?" while [[ -z ${releaseCycleAns} ]]; do echo -ne "[1] latest\n[2] specific\n" read -p "Answer: " releaseCycleAns done case "${releaseCycleAns}" in 1) release="latest" build=$(curl -s "${software_url}/versions/${version}" | jq -r '.builds | last') ;; 2) log i "Which build of '${software}/${version}' would you like to use?" local builds=($(curl -s "${software_url}/versions/${version}" | jq -r '.builds[]')) while [[ -z ${buildAns} ]]; do for (( i = 0; i<${#builds[@]}; i++ )); do echo "[$((${i} + 1))] ${builds[${i}]}" done read -p "Answer: " buildAns done if [[ ${buildAns} -gt ${#builds[@]} ]]; then log e "The answer '${buildAns}' is not valid!" exit 1 fi build="${builds[$((${buildAns} - 1))]}" release="specific" ;; esac jq "(.type=\"${runnertype}\")|(.build=${build})|(.software=\"${software}\")|(.release=\"${release}\")|(.version=\"${version}\")|(.podman_network=\"${network_name}\")" ${TEMPLATEDIR}/config.json > "${config}" }