Back to Home
mcinstaller.sh
#!/bin/bash

clear
echo "======================================"
echo "      MINECRAFT UNIVERSAL INSTALLER"
echo "======================================"
echo ""

if [ "$EUID" -ne 0 ]; then
echo "Run as root!"
exit
fi

SERVER_DIR="/opt/minecraft"

echo "[1] Installing dependencies..."

apt update -y
apt install -y curl wget jq screen unzip ufw openjdk-21-jdk

mkdir -p $SERVER_DIR
cd $SERVER_DIR

echo ""
echo "Select Engine"
echo ""
echo "1) Paper"
echo "2) Purpur"
echo "3) Fabric"
echo "4) Vanilla"
echo "5) Bedrock Dedicated Server"
echo ""

read -p "Choose engine: " engine

echo ""
read -p "Enter version (or type 'latest'): " version

########################################
# PAPER
########################################

if [ "$engine" == "1" ]; then

API="https://api.papermc.io/v2/projects/paper"

if [ "$version" == "latest" ]; then
version=$(curl -s $API | jq -r '.versions[-1]')
fi

build=$(curl -s $API/versions/$version/builds | jq '.builds[-1].build')

wget -O server.jar \
https://api.papermc.io/v2/projects/paper/versions/$version/builds/$build/downloads/paper-$version-$build.jar

fi

########################################
# PURPUR
########################################

if [ "$engine" == "2" ]; then

if [ "$version" == "latest" ]; then
version=$(curl -s https://api.purpurmc.org/v2/purpur | jq -r '.versions[-1]')
fi

wget -O server.jar \
https://api.purpurmc.org/v2/purpur/$version/latest/download

fi

########################################
# FABRIC
########################################

if [ "$engine" == "3" ]; then

if [ "$version" == "latest" ]; then
version=$(curl -s https://meta.fabricmc.net/v2/versions/game | jq -r '.[0].version')
fi

wget https://meta.fabricmc.net/v2/versions/installer -O fabric.json

installer=$(cat fabric.json | jq -r '.[0].url')

wget $installer -O fabric-installer.jar

java -jar fabric-installer.jar server -mcversion $version -downloadMinecraft

mv fabric-server-launch.jar server.jar

fi

########################################
# VANILLA
########################################

if [ "$engine" == "4" ]; then

manifest=https://launchermeta.mojang.com/mc/game/version_manifest.json

if [ "$version" == "latest" ]; then
version=$(curl -s $manifest | jq -r '.latest.release')
fi

url=$(curl -s $manifest | jq -r ".versions[] | select(.id==\"$version\") | .url")

server=$(curl -s $url | jq -r '.downloads.server.url')

wget -O server.jar $server

fi

########################################
# BEDROCK
########################################

if [ "$engine" == "5" ]; then

if [ "$version" == "latest" ]; then
version=$(curl -s https://api.github.com/repos/Mojang/bedrock-samples/releases/latest | jq -r '.tag_name')
fi

wget https://minecraft.azureedge.net/bin-linux/bedrock-server-$version.zip

unzip bedrock-server-$version.zip

fi

########################################
# EULA
########################################

echo "eula=true" > eula.txt

########################################
# GEYSER
########################################

if [ "$engine" != "5" ]; then

read -p "Install Geyser Bedrock support? (y/n): " geyser

if [[ "$geyser" == "y" ]]; then

mkdir -p plugins
cd plugins

wget -O Geyser-Spigot.jar \
https://download.geysermc.org/v2/projects/geyser/versions/latest/builds/latest/downloads/spigot

wget -O floodgate.jar \
https://download.geysermc.org/v2/projects/floodgate/versions/latest/builds/latest/downloads/spigot

cd ..

fi
fi

########################################
# FIREWALL
########################################

ufw allow 25565/tcp
ufw allow 19132/udp
ufw --force enable

########################################
# START SERVER
########################################

if [ "$engine" == "5" ]; then
screen -dmS mc ./bedrock_server
else
screen -dmS mc java -Xms1G -Xmx2G -jar server.jar nogui
fi

echo ""
echo "======================================"
echo "INSTALL COMPLETE"
echo "======================================"
echo ""
echo "Server folder : $SERVER_DIR"
echo ""
echo "Java connect  : PORT 25565"
echo "Bedrock       : PORT 19132"
echo ""
echo "Console:"
echo "screen -r mc"
echo ""