Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Set up a modded Minecraft server from a CurseForge/Modrinth server pack zip. Covers NeoForge/Forge install, Java version, JVM tuning, firewall, LAN config, backups, and launch scripts.
.claude/skills/graniet-minecraft-modpack-server/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 10% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 96% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 102% | 0% |
This skill is repo-local and stays inactive until explicitly activated.
When the original instructions refer to legacy tool names, use these Kheish mappings:
terminal => bashweb_extract => web_fetch, plus web_search when discovery is neededsearch_files => grep_search and glob_searchbrowser_* tools require a browser-capable surfaced tool or MCP; if none is available, use the closest available surface and say so explicitlyWhen the instructions mention local helper files, resolve them from ${KHEISH_SKILL_DIR}.
Before starting setup, ask the user for:
Use sensible defaults if the user doesn't care, but always ask before generating the config.
bashmkdir -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.
sudo apt install openjdk-21-jre-headlesssudo apt install openjdk-17-jre-headlesssudo apt install openjdk-8-jre-headlessjava -versionMost server packs include an install script. Use the INSTALL_ONLY env var to install without launching:
bashcd ~/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.
bashecho "eula=true" > ~/minecraft-server/server/eula.txt
Key settings for modded/LAN:
propertiesmotd=\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# 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
Scale RAM to player count and mod count. Rule of thumb for modded:
-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=1bashsudo ufw allow 25565/tcp comment "Minecraft Server"
Check with: sudo ufw status | grep 25565
bashcat > ~/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.
Create backup script:
bashcat > ~/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 -
allow-flight=true for modded — mods with jetpacks/flight will kick players otherwisemax-tick-time=180000 or higher — modded servers often have long ticks during worldgenpgrep -fa neoforge or pgrep -fa minecraft to check if runningtail -f ~/minecraft-server/server/logs/latest.log| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→pass | 18,883 | 4,749 | -75% | 1 | 1 | 0% | 3,680 | 3,115 | -15% | 0 | 0 | — |
case-01 | fail→fail | 21,909 | 11,805 | -46% | 1 | 1 | 0% | 4,157 | 2,697 | -35% | 0 | 0 | — |
case-02 | fail→pass | 19,670 | 8,478 | -57% | 1 | 1 | 0% | 3,303 | 3,634 | +10% | 0 | 0 | — |
case-04 | pass→pass | 8,116 | 5,229 | -36% | 1 | 1 | 0% | 1,531 | 3,090 | +102% | 0 | 0 | — |
case-05 | pass→pass | 6,220 | 4,100 | -34% | 1 | 1 | 0% | 1,156 | 2,943 | +155% | 0 | 0 | — |
case-06 | pass→pass | 12,293 | 10,420 | -15% | 1 | 1 | 0% | 2,134 | 3,940 | +85% | 0 | 0 | — |
case-07 | pass→pass | 6,516 | 4,441 | -32% | 1 | 1 | 0% | 1,121 | 2,920 | +160% | 0 | 0 | — |
case-08 | pass→pass | 11,015 | 7,685 | -30% | 1 | 1 | 0% | 1,896 | 3,485 | +84% | 0 | 0 | — |
case-09 | pass→pass | 4,376 | 2,870 | -34% | 1 | 1 | 0% | 805 | 2,650 | +229% | 0 | 0 | — |
case-10 | pass→pass | 11,847 | 9,644 | -19% | 1 | 1 | 0% | 1,995 | 3,836 | +92% | 0 | 0 | — |
case-11 | pass→pass | 11,873 | 9,825 | -17% | 1 | 1 | 0% | 1,983 | 3,892 | +96% | 0 | 0 | — |
case-12 | fail→pass | 12,276 | 10,237 | -17% | 1 | 1 | 0% | 2,042 | 3,995 | +96% | 0 | 0 | — |
case-13 | pass→pass | 9,236 | 6,161 | -33% | 1 | 1 | 0% | 1,613 | 3,223 | +100% | 0 | 0 | — |
case-14 | pass→pass | 5,096 | 2,676 | -47% | 1 | 1 | 0% | 884 | 2,398 | +171% | 0 | 0 | — |
case-15 | fail→pass | 6,723 | 3,095 | -54% | 1 | 1 | 0% | 1,085 | 2,576 | +137% | 0 | 0 | — |
case-16 | pass→pass | 11,242 | 8,869 | -21% | 1 | 1 | 0% | 2,005 | 3,723 | +86% | 0 | 0 | — |
case-17 | pass→pass | 10,621 | 7,974 | -25% | 1 | 1 | 0% | 1,977 | 3,676 | +86% | 0 | 0 | — |
case-18 | pass→pass | 6,100 | 3,139 | -49% | 1 | 1 | 0% | 1,123 | 2,805 | +150% | 0 | 0 | — |
case-19 | pass→pass | 12,040 | 6,201 | -48% | 1 | 1 | 0% | 2,111 | 3,194 | +51% | 0 | 0 | — |
case-20 | pass→pass | 13,122 | 11,617 | -11% | 1 | 1 | 0% | 2,473 | 4,275 | +73% | 0 | 0 | — |
case-21 | pass→pass | 11,367 | 10,615 | -7% | 1 | 1 | 0% | 2,272 | 4,309 | +90% | 0 | 0 | — |
case-22 | pass→pass | 9,030 | 7,549 | -16% | 1 | 1 | 0% | 1,670 | 3,610 | +116% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.