--- /dev/null
+#! /bin/bash
+# Elidragon v2 console script
+# Attach to the console of a world
+# Arguments: <worldname>
+
+source scripts/internal.sh
+
+assert_running $1
+screen -r `world_screenname $1`
--- /dev/null
+# internal functions used by Elidragon v2 scripts
+
+function world_lock {
+ echo "/tmp/ElidragonV2_$1_lock"
+}
+
+function world_screenname {
+ echo "Elidragon v2 - $1"
+}
+
+function kill_world {
+ kill `cat \`world_lock $1\``
+}
+
+function is_running {
+ return $(test -f `world_lock $1`)
+}
+
+function loop_worlds {
+ WORLDS=`ls worlds`
+ for WORLD in $WORLDS; do
+ $1 $WORLD
+ done
+}
+
+function assert_running {
+ if ! is_running $1; then
+ echo "Error: World $1 is not running"
+ exit 1
+ fi
+}
+
+function assert_not_running {
+ if is_running $1; then
+ echo "Error: World $1 is already running"
+ exit 1
+ fi
+}
+
+function start_world {
+ echo "Starting $1..."
+ assert_not_running $1
+
+ LOCK=`world_lock $1`
+
+ screen -dmS `world_screenname $1` bash -c "
+ while is_running $1; do
+ bash -c \"
+ echo \\$\\$ > $LOCK
+ exec minetest --server --terminal --world worlds/$1 --config worlds/$1/minetest.conf --logfile worlds/$1/debug.txt
+ \"
+ done
+ rm $LOCK
+ "
+}
+
+function stop_world {
+ echo "Stopping $1..."
+ assert_running $1
+
+ kill_world $1
+ rm `world_lock $1`
+}
+
+function restart_world {
+ echo "Restarting $1..."
+ assert_running $1
+
+ kill_world $1
+}
+
+function run_one_or_all {
+ if [ -z "$2" ]; then
+ loop_worlds $1
+ else
+ $1 $2
+ fi
+}
--- /dev/null
+#! /bin/bash
+# Elidragon v2 restart script
+# Restart one or all worlds
+# Arguments: [<worldname>]
+
+source scripts/internal.sh
+
+run_one_or_all restart_world $1
--- /dev/null
+#! /bin/bash
+# Elidragon v2 setup script
+# Install everything needed by the server
+
+# Initialize submodules
+git submodule update --recursive --remote
+
+# Add apt repo to always get the lastest MT release
+add-apt-repository ppa:minetestdevs/stable
+apt-get update -y
+
+# Install minetest and screen
+apt install minetest screen -y
+
+# Install multiserver
+go get github.com/HimbeerserverDE/multiserver
--- /dev/null
+#! /bin/bash
+# Elidragon v2 start script
+# Start one or all worlds
+# Arguments: [<worldname>]
+
+source scripts/internal.sh
+
+run_one_or_all start_world $1
--- /dev/null
+#! /bin/bash
+# Elidragon v2 stop script
+# Stop one or all worlds
+# Arguments: [<worldname>]
+
+source scripts/internal.sh
+
+run_one_or_all stop_world $1
--- /dev/null
+#! /bin/bash
+# Elidragon v2 update script
+# Update all software used by the server
+
+# Update this repo, also update submodules
+git pull --recurse-submodules
+
+# Update minetest and screen
+apt-get update -y
+apt-get upgrade minetest screen -y
+
+# Update multiserver
+go get -u github.com/HimbeerserverDE/multiserver
+++ /dev/null
-#! /bin/bash
-# Setup script for the Elidragon v2 server
-
-# Initialize submodules
-git submodule update --recursive --remote
-
-# Add apt repo to always get the lastest MT release
-add-apt-repository ppa:minetestdevs/stable
-apt-get update -y
-
-# Install minetest and screen
-apt install minetest screen -y
-
-# Install multiserver
-go get github.com/HimbeerserverDE/multiserver
+++ /dev/null
-#! /bin/bash
-# Update script for the Elidragon v2 server
-
-# Update this repo, also update submodules
-git pull --recurse-submodules
-
-# Update minetest and screen
-apt-get update -y
-apt-get upgrade minetest screen -y
-
-# Update multiserver
-go get -u github.com/HimbeerserverDE/multiserver