diff --git a/JavaInstallScripts/FabricInstall b/JavaInstallScripts/FabricInstall index 7f633fb..e2599f3 100755 --- a/JavaInstallScripts/FabricInstall +++ b/JavaInstallScripts/FabricInstall @@ -1,36 +1,35 @@ #!/bin/bash -sudo apt update -qq +set -e + +sudo apt update -qq sudo apt install -y -qq curl jq unzip dos2unix wget cd .. mkdir -p server cd server -echo -e 'Please check if your mc version is available: https://meta.fabricmc.net/v2/versions/game' -echo -e '\n> Enter Minecraft version: ' -read MC_VERSION +MC_VERSION="${MC_VERSION:-latest}" +echo "> Using Minecraft version: $MC_VERSION" + +SERVER_JARFILE=server.jar +FABRIC_VERSION=latest -if [ -z "$MC_VERSION" ]; then - $MC_VERSION=latest - echo -e 'continuing with the latest version' +if [ "$MC_VERSION" = "latest" ]; then + MC_VERSION=$(curl -s https://meta.fabricmc.net/v2/versions/game \ + | jq -r '.[] | select(.stable==true) | .version' | head -n1) +elif [ "$MC_VERSION" = "snapshot" ]; then + MC_VERSION=$(curl -s https://meta.fabricmc.net/v2/versions/game \ + | jq -r '.[] | select(.stable==false) | .version' | head -n1) fi -# -- EDIT HERE | DO NOT EDIT ABOVE -- # -SERVER_JARFILE=server.jar # LEAVE THIS PART ALONE -FABRIC_VERSION=latest # FABRIC_VERSION: https://meta.fabricmc.net/v2/versions/installer -# -- EDIT HERE | DO NOT EDIT BELOW -- # +[ "$FABRIC_VERSION" = "latest" ] && \ + FABRIC_VERSION=$(curl -s https://meta.fabricmc.net/v2/versions/installer | jq -r '.[0].version') +wget -q -O fabric-installer.jar \ + https://maven.fabricmc.net/net/fabricmc/fabric-installer/$FABRIC_VERSION/fabric-installer-$FABRIC_VERSION.jar -# Enable snapshots -if [ -z "$MC_VERSION" ] || [ "$MC_VERSION" == "latest" ]; then - MC_VERSION=$(curl -sSL https://meta.fabricmc.net/v2/versions/game | jq -r '.[] | select(.stable== true )|.version' | head -n1) -elif [ "$MC_VERSION" == "snapshot" ]; then - MC_VERSION=$(curl -sSL https://meta.fabricmc.net/v2/versions/game | jq -r '.[] | select(.stable== false )|.version' | head -n1) -fi +java -jar fabric-installer.jar server \ + -mcversion "$MC_VERSION" \ + -downloadMinecraft -if [ -z "$FABRIC_VERSION" ] || [ "$FABRIC_VERSION" == "latest" ]; then - FABRIC_VERSION=$(curl -sSL https://meta.fabricmc.net/v2/versions/installer | jq -r '.[0].version') -fi -wget -O fabric-installer.jar https://maven.fabricmc.net/net/fabricmc/fabric-installer/$FABRIC_VERSION/fabric-installer-$FABRIC_VERSION.jar -java -jar fabric-installer.jar server -mcversion $MC_VERSION -downloadMinecraft -echo -e "Install Complete" +echo "> Fabric install complete" diff --git a/JavaInstallScripts/ForgeInstall b/JavaInstallScripts/ForgeInstall index 50c8c71..5347d28 100755 --- a/JavaInstallScripts/ForgeInstall +++ b/JavaInstallScripts/ForgeInstall @@ -4,140 +4,141 @@ sudo apt update -qq sudo apt install -y -qq jq curl export MAIN_DIR=$(pwd) -echo -e 'fetching forge versions data...' -JSON_DATA=`curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json` +echo -e '> fetching forge versions data...' + +JSON_DATA=$(curl -sSL https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json) FILE_SITE=https://maven.minecraftforge.net/net/minecraftforge/forge/ -echo $MAIN_DIR cd .. -rm ./startJavaServer -wget https://raw.githubusercontent.com/lordofwizard/mcserver/main/startJavaServer +rm -f ./startJavaServer +wget -q https://raw.githubusercontent.com/lordofwizard/mcserver/main/startJavaServer chmod +x ./startJavaServer + mkdir -p server cd server -echo -e '\nPlease visit https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json to check for available versions and choose accordingly' -# MC_VERSION : BUILD_TYPE: https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json -echo -e "\n> Enter Forge build type(default 1):" -echo -e "Type [1] recommended" -echo -e "Type [2] latest" +echo -e '\n> Visit https://files.minecraftforge.net/net/minecraftforge/forge/promotions_slim.json for available versions' + +# ----------------------------- +# Forge build type selection +# ----------------------------- +echo -e "\n> Enter Forge build type (default 1):" +echo -e " [1] recommended" +echo -e " [2] latest" read BUILD_TYPE -# if no build type, use recommended [[ -z $BUILD_TYPE ]] && BUILD_TYPE=1 if [[ $BUILD_TYPE -eq 1 ]]; then - BUILD_TYPE=recommended - + BUILD_TYPE=recommended elif [[ $BUILD_TYPE -eq 2 ]]; then - BUILD_TYPE=latest - + BUILD_TYPE=latest else - echo -e "Please enter the appropriate number" - cd "$MAIN_DIR" - ./ForgeInstall - exit + echo -e "> Invalid option" + cd "$MAIN_DIR" + ./ForgeInstall + exit 1 fi -echo -e "you chose $BUILD_TYPE" +echo -e "> Build type selected: $BUILD_TYPE" -echo -e "\n> Enter minecraft version: " -read MC_VERSION +# ----------------------------- +# Minecraft version (FROM ENV) +# ----------------------------- +MC_VERSION="${MC_VERSION:-latest}" +echo -e "\n> Using Minecraft version: $MC_VERSION" -if [ -z $MC_VERSION ] || [ "$MC_VERSION" == "latest" ]; then - MC_VERSION=`echo -e ${JSON_DATA} | jq -r '.promos | to_entries[] | .key | select(contains("latest")) | split("-")[0]' | sort -t. -k2,2n -k3,3n -k4,4n | tail -1` +if [ "$MC_VERSION" == "latest" ]; then + MC_VERSION=$(echo "${JSON_DATA}" | jq -r '.promos | to_entries[] | .key | select(contains("latest")) | split("-")[0]' \ + | sort -t. -k2,2n -k3,3n -k4,4n | tail -1) fi -if [ ! -z $FORGE_VERSION ]; then - DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}-${BUILD_TYPE}/forge-${FORGE_VERSION} - FORGE_JAR=forge-${FORGE_VERSION}*.jar - +# ----------------------------- +# Forge version resolution +# ----------------------------- +if [ -n "$FORGE_VERSION" ]; then + DOWNLOAD_LINK=https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}-${BUILD_TYPE}/forge-${FORGE_VERSION} else - - echo -e "\nMinecraft version: ${MC_VERSION}" - echo -e "Build Type: ${BUILD_TYPE}\n" - - ## some variables for getting versions and things - VERSION_KEY=`echo -e ${JSON_DATA} | jq -r --arg MC_VERSION "${MC_VERSION}" --arg BUILD_TYPE "${BUILD_TYPE}" '.promos | to_entries[] | .key | select(contains($BUILD_TYPE)) | select(contains($MC_VERSION))' | head -1` - echo $VERSION_KEY - - ## locating the forge version - if [ "${VERSION_KEY}" == "" ] && [ "${BUILD_TYPE}" == "latest" ]; then - echo -e "dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested." - VERSION_KEY=`echo -e ${JSON_DATA} | jq -r --arg MC_VERSION "${MC_VERSION}" '.promos | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains("latest"))' | head -1` + echo -e "\n> Minecraft version: ${MC_VERSION}" + echo -e "> Build type: ${BUILD_TYPE}\n" + + VERSION_KEY=$(echo "${JSON_DATA}" | jq -r \ + --arg MC_VERSION "$MC_VERSION" \ + --arg BUILD_TYPE "$BUILD_TYPE" \ + '.promos | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains($BUILD_TYPE))' | head -1) + + if [[ -z "$VERSION_KEY" && "$BUILD_TYPE" == "latest" ]]; then + echo -e "> No recommended build found, falling back to latest" + VERSION_KEY=$(echo "${JSON_DATA}" | jq -r \ + --arg MC_VERSION "$MC_VERSION" \ + '.promos | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains("latest"))' | head -1) fi - ## Error if the mc version set wasn't valid. - if [ "${VERSION_KEY}" == "" ] || [ "${VERSION_KEY}" == "null" ]; then - echo -e "The install failed because there is no valid version of forge for the version on minecraft selected." - exit 1 + if [[ -z "$VERSION_KEY" || "$VERSION_KEY" == "null" ]]; then + echo -e "> No valid Forge version found for Minecraft $MC_VERSION" + exit 1 fi - FORGE_VERSION=`echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY "$VERSION_KEY" '.promos | .[$VERSION_KEY]'` + FORGE_VERSION=$(echo "${JSON_DATA}" | jq -r --arg KEY "$VERSION_KEY" '.promos[$KEY]') - if [ "${MC_VERSION}" == "1.7.10" ] || [ "${MC_VERSION}" == "1.8.9" ]; then + if [[ "$MC_VERSION" == "1.7.10" || "$MC_VERSION" == "1.8.9" ]]; then DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION} - - else + else DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}/forge-${MC_VERSION}-${FORGE_VERSION} - - fi + fi fi -echo -e "Downloading forge version ${FORGE_VERSION}" -echo -e "Download link is ${DOWNLOAD_LINK}" -if [ ! -z "${DOWNLOAD_LINK}" ]; then - if curl --output /dev/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then - echo -e "installer jar download link is valid." - else - echo -e "link is invalid closing out" - exit 2 - fi -else - echo -e "no download link closing out" - exit 3 +# ----------------------------- +# Download + install +# ----------------------------- +echo -e "\n> Downloading Forge $FORGE_VERSION" +echo -e "> URL: ${DOWNLOAD_LINK}-installer.jar" + +if ! curl --silent --head --fail "${DOWNLOAD_LINK}-installer.jar"; then + echo -e "> Invalid Forge download link" + exit 2 fi -curl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar +curl -sSL -o installer.jar "${DOWNLOAD_LINK}-installer.jar" -#Checking if downloaded jars exist -if [ ! -f ./installer.jar ]; then - echo "!!! Error by downloading forge version ${FORGE_VERSION} !!!" - exit +if [ ! -f installer.jar ]; then + echo -e "> Forge installer download failed" + exit 3 fi -#Installing server -echo -e "Installing forge server.\n" -java -jar installer.jar --installServer || { echo -e "install failed"; exit 4; } +echo -e "\n> Installing Forge server" +java -jar installer.jar --installServer || { echo -e "> Forge install failed"; exit 4; } + +rm -f installer.jar -#Deleting installer.jar -echo -e "Deleting installer.jar file.\n" -rm -rf installer.jar +# ----------------------------- +# Server launch files +# ----------------------------- +cd "$MAIN_DIR/../server" +echo "eula=true" > eula.txt -# creating launch file -cd $MAIN_DIR/../server -echo "eula=true" > eula.txt # accepted the eula FORGE_RUN_FILE=./run.sh + if [ -f "$FORGE_RUN_FILE" ]; then - echo "#!/bin/bash + cat > run.sh < run.sh - chmod +x ./run.sh - - echo '#!/bin/bash + cat > ../startJavaServer < ../startJavaServer +./run.sh -nogui +EOF chmod +x ../startJavaServer - else - # 1.7.10 thanks to Optifinel3ss#9059 - if [ "$MC_VERSION" == "1.8.9" ] || [ "$MC_VERSION" == "1.7.10" ]; then + if [[ "$MC_VERSION" == "1.7.10" || "$MC_VERSION" == "1.8.9" ]]; then FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar else FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}.jar fi - SERVER_JARFILE=server.jar - mv $FORGE_JAR $SERVER_JARFILE + mv "$FORGE_JAR" server.jar fi diff --git a/JavaInstallScripts/PaperInstall b/JavaInstallScripts/PaperInstall index 0153795..4a55dea 100755 --- a/JavaInstallScripts/PaperInstall +++ b/JavaInstallScripts/PaperInstall @@ -1,8 +1,8 @@ #!/bin/bash -#!/bin/bash # Paper Installation Script -# -# Server Files: /mnt/server + +set -e + sudo apt update -qq sudo apt install -y -qq curl jq > /dev/null @@ -10,64 +10,45 @@ cd .. mkdir -p server cd server +# ----------------------------- +# Minecraft version (from installJava) +# ----------------------------- +MINECRAFT_VERSION="${MC_VERSION:-latest}" +echo "> Using Minecraft version: $MINECRAFT_VERSION" -echo -e "\n> Enter minecraft version for server: " -MINECRAFT_VERSION=latest -read MINECRAFT_VERSION - - -# -- EDIT HERE | DO NOT EDIT ABOVE -- # -BUILD_NUMBER=latest # https://papermc.io/downloads -PROJECT=paper # PROJECT: https://papermc.io/api/v2/projects/ -SERVER_JARFILE=server.jar # LEAVE THIS PART ALONE -# -- EDIT HERE | DO NOT EDIT BELOW -- # - - - +# -- CONFIG -- +BUILD_NUMBER=latest +PROJECT=paper +SERVER_JARFILE=server.jar +# ------------ if [ -n "${DL_PATH}" ]; then - echo -e "Using supplied download url: ${DL_PATH}" - DOWNLOAD_URL=`eval echo $(echo ${DL_PATH} | sed -e 's/{{/${/g' -e 's/}}/}/g')` + DOWNLOAD_URL=$(eval echo "${DL_PATH}") else - VER_EXISTS=`curl -s https://papermc.io/api/v2/projects/${PROJECT} | jq -r --arg VERSION $MINECRAFT_VERSION '.versions[] | contains($VERSION)' | grep true` - LATEST_VERSION=`curl -s https://papermc.io/api/v2/projects/${PROJECT} | jq -r '.versions' | jq -r '.[-1]'` + LATEST_VERSION=$(curl -s "https://api.papermc.io/v2/projects/${PROJECT}" | jq -r '.versions[-1]') - if [ "${VER_EXISTS}" == "true" ]; then - echo -e "Version is valid. Using version ${MINECRAFT_VERSION}" - else - echo -e "Using the latest ${PROJECT} version" - MINECRAFT_VERSION=${LATEST_VERSION} - fi - - BUILD_EXISTS=`curl -s https://papermc.io/api/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r --arg BUILD ${BUILD_NUMBER} '.builds[] | tostring | contains($BUILD)' | grep true` - LATEST_BUILD=`curl -s https://papermc.io/api/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION} | jq -r '.builds' | jq -r '.[-1]'` - - if [ "${BUILD_EXISTS}" == "true" ]; then - echo -e "Build is valid for version ${MINECRAFT_VERSION}. Using build ${BUILD_NUMBER}" - else - echo -e "Using the latest ${PROJECT} build for version ${MINECRAFT_VERSION}" - BUILD_NUMBER=${LATEST_BUILD} - fi - - JAR_NAME=${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar - - echo "Version being downloaded" - echo -e "MC Version: ${MINECRAFT_VERSION}" - echo -e "Build: ${BUILD_NUMBER}" - echo -e "JAR Name of Build: ${JAR_NAME}" - DOWNLOAD_URL=https://papermc.io/api/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER}/downloads/${JAR_NAME} -fi + if [ "$MINECRAFT_VERSION" = "latest" ]; then + MINECRAFT_VERSION="$LATEST_VERSION" + echo "> Resolved latest version: $MINECRAFT_VERSION" + fi -SERVER_JARFILE=server.jar -echo -e "Running curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL}" + LATEST_BUILD=$(curl -s \ + "https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds" \ + | jq -r '.builds | map(select(.channel=="default")|.build) | .[-1]') + + [ "$BUILD_NUMBER" = "latest" ] && BUILD_NUMBER="$LATEST_BUILD" -if [ -f ${SERVER_JARFILE} ]; then - mv ${SERVER_JARFILE} ${SERVER_JARFILE}.old + JAR_NAME="${PROJECT}-${MINECRAFT_VERSION}-${BUILD_NUMBER}.jar" + DOWNLOAD_URL="https://api.papermc.io/v2/projects/${PROJECT}/versions/${MINECRAFT_VERSION}/builds/${BUILD_NUMBER}/downloads/${JAR_NAME}" fi -curl -o ${SERVER_JARFILE} ${DOWNLOAD_URL} +echo "> Downloading server.jar" +[ -f server.jar ] && mv server.jar server.jar.old +curl -sSL -o server.jar "$DOWNLOAD_URL" if [ ! -f server.properties ]; then - echo -e "Downloading MC server.properties" - curl -o server.properties https://raw.githubusercontent.com/parkervcp/eggs/master/minecraft/java/server.properties + curl -sSL -o server.properties \ + https://raw.githubusercontent.com/parkervcp/eggs/master/minecraft/java/server.properties fi + +echo "> Paper install complete" diff --git a/JavaInstallScripts/VanillaInstall b/JavaInstallScripts/VanillaInstall index 3310fe7..4922825 100755 --- a/JavaInstallScripts/VanillaInstall +++ b/JavaInstallScripts/VanillaInstall @@ -1,4 +1,6 @@ #!/bin/bash +set -e + sudo apt update -qq sudo apt install -y -qq jq curl @@ -6,38 +8,29 @@ cd .. mkdir -p server cd server +LATEST_RELEASE=$(curl -s https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r '.latest.release') +LATEST_SNAPSHOT=$(curl -s https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r '.latest.snapshot') -# -- EDIT HERE | DO NOT EDIT ABOVE -- # -# VANILLA_VERSION: https://launchermeta.mojang.com/mc/game/version_manifest.json -# -- EDIT HERE | DO NOT EDIT BELOW -- # - - -LATEST_VERSION=`sudo curl -s https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r '.latest.release'` -LATEST_SNAPSHOT_VERSION=`sudo -s curl https://launchermeta.mojang.com/mc/game/version_manifest.json | jq -r '.latest.snapshot'` +VANILLA_VERSION="${MC_VERSION:-latest}" +echo "> Using Minecraft version: $VANILLA_VERSION" -echo -e "\nlatest version is $LATEST_VERSION" -echo -e "latest snapshot is $LATEST_SNAPSHOT_VERSION" - -echo -e "\n> Enter minecraft version for server: " -VANILLA_VERSION=latest -read VANILLA_VERSION - -if [ -z "$VANILLA_VERSION" ] || [ "$VANILLA_VERSION" == "latest" ]; then - MANIFEST_URL=$(curl -sSL https://launchermeta.mojang.com/mc/game/version_manifest.json | jq --arg VERSION $LATEST_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url') -elif [ "$VANILLA_VERSION" == "snapshot" ]; then - MANIFEST_URL=$(curl -sSL https://launchermeta.mojang.com/mc/game/version_manifest.json | jq --arg VERSION $LATEST_SNAPSHOT_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url') +if [ "$VANILLA_VERSION" = "latest" ]; then + TARGET="$LATEST_RELEASE" +elif [ "$VANILLA_VERSION" = "snapshot" ]; then + TARGET="$LATEST_SNAPSHOT" else - MANIFEST_URL=$(curl -sSL https://launchermeta.mojang.com/mc/game/version_manifest.json | jq --arg VERSION $VANILLA_VERSION -r '.versions | .[] | select(.id== $VERSION )|.url') + TARGET="$VANILLA_VERSION" fi -DOWNLOAD_URL=$(curl ${MANIFEST_URL} | jq .downloads.server | jq -r '. | .url') -if [ -z $DOWNLOAD_URL ] -then - echo "Invalid version provided" +MANIFEST_URL=$(curl -s https://launchermeta.mojang.com/mc/game/version_manifest.json \ + | jq -r --arg V "$TARGET" '.versions[] | select(.id==$V) | .url') + +if [ -z "$MANIFEST_URL" ]; then + echo "Invalid Minecraft version" exit 1 fi -echo -e "running: curl -o server.jar $DOWNLOAD_URL" -sudo curl -o server.jar $DOWNLOAD_URL +DOWNLOAD_URL=$(curl -s "$MANIFEST_URL" | jq -r '.downloads.server.url') -echo -e "Install Complete" +curl -sSL -o server.jar "$DOWNLOAD_URL" +echo "> Vanilla install complete" diff --git a/install b/install index e69a45a..447fc06 100755 --- a/install +++ b/install @@ -1,46 +1,41 @@ #!/bin/bash -mkdir bin -chmod +x * -export MAIN_DIR=$PWD -echo "Which Server do you want to install?" -echo "Type [1] Java Server" -echo "Type [2] Bedrock Server" -choiceForServer=1 -read choiceForServer +set -e -# Installing Java 16 JDK and playit +mkdir -p bin +chmod +x * -#wget -q "https://download.oracle.com/java/17/archive/jdk-17.0.3_linux-x64_bin.tar.gz" -O bin/java.tar.xz -wget -q "https://download.java.net/java/GA/jdk17.0.1/2a2082e5a09d4267845be086888add4f/12/GPL/openjdk-17.0.1_linux-x64_bin.tar.gz" -O bin/java.tar.xz -cd $MAIN_DIR/bin -echo "> Extracting Java JDK 16 to the bin/ folder. [THIS MAY TAKE SOME TIME] Replace it if you want to use older version of JAVA." -tar -xf java.tar.xz && mv "jdk-17.0.1" java_bins +export MAIN_DIR="$PWD" -cd $MAIN_DIR -# If choice is 0 or null then run this command -if [[ -z $choiceForServer ]]; then +echo "Which Server do you want to install?" +echo "Type [1] Java Server" +echo "Type [2] Bedrock Server" +read -rp "> " choiceForServer - echo "> Invaild Respond. Please try again." +# ----------------------------- +# Server choice +# ----------------------------- +if [[ -z "$choiceForServer" ]]; then + echo "> Invalid response" ./install -# If choice is 1 then run this command -elif [[ $choiceForServer == 1 ]]; then - - echo "> Running Java Installation..." +elif [[ "$choiceForServer" == "1" ]]; then + echo "> Running Java installation..." ./installJava -# If choice is 1 then run this command -elif [[ $choiceForServer == 2 ]]; then - - echo "> Running Bedrock Installation..." +elif [[ "$choiceForServer" == "2" ]]; then + echo "> Running Bedrock installation..." ./installBedrock else - echo "> Invaild Respond. Please try again." - ./install + echo "> Invalid response" + ./install fi -echo "> Installing AFK(Away From Keyboard) Script " -python3 -m pip install bpytop -echo "" +# ----------------------------- +# AFK +# ----------------------------- +echo "> Installing AFK monitor..." +python3 -m pip install --user bpytop + +echo "> Install finished." diff --git a/installJava b/installJava index 6d1b59e..e42e5f3 100755 --- a/installJava +++ b/installJava @@ -1,153 +1,139 @@ #!/bin/bash +set -e -export THIS_DIR=$PWD +export THIS_DIR="$PWD" -install_server () { - choice=$1 - if [[ -z $choice ]] - then - echo -e "\n> Installing Vanilla..." - cd JavaInstallScripts - chmod +x * - - ./VanillaInstall - errorno=${?} - if [ $errorno -eq 1 ] - then - cd $THIS_DIR - install_server $choice - fi - - - # Vanilla - elif [[ $choice == 1 ]] - then - echo -e "\n> Installing Vanilla..." - cd JavaInstallScripts - chmod +x * - - ./VanillaInstall - errorno=${?} - if [ $errorno -eq 1 ] - then - cd $THIS_DIR - install_server $choice - fi - - # Paper - elif [[ $choice == 2 ]] - then - echo "> Installing Paper..." - cd JavaInstallScripts - chmod +x * - ./PaperInstall - - # Forge - elif [[ $choice == 3 ]] - then - echo "> Installing Forge..." - cd JavaInstallScripts - chmod +x * - ./ForgeInstall - - # Sponge - elif [[ $choice == 4 ]] - then - echo "> Installing Sponge..." - cd JavaInstallScripts - chmod +x * - ./SpongeInstall - - # Fabric - elif [[ $choice == 5 ]] - then - echo "> Installing Fabric..." - cd JavaInstallScripts - chmod +x * - ./FabricInstall - - - elif [[ $choice == 6 ]];then - echo "> Installing Spigot..." - cd JavaInstallScripts - chmod +x * - ./SpigotInstall - - - elif [[ $choice == 7 ]];then - echo "> Installing Bungeecord..." - cd JavaInstallScripts - chmod +x * - ./BungeecordInstall - - - # Invaild Input - else - echo "Invaild Responds! Please try again" - ./installJava - fi -} +# ----------------------------- +# Ask Minecraft version (ONCE) +# ----------------------------- +echo "" +echo "Enter Minecraft version (example: 1.14.2, 1.16.5, 1.18.2, 1.20.4 or latest)" +read -rp "> " MC_VERSION + +# Default +MC_VERSION="${MC_VERSION:-latest}" +export MC_VERSION + +# ----------------------------- +# Decide Java version +# ----------------------------- +JAVA_PKG="" + +case "$MC_VERSION" in + 1.1[0-6]*) + JAVA_PKG="temurin-8-jdk" + ;; + 1.17*) + JAVA_PKG="temurin-16-jdk" + ;; + 1.18*|1.19*) + JAVA_PKG="temurin-17-jdk" + ;; + 1.20*) + JAVA_PKG="temurin-21-jdk" + ;; + latest) + JAVA_PKG="temurin-21-jdk" + ;; + *) + JAVA_PKG="temurin-17-jdk" + ;; +esac + +echo "> Minecraft version: $MC_VERSION" +echo "> Installing Java package: $JAVA_PKG" + +# ----------------------------- +# Dependencies (UNCHANGED) +# ----------------------------- +sudo apt update -y +sudo apt install -y \ + screen neofetch curl wget jq \ + apt-transport-https ca-certificates gnupg lsb-release + +# ----------------------------- +# Adoptium (Temurin) repo +# ----------------------------- +if [[ ! -f /etc/apt/sources.list.d/adoptium.list ]]; then + wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public \ + | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/adoptium.gpg + + echo "deb https://packages.adoptium.net/artifactory/deb $(lsb_release -cs) main" \ + | sudo tee /etc/apt/sources.list.d/adoptium.list +fi + +sudo apt update -y +sudo apt install -y "$JAVA_PKG" -#Installing all the dependencise -sudo apt install -y -qq screen neofetch +echo "> Java installed successfully" +java -version -echo "export PATH=$PATH:/some/new/path" > ~/.profile -echo "> Dependencies Installtion Completed!" +# ----------------------------- +# Server directory +# ----------------------------- +mkdir -p server -#Downloading ngrok && Downloading Minecraft Server -mkdir server +# ----------------------------- +# Server installer menu +# ----------------------------- +install_server () { + choice="$1" + cd JavaInstallScripts || exit 1 + chmod +x * + + case "$choice" in + ""|1) ./VanillaInstall ;; + 2) ./PaperInstall ;; + 3) ./ForgeInstall ;; + 4) ./SpongeInstall ;; + 5) ./FabricInstall ;; + 6) ./SpigotInstall ;; + 7) ./BungeecordInstall ;; + *) + echo "> Invalid response" + cd "$THIS_DIR" + exec ./installJava + ;; + esac +} echo "" -echo "-- Pick the following Server type: --" -echo "Type [1] Create Vanilla Server" -echo "Type [2] Create Paper Server" -echo "Type [3] Create Forge Server" -echo "Type [4] Create Sponge Server" -echo "Type [5] Create Fabric Server" -echo "Type [6] Create Spigot Server(COMPILE)" -echo "Type [7] Create Bungeecord Server(latest)" -choiceForServer=1 -read choiceForServer - -install_server $choiceForServer - -# Backup install playit.gg in case if first one doesn't download +echo "-- Pick Server Type --" +echo "[1] Vanilla" +echo "[2] Paper" +echo "[3] Forge" +echo "[4] Sponge" +echo "[5] Fabric" +echo "[6] Spigot" +echo "[7] Bungeecord" +read -rp "> " choiceForServer + +install_server "$choiceForServer" +cd "$THIS_DIR" + +# ----------------------------- +# Playit.gg (UNCHANGED) +# ----------------------------- echo "> Installing Playit.gg..." -cd .. -#wget "https://playit.gg/downloads/playit-linux_64-0.4.2-rc1" -O playit -#wget -q "https://playit.gg/downloads/playit-linux_64-0.4.6" -O playit -#wget -q "https://new.playit.gg/downloads/playit-0.7.0-beta" -O playit -#wget -q "https://playit.gg/downloads/playit-0.7.5-beta" -O playit -#wget -q "https://playit.gg/downloads/playit-0.8.1-beta" -O playit -#chmod +x playit - -# NOte this is directly downloaded from the playit repository, anything can happen. curl -SsL https://playit-cloud.github.io/ppa/key.gpg | sudo apt-key add - -sudo curl -SsL -o /etc/apt/sources.list.d/playit-cloud.list https://playit-cloud.github.io/ppa/playit-cloud.list +sudo curl -SsL -o /etc/apt/sources.list.d/playit-cloud.list \ + https://playit-cloud.github.io/ppa/playit-cloud.list sudo apt update -sudo apt install playit - -echo "> Playit.gg Installation Completed!" -echo "" -echo "-- Do you want to start the server now? --" -echo "Type [1] for Yes" -echo "Type [2] for No" +sudo apt install -y playit -StartServer=2 -read StartServer +echo "> Playit.gg installed" -if [[ -z $StartServer ]]; then -echo "> By Default, you selected 'No'." -echo "> You can start the server by do ./startserver" - -elif [[ $StartServer == 1 ]]; then -./startserver - -elif [[ $StartServer == 2 ]]; then -echo "You picked 'No'." -echo "> You can start the server by do ./startserver" +# ----------------------------- +# Start prompt +# ----------------------------- +echo "" +echo "Start server now?" +echo "[1] Yes" +echo "[2] No" +read -rp "> " StartServer +if [[ "$StartServer" == "1" ]]; then + ./startserver else -echo "> By Default, you selected 'No'." -echo "> You can start the server by do ./startserver" + echo "You can start later using: ./startserver" fi diff --git a/startJavaServer b/startJavaServer index 9d24953..cc21e9e 100755 --- a/startJavaServer +++ b/startJavaServer @@ -1,13 +1,28 @@ #!/bin/bash -export MAIN_DIR=$PWD -export JAVA=$MAIN_DIR/bin/java_bins/bin/java -cd server -mem=$(grep MemTotal /proc/meminfo | sed -e 's/MemTotal:[ ]*//' | sed -e 's/ kB//') # some new stuff +set -e -mem=$(($mem/1024/1024)) +MAIN_DIR="$PWD" +SERVER_DIR="$MAIN_DIR/server" +JAVA="$(command -v java)" -#uncomment this below line only if the server you are running is 1.17+ (if it is uncommented by default keep it as it is). -$JAVA -Xmx${mem}G -Xms${mem}G -jar server.jar nogui -# for 1.16 or lower uncomment this line -#java -Xmx${mem}G -Xms${mem}G -jar server.jar nogui +if [[ -z "$JAVA" ]]; then + echo "Java not found. Run ./install first." + exit 1 +fi + +if [[ ! -f "$SERVER_DIR/server.jar" ]]; then + echo "server.jar not found in server/" + exit 1 +fi + +cd "$SERVER_DIR" + +mem_kb=$(grep MemTotal /proc/meminfo | awk '{print $2}') +mem_gb=$((mem_kb / 1024 / 1024)) +RAM=$((mem_gb * 75 / 100)) + +echo "Starting Minecraft with ${RAM}G RAM" +echo "Java path: $JAVA" + +exec "$JAVA" -Xms${RAM}G -Xmx${RAM}G -jar server.jar nogui diff --git a/startserver b/startserver index 0ca548e..85e917b 100755 --- a/startserver +++ b/startserver @@ -1,47 +1,52 @@ #!/bin/bash export MAIN_DIR=$PWD echo "> Starting the server up. Please wait..." -echo "> Installing Dependencise..." +echo "> Installing Dependencies..." -sudo apt install -y -qq screen wget +# Install required dependencies including JDK 21 +sudo apt update +sudo apt install -y -qq screen wget openjdk-21-jdk -echo "> Dependencise Installed!" +echo "> Dependencies Installed!" -echo "> Checking Server Type..." -if [ -f $MAIN_DIR/server/bedrock_server ]; then +# Set Java 21 as the default version +echo "> Configuring Java version to JDK 21..." +sudo update-alternatives --set java $(update-alternatives --list java | grep "java-21") -echo "> Bedrock Server Detected! Starting Server up..." +# Verify the Java version +java -version +echo "> Checking Server Type..." +if [ -f $MAIN_DIR/server/bedrock_server ]; then + echo "> Bedrock Server Detected! Starting Server up..." elif [ ! -f $MAIN_DIR/server/eula.txt ]; then - -cd $MAIN_DIR/server -echo "> EULA doesn't exist! Creating one!" -echo "eula=true" > eula.txt -echo "> EULA Completed! Restarting Server" -cd $MAIN_DIR -screen -S server -d -m ./startJavaServer -clear -echo "> Your server just doing a second restart to fix the EULA file." -killall screen -./startserver -exit + cd $MAIN_DIR/server + echo "> EULA doesn't exist! Creating one!" + echo "eula=true" > eula.txt + echo "> EULA Completed! Restarting Server" + cd $MAIN_DIR + screen -S server -d -m ./startJavaServer + clear + echo "> Your server is performing a second restart to fix the EULA file." + killall screen + ./startserver + exit elif [ -f $MAIN_DIR/server/eula.txt ]; then -echo "> EULA Detected! Starting Server up..." - + echo "> EULA Detected! Starting Server up..." else -echo "> Your server isn't setup properly. Force uninstall..." -cd $MAIN_DIR -./uninstall -echo "> Comfirmed Uninstallation! Restarting Installation..." -./install + echo "> Your server isn't set up properly. Force uninstall..." + cd $MAIN_DIR + ./uninstall + echo "> Confirmed Uninstallation! Restarting Installation..." + ./install fi -# apparently ppl keep spamming startserver and end up having multiple screens of the same app +# Prevent multiple instances of the same app from running killall screen screen -S server -d -m ./startJavaServer # Starting Java Server screen -S server -d -m ./startBedrockServer # Starting Bedrock Server -screen -S afk -d -m ./startAfk #Starting AFK app aka bpytop. +screen -S afk -d -m ./startAfk # Starting AFK app aka bpytop. screen -S playit -d -m ./startPlayIt # Starting Playit cd $MAIN_DIR/server @@ -57,5 +62,5 @@ echo "Type [screen -r playit] to view your Server IP" echo "" echo "> To stop your server, type './stopserver' to stop" -echo -e '\nchecking if server has launched properly' +echo -e '\nChecking if the server has launched properly' ./.checkserver 2> crash.log