Skip to content

Instantly share code, notes, and snippets.

@alex-eg
Created June 4, 2016 11:37
Show Gist options
  • Select an option

  • Save alex-eg/1359e3e0fe0875997304d998290e1765 to your computer and use it in GitHub Desktop.

Select an option

Save alex-eg/1359e3e0fe0875997304d998290e1765 to your computer and use it in GitHub Desktop.
#!/bin/bash
user="minecraft"
session="mc-session"
serv_dir="/home/minecraft/server/"
usage() {
echo "Minecraft control tool"
echo "Usage:"
echo " start [minecraft-server.jar] start server"
echo " stop stop server"
echo " status check server status"
echo " enter connect to console"
echo " whitelist <nick> add <nick> to whitelist"
echo " settings <file> edit settings file"
}
check_running() {
local session=$(su -m "$user" -c "screen -list" | grep "$session")
[[ -n "$session" ]]
}
send_command() {
local command="screen -S $session -X stuff \"$1\""
su -m "$user" -c "$command"
}
start() {
local command="java -Xms6144M -Xmx6144M -jar $1 nogui"
pushd "$serv_dir"
$(su -m "$user" -c "screen -S ${session} -dm $command")
popd
}
stop() {
local command="stop$(printf '\r')"
send_command "$command"
}
enter() {
$(su -m "$user" -c "screen -r ${session}")
}
whitelist() {
local command="whitelist add $1$(printf '\r')"
send_command "$command"
}
edit() {
local command="vim -i $(dirname $serv_dir)/.viminfo ${serv_dir}/${1}"
su -m "$user" -c "$command"
}
case "$1" in
"start")
if check_running ; then
echo "Minecraft session seems to be running."
exit 1
else
if [[ -z "$2" ]]; then
serv_jar=$(find "$serv_dir" -iname 'minecraft_server*.jar' | sort -r | head -1)
if [[ -z "$serv_jar" ]]; then
echo "Error: Cannot find server .jar file"
exit 2
else
echo "Server jar file is not specified, using $serv_jar"
fi
else
serv_jar="$2"
fi
start "$serv_jar"
fi
;;
"stop")
if check_running ; then
stop
else
echo "Server screen is not running"
fi
;;
"status")
if check_running ; then
echo "Server screen session is up"
exit 0
else
echo "Server screen session is down"
exit 1
fi
;;
"enter")
if check_running ; then
enter
else
echo "Server screen session is down"
fi
;;
"whitelist")
if check_running ; then
if [[ -z "$2" ]]; then
echo "Nick not specified"
exit 2
else
whitelist "$2"
fi
fi
;;
"settings")
if [[ -z "$2" ]]; then
echo "File to edit not specified"
else
edit "$2"
fi
;;
*)
usage
;;
esac
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment