| #!/bin/bash |
| set -e |
|
|
| |
| |
| |
| |
|
|
| DATA_DIR="/data" |
| SERVER_JAR="${DATA_DIR}/server.jar" |
| LOG_DIR="${DATA_DIR}/logs" |
|
|
| MC_VERSION="${MC_VERSION:-1.21.4}" |
| MC_MEMORY="${MC_MEMORY:-1G}" |
| MC_MAX_MEMORY="${MC_MAX_MEMORY:-2G}" |
| MC_WORLD="${MC_WORLD:-world}" |
| SERVER_PORT="${SERVER_PORT:-25565}" |
|
|
| mkdir -p "${DATA_DIR}" "${LOG_DIR}" |
|
|
| echo "ββββββββββββββββββββββββββββββββββββββββββ" |
| echo " Minecraft Java Server" |
| echo " Version : ${MC_VERSION}" |
| echo " Memory : ${MC_MEMORY} β ${MC_MAX_MEMORY}" |
| echo " World : ${MC_WORLD}" |
| echo " Port : ${SERVER_PORT}" |
| echo "ββββββββββββββββββββββββββββββββββββββββββ" |
|
|
| |
| echo "[~] Starting HTTP status server on port 7860..." |
| python3 /home/minecraft/status_server.py & |
| echo "[β] HTTP status server running." |
|
|
| |
| echo "eula=true" > "${DATA_DIR}/eula.txt" |
| echo "[β] EULA accepted." |
|
|
| |
| if [ ! -f "${SERVER_JAR}" ]; then |
| echo "[~] Fetching Minecraft ${MC_VERSION} server JAR..." |
|
|
| MANIFEST_URL="https://launchermeta.mojang.com/mc/game/version_manifest.json" |
| VERSION_URL=$(curl -sL "${MANIFEST_URL}" | \ |
| python3 -c " |
| import sys, json |
| data = json.load(sys.stdin) |
| target = '${MC_VERSION}' |
| for v in data['versions']: |
| if v['id'] == target: |
| print(v['url']) |
| break |
| ") |
|
|
| if [ -z "${VERSION_URL}" ]; then |
| echo "[β] Version ${MC_VERSION} not found in Mojang manifest!" |
| exit 1 |
| fi |
|
|
| SERVER_URL=$(curl -sL "${VERSION_URL}" | \ |
| python3 -c "import sys, json; d=json.load(sys.stdin); print(d['downloads']['server']['url'])") |
|
|
| curl -L "${SERVER_URL}" -o "${SERVER_JAR}" |
| echo "[β] Server JAR downloaded." |
| else |
| echo "[β] Server JAR already cached." |
| fi |
|
|
| |
| PROPS_FILE="${DATA_DIR}/server.properties" |
| if [ ! -f "${PROPS_FILE}" ]; then |
| sed \ |
| -e "s|{{WORLD}}|${MC_WORLD}|g" \ |
| -e "s|{{PORT}}|${SERVER_PORT}|g" \ |
| /home/minecraft/server.properties.template > "${PROPS_FILE}" |
| echo "[β] server.properties created." |
| else |
| echo "[β] server.properties already exists β skipping." |
| fi |
|
|
| |
| cd "${DATA_DIR}" |
|
|
| |
| echo "" |
| echo "[β
] Starting Minecraft server..." |
| echo "" |
|
|
| exec java \ |
| -Xms${MC_MEMORY} \ |
| -Xmx${MC_MAX_MEMORY} \ |
| -XX:+UseG1GC \ |
| -XX:+ParallelRefProcEnabled \ |
| -XX:MaxGCPauseMillis=200 \ |
| -XX:+UnlockExperimentalVMOptions \ |
| -XX:+DisableExplicitGC \ |
| -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 \ |
| -jar "${SERVER_JAR}" nogui |
|
|