Skip to content

Server Setup

steefan1998 edited this page Nov 2, 2026 · 6 revisions

The easiest way to run a GSPack server is GSPackServerInstaller. It builds a ready-to-run server on Windows, Linux or macOS. No CurseForge API key is needed.

Using a hosting panel? See Server Setup: AMP Panel for CubeCoders AMP. Other panels (Pterodactyl, etc.) work the same way with the -FilesOnly option below.

What the installer does

  1. Downloads the latest GSPack from CurseForge (project 1777849), or uses a local export zip you give it.
  2. Downloads every mod in the pack's manifest.json.
    • Client-only mods are skipped (for example Sodium, Iris and FancyMenu), as are resource packs and shader packs.
    • Mods tagged client-only on CurseForge that still add blocks or recipes (for example Equivox) are kept, because players can't join without them.
  3. Copies the overrides: config/, kubejs/ and similar folders, plus any server-overrides.
  4. Installs NeoForge.
  5. Downloads a portable Java (Temurin) if the right version isn't installed.
  6. Writes start.bat / start.sh (with auto-restart), user_jvm_args.txt (8 GB RAM) and eula.txt.

Requirements

System Needs
Windows PowerShell (built in)
Linux / macOS bash, curl, unzip and jq. On Debian/Ubuntu: sudo apt install curl unzip jq
Both About 8 GB of free RAM for the server, plus some for the OS

Quick start

  1. Download or clone GSPackServerInstaller.

  2. Run it.

    Windows: double-click Build-ServerPack.bat, or run:

    powershell -ExecutionPolicy Bypass -File .\Build-ServerPack.ps1 -AcceptEula

    Linux / macOS:

    ./build-serverpack.sh --accept-eula

    -AcceptEula / --accept-eula sets eula=true, which means you agree to the Minecraft EULA.

  3. Start the server: GSPackServer\start.bat (Windows) or GSPackServer/start.sh (Linux/macOS).

  4. Players connect on the default port 25565. Open or forward that port on your router or firewall if friends join over the internet.

The first start takes a few minutes while NeoForge and all mods load and the world generates.

Options

PowerShell bash What it does Default
-Zip <file> --zip <file> Build from a local CurseForge export zip Download from CurseForge
-ProjectId / -FileId --project / --file Use a specific CurseForge project or pack version GSPack (1777849), latest version
-OutDir <dir> --out <dir> Output folder GSPackServer
-AcceptEula --accept-eula Set eula=true Off
-RamMB <mb> --ram <mb> Server memory in MB 8192 (8 GB)
-JavaPath <path> --java <path> Use your own Java instead of the portable one Auto
-ExcludeMods <regex> --exclude <regex> Extra mods to leave off the server None
-KeepClientMods --keep-client-mods Turn off the client-only filter Off
-FilesOnly --files-only Only create the server folders and the NeoForge installer, no start scripts or Java. Use this for hosting panels. Off

The server folder

Path Notes
mods/ Rebuilt on every build. Don't put your own mods here.
extra-mods/ Your own server-only mods. Copied into mods/ on every build.
config/, kubejs/ The pack's configs and scripts
start.bat / start.sh Start scripts with auto-restart
user_jvm_args.txt Memory settings (8 GB by default)
server.properties, whitelist Kept when you rebuild
world/ Kept when you rebuild
skipped-client-mods.txt Mods left out as client-only
failed-mods.txt Mods that could not be downloaded

Downloads are cached in .cache/, so rebuilds are fast.

Updating to a new pack version

  1. Stop the server and make a backup of world/ (FTB Backups also keeps copies in ftbackups3/).
  2. Run the installer again (with the new zip if you use -Zip).
  3. Start the server.

mods/ is rebuilt, extra-mods/ is copied in again, and your world, server.properties and whitelist stay as they are. Quest progress is kept, because quest IDs don't change between versions.

Admin basics

Make yourself operator

In the server console:

op <your name>

Useful commands

Command What it does
/ftbquests reload Reload the quest book after changing quest files
/ftbquests editing_mode Edit quests in-game (operators)
/ftbteams Create, join and manage teams
/ftbranks Manage ranks and permissions (FTB Ranks)
/spark profiler start / stop Profile the server to find lag (spark)

Pack defaults worth knowing

These come from the pack's configs. Change them in your server's config files if you want:

Setting Value File
Max claimed chunks per team 500 config/ftbchunks-world.json5 (max_claimed_chunks)
Max force-loaded chunks per team 25 config/ftbchunks-world.json5 (max_force_loaded_chunks)
Offline force-loading Only for teams with a player who has the ftbchunks.chunk_load_offline permission config/ftbchunks-world.json5 (force_load_mode: "default")
PvP in claimed chunks Always allowed config/ftbchunks-world.json5 (pvp_mode)
Backups Every 2 hours (backup_timer: 120 minutes), max 50 GB total config/ftbbackups3-server.json5

To give extra claims or offline force-loading to everyone (or a rank), use FTB Ranks permissions such as ftbchunks.max_claimed, ftbchunks.max_force_loaded and ftbchunks.chunk_load_offline. Edit ranks with /ftbranks or in world/serverconfig/ftbranks/ranks.json5, not in config/ftbranks-pack.json5 (that file can be overwritten by pack updates).

Troubleshooting

Problem Fix
"Channel … is missing on the server side" when joining A mod that was skipped as client-only is needed on the server. Find it in skipped-client-mods.txt, put the jar in extra-mods/ and rebuild. Or rebuild with -KeepClientMods.
A mod didn't download It's listed in failed-mods.txt. Download it yourself into extra-mods/ and rebuild.
"Mod rejections" / mismatched mods when joining Client and server are on different pack versions. Update both to the same version.
Server runs out of memory or lags Raise -RamMB (for example -RamMB 10240) and rebuild, or edit user_jvm_args.txt. Use /spark profiler start to find the cause.
Players can't connect from outside Forward TCP port 25565 (or the server-port in server.properties) and allow it in the firewall.

More questions: FAQ & Troubleshooting.

Converting a world from before 0.5

GSPack 0.5 unifies materials: one item per metal, dust or plate (AllTheOres first), and ores that AllTheOres also has no longer generate. A world started on an older version still holds the old blocks and items. They keep working, and the pack converts them while you play: your inventory, chests you open, and chunks when they load.

To convert the whole world at once, even areas nobody visits, update the server to 0.5, stop it, and use the converter that comes with the GSPack Server Installer:

  • GUI: the Convert world button: pick the server or world folder in File Explorer
  • Menu: option 8 in Build-ServerPack.bat (Enter = this server, B = browse for a folder)
  • Windows: double-click Convert-World.bat and pick the folder in File Explorer, or drag a server or world folder onto it
  • Linux: ./convert-world.sh [server folder] (needs PowerShell 7, pwsh)

It always shows a dry run first and asks before it writes anything. Not using the installer? The same tool is tools/convert-world.ps1 in the GSPack repository: powershell -ExecutionPolicy Bypass -File convert-world.ps1 -World <server or world folder> [-DryRun] (or -Interactive -Pick for a folder picker, a dry run and a question before it writes).

  • It converts placed blocks in every dimension, items in chests and machines, dropped items, player inventories and saved mod data.
  • It works on any old world: the id tables are built in, so the world doesn't need a GSPack 0.5 kubejs folder next to it.
  • It refuses to run while the world is in use. Every file it changes is copied to world/gspack-convert-backup first; delete that folder once the world works.
  • Make a normal backup of the world before you start anyway.

Clone this wiki locally