Minecraft Control Panel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

225 lines
5.4 KiB

#!/bin/bash
CONFIG_DIR="/etc/mc-cp/"
FILE_CFG="${CONFIG_DIR}${1}.cfg"
FILE_POWER="${CONFIG_DIR}${1}.power"
DIR_OF_SCRIPT="/usr/bin/"
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
function find_screen {
if screen -ls "$1" | grep -o "^\s*[0-9]*\.$1[ "$'\t'"](" --color=NEVER -m 1 | grep -oh "[0-9]*\.$1" --color=NEVER -m 1 -q >/dev/null; then
screen -ls "$1" | grep -o "^\s*[0-9]*\.$1[ "$'\t'"](" --color=NEVER -m 1 | grep -oh "[0-9]*\.$1" --color=NEVER -m 1 2>/dev/null
return 0
else
echo "$1"
return 1
fi
}
if [ $1 = "list" ]
then
i=0
for f in ${CONFIG_DIR}*.cfg
do
filename="${f##*/}"
filenameWithoutExtension="${filename%.*}"
if [ -w $f ]
then
stst="${GREEN}ACTION${NC}"
else
stst="${RED}NO ACTION${NC}"
fi
if [ -r $f ]
then
source $f
if find_screen "${SCREEN_NAME}" >/dev/null; then
hasscr="${YELLOW}RUN${NC}"
else
hasscr="${YELLOW}NO RUN${NC}"
fi
consl="${GREEN}CONSOLE${NC}"
else
hasscr="???"
consl="${RED}NO CONSOLE${NC}"
fi
let "i=i+1"
echo -e "${i}. ${YELLOW}$filenameWithoutExtension${NC} (${hasscr}) - ${stst} , ${consl}"
done
exit
fi
if [ $1 = "help" ]
then
echo -e "${RED}========= ${GREEN}Minecraft Server Control Panel (mc-cp) ${RED}========="
echo -e "${YELLOW}mc-cp NAME start ${GREEN}- start NAME server"
echo -e "${YELLOW}mc-cp NAME stop ${GREEN}- stop NAME server"
echo -e "${YELLOW}mc-cp NAME restart ${GREEN}- send server NAME comand stop and after run"
echo -e "${YELLOW}mc-cp NAME send COMAND ${GREEN}- send server NAME comand - COMAND"
echo -e "${YELLOW}mc-cp list ${GREEN}- list all register servers,status & permissions current user SSH"
echo -e "${YELLOW}mc-cp NAME new-config ${GREEN}- start master create new server with NAME"
echo -e "${YELLOW}mc-cp NAME view-config ${GREEN}- show all config file NAME server"
echo -e "${YELLOW}mc-cp NAME remove-config ${GREEN}- stop NAME server and remove his config"
echo -e "${YELLOW}mc-cp NAME console ${GREEN}- open console screen select server NAME"
echo -e "${YELLOW}mc-cp NAME run ${GREEN}- start server NAME with not auto run after down"
echo -e "${RED}============== ${GREEN}by Misterzym for up-world.ru ${RED}=============${NC}"
exit
fi
if [ "$#" -lt 2 ]; then
echo -e "${RED}What are you doing?! Parametrs wrong!${NC}"
exit
fi
if [ $2 = "new-config" ]
then
echo "Server dir:"
read Dirs
echo "Server jar file name:"
read Jar
echo "How much memory size server (GB):"
read Memory
echo "#!/bin/bash" > ${FILE_CFG}
echo "SCREEN_NAME=\"${1}\"" >> ${FILE_CFG}
echo "SERVER_DIR=\"$Dirs\"" >> ${FILE_CFG}
echo "SERVER_JAR=\"$Jar\"" >> ${FILE_CFG}
echo "SERVER_MEM=\"${Memory}G\"" >> ${FILE_CFG}
echo 'STOPING_SERVER="0"' >> ${FILE_CFG}
echo 'echo "0" > "${CONFIG_DIR}${1}.power"' >> ${FILE_CFG}
chmod 666 ${FILE_CFG}
echo "0" > ${FILE_POWER}
chmod 666 ${FILE_POWER}
exit
fi
if [ -f ${FILE_CFG} ]
then
echo -e "${GREEN}Find configuration file ${1}${NC}"
else
echo -e "${RED}Cant find configuration file ${1}${NC}"
exit
fi
if [ $2 = "view-config" ]
then
if [ -r ${FILE_CFG} ]
then
source ${FILE_CFG}
echo -e "Server dir: ${YELLOW}${SERVER_DIR}${NC}"
echo -e "Server jar file: ${YELLOW}${SERVER_JAR}${NC}"
echo -e "Memory size server: ${YELLOW}${SERVER_MEM}B${NC}"
else
echo -e "${RED}Not permission${NC}"
fi
exit
fi
if [ $2 = "remove-config" ]
then
if [ -w ${FILE_CFG} ]
then
rm ${FILE_CFG}
rm ${FILE_POWER}
echo -e "${GREEN}Remove config success${NC}"
else
echo -e "${RED}Remove config access${NC}"
fi
exit
fi
if [ $2 = "start" ]
then
if [ -w ${FILE_CFG} ]
then
echo -e "${GREEN}Server ${YELLOW}${SCREEN_NAME}${GREEN} has been started${NC}"
else
echo -e "${RED}Not Permission ${1}${NC}"
exit
fi
source ${FILE_CFG}
screen -S "${SCREEN_NAME}" -X kill >/dev/null 2>&1
screen -S "${SCREEN_NAME}" -d -m
screen -S "${SCREEN_NAME}" -X -p 0 stuff $"cd ${SERVER_DIR}"
screen -S "${SCREEN_NAME}" -X -p 0 stuff $'\r'
screen -S "${SCREEN_NAME}" -X -p 0 stuff $"${DIR_OF_SCRIPT}mc-cp ${1} run"
screen -S "${SCREEN_NAME}" -X -p 0 stuff $'\r'
fi
if [ $2 = "restart" ]
then
if [ -w ${FILE_CFG} ]
then
echo -e "${GREEN}Server ${YELLOW}${SCREEN_NAME}${GREEN} has been restarted${NC}"
else
echo -e "${RED}Not Permission ${1}${NC}"
exit
fi
source ${FILE_CFG}
screen -S "${SCREEN_NAME}" -X -p 0 stuff $'stop\r'
fi
if [ $2 = "stop" ]
then
if [ -w ${FILE_CFG} ]
then
echo -e "${GREEN}Server ${YELLOW}${1}${GREEN} has been stoped${NC}"
else
echo -e "${RED}Not Permission ${1}${NC}"
exit
fi
source ${FILE_CFG}
echo "1" > "${FILE_POWER}"
screen -S "${SCREEN_NAME}" -X -p 0 stuff $'stop\r'
fi
if [ $2 = "send" ]
then
if [ -w ${FILE_CFG} ]
then
echo -e "${GREEN}Server ${YELLOW}${1}${GREEN} send msg ${YELLOW}${3} ${NC}"
else
echo -e "${RED}Not Permission ${1}${NC}"
exit
fi
source ${FILE_CFG}
screen -S "${SCREEN_NAME}" -X -p 0 stuff $"$3\r"
fi
if [ $2 = "console" ]
then
if [ -r ${FILE_CFG} ]
then
echo -e "${GREEN}Open console ${1}${NC}"
else
echo -e "${RED}No Permission ${1}${NC}"
exit
fi
source ${FILE_CFG}
screen -x -D "$SCREEN_NAME"
fi
if [ $2 = "run" ]
then
source ${FILE_CFG}
while true
do
if [ $STOPING_SERVER = "1" ]
then
break
fi
cd ${SERVER_DIR}
java -Xms${SERVER_MEM} -Xmx${SERVER_MEM} -XX:hashCode=5 -Dfile.encoding=UTF-8 -jar ${SERVER_JAR} --log-strip-color
read STOPING_SERVER < "${CONFIG_DIR}${1}.power"
done
fi