Wispdock’s control panel isn’t built yet. Where a step says “in your control panel”, use whatever your host gives you for files, the console and start/stop. The Minecraft side works the same everywhere.
For a hosted pack, send the exact Minecraft, loader and pack release together; the modpack hosting page explains the setup details to provide.
Pick Forge or NeoForge
Your mods pick for you. In 2023 most of the Forge team left and forked it as NeoForge. Up to Minecraft 1.20.1 the two loaded the same mods. After that they split, and today each mod file is built for one or the other. A Forge jar won’t load on NeoForge, even when the version numbers look right.
For 1.21.x, most new and updated mods target NeoForge or Fabric. Plenty of packs still sit on 1.20.1 with Forge. Don’t go by reputation: open each mod’s page on Modrinth or CurseForge, filter by loader and game version, and check that every mod you want has a file for the same pair. If your list is mostly Fabric mods, make a Fabric server instead. If you’re running someone else’s modpack, the pack has already decided, and the modpack guide is the better starting point.
| Forge | NeoForge | |
|---|---|---|
| Download | files.minecraftforge.net | neoforged.net |
| Installer file | forge-<mc>-<version>-installer.jar | neoforge-<version>-installer.jar |
| Common versions | 1.20.1 and older packs | 1.20.2 and newer, most new 1.21 mods |
| Server install | --installServer, then run.sh / run.bat | |
NeoForge version numbers follow Minecraft’s: a NeoForge 21.1.x build is for Minecraft 1.21.1. Take the latest stable build for your Minecraft version from the download page.
Match the Minecraft and Java versions
Pick the Minecraft version every mod on your list supports, then set Java to match it. Minecraft 1.20.5 and newer need Java 21. 1.18 to 1.20.4 need Java 17. Old packs on 1.16.5 and earlier usually want Java 8. Set it in your control panel’s startup or version setting before the first start. Java that’s too old shows up as an error about the class file version before anything else loads.
Run the installer in server mode
Both loaders ship an installer jar with a server mode. Put it in an empty folder and run it from a terminal there:
java -jar neoforge-<version>-installer.jar --installServer
java -jar forge-<mc>-<version>-installer.jar --installServer
Use the line for your loader. The installer downloads the vanilla server and the libraries it needs, so it needs internet access. When it finishes you have a libraries folder, run.sh, run.bat and user_jvm_args.txt. You can delete the installer jar and its log afterwards.
If your host gives you no terminal, run the installer on your own PC instead. Double-click it, choose “Install server”, point it at an empty folder, then upload that folder’s contents to the server.
Forge for 1.16.5 and older is different: the installer writes a forge-<version>.jar that you start with java -jar like a normal server jar. Everything else on this page still applies.
Set memory in user_jvm_args.txt
Modern Forge and NeoForge don’t start with java -jar server.jar. run.sh calls Java with the contents of user_jvm_args.txt plus an argument file the installer put inside libraries. That means memory flags go in user_jvm_args.txt. Open it and add a line:
-Xmx6G
Lines starting with # are comments. Leave the rest of the file alone. How much RAM a server needs helps you pick the number; for a modpack, leave the machine some memory above -Xmx for Java itself.
If your control panel only lets you pick a jar name, look in its startup setting for a Forge or NeoForge option, or ask your host how they start these servers. Pointing the panel at a jar from libraries won’t work.
Start it and accept the EULA
Start the server from your control panel, or by hand:
./run.sh nogui
On Linux you may need chmod +x run.sh first. On Windows, run run.bat. The first start stops almost at once and writes eula.txt. Change the line to eula=true, save and start again. This time it creates mods, config, server.properties and the world, then prints a Done line in the console.
Add mods
Stop the server.
Download each mod for your loader and your exact Minecraft version.
Check the dependencies listed on each mod’s page and download those too. Library mods like Architectury API or GeckoLib are common.
Upload the
.jarfiles straight intomods, not into a subfolder and not unzipped.Start the server. If a dependency is missing or a version is wrong, the loader stops before the world loads and lists which mod needs what. Fix that and start again.
Add mods in batches of a few at a time. A crash with five new mods takes a minute to trace. A crash with eighty takes an evening. Reading logs and crash reports covers where to look.
Keep client-only mods off the server
Some mods only change what the player sees: shaders and rendering mods, minimaps, zoom, HUD and inventory tweaks. They have nothing to do on a server, and many crash it on startup. The usual error contains:
Attempted to load class net/minecraft/client/... for invalid dist DEDICATED_SERVER
The lines around it name the mod. Delete that jar from the server’s mods folder and start again. Players keep it on their own game.
Modrinth shows on each project page whether a mod is needed on the client, the server or both. CurseForge is less consistent, so read the description. Not every client mod crashes the server; some just sit there unused. Remove them anyway, because the next update might change that.
Find the configs
Most mod settings live in config/ as .toml, .json or .cfg files. Some mods keep per-world settings in world/serverconfig/ instead. If a change in config/ seems to do nothing, look there.
defaultconfigs/ holds files that get copied into a new world’s serverconfig when the world is created. Modpacks use it to ship their server settings. Editing it doesn’t change a world that already exists; edit that world’s serverconfig file instead.
Stop the server before editing configs. Some mods write their config back on shutdown and overwrite what you changed.
Set up players’ games
Players need the same loader, the same Minecraft version and the same content mods. Prism Launcher, the CurseForge app and the Modrinth App can all create a Forge or NeoForge instance. The least error-prone way is to build the instance once, export it and send that file to your group, so everyone gets the same versions. Then send them the address; connecting to your server covers that part.
Frequently asked questions
Can I run Forge mods on NeoForge?
Not on current versions. The two split after 1.20.1, and a mod file is built for one or the other. Some mods publish both builds; download the one that matches your server.
Why is there no server.jar after installing?
Forge for 1.17 and newer, and every NeoForge version, start through run.sh or run.bat instead of a single jar. Those scripts pass user_jvm_args.txt and the loader’s own argument file to Java.
Where do I set how much RAM the server uses?
In user_jvm_args.txt, next to the run scripts. Add a line like -Xmx6G and restart. Putting -Xmx in run.sh works too, but the installer may overwrite run.sh when you update.
Can I add Paper plugins to a Forge server?
No. Forge and NeoForge load mods only. Some plugins have mod versions, LuckPerms and spark among them. Hybrid servers that try to load both exist, but plugins and mods often break on them.
The server crashes with “invalid dist DEDICATED_SERVER”. What does that mean?
A client-only mod tried to load on the server. The lines around the error name the mod. Remove it from the server’s mods folder; players can keep it on their own game.
Forge and NeoForge servers with a real mod list need more memory than plugin servers. The draft 8 GB and 12 GB plans on the pricing page are the ones meant for modpacks. Prices are drafts and ordering isn’t open yet.
Still stuck? Send us the details and your latest.log.