diff --git a/pms-cli b/pms-cli index 773e88c..a76667d 100755 --- a/pms-cli +++ b/pms-cli @@ -1,7 +1,7 @@ #!/usr/bin/env bash # CONSTANTS -readonly PKGVER="0.1.1" +readonly PKGVER="0.2.0" readonly LICENSE="GNU AGPLv3" readonly ROOTPATH="$(dirname $(readlink -f $(which $0)))" readonly TEMPLATEDIR="${ROOTPATH}/.template" @@ -26,7 +26,8 @@ operations: $(basename ${0}) {--start} [servername] [port] $(basename ${0}) {--stop} [servername] $(basename ${0}) {--restart} [servername] [port] - $(basename ${0}) {--attach} [servername]" + $(basename ${0}) {--attach} [servername] + $(basename ${0}) {--reset} [servername]" } function version() { @@ -42,7 +43,7 @@ the terms of the ${LICENSE}" ### OPT_SHORT="hVv" -OPT_LONG="help,version,verbose,init:,datapack:,start:,stop:,restart:,attach:" +OPT_LONG="help,version,verbose,init:,datapack:,start:,stop:,restart:,attach:,reset:" TEMP=$(getopt -o ${OPT_SHORT} --long ${OPT_LONG} -n $(basename ${0}) -- "$@") if [ "$?" != 0 ]; then @@ -90,6 +91,10 @@ while true; do shift attach "$1" ;; + --reset) + shift + reset "$1" + ;; --) shift break diff --git a/utils/podman b/utils/podman index 48a8999..9d19016 100644 --- a/utils/podman +++ b/utils/podman @@ -78,6 +78,7 @@ function buildImage() { log d "building docker image" podman build --rm "${BUILDDIR}" --tag "${2}/${1}:${3}" + [[ $? -eq 0 ]] && log s "Image '${2}/${1}:${3}' built!" log d "removing temporary build-dir" [[ -f "${BUILDDIR}" ]] && rm -rf "${BUILDDIR}" @@ -93,6 +94,7 @@ function buildImage() { function startContainer() { log d "Starting container '$1'" podman run --name "$1" --userns=keep-id:uid=1000 --rm -it -d -p $3:25565 -v $(getValueByKey 'PODMAN_DIRECTORY')/$1/data:/var/server "$2" java -Dcom.mojang.eula.agree=true -jar /var/exec/server.jar --nogui --port 25565 + [[ $? -eq 0 ]] && log s "Container '$1' started!" } ## @@ -103,4 +105,5 @@ function startContainer() { function stopContainer() { log d "Stopping container '$1'" podman container stop --time 100 $1 + log s "Container '$1' stopped" } diff --git a/utils/reset b/utils/reset new file mode 100644 index 0000000..afd003d --- /dev/null +++ b/utils/reset @@ -0,0 +1,51 @@ +#!/usr/bin/env bash + +function 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 a unrecoverable process): " deleteDataDir + case "$deleteDataDir" in + "N"|"n") + log e "Aborted by user!" + exit 1 + ;; + esac + done + + local backedup=false + while [[ ! $backupDatapacksAns =~ [YyNn] ]]; do + read -p "Do you want to backup the datapack .zip found in $datapack_dir ?: " backupDatapacksAns + case "$backupDatapacksAns" in + "Y"|"y") + if [[ -n $(find "${datapack_dir}" -maxdepth 1 -type f) ]]; then + local backedup=true + local tempdir=$(mktemp -d /tmp/pms-cli.XXXXXX) + mv ${datapack_dir}/*.zip ${tempdir}/ + fi + ;; + esac + done + + rm -rf "$dir/data" + mkdir "$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!" +} diff --git a/utils/stop b/utils/stop index a7a01ad..bbdda1a 100644 --- a/utils/stop +++ b/utils/stop @@ -2,8 +2,8 @@ function stop() { if [[ -z $(podman container ps | grep "$1") ]]; then - log e "Container '$1' is not running!" - exit 1 + log w "Container '$1' is not running!" + return 1 fi log i "Stopping container '$1'" stopContainer "$1"