diff --git a/scripts/init b/scripts/init index 97e4ad4..2a86316 100644 --- a/scripts/init +++ b/scripts/init @@ -1,26 +1,154 @@ #!/bin/env bash JAVA_VERSION=${JAVA_VERSION:-"temurin@21"} -PATH=${JAVA_HOME}/bin:$PATH JAVA_HOME=/data/java/${JAVA_VERSION} -JAR=server.jar +JAR=server.jar ADD_ARGS=${ADD_ARGS:-""} MEM=${MEMORY:-2G} PUID="${PUID:-1000}" PGID="${PGID:-1000}" +PATH=${JAVA_HOME}/bin:$PATH + +# Set Permissions for data folder setperms() { - echo "Setting permissions to UID:${PUID} and GID:${PGID}" + echo -e "|_______________________________________________________|" + echo -e "|##--------------- Setting Permissions ---------------##|" + echo -e "|#| Setting permissions to UID:${PUID} and GID:${PGID}" sudo usermod -u ${PUID} minecraft >/dev/null 2>&1 sudo groupmod -g ${PGID} minecraft >/dev/null 2>&1 sudo chown -R ${PUID}:${PGID} /data >/dev/null 2>&1 + echo -e "|#|---------------------------------------------------|#|" sleep 2 - echo "DONE" + echo -e "|#| DONE" + echo -e "|##---------------------------------------------------##|" sleep 2 } +# Crash function +crash() { + sleep 5 + echo "Exit Complete" + exit 1 +} + +# Set Eula +setEula() { + echo "#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA)." >eula.txt + echo "eula=true" >>eula.txt +} + +# Check for Java, and install if neccesary +javaCheck() { + JAVA_HOME=/data/java/${JAVA_VERSION} + if [[ -f "$HOME/.jabba/jabba.sh" ]]; then + source $HOME/.jabba/jabba.sh + else + echo "Something went wrong with locating jabba(the java installer)" + exit 0 + fi + + if [[ ! -n "${JAVA_VERSION}" ]]; then + echo "NO JAVA_VERSION ENVIRONMENT VARIABLE SET SET IT" + crash + fi + + if [[ ! -f "/data/java/${JAVA_VERSION}/bin/java" ]]; then + rm -rf /data/java/${JAVA_VERSION} + jabba install ${JAVA_VERSION} -o /data/java/${JAVA_VERSION} + fi + PATH=${JAVA_HOME}/bin:$PATH + JAVA="java" +} + +# Paper Server +getPaper() { + SERVER_TYPE="Paper Minecraft" + LATEST_BUILD=$(curl -s https://api.papermc.io/v2/projects/${MC_LOADER}/versions/${MC_VERSION}/builds | + jq -r '.builds | map(select(.channel == "default") | .build) | .[-1]') + + if [ "$LATEST_BUILD" != "null" ]; then + JAR_NAME=${MC_LOADER}-${MC_VERSION}-${LATEST_BUILD}.jar + PAPERMC_URL="https://api.papermc.io/v2/projects/${MC_LOADER}/versions/${MC_VERSION}/builds/${LATEST_BUILD}/downloads/${JAR_NAME}" + + # Download the latest Paper version + curl -o server.jar $PAPERMC_URL + echo "Download completed" + echo "Minecraft Version: ${MC_VERSION}" + echo "Paper Version: ${LATEST_BUILD}" + else + echo "No stable build for version $MC_VERSION found :(" + fi +} + +# Fabric Server +getFabric() { + SERVER_TYPE="Fabric Minecraft" + LATEST_BUILD=$(curl -s https://meta.fabricmc.net/v2/versions/loader/${MC_VERSION} | jq -s '.[] .[0] .loader .version' | tr -d '"') + LATEST_INSTALLER=$(curl -s https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml | xmllint --xpath "/metadata/versioning/latest/text()" -) + DL_URL=https://meta.fabricmc.net/v2/versions/loader/${MC_VERSION}/${LATEST_BUILD}/${LATEST_INSTALLER}/server/jar + if [ "$LATEST_BUILD" != "null" ]; then + echo "$DL_URL" + curl -o server.jar ${DL_URL} + else + echo "TODO ERROR TEXT" + fi + +} + +# Forge Server +getForge() { + SERVER_TYPE="Forge Server" + LATEST_BUILD=$(curl -s https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json | jq -r ".promos[\"${MC_VERSION}-latest\"]") + DL_BUILD=${MC_VERSION}-${LATEST_BUILD} + DL_URL=https://maven.minecraftforge.net/net/minecraftforge/forge/$DL_BUILD/forge-$DL_BUILD-installer.jar + if [ "$LATEST_BUILD" != "null" ]; then + echo "$DL_URL" + curl -o forge-install.jar ${DL_URL} + echo "$JAVA -jar forge-install.jar --installServer" + $JAVA -jar forge-install.jar --installServer + ln -s forge-${MC_VERSION}-${LATEST_BUILD}-shim.jar server.jar + touch server.properties + + rm -f user_jvm_args.txt + rm -f forge-install.jar + rm -f forge-install.jar.log + rm -f README.txt + rm -f run.bat + rm -f run.sh + else + echo "TODO ERROR TEXT" + fi +} + +# Server route choice +serverSelect() { + mkdir -p /data/server + cd /data/server + if [[ ! -f server.jar ]]; then + case $MC_LOADER in + vanilla) + getVanilla + ;; + paper) + getPaper + ;; + fabric) + getFabric + ;; + forge) + getForge + ;; + *) + echo "Server of type ${MC_LOADER} is not recognized." + crash + ;; + esac + fi +} +# Build out java command buildCommand() { JAVA_ARGS="-Xms${MEM} -Xmx${MEM}" if [[ -z ${ADD_ARGS+x} ]]; then @@ -31,17 +159,32 @@ buildCommand() { } setperms - -mc - +javaCheck +serverSelect buildCommand -cd /data/server -if [[ -f "server.jar" ]]; then - echo "$JAVA_HOME/bin/java $RUN_STRING" - exec $JAVA_HOME/bin/java $RUN_STRING -else - echo "Server Not Found." - exit 1 -fi +setEula +## ----------------- SEND IT ----------------- ## +while true; do + cd /data/server + if [[ -f $JAR ]]; then + echo -e "|_______________________________________________________|" + echo -e "|##----------------- Server Starting -----------------##|" + echo -e "|#| Server Type: $SERVER_TYPE" + echo -e "|#| Java Version: $JAVA_VERSION" + echo -e "|#| Additional Arg: $ADD_ARGS" + echo -e "|#| Memory Allocated: $MEM" + echo -e "|#| Running as:" + echo -e "|#| User: $PUID" + echo -e "|#| Group: $PGID" + echo -e "|#| Run Command:" + echo -e "|#| java $RUN_STRING" + echo -e "|##---------------------------------------------------##|" + echo -e "|-------------------------------------------------------|" + exec java $RUN_STRING + else + echo "Server Not Found." + crash + fi +done