{/ This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. /}

Minecraft Modpack Server

Host modded Minecraft servers (CurseForge, Modrinth).

Skill metadata

Source Bundled (installed by default)
Path skills/gaming/minecraft-modpack-server

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

When to use

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.

Steps

1. Download & Inspect the Pack

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.

2. Install Java

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/server
ATM10_INSTALL_ONLY=true bash startserver.sh
# Or for generic Forge packs:
# java -jar forge-*-installer.jar --installServer

This downloads libraries, patches the server jar, etc.

4. Accept EULA

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

5. Configure server.properties

Key settings for modded/LAN:

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):

# 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. 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=1

7. Open Firewall

sudo ufw allow 25565/tcp comment "Minecraft Server"

Check with: sudo ufw status | grep 25565

8. Create Launch Script

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.

9. Set Up Automated Backups

Create backup script:

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:

(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

Verification