Minecraft Modpack Server — Host modded Minecraft servers (CurseForge, Modrinth)
Minecraft Modpack Server
Section titled “Minecraft Modpack Server”Host modded Minecraft servers (CurseForge, Modrinth).
Skill metadata
Section titled “Skill metadata”| Source | Bundled (installed by default) |
| Path | skills/gaming/minecraft-modpack-server |
Reference: full SKILL.md
Section titled “Reference: full SKILL.md”Info The following is the complete skill definition that Hermes loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.
Minecraft Modpack Server Setup
Section titled “Minecraft Modpack Server Setup”When to use
Section titled “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
Gather User Preferences First
Section titled “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.
1. Download & Inspect the Pack
Section titled “1. Download & Inspect the Pack”mkdir -p ~/minecraft-servercd ~/minecraft-serverwget -O serverpack.zip "<URL>"unzip -o serverpack.zip -d serverls 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.
2. Install Java
Section titled “2. Install 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
3. Install the Mod Loader
Section titled “3. Install the Mod Loader”Most server packs include an install script. Use the INSTALL_ONLY env var to install without launching:
cd ~/minecraft-server/serverATM10_INSTALL_ONLY=true bash startserver.sh# Or for generic Forge packs:# java -jar forge-*-installer.jar --installServerThis downloads libraries, patches the server jar, etc.
4. Accept EULA
Section titled “4. Accept EULA”echo "eula=true" > ~/minecraft-server/server/eula.txt5. Configure server.properties
Section titled “5. Configure server.properties”Key settings for modded/LAN:
motd=\u00a7b\u00a7lServer Name \u00a7r\u00a78| \u00a7aModpack Nameserver-port=25565online-mode=true # false for LAN without Mojang authenforce-secure-profile=true # match online-modedifficulty=hard # most modpacks balance around hardallow-flight=true # REQUIRED for modded (flying mounts/items)spawn-protection=0 # let everyone build at spawnmax-tick-time=180000 # modded needs longer tick timeoutenable-command-block=truePerformance settings (scale to hardware):
# 2 players, beefy machine:view-distance=16simulation-distance=10
# 4-6 players, moderate machine:view-distance=10simulation-distance=6
# 8+ players or weaker hardware:view-distance=8simulation-distance=46. Tune JVM Args (user_jvm_args.txt)
Section titled “6. Tune JVM Args (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=17. Open Firewall
Section titled “7. Open Firewall”sudo ufw allow 25565/tcp comment "Minecraft Server"Check with: sudo ufw status | grep 25565
8. Create Launch Script
Section titled “8. Create Launch Script”cat > ~/start-minecraft.sh << 'EOF'#!/bin/bashcd ~/minecraft-server/serverjava @user_jvm_args.txt @libraries/net/neoforged/neoforge/<VERSION>/unix_args.txt noguiEOFchmod +x ~/start-minecraft.shNote: For Forge (not NeoForge), the args file path differs. Check startserver.sh for the exact path.
9. Set Up Automated Backups
Section titled “9. Set Up Automated Backups”Create backup script:
cat > ~/minecraft-server/backup.sh << 'SCRIPT'#!/bin/bashSERVER_DIR="$HOME/minecraft-server/server"BACKUP_DIR="$HOME/minecraft-server/backups"WORLD_DIR="$SERVER_DIR/world"MAX_BACKUPS=24mkdir -p "$BACKUP_DIR"[ ! -d "$WORLD_DIR" ] && echo "[BACKUP] No world folder" && exit 0TIMESTAMP=$(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" worldSIZE=$(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)"fiecho "[BACKUP] Done at $(date)"SCRIPTchmod +x ~/minecraft-server/backup.shAdd hourly 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 -Pitfalls
Section titled “Pitfalls”- ALWAYS set
allow-flight=truefor modded — mods with jetpacks/flight will kick players otherwise max-tick-time=180000or 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)
Verification
Section titled “Verification”pgrep -fa neoforgeorpgrep -fa minecraftto 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