66# ANSI color codes
77RED=' \033[0;31m'
88GREEN=' \033[0;32m'
9- BLUE=' \033[0;34m'
109NC=' \033[0;0m' # No Color
1110
1211# Define Minecraft server directory
@@ -15,94 +14,79 @@ MINECRAFT_DIR="/data/minecraft"
1514# Create Minecraft directory
1615mkdir -p " $MINECRAFT_DIR " # Create the directory
1716
18- function version {
17+ version () {
1918 echo " $@ " | awk -F. ' { printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'
2019}
2120
2221# Select which java version to use
23- if [ $( version $SERVER_VERSION ) -ge $( version " 1.20.5" ) ]; then
22+ if [ " $( version " $SERVER_VERSION " ) " -ge " $( version " 1.20.5" ) " ]; then
2423 export JAVA_HOME=" /usr/lib/jvm/java-21-openjdk"
25- export PATH=$JAVA_HOME /bin:$PATH
26- JAVA_BINARY=$JAVA_HOME /bin/java
24+ export PATH=" $JAVA_HOME /bin:$PATH "
2725 echo " Using java version 21..."
28- elif [ $( version $SERVER_VERSION ) -ge $( version " 1.17" ) ]; then
26+ elif [ " $( version " $SERVER_VERSION " ) " -ge " $( version " 1.17" ) " ]; then
2927 export JAVA_HOME=" /usr/lib/jvm/java-17-openjdk"
30- export PATH=$JAVA_HOME /bin:$PATH
31- JAVA_BINARY=$JAVA_HOME /bin/java
28+ export PATH=" $JAVA_HOME /bin:$PATH "
3229 echo " Using java version 17..."
3330else
3431 export JAVA_HOME=" /usr/lib/jvm/java-8-openjdk"
35- export PATH=$JAVA_HOME /bin:$PATH
36- JAVA_BINARY=$JAVA_HOME /bin/java
32+ export PATH=" $JAVA_HOME /bin:$PATH "
3733 echo " Using java version 8..."
3834fi
3935
4036ls -l /data
4137# ls -l /
4238
4339# Download the specific Minecraft server version
44- # Originally I had it check if either the server jar either exists, or if the SERVER_VERSION or SERVER_SOFTWARE had changed, before downloading.
45- # I decided against this so you get the newest build every time you restart the container.
46- # Feel free to change this if you want to, by adding this if statement around the current one: if [ ! -e "$MINECRAFT_DIR"/*.jar ] || [ "grep -Po 'Minecraft Server Type: \K.*' "/opt/minecraft/server_info.txt"" != $SERVER_SOFTWARE ] || [ "grep -Po 'Minecraft Server Version: \K.*' "/opt/minecraft/server_info.txt"" != $SERVER_VERSION ]; then
4740if [ " $SERVER_SOFTWARE " = " paper" ]; then
48-
49- # Get the build number of the most recent build
50- latest_build=$( curl -sX GET " https://papermc.io/api/v2" /projects/" paper" /versions/" $SERVER_VERSION " /builds -H ' accept: application/json' | jq ' .builds [-1].build' )
51-
52- # Construct download URL
53- download_url=" https://papermc.io/api/v2" /projects/" paper" /versions/" $SERVER_VERSION " /builds/" $latest_build " /downloads/" paper" -" $SERVER_VERSION " -" $latest_build " .jar
54-
55- # Download file
41+ latest_build=$( curl -sX GET " https://papermc.io/api/v2/projects/paper/versions/$SERVER_VERSION /builds" -H ' accept: application/json' | jq ' .builds[-1].build' )
42+ download_url=" https://papermc.io/api/v2/projects/paper/versions/$SERVER_VERSION /builds/$latest_build /downloads/paper-$SERVER_VERSION -$latest_build .jar"
5643 SERVER_JAR=" $MINECRAFT_DIR /paper-$SERVER_VERSION .jar"
5744 wget -O " $SERVER_JAR " " $download_url "
5845
5946elif [ " $SERVER_SOFTWARE " = " purpur" ]; then
60- # Construct download URL
61- download_url=" https://api.purpurmc.org/v2/purpur/" $SERVER_VERSION " /latest/download"
62-
63- # Download file
47+ download_url=" https://api.purpurmc.org/v2/purpur/$SERVER_VERSION /latest/download"
6448 SERVER_JAR=" $MINECRAFT_DIR /purpur-$SERVER_VERSION .jar"
6549 wget -O " $SERVER_JAR " " $download_url "
6650
6751elif [ " $SERVER_SOFTWARE " = " vanilla" ]; then
68- # Get the download url from mojang
6952 download_url=$( curl -sX GET " https://launchermeta.mojang.com/mc/game/version_manifest.json" | jq -r --arg ver " $SERVER_VERSION " ' .versions[] | select(.id == $ver) | .url' | xargs curl -s | jq -r ' .downloads.server.url' )
70-
71- # Download file
7253 SERVER_JAR=" $MINECRAFT_DIR /vanilla-$SERVER_VERSION .jar"
7354 wget -O " $SERVER_JAR " " $download_url "
7455
7556elif [ " $SERVER_SOFTWARE " = " manual" ]; then
76- $ SERVER_JAR = " $MINECRAFT_DIR /$SERVER_JAR "
57+ SERVER_JAR= " $MINECRAFT_DIR /$SERVER_JAR "
7758 if [ -f " $SERVER_JAR " ]; then
7859 echo -e " ${GREEN} Minecraft server JAR file found.${NC} "
7960 else
8061 echo -e " ${RED} Failed to find the Minecraft server JAR file. Exiting...${NC} "
8162 exit 1
8263 fi
64+
8365elif [ " $SERVER_SOFTWARE " = " fabric" ]; then
8466 loader_version=$( curl -sX GET " https://meta.fabricmc.net/v2/versions/loader/$SERVER_VERSION " | jq -r ' [.[] | select(.loader.stable == true)] | sort_by(.loader.build) | last | .loader.version' )
8567 installer_version=$( curl -sX GET " https://meta.fabricmc.net/v2/versions/installer" | jq -r ' [.[] | select(.stable == true)] | sort_by(.version) | last | .version' )
8668 download_url=" https://meta.fabricmc.net/v2/versions/loader/$SERVER_VERSION /$loader_version /$installer_version /server/jar"
8769 SERVER_JAR=" $MINECRAFT_DIR /fabric-$SERVER_VERSION .jar"
8870 wget -O " $SERVER_JAR " " $download_url "
8971fi
72+
9073# Write Minecraft server type and version to a text file
9174echo " Minecraft Server Type: $SERVER_SOFTWARE " | tee " $MINECRAFT_DIR /server_info.txt"
9275echo " Minecraft Server Version: $SERVER_VERSION " | tee -a " $MINECRAFT_DIR /server_info.txt"
9376
9477# Change to Minecraft directory
95- cd " $MINECRAFT_DIR "
78+ cd " $MINECRAFT_DIR " || exit
9679
97- # Start server and accept the EULA if the file does not exist.
98- if [ ! -e $MINECRAFT_DIR " /eula.txt" ]; then
99- java -Xms1024M -Xmx1024M -jar $SERVER_JAR nogui
80+ # Start server and accept the EULA if the file does not exist.
81+ if [ ! -e " $MINECRAFT_DIR /eula.txt" ]; then
82+ java -Xms1024M -Xmx1024M -jar " $SERVER_JAR " nogui
10083 # Accept EULA by modifying eula.txt
10184 echo -e " ${GREEN} Accepting EULA...${NC} "
10285 sed -i ' s/eula=false/eula=true/g' eula.txt
10386 sed -i ' s/enable-rcon=false/enable-rcon=true/g' server.properties
10487 sed -i ' s/rcon.password=/rcon.password=mcsli-docker/g' server.properties
10588fi
89+
10690echo -e " ${GREEN} Minecraft server installation and setup complete! Starting...${NC} "
10791
10892# Startup command; uses aikar's flags for better garbage collection
0 commit comments