minecraft-modpack-server

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Minecraft Modpack Server Setup

Minecraft模组包服务器搭建

When to use

适用场景

  • User wants to set up a modded Minecraft server from a server pack zip
  • User needs help with NeoForge/Forge server configuration
  • User asks about Minecraft server performance tuning or backups
  • 用户希望通过服务器包压缩文件搭建带模组的Minecraft服务器
  • 用户需要NeoForge/Forge服务器配置相关帮助
  • 用户咨询Minecraft服务器性能调优或备份方案

Gather User Preferences First

先收集用户偏好

Before starting setup, ask the user for:
  • Server name / MOTD — what should it say in the server list?
  • Seed — specific seed or random?
  • Difficulty — peaceful / easy / normal / hard?
  • Gamemode — survival / creative / adventure?
  • Online mode — true (Mojang auth, legit accounts) or false (LAN/cracked friendly)?
  • Player count — how many players expected? (affects RAM & view distance tuning)
  • RAM allocation — or let agent decide based on mod count & available RAM?
  • View distance / simulation distance — or let agent pick based on player count & hardware?
  • PvP — on or off?
  • Whitelist — open server or whitelist only?
  • Backups — want automated backups? How often?
Use sensible defaults if the user doesn't care, but always ask before generating the config.
开始搭建前,请向用户确认以下信息:
  • 服务器名称/MOTD —— 服务器列表中显示的内容是什么?
  • 世界种子 —— 指定种子还是随机生成?
  • 难度 —— 和平/简单/普通/困难?
  • 游戏模式 —— 生存/创造/冒险?
  • 在线模式 —— true(使用Mojang认证,仅正版账号)或false(支持局域网/非正版账号)?
  • 玩家数量 —— 预计有多少玩家?(会影响内存分配和视距调优)
  • 内存分配 —— 还是由Agent根据模组数量和可用内存决定?
  • 视距/模拟距离 —— 还是由Agent根据玩家数量和硬件配置选择?
  • PvP —— 开启还是关闭?
  • 白名单 —— 开放服务器还是仅白名单用户可进入?
  • 备份 —— 是否需要自动备份?备份频率是多少?
如果用户没有特殊要求,可使用合理默认值,但生成配置前务必先询问用户。

Steps

步骤

1. Download & Inspect the Pack

1. 下载并检查模组包

bash
mkdir -p ~/minecraft-server
cd ~/minecraft-server
wget -O serverpack.zip "<URL>"
unzip -o serverpack.zip -d server
ls server/
Look for:
startserver.sh
, installer jar (neoforge/forge),
user_jvm_args.txt
,
mods/
folder. Check the script to determine: mod loader type, version, and required Java version.
bash
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.txt
mods/
文件夹。 查看脚本以确定:模组加载器类型、版本以及所需的Java版本。

2. Install 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 and below → Java 8:
    sudo apt install openjdk-8-jre-headless
  • Verify:
    java -version
  • 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 the Mod Loader

3. 安装模组加载器

Most server packs include an install script. Use the INSTALL_ONLY env var to install without launching:
bash
cd ~/minecraft-server/server
ATM10_INSTALL_ONLY=true bash startserver.sh
大多数服务器包包含安装脚本。使用INSTALL_ONLY环境变量仅执行安装而不启动服务器:
bash
cd ~/minecraft-server/server
ATM10_INSTALL_ONLY=true bash startserver.sh

Or for generic Forge packs:

对于通用Forge包:

java -jar forge-*-installer.jar --installServer

java -jar forge-*-installer.jar --installServer

This downloads libraries, patches the server jar, etc.
此步骤会下载依赖库、修补服务器jar包等。

4. Accept EULA

4. 接受EULA协议

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

5. Configure server.properties

5. 配置server.properties

Key settings for modded/LAN:
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
Performance settings (scale to hardware):
properties
undefined
适用于模组服务器/局域网的关键设置:
properties
motd=\u00a7b\u00a7lServer Name \u00a7r\u00a78| \u00a7aModpack Name
server-port=25565
online-mode=true          # 局域网环境且无需Mojang认证时设为false
enforce-secure-profile=true  # 需与online-mode保持一致
difficulty=hard            # 大多数模组包以困难难度为平衡基准
allow-flight=true          # 模组服务器必须开启(适配飞行坐骑/道具)
spawn-protection=0         # 允许所有玩家在出生点建造
max-tick-time=180000       # 模组服务器在世界生成时需要更长的tick超时时间
enable-command-block=true
性能设置(根据硬件调整):
properties
undefined

2 players, beefy machine:

2名玩家,高性能机器:

view-distance=16 simulation-distance=10
view-distance=16 simulation-distance=10

4-6 players, moderate machine:

4-6名玩家,中等性能机器:

view-distance=10 simulation-distance=6
view-distance=10 simulation-distance=6

8+ players or weaker hardware:

8名及以上玩家或低性能硬件:

view-distance=8 simulation-distance=4
undefined
view-distance=8 simulation-distance=4
undefined

6. Tune JVM Args (user_jvm_args.txt)

6. 调优JVM参数(user_jvm_args.txt)

Scale RAM to player count and mod count. Rule of thumb for modded:
  • 100-200 mods: 6-12GB
  • 200-350+ mods: 12-24GB
  • Leave at least 8GB free for the OS/other tasks
-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
根据玩家数量和模组数量调整内存。模组服务器的经验法则:
  • 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. Open Firewall

7. 配置防火墙

bash
sudo ufw allow 25565/tcp comment "Minecraft Server"
Check with:
sudo ufw status | grep 25565
bash
sudo ufw allow 25565/tcp comment "Minecraft Server"
检查配置:
sudo ufw status | grep 25565

8. Create Launch Script

8. 创建启动脚本

bash
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
Note: For Forge (not NeoForge), the args file path differs. Check
startserver.sh
for the exact path.
bash
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. Set Up Automated Backups

9. 设置自动备份

Create backup script:
bash
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
Add hourly cron:
bash
(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 -
创建备份脚本:
bash
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
添加每小时定时任务:
bash
(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 -

Pitfalls

注意事项

  • ALWAYS set
    allow-flight=true
    for modded — mods with jetpacks/flight will kick players otherwise
  • max-tick-time=180000
    or higher — modded servers often have long ticks during worldgen
  • First startup is SLOW (several minutes for big packs) — don't panic
  • "Can't keep up!" warnings on first launch are normal, settles after initial chunk gen
  • If online-mode=false, set enforce-secure-profile=false too or clients get rejected
  • The pack's startserver.sh often has an auto-restart loop — make a clean launch script without it
  • Delete the world/ folder to regenerate with a new seed
  • Some packs have env vars to control behavior (e.g., ATM10 uses ATM10_JAVA, ATM10_RESTART, ATM10_INSTALL_ONLY)
  • 模组服务器务必设置
    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)

Verification

验证方式

  • pgrep -fa neoforge
    or
    pgrep -fa minecraft
    to check if running
  • Check logs:
    tail -f ~/minecraft-server/server/logs/latest.log
  • Look for "Done (Xs)!" in the log = server is ready
  • Test connection: player adds server IP in Multiplayer
  • 使用
    pgrep -fa neoforge
    pgrep -fa minecraft
    检查服务器是否运行
  • 查看日志:
    tail -f ~/minecraft-server/server/logs/latest.log
  • 日志中出现“Done (Xs)!”表示服务器已准备就绪
  • 测试连接: 玩家在多人游戏中添加服务器IP