#!/bin/bash rm ~/x pkg upgrade -y && echo "Updated packages" || echo "Error updating packages" if [ ! -d "$HOME/storage" ]; then echo "Requesting storage permissions..." termux-setup-storage if [ $? -ne 0 ]; then echo "Failed to set up storage. Exiting." exit 1 fi echo "Storage permissions granted." fi read -p "Enter the directory name for your Minecraft server: " directory_name server_dir="$HOME/storage/shared/$directory_name" mkdir -p "$server_dir" cd "$server_dir" || { echo "Failed to access server directory"; exit 1; } java_ver=$(java -version 2>&1 | awk -F[\"\.] -v OFS=. 'NR==1{print $2}') if [ "$java_ver" = 17 ]; then pkg remove openjdk-17 -y && echo "Removed Java 17" || echo "Error removing Java 17" fi if [ "$java_ver" = 21 ]; then pkg remove openjdk-21 -y && echo "Removed Java 21" || echo "Error removing Java 21" fi if [ "$java_ver" != 25 ]; then pkg install openjdk-25 -y && echo "Installed Java 25" || echo "Error installing Java 25" fi pkg autoclean && pkg clean -y && echo "Cleaned packages" || echo "Error cleaning packages" java_ver=$(java -version 2>&1 | awk -F[\"\.] -v OFS=. 'NR==1{print $2}') if [ "$java_ver" != 25 ]; then echo "Java 25 is not installed or is not working" exit 1 fi read -p "Enter the amount of RAM to allocate (in GB, e.g., 1 for 1 GB): " ram if ! [[ "$ram" =~ ^[0-9]+$ ]]; then echo "Invalid input. Exiting." exit 1 fi echo "Select server type:" echo "1) Paper - Plugin Support - Based on Spigot, designed to greatly improve performance and offer more advanced features and API." echo "2) Purpur - Plugin Support - Drop-in replacement for Paper servers designed for configurability, new fun and exciting gameplay features." echo "3) DivineMC - Plugin Support - Multi-functional fork of Purpur, which focuses on the flexibility of your server and its optimization." echo "4) Fabric - Mod Support - Lightweight and modular Minecraft server software." echo "5) Folia - Some Plugin Support - Paper fork that adds regionized multithreading to the server." echo "6) Vanilla - The official Minecraft server software." echo "7) Spigot - Plugin Support - High performance fork of the Bukkit Minecraft Server." echo "8) Forge - Mod Support - The original Minecraft modding platform." read -rp "Choose an option [1-8]: " server_type if [ "$server_type" != "1" ] && [ "$server_type" != "2" ] && [ "$server_type" != "3" ] && [ "$server_type" != "4" ] && [ "$server_type" != "5" ] && [ "$server_type" != "6" ] && [ "$server_type" != "7" ] && [ "$server_type" != "8" ]; then echo "Invalid option. Exiting." exit 1 fi read -p "Enter Minecraft version (e.g., 1.21.10): " version if ! [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "Invalid version format. Expected format: x.x.x (e.g., 1.21.10)" exit 1 fi case "$server_type" in 1) echo "Fetching PaperMC build information..." paper_api="https://api.papermc.io/v2/projects/paper/versions/$version" latest_build=$(curl -s "$paper_api" | grep -o '"builds":[^]]*' | sed 's/.*,//') if [ -z "$latest_build" ]; then echo "Error fetching build information. Exiting." exit 1 fi download_url="https://api.papermc.io/v2/projects/paper/versions/$version/builds/$latest_build/downloads/paper-$version-$latest_build.jar" ;; 2) echo "Fetching Purpur build information..." download_url="https://api.purpurmc.org/v2/purpur/$version/latest/download" ;; 3) echo "Fetching DivineMC build information..." download_url=$(curl -s "https://mcjars.app/api/v1/builds/DIVINEMC/$version/latest?tracking=none" | sed -n 's/.*"jarUrl": *"\([^"]*\)".*/\1/p') ;; 4) echo "Fetching Fabric installer..." download_url="https://meta.fabricmc.net/v2/versions/loader/$version/0.17.2/1.1.0/server/jar" ;; 5) echo "Fetching Folia build information..." download_url=$(curl -s "https://mcjars.app/api/v1/builds/FOLIA/$version/latest?tracking=none" | sed -n 's/.*"jarUrl": *"\([^"]*\)".*/\1/p') ;; 6) echo "Fetching Vanilla build information..." download_url=$(curl -s "https://mcjars.app/api/v1/builds/VANILLA/$version/latest?tracking=none" | sed -n 's/.*"jarUrl": *"\([^"]*\)".*/\1/p') ;; 7) echo "Fetching Spigot build information..." download_url=$(curl -s "https://mcjars.app/api/v1/builds/SPIGOT/$version/latest?tracking=none" | sed -n 's/.*"jarUrl": *"\([^"]*\)".*/\1/p') ;; 8) read -p "Enter Forge version (e.g., 59.0.1): " forge_version if ! [[ "$forge_version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "Invalid version format. Expected format: x.x.x (e.g., 59.0.1)" exit 1 fi echo "Fetching Forge installer..." download_url="https://maven.minecraftforge.net/net/minecraftforge/forge/$version-$forge_version/forge-$version-$forge_version-installer.jar" ;; esac echo "Downloading server from $download_url..." curl -o "server.jar" "$download_url" if [ $? -ne 0 ]; then echo "Error downloading the server." exit 1 fi echo "Download complete." if [ "$server_type" = "8" ]; then echo "Installing Forge Server..." java -jar server.jar --installServer rm server.jar server.jar.log run.sh run.bat user_jvm_args.txt fi echo "Creating mcserver command..." mcserver_path="$PREFIX/bin/mcserver" if [ -f "$mcserver_path" ]; then echo "Warning: \"mcserver\" command already exists. Overwriting..." fi echo "Acepting Minecraft eula..." echo "eula=true" > "eula.txt" if [ "$server_type" = "8" ]; then { echo "#!/bin/bash" echo "cd \"$server_dir\"" echo "java -Xms${ram}G -Xmx${ram}G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true @libraries/net/minecraftforge/forge/${version}-${forge_version}/unix_args.txt \"\$@\" nogui" } > "$mcserver_path" else { echo "#!/bin/bash" echo "cd \"$server_dir\"" echo "java -Xms${ram}G -Xmx${ram}G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar server.jar nogui" } > "$mcserver_path" fi chmod +x "$mcserver_path" echo "You can now start the server by typing \"mcserver\"" echo "Starting the Minecraft server with $ram GB of RAM..." mcserver