Getting Started

Welcome to packmaker! This guide will help you begin using it to make Modded Minecraft modpacks.

Installing

You will need Python. Packmaker works on Python 3.4 and later.

If you have pip, just say pip3 install packmaker (or pip3 install --user packmaker if you run into permissions problems).

To install without pip, download packmaker from its PyPI page and run python setup.py install in the directory therein.

The best way to upgrade packmaker to a new version is by running pip3 install -U packmaker.

Configuring

Packmaker has a config file that you will need to provide. Packmaker will look in the following locations on the filesystem for this config file, in this order. The first file found is the one it uses:

  • ./packmaker.conf, in the current working directory.
  • ${HOME}/packmaker.conf, in your home directory.
  • ${HOME}/.config/packmaker.conf, the .config subdirectory of your home directory.
  • /usr/local/etc/packmaker.conf
  • /etc/packmaker.conf

Currently, this configuration file only contains some required parameters for dealing with the Curseforge API and some optional locations for where to store downloaded and built artifacts.

[curseforge]
authentication_token = <twitch authentication token>
moddb_filename = curseforge.db

[locations]
build = ./build
cache = ./build/cache
release = ./build/release

Packmaker needs to call the Curseforge API to retrieve mod information, and this api requires authentication. A twitch.tv account is required and your authentication oauth token can be generated using the Twitch Chat OAuth Password Generator. Copy the generated token into your config file.

Packmaker can download the enitre list of minecraft mods and generate a local database of information to be used later when building modpacks. The file this database is contained in also needs to be specified.

The [locations] section is optional but allows you to specify the locations where the files packmaker downloads and the artifacts it generates will be kept on your filesystem.

The build location is where packmaker puts its generated artifacts when building a pack. If not defined, the default build location is a build subdirectory of the current working directory.

The cache location is where packmaker places the files its downloads during the build process. Minecraft files, forge libraries, mods, etc are all downloaded and kept in this cache location. Packmaker tries to optimize its downloading and checks for files in this cache location before attempting to download a file so that it does not have to download the same file twice. If not defined, the default cache location is a cache subdirectory in the build location.

Finally, the release location is where packmaker will put the final artifacts generated by the build process. For example, the zip file you will want to upload to curseforge is placed here. If not defined, the default release location is a release subdirectory in the build location.

CurseforgeDB

With a configuration file in place, you can now generate a local database of information on minecraft mods. Run the following command to generate it:

packmaker updatedb

This command will use the curseforge api to retrieve the list of all available mods. As there are literally thousands of available mods, this command may take a few minutes to complete.

The Example Modpack

Packmaker modpacks are defined in a YAML file. By default, packmaker will look packmaker.yml in the current directory, although you can use any file name you like when you specify it on the packmaker command line.

Here is a short, quick example packmaker definition file:

---
name:  examplepack
title: Example Pack
version: 1.0.0

authors:
  - mcrewson

minecraft: 1.12.2
forge: 14.23.5.2838

mods:
  - jei:
  - journeymap:
  - tinkers-construct:
  - the-one-probe:

files:
  - location: src/

Fields should be fairly obvious. The Packmaker Definition Files explains all of these options (and more) in details. But in summary, this example modpack is defined as follows:

  • The modpack filename(s) will be a combination of the name and version field. For example, examplepack-1.0.0.zip
  • The modpack metadata will include title and authors fields.
  • This pack is for version 1.12.2 of Minecraft and version 14.23.5.2838 of Forge
  • Packmaker will include the following mods in the pack:
    • Jei, Just Enough Items
    • Journeymap
    • Mantle (a dependent library mod)
    • Tinker’s Construct
    • The One Probe
  • Packmaker will include all of the content of the src subdirectory in the modpack

With the modpack defined in the yaml file, next it needs to be locked, and then built.

Locking a pack, with the packmaker lock command, will resolve all of the information in the yaml file into actionable items. Primarily, mods will be resolved to be downloadable urls. A packmaker.lock file will be generated with all of the resolved information in it, and subsequent build steps will reference this lock file.

During the lock process, packmaker will also attempt to resolve any mod dependencies. If a mod defined in the pack has a dependency on another mod that is not also listed in the pack definition, packmaker will automatically resolve and add the dependent mod to the lock file for you. This way you do not need to worry about defining all of the dependent library mods often required in a pack. Packmaker can figure this out for you.

After the pack is locked, you can build it into an installable modpack, suitable for running in your launcher, or uploading to the Curseforge website. Packmaker supports and is capable of building the pack into a number of different formats.

To build a curseforge compatible pack, run packmaker build-curseforge. You can upload the generate zip file (build/release/examplepack-1.0.0.zip) to curseforge, or import it into the Twitch.tv client or MultiMC client directly.

To build a server, suitable for multiplayer play, run packmaker build-server. You’ll find the server files in build/server/. There is even a simple start.sh script you can use to run the server.

A local single player version of the pack can also be generated with packmaker build-local, found in build/local/. For pack testing purposes, there is even a convienent way to launch the pack in offline mode, packmaker launch.