跳到主要內容

Minecraft 模組包服務器

從 CurseForge/Modrinth 服務器包 zip 文件設置一個模組化 Minecraft 服務器。涵蓋 NeoForge/Forge 安裝、Java 版本、JVM 調優、防火牆、局域網配置、備份和啟動腳本。

技能元數據

來源捆綁(默認安裝)
路徑skills/gaming/minecraft-modpack-server

參考:完整 SKILL.md

信息

以下是 Hermes 在觸發此技能時加載的完整技能定義。這是技能激活時代理所看到的指令。

Minecraft 模組包服務器設置

何時使用

  • 用戶希望從服務器包 zip 文件設置模組化 Minecraft 服務器
  • 用戶需要 NeoForge/Forge 服務器配置方面的幫助
  • 用戶詢問 Minecraft 服務器性能調優或備份相關問題

首先收集用戶偏好

在開始設置之前,詢問用戶以下信息:

  • 服務器名稱 / MOTD — 在服務器列表中應顯示什麼內容?
  • 種子 (Seed) — 指定種子還是隨機生成?
  • 難度 — 和平 / 簡單 / 普通 / 困難?
  • 遊戲模式 — 生存 / 創造 / 冒險?
  • 在線模式 — true(Mojang 認證,正版賬戶)或 false(兼容局域網/離線賬戶)?
  • 玩家數量 — 預計有多少玩家?(影響內存和視距調優)
  • 內存分配 — 或由代理根據模組數量和可用內存決定?
  • 視距 / 模擬距離 — 或由代理根據玩家數量和硬件配置選擇?
  • PvP — 開啟或關閉?
  • 白名單 — 開放服務器或僅限白名單?
  • 備份 — 是否需要自動備份?頻率如何?

如果用戶不在意,請使用合理的默認值,但在生成配置前務必詢問。

步驟

1. 下載並檢查模組包

mkdir -p ~/minecraft-server
cd ~/minecraft-server
wget -O serverpack.zip "<URL>"
unzip -o serverpack.zip -d server
ls server/

查找:startserver.sh、安裝程序 jar 文件(neoforge/forge)、user_jvm_args.txtmods/ 文件夾。 檢查腳本以確定:模組加載器類型、版本以及所需的 Java 版本。

2. 安裝 Java

  • Minecraft 1.21+ → Java 21:sudo apt install openjdk-21-jre-headless
  • Minecraft 1.18-1.20 → Java 17:sudo apt install openjdk-17-jre-headless
  • Minecraft 1.16 及以下 → Java 8:sudo apt install openjdk-8-jre-headless
  • 驗證:java -version

3. 安裝模組加載器

大多數服務器包都包含安裝腳本。使用 INSTALL_ONLY 環境變量進行安裝而不啟動:

cd ~/minecraft-server/server
ATM10_INSTALL_ONLY=true bash startserver.sh
# Or for generic Forge packs:
# java -jar forge-*-installer.jar --installServer

這將下載庫文件、修補服務器 jar 文件等。

4. 接受 EULA

echo "eula=true" > ~/minecraft-server/server/eula.txt

5. 配置 server.properties

模組化/局域網的關鍵設置:

motd=\u00a7b\u00a7lServer Name \u00a7r\u00a78| \u00a7aModpack Name
server-port=25565
online-mode=true # false for LAN without Mojang auth
enforce-secure-profile=true # match online-mode
difficulty=hard # most modpacks balance around hard
allow-flight=true # REQUIRED for modded (flying mounts/items)
spawn-protection=0 # let everyone build at spawn
max-tick-time=180000 # modded needs longer tick timeout
enable-command-block=true

性能設置(根據硬件調整):

# 2 players, beefy machine:
view-distance=16
simulation-distance=10

# 4-6 players, moderate machine:
view-distance=10
simulation-distance=6

# 8+ players or weaker hardware:
view-distance=8
simulation-distance=4

6. 調優 JVM 參數 (user_jvm_args.txt)

根據玩家數量和模組數量調整內存。模組化的經驗法則:

  • 100-200 個模組:6-12GB
  • 200-350+ 個模組:12-24GB
  • 至少為操作系統/其他任務保留 8GB 空閒內存
-Xms12G
-Xmx24G
-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

7. 開放防火牆

sudo ufw allow 25565/tcp comment "Minecraft Server"

檢查命令:sudo ufw status | grep 25565

8. 創建啟動腳本

cat > ~/start-minecraft.sh << 'EOF'
#!/bin/bash
cd ~/minecraft-server/server
java @user_jvm_args.txt @libraries/net/neoforged/neoforge/<VERSION>/unix_args.txt nogui
EOF
chmod +x ~/start-minecraft.sh

注意:對於 Forge(非 NeoForge),參數文件路徑不同。請檢查 startserver.sh 以獲取確切路徑。

9. 設置自動備份

創建備份腳本:

cat > ~/minecraft-server/backup.sh << 'SCRIPT'
#!/bin/bash
SERVER_DIR="$HOME/minecraft-server/server"
BACKUP_DIR="$HOME/minecraft-server/backups"
WORLD_DIR="$SERVER_DIR/world"
MAX_BACKUPS=24
mkdir -p "$BACKUP_DIR"
[ ! -d "$WORLD_DIR" ] && echo "[BACKUP] No world folder" && exit 0
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_FILE="$BACKUP_DIR/world_${TIMESTAMP}.tar.gz"
echo "[BACKUP] Starting at $(date)"
tar -czf "$BACKUP_FILE" -C "$SERVER_DIR" world
SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
echo "[BACKUP] Saved: $BACKUP_FILE ($SIZE)"
BACKUP_COUNT=$(ls -1t "$BACKUP_DIR"/world_*.tar.gz 2>/dev/null | wc -l)
if [ "$BACKUP_COUNT" -gt "$MAX_BACKUPS" ]; then
REMOVE=$((BACKUP_COUNT - MAX_BACKUPS))
ls -1t "$BACKUP_DIR"/world_*.tar.gz | tail -n "$REMOVE" | xargs rm -f
echo "[BACKUP] Pruned $REMOVE old backup(s)"
fi
echo "[BACKUP] Done at $(date)"
SCRIPT
chmod +x ~/minecraft-server/backup.sh

添加每小時 cron 任務:

(crontab -l 2>/dev/null | grep -v "minecraft/backup.sh"; echo "0 * * * * $HOME/minecraft-server/backup.sh >> $HOME/minecraft-server/backups/backup.log 2>&1") | crontab -

常見陷阱

  • 對於模組化服務器,務必設置 allow-flight=true — 否則帶有噴氣揹包/飛行功能的模組會導致玩家被踢出
  • max-tick-time=180000 或更高 — 模組化服務器在世界生成期間通常會有較長的 tick 時間
  • 首次啟動很慢(大型模組包可能需要幾分鐘)— 不要驚慌
  • 首次啟動時出現 "Can't keep up!" 警告是正常的,初始區塊生成完成後會穩定下來
  • 如果 online-mode=false,也請設置 enforce-secure-profile=false,否則客戶端會被拒絕連接
  • 模組包的 startserver.sh 通常包含自動重啟循環 — 創建一個不含此循環的乾淨啟動腳本
  • 刪除 world/ 文件夾以使用新種子重新生成世界
  • 某些模組包使用環境變量來控制行為(例如,ATM10 使用 ATM10_JAVA、ATM10_RESTART、ATM10_INSTALL_ONLY)

驗證

  • 使用 pgrep -fa neoforgepgrep -fa minecraft 檢查是否正在運行
  • 檢查日誌:tail -f ~/minecraft-server/server/logs/latest.log
  • 在日誌中查找 "Done (Xs)!" = 服務器已就緒
  • 測試連接:玩家在多人遊戲中添加服務器 IP