For questions, you can always join my Discord server and talk to me there.
ServerPackCreator creates a server pack from any given Forge, Fabric, Quilt, LegacyFabric and NeoForge modpack.
Whenever you are working on an update to your modpack, you simply run ServerPackCreator and BAM! You've got yourself a server pack for your new modpack version.
ServerPackCreator is a passion project on which I am working in my spare time. It is also the main reason for why I got into programming in the first place. Patience with issues and support is appreciated!
I started getting into Java programming in February 2021, when I was working on an update for one of my Minecraft modpacks, Survive Create Prosper 4, and got tired and bored with manually creating a server pack everytime I wanted to update and test something, or just release a new server pack for the new modpack version.
The thought "There must be a way to automate this, or at least make it less tedious..." was the spark which sent me off into the world of programming. And here we are.
Disclaimer:
Pre-Releases:
There are two kinds of pre-releases: Alphas and Betas
CLI | GUI | WEB |
---|---|---|
Each way of using ServerPackCreator has its advantages and disadvantages. Depending on your environment, it may be better to use one way over the other. This section highlights some of the advantages and disadvantages of each version to help you decide which way you are going to use. Note: All three ways are supported by the .jar-file. Which one is started depends on the CLI arguments used and your environment.
Advantages | Disadvantages |
---|---|
No need for a graphical environment. Can be used on a server to generate a server pack for immediate use. | Gathering of information for a configuration file is tedious. |
Step-by-Step generation of a configuration-file with the use of the -cgen argument. Generated config will be used immediately afterwards. |
No convenience features file folder-browsing or jumping to the generated server pack after generation. |
Load and edit an existing configuration. Editing is limited to base values of a given configuration. Not editable via CLI are script settings as well as any potentially installed plugin configuration. | Debugging in case of a broken/erroring configuration file can be time consuming. Careful reading of logs is required. |
Manual editing of the configuration-file in case you want to change it. | |
Unable to edit start script placeholders and variables |
Advantages | Disadvantages |
---|---|
Browse the filesystem for folders and file required by the configuration. | Requires a graphical environment. |
Setting up a configuration by browsing the filesystem and selecting your Minecraft and modloader versions from a list. | |
Browsing the generated server pack after generation has finished. | |
Loading and saving different configurations for quick generation of multiple server packs in short succession. | |
Edit the configuration in the GUI. No manual file-editing required. | |
Edit start script placeholders and values |
Advantages | Disadvantages |
---|---|
No software installation on clients required | Requires a server with sufficient space |
Easy access via web-browser | Requires server-administration knowledge for setup and control |
Quickly share mod- and server packs with friends / colleagues | No custom script templates |
Multiple server packs for the same modpack | No custom server icons |
Re-use configurations | No custom server-properties |
No custom server pack suffix | |
No custom script variables or values | |
No custom inclusions or exclusions |
-Xms8G -Xmx8G
or similar values!SPC_FLYNN_LIVES_SPC
in the templates can be replaced with a value configured on a per-server pack basis, i.e Now that's a big door
The first time you start ServerPackCreator, you will be asked whether you want to see a small step-by-step guide. Said guide will show you the most important parts in configuring your server pack.
Should you at any point want to revisit said guide, simply hit About -> Step-By-Step Guide in the menu at the top.
The installers ship their own Java installations.
ATTENTION: I can not and will not guarantee that ServerPackCreator will work flawlessly with any other Java version other than version 21. Things may break at random, at any place, if a different Java version is used. You are welcome to try and use any other version, but do not report issues back to me if you do encounter problems when running ServerPackCreator with a more recent Java version.
There are a couple of arguments which may or may not be helpful for you, depending on how you plan on using ServerPackCreator:
Argument | Description |
---|---|
-help |
Print ServerPackCreators help to commandline. |
-update |
Check whether a newer version of ServerPackCreator is available. |
-cgen |
Run ServerPackCreators configuration generation. |
-cli |
Run ServerPackCreator in commandline-mode. If no graphical environment is supported, this is the default ServerPackCreator will enter, even when starting ServerPackCreator with no extra arguments at all. |
-web |
Run ServerPackCreator as a webservice. |
-gui |
Run ServerPackCreator with our GUI. If a graphical environment is supported, this is the default ServerPackCreator will enter, even when starting ServerPackCreator with no extra arguments at all. |
--setup |
Set up and prepare the environment for subsequent runs of ServerPackCreator. This will create/copy all files needed for ServerPackCreator to function properly from inside its JAR-file and setup everything else, too. |
DISCLAIMER
There is no publicly available instance of ServerPackCreators webservice due to security concerns with the ability to upload zip-archives. If you want to make use of the webservice, you will have to host your own instance. As such, you are advised to not make your instance of the webservice of ServerPackCreator publicly accessible.
ZIP-archives uploaded by anonymous people may contain illegal or otherwise dangerous data, which could corrupt your system or get you into legal trouble.
If you want to open your webservice-instance to the public, make sure to properly protect it by putting it behind required authorization.
-web
argument. ServerPackCreator will crash, complaining about JDBC-related things. This is expected, don't worry.Home directory set to:
! serverpackcreator.properties
according to your database
spring.datasource.password=
spring.datasource.url=
jdbc\:postgresql\://localhost\:5432/serverpackcreator
spring.datasource.username=
-web
-argument, againhttp://localhost:8080
You may edit the following properties inside the serverpackcreator.properties
if you wish to change some parts of the webservice-behaviour:
Property | Description |
---|---|
de.griefed.serverpackcreator.spring.schedules.database.cleanup |
Time when the database-cleanup operations run. |
de.griefed.serverpackcreator.spring.schedules.files.cleanup |
Time when the filesystem-cleanup operations run. |
de.griefed.serverpackcreator.spring.schedules.versions.refresh |
Time when the version-refresh operation runs. |
spring.servlet.multipart.max-file-size |
In combination with the property below, this sets the maximum upload size of modpacks. |
spring.servlet.multipart.max-request-size |
See above. |
de.griefed.serverpackcreator.configuration.directories.mustinclude |
Directories which must be included in a server pack, if they are present in a modpack. |
de.griefed.serverpackcreator.configuration.directories.shouldexclude |
Directories which should be excluded from a server pack. |
de.griefed.serverpackcreator.configuration.fallback.updateurl |
URL to a .properties -file which contains definitions for clientside-only mods. |
de.griefed.serverpackcreator.serverpack.autodiscovery.enabled |
Whether ServerPackCreator should try to automatically excluded clientside-mods, in addition to the list of excluded clientside-mods. |
de.griefed.serverpackcreator.serverpack.autodiscovery.filter |
Filter method used to exclude mods from the clientside-only list. Possible values are START , END , CONTAIN , REGEX , EITHER |
de.griefed.serverpackcreator.serverpack.zip.exclude |
Files or directories which should be excluded from a server pack archive. |
de.griefed.serverpackcreator.serverpack.zip.exclude.enabled |
Whether files should be excluded from a server pack archive. |
server.port |
The port at which the webservice will be available at. Default is 8080 . |
The recommended, and easiest, way to deploy ServerPackCreator as a webservice is via docker and docker-compose.
Available images can be viewed at https://hub.docker.com/r/griefed/serverpackcreator/tags
About Tags:
The example below makes use of the latest
-tag. However, using said tag is not recommended, as there may be breaking changes between versions.
When setting up ServerPackCreator as a webservice for production, make sure to not use latest
and instead use the tag corresponding to the, at this point, latest available release version available.
You must replace <YOUR_DB_USERNAME>
and <YOUR_DB_PASSWORD>
accordingly.
version: '3'
services:
serverpackcreatordb:
container_name: serverpackcreatordb
image: postgres:16.1
restart: unless-stopped
environment:
POSTGRES_DB: serverpackcreator
POSTGRES_USER: <YOUR_DB_USERNAME>
POSTGRES_PASSWORD: <YOUR_DB_PASSWORD>
volumes:
- ./database:/var/lib/postgresql/data
serverpackcreator:
container_name: serverpackcreator
image: griefed/serverpackcreator:latest # For a list of available tags, see https://hub.docker.com/r/griefed/serverpackcreator/tags
restart: unless-stopped
depends_on:
- serverpackcreatordb
environment:
- TZ=Europe/Berlin # Your timezone
- PUID=1000 # Your user ID
- PGID=1000 # Your group ID
- SPC_DATABASE_PASSWORD=<YOUR_DB_PASSWORD>
- SPC_DATABASE_USERNAME=<YOUR_DB_USERNAME>
- SPC_DATABASE_HOST=serverpackcreatordb # Do not change this unless you absolutely know what you are doing.
- SPC_DATABASE_PORT=5432 # Do not change this unless you absolutely know what you are doing.
- SPC_DATABASE_DB=serverpackcreator # Do not change this unless you absolutely know what you are doing.
ports:
- "8080:8080" # Port at which SPC will be available at on your host : Port of the webservice inside the container. Only change the left value, it at all.
volumes:
- ./modpacks:/app/serverpackcreator/modpacks # Path at which modpacks from the container will be stored at on your host : Path to the modpacks in the container. Only change the left value, if at all.
- ./server-packs:/app/serverpackcreator/server-packs # Path at which server packs from the container will be stored at on your host : Path to the server packs in the container. Only change the left value, if at all.
- ./logs:/app/serverpackcreator/logs # Path at which logs from the container will be stored at on your host : Path to the logs in the container. Only change the left value, if at all.
You may edit the following container-properties if you wish to change some parts of the webservice-behaviour:
Property | Description |
---|---|
SPC_SCHEDULE_DATABASE_CLEANUP |
Time when the database-cleanup operations run. |
SPC_SCHEDULE_FILES_CLEANUP |
Time when the filesystem-cleanup operations run. |
SPC_SCHEDULE_VERSIONS_REFRESH |
Time when the version-refresh operation runs. |
SPC_MAX_UPLOAD_SIZE |
This sets the maximum upload size of modpacks. |
SPC_CONFIGURATION_DIRECTORIES_MUSTINCLUDE |
Directories which must be included in a server pack, if they are present in a modpack. |
SPC_CONFIGURATION_DIRECTORIES_SHOULDEXCLUDE |
Directories which should be excluded from a server pack. |
SPC_CONFIGURATION_FALLBACK_UPDATEURL |
URL to a .properties -file which contains definitions for clientside-only mods. |
SPC_SERVERPACK_AUTODISCOVERY_ENABLED |
Whether ServerPackCreator should try to automatically excluded clientside-mods, in addition to the list of excluded clientside-mods. |
SPC_SERVERPACK_AUTODISCOVERY_FILTER |
Filter method used to exclude mods from the clientside-only list. Possible values are START , END , CONTAIN , REGEX , EITHER |
SPC_SERVERPACK_ZIP_EXCLUDE |
Files or directories which should be excluded from a server pack archive. |
SPC_SERVERPACK_ZIP_EXCLUDE_ENABLED |
Whether files should be excluded from a server pack archive. |
ServerPackCreator's API is available on maven for use in your own projects: https://central.sonatype.com/artifact/de.griefed.serverpackcreator/serverpackcreator-api
Note: The API does not include the REST-API of the webservice in the app. It is explicitly not part of the ServerPackCreator API.
Replace $VERSION
with the version you want to use.
<dependency>
<groupId>de.griefed.serverpackcreator</groupId>
<artifactId>serverpackcreator-api</artifactId>
<version>$VERSION</version>
</dependency>
implementation 'de.griefed.serverpackcreator:serverpackcreator-api:$VERSION'
implementation("de.griefed.serverpackcreator:serverpackcreator-api:$VERSION")
Initialize the API with your properties file, containing some basic settings for the API to use.
/path/to/file.properties
represents the path to your properties-file.
Make sure to select a directory which doesn't contain any vital data for the API, as the API will setup and create any and all required files in said directory. Best to give it its own directory all to itself.
For information about possible settings, see https://help.serverpackcreator.de/settings-and-configs.html#serverpackcreator-properties
val spcAPI = ApiWrapper.api(File("/path/to/file.properties"))
After initializing the API you can now access the ConfigurationHandler as well as the ServerPackHandler, among other things. Here's a very basic example:
val packConfig = PackConfig()
val configCheck = spcAPI.configurationHandler.checkConfiguration(File("/path/to/serverpack-config.conf"), packConfig)
if (configCheck.allChecksPassed) {
val serverPackGeneration = spcAPI.serverPackHandler.run(packConfig)
if (serverPackGeneration.success) {
println("Path to your server pack: ${serverPackGeneration.serverPack.absolutePath}")
if (serverPackGeneration.serverPackZip.isPresent) {
println("Path to your server pack ZIP: ${serverPackGeneration.serverPackZip.get().absolutePath}")
}
} else {
println("Encountered the following errors during generation:")
for (error in serverPackGeneration.errors) {
println(error)
}
}
} else {
println("There are errors in your server pack config:")
for (error in configCheck.encounteredErrors) {
println(error)
}
}
None of this would have been possible without the excellent IDEs by JetBrains. They have kindly provided this open source project with an All Products Pack license. Additionally, ej-Technologies has provided an open-source license for JProfiler and install4j for ServerPackCreator, which allows me to resolve performance bottlenecks, pin down memory leaks and understand threading issues, as well as generated fancy high-end installers. Huge shoutout and thank you!
JetBrains | IntelliJ IDEA | WebStorm | Writerside | YouTrack | JProfiler | install4j |
---|---|---|---|---|---|---|
Starting from version 6.x, ServerPackCreator will sport fancy new installers made possible by ej-technologies' install4j.
Griefed |
dependabot[bot] |
whitebear60 |
MoonstruckDev |
dependabot-preview[bot] |
Alistair1231 |
arthurbarret0 |
kyber-6 |
github-actions[bot] |