Minecraft PaperMC — Dernière version

Installe la dernière version de PaperMC (fork Minecraft haute performance) avec Java 21 et un service systemd.

minecraftpaperjavagaming
$ curl scripts.ysavary.fr/minecraft-paper | bash

Minecraft PaperMC

PaperMC est un fork haute performance de Minecraft compatible avec les plugins Bukkit/Spigot.
Ce script récupère la dernière version stable via l'API Paper et crée un service systemd.

Prérequis :

Ce que fait le script :

Plugins : déposer les .jar dans /opt/minecraft/paper/plugins/

bash
#!/bin/bash
set -euo pipefail

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
info()  { echo -e "${GREEN}[INFO]${NC}  $*"; }
warn()  { echo -e "${YELLOW}[WARN]${NC}  $*"; }
error() { echo -e "${RED}[ERR]${NC}   $*"; exit 1; }

[[ $EUID -ne 0 ]] && error "Ce script doit être exécuté en root."

MC_USER="minecraft"
MC_DIR="/opt/minecraft/paper"
MC_MEMORY="${MC_MEMORY:-2G}"
API="https://api.papermc.io/v2/projects/paper"

# ── Java 21 ──────────────────────────────────────────────────────────────────
info "=== Étape 1/5 — Installation de Java 21 ==="
apt-get update -qq
apt-get install -y -qq openjdk-21-jre-headless curl python3

# ── API Paper ────────────────────────────────────────────────────────────────
info "=== Étape 2/5 — Récupération de la dernière version Paper ==="

LATEST_VERSION=$(curl -fsSL "$API" | python3 -c "
import sys, json; d = json.load(sys.stdin); print(d['versions'][-1])")

LATEST_BUILD=$(curl -fsSL "$API/versions/$LATEST_VERSION" | python3 -c "
import sys, json; d = json.load(sys.stdin); print(d['builds'][-1])")

JAR_NAME="paper-${LATEST_VERSION}-${LATEST_BUILD}.jar"
JAR_URL="$API/versions/$LATEST_VERSION/builds/$LATEST_BUILD/downloads/$JAR_NAME"

info "Paper $LATEST_VERSION — build #$LATEST_BUILD"

# ── Environnement ────────────────────────────────────────────────────────────
info "=== Étape 3/5 — Préparation de l'environnement ==="
useradd -r -m -d "$MC_DIR" -s /bin/false "$MC_USER" 2>/dev/null || true
mkdir -p "$MC_DIR/plugins"

# ── Téléchargement ───────────────────────────────────────────────────────────
info "=== Étape 4/5 — Téléchargement de Paper ==="
curl -fsSL --progress-bar -o "$MC_DIR/paper.jar" "$JAR_URL"

echo "eula=true" > "$MC_DIR/eula.txt"

cat > "$MC_DIR/server.properties" <<EOF
server-port=25565
max-players=20
difficulty=normal
gamemode=survival
level-name=world
online-mode=true
view-distance=10
motd=PaperMC $LATEST_VERSION
EOF

chown -R "$MC_USER:$MC_USER" "$MC_DIR"

# ── Systemd ──────────────────────────────────────────────────────────────────
info "=== Étape 5/5 — Service systemd ==="
cat > /etc/systemd/system/minecraft-paper.service <<EOF
[Unit]
Description=PaperMC $LATEST_VERSION (build $LATEST_BUILD)
After=network.target

[Service]
User=$MC_USER
WorkingDirectory=$MC_DIR
ExecStart=/usr/bin/java -Xms512M -Xmx${MC_MEMORY} \
  -XX:+UseG1GC \
  -XX:+ParallelRefProcEnabled \
  -XX:MaxGCPauseMillis=200 \
  -XX:+UnlockExperimentalVMOptions \
  -XX:+DisableExplicitGC \
  -XX:G1NewSizePercent=30 \
  -XX:G1MaxNewSizePercent=40 \
  -jar paper.jar nogui
ExecStop=/usr/bin/kill -s SIGINT \$MAINPID
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now minecraft-paper

echo ""
info "=== PaperMC $LATEST_VERSION installé et démarré ==="
echo ""
echo "  Répertoire  : $MC_DIR"
echo "  Plugins     : $MC_DIR/plugins/"
echo "  Port        : 25565/tcp"
echo "  RAM allouée : $MC_MEMORY"
echo "  Statut      : systemctl status minecraft-paper"
echo "  Logs        : journalctl -fu minecraft-paper"
echo ""
warn "Pense à ouvrir le port 25565/tcp sur ton firewall !"
echo ""