#!/usr/bin/env bash function server_help() { usage_general cat< stop [servername] restart [servername] [port] attach [servername] reset [servername] delete [servername] EOF } function server_create() { 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 server_start() { if [[ ! -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then log e "Directory '${1}' does not exist!" exit 1 fi if [[ -z "${2}" ]]; then log e "You have to specify a port, on which the server listens!" exit 1 fi local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}" local software="$(getLocalConfValue ${dir} 'software')" local version="$(getLocalConfValue ${dir} 'version')" local build="$(getLocalConfValue ${dir} 'build')" local podman_network="$(getLocalConfValue ${dir} 'podman_network')" case "$(getLocalConfValue ${dir} 'type')" in "server") local software_url="$(getValueByKey SERVERRUNNERS.${software})" ;; "proxy") local software_url="$(getValueByKey PROXYRUNNERS.${software})" ;; esac if [[ $(checkImage "${software}" "${version}" "${build}") == false ]]; then log i "Building image '${version}/${software}:${build}'" buildImage "${software}" "${version}" "${build}" "${software_url}/versions/${version}/builds/${build}" else if [[ "$(getLocalConfValue ${dir} 'release')" == "latest" ]]; then if [[ $(checkUpdate "${software}" "${version}" "${build}" "$(getLocalConfValue ${dir} 'type')") == true ]]; then log w "Update for '${software}/${version}:${build}' is available." updateBuild "${software}" "${version}" "${dir}" "$(getLocalConfValue ${dir} 'type')" local oldbuild="${build}" build="$(getLocalConfValue ${dir} 'build')" if [[ $(checkImage "${software}" "${version}" "${build}") == false ]]; then log i "Updating image '${version}/${software}:${oldbuild}' => '${version}/${software}:${build}'" buildImage "${software}" "${version}" "${build}" "${software_url}/versions/${version}/builds/${build}" fi fi fi fi log i "Starting container '${1}' with image '${version}/${software}:${build}' on port '$([[ -n "${3}" ]] && echo ${3}:)${2}'" startContainer "${1}" "${version}/${software}:${build}" "${2}" "${3}" "${podman_network}" if (( DIRECTLY_ATTACH )); then server_attach "${1}" fi } function server_stop() { if [[ -z $(podman container ps | grep "${1}") ]]; then log w "Container '${1}' is not running!" return 1 fi log i "Stopping container '${1}'" stopContainer "${1}" } function server_restart() { server_stop "${1}" server_start "${1}" "${2}" "${3}" } function server_attach() { if [[ -z $(podman container ps | grep "${1}") ]]; then log e "Container '${1}' is not running!" exit 1 fi log i "Attaching to container '${1}'" podman container attach "${1}" } function server_reset() { if [[ ! -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then log e "Directory '${1}' does not exist!" exit 1 fi local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}" local datapack_dir="${dir}/data/world/datapacks" while [[ ! ${deleteDataDir} =~ [YyNn] ]]; do read -p "Do you want to reset the complete data dir located in ${dir}/data ? (This is an unrecoverable process): " deleteDataDir case "${deleteDataDir}" in "N"|"n") log e "Aborted by user!" exit 1 ;; esac done local backedup=false if [[ -n $(find "${datapack_dir}" -maxdepth 1 -type f) ]]; then while [[ ! ${backupDatapacksAns} =~ [YyNn] ]]; do read -p "Do you want to backup the datapack .zip found in ${datapack_dir} ?: " backupDatapacksAns case "${backupDatapacksAns}" in "Y"|"y") local backedup=true local tempdir=$(mktemp -d /tmp/pms-cli.XXXXXX) mv ${datapack_dir}/*.zip ${tempdir}/ ;; esac done fi rm -rf "${dir}/data" mkdir -p "${dir}/data/world/datapacks" if [[ "${backedup}" == true ]]; then while [[ ! ${restoreDatapacksAns} =~ [YyNn] ]]; do read -p "You have some backed up datapack .zip in ${tempdir}. Do you want to restore them now?: " restoreDatapacksAns case "${restoreDatapacksAns}" in "Y"|"y") mv ${tempdir}/*.zip "${dir}/data/world/datapacks/" rm -rf "${tempdir}" ;; esac done fi log s "Server '${1}' resetted!" } function server_delete() { if [[ ! -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then log e "Directory '${1}' does not exist!" exit 1 fi local delDir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}" while [[ ! ${deleteAns} =~ [YyNn] ]]; do read -p "Do you really want to delete the complete directory located in ${delDir} ? (This is an unrecoverable process): " deleteAns case "${deleteAns}" in "N"|"n") log e "Aborted by user!" exit 1 ;; esac done rm -rf "${delDir}" log s "Server '${1}' deleted!" }