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 :
- Debian 11/12, Ubuntu 22+
- Accès root
- Variable optionnelle :
MC_MEMORY=4G(défaut : 2G)
Ce que fait le script :
- Installe
openjdk-21-jre-headless - Interroge
api.papermc.iopour la dernière version et le dernier build - Télécharge le jar Paper
- Crée l'utilisateur
minecraftet/opt/minecraft/paper - Active un service systemd
minecraft-paper
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 ""