Created
May 26, 2021 00:48
-
-
Save Aries0d0f/a136710adf5357fe20a2b09ef2d389ab to your computer and use it in GitHub Desktop.
Minecraft Server Manager Utility
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/zsh | |
welcome_menu () { | |
clear -x; | |
echo "\e[1;37m[Minecraft Server Util]\e[0m"; | |
echo "version: \e[1;37mv0.0.1\e[0m"; | |
echo "by \e[1;4;37m@Aries0d0f\e[0m | \e[1;4;36mhttps://aries0d0f.me\e[0m"; | |
echo "\r"; | |
echo "Press \e[1;37m[ENTER]\e[0m to start this util"; | |
echo "Press \e[1;37m'q'\e[0m to exit"; | |
printf "\e[1;32m> \e[0m"; | |
read "KEY?"; | |
if [[ "$KEY" =~ ^[Qq]$ ]]; | |
then | |
echo "\e[3;36mBye!\e[0m"; | |
sleep 1; | |
clear -x; | |
exit; | |
elif [[ "$KEY" = "" ]]; | |
then | |
main_menu; | |
else | |
echo "\e[3;31mInvalid command.\e[0m\n"; | |
sleep 1; | |
welcome_menu; | |
fi | |
} | |
main_menu () { | |
clear -x; | |
echo "\e[1;37m[Minecraft Server Sessions]\e[0m"; | |
tput sc; | |
printf "\e[3;36mLoading...\e[0m"; | |
sleep 1; | |
SERVER_SESSIONS=("${(@f)$(tmux ls | sed -En "s/mc-server-(.*)\: (.*)/\1/p")}"); | |
tput rc; | |
tput el; | |
echo "\r"; | |
count=1; | |
for SESSION in $SERVER_SESSIONS; | |
do | |
echo "\e[1;37m$count\e[0m - \e[1;33m$SESSION\e[0m"; | |
count=$((count + 1)); | |
done | |
echo "\r"; | |
echo "\e[3;36mChoose one to continue...\e[0m"; | |
printf "\e[1;32m> \e[0m"; | |
while read "KEY?"; | |
do | |
if [[ "$KEY" =~ ^[Qq] ]]; | |
then | |
echo "\e[3;36mBye!\e[0m"; | |
sleep 1; | |
clear -x; | |
exit; | |
elif [[ "$KEY" =~ ^([0-9])+ ]] | |
then | |
server_handler $SERVER_SESSIONS[$KEY]; | |
break; | |
else | |
echo "\e[3;31mInvalid command.\e[0m\n"; | |
sleep 1; | |
main_menu; | |
break; | |
fi | |
done | |
} | |
server_handler () { | |
clear -x; | |
SERVER=$1; | |
echo "\e[1;37m[ Server: \e[1;33m$SERVER\e[1;37m ]\e[0m"; | |
tput sc; | |
echo "\e[3;36mLoading server...\e[0m"; | |
sleep 1; | |
SERVER_PATH="$HOME/Minecraft/Servers/$SERVER"; | |
SERVER_ENGINE=`basename $(readlink -f "$SERVER_PATH/server.jar") | sed -En "s/minecraft_server.(.*).jar/\1/p"`; | |
tput rc; | |
echo "Location: \e[1;37m$SERVER_PATH\e[0m"; | |
echo "Minecraft Server Engine: \e[1;37m$SERVER_ENGINE\e[0m"; | |
sleep 1; | |
server_menu $SERVER; | |
} | |
server_menu () { | |
SERVER=$1; | |
tput sc; | |
echo "\e[3;36mAttach to Minecraft Server Shell...\e[0m"; | |
sleep 2; | |
tput rc; | |
tput el; | |
server_manual; | |
printf "\e[1;37mMC\e[0m@\e[1;33m$SERVER\e[0m \e[0;32m>\e[0m "; | |
while read "KEY?"; | |
do | |
if [[ "$KEY" =~ ^[Bb] ]]; | |
then | |
broadcaster $SERVER; | |
printf "\e[1;37mMC\e[0m@\e[1;33m$SERVER\e[0m \e[0;32m>\e[0m "; | |
elif [[ "$KEY" =~ ^[Mm] ]]; | |
then | |
broadcaster $SERVER "Maintenance work needs to be performed on this Minecraft server."; | |
broadcaster $SERVER "You will be automatically logged off after 30 min." | |
printf "\e[1;37mMC\e[0m@\e[1;33m$SERVER\e[0m \e[0;32m>\e[0m "; | |
elif [[ "$KEY" =~ ^[Ss] ]]; | |
then | |
shutdown $SERVER; | |
echo "\r\e[3;36mBack to main menu\e[0m"; | |
sleep 1; | |
clear -x; | |
main_menu; | |
break; | |
elif [[ "$KEY" =~ ^[Rr] ]]; | |
then | |
shutdown $SERVER; | |
sleep 5; | |
tput sc; | |
printf "\r\e[3;36mServer \e[0m\e[1;33m$SERVER\e[0m\e[3;36m preparing to restart...\e[0m"; | |
$HOME/Minecraft/Scripts/startup.sh > /dev/null 2>&1; | |
tput rc; | |
tput el; | |
echo "\r\e[3;36mServer \e[0m\e[1;33m$SERVER\e[0m\e[3;36m is start.\e[0m"; | |
sleep 2; | |
echo "\r\e[3;36mBack to main menu\e[0m"; | |
sleep 1; | |
clear -x; | |
main_menu; | |
break; | |
elif [[ "$KEY" =~ ^[Ll] ]]; | |
then | |
command_dispatcher $SERVER "/list"; | |
sleep 5; | |
PLAYERS=`cat "/tmp/stdout_mc-server-$SERVER.log" | sed -En "s/.*\]\: (.*)/\1/p"`; | |
echo "\r$PLAYERS"; | |
printf "\e[1;37mMC\e[0m@\e[1;33m$SERVER\e[0m \e[0;32m>\e[0m "; | |
elif [[ "$KEY" =~ ^[Qq] ]]; | |
then | |
echo "\e[3;36mBye!\e[0m"; | |
sleep 1; | |
clear -x; | |
exit 0; | |
elif [[ "$KEY" =~ ^[Xx] ]]; | |
then | |
clear -x; | |
main_menu; | |
elif [[ "$KEY" =~ ^[Hh] ]]; | |
then | |
server_manual; | |
printf "\e[1;37mMC\e[0m@\e[1;33m$SERVER\e[0m \e[0;32m>\e[0m "; | |
else | |
echo "\e[3;31mInvalid command. help for manual\e[0m". | |
printf "\e[1;37mMC\e[0m@\e[1;33m$SERVER\e[0m \e[0;32m>\e[0m "; | |
fi | |
done | |
} | |
server_manual () { | |
echo "---------------------------------------------------" | |
echo "B, b, broadcast Broadcast custom message"; | |
echo "M, m, maintenance Send maintenance message"; | |
echo "S, s, shutdown Shutdown Minecraft Server"; | |
echo "R, r, restart Restart Minecraft Server"; | |
echo "L, l, list List online player"; | |
echo "X, x Back to main menu"; | |
echo "Q, q, quit Exit this util"; | |
echo "H, h, help Show this manual"; | |
echo "---------------------------------------------------"; | |
} | |
broadcaster () { | |
SERVER_NAME=$1; | |
MESSAGE=$2; | |
command_dispatcher $1 "/say $2"; | |
} | |
shutdown () { | |
SERVER=$1; | |
tput ed; | |
tput el; | |
tput sc; | |
printf "\r\e[3;36mSaving all data...\e[0m"; | |
command_dispatcher $SERVER "/save-all"; | |
sleep 10; | |
tput rc; | |
tput el; | |
tput sc; | |
printf "\r\e[3;36mShutdown \e[0m\e[1;33m$SERVER\e[0m\e[3;36m...\e[0m"; | |
command_dispatcher $SERVER "/stop"; | |
sleep 5; | |
tput rc; | |
tput el; | |
echo "\r\e[3;36mServer \e[0m\e[1;33m$SERVER\e[0m\e[3;36m is shutdown.\e[0m"; | |
sleep 1; | |
} | |
command_dispatcher () { | |
TMUX_SERVER_SESSION="mc-server-$1"; | |
COMMAND=$2; | |
LOG="/tmp/stdout_$TMUX_SERVER_SESSION.log"; | |
touch LOG; | |
tmux attach -t $TMUX_SERVER_SESSION -d \;\ | |
set-buffer "$2" \;\ | |
paste-buffer \;\ | |
send-keys Enter \;\ | |
pipe-pane -o "cat > $LOG" \;\ | |
detach-client 1> /dev/null; | |
blackhole_buffer; | |
} | |
blackhole_buffer () { | |
tput sc; | |
read -s -k 8; | |
echo "\r"; | |
tput rc; | |
} | |
welcome_menu; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment