FastPack Basics

Note:  While the standalone tool still exists, this functionality is also included in MCUpdater itself in the “Create Modpacks” tab

FastPack is a command-line tool that scans a directory tree for mods and config files and builds a ServerPack.xml from what it finds. It is not the sharpest crayon in the box, but it can save you a lot of time building and updating your pack when the time comes.

A lot of FP’s usage is either mind-numbingly obvious or arcane beyond the scope of this basic document (which is current as of FastPack 1.6.11 – July 12, 2015). I am only going to cover basic use here with a few simple examples. More specific details will be forthcoming in blog posts and Q&A pages.

FastPack is under active development, with new features and intelligence added regularly. So if it has been more than a few weeks since you last used it, I recommend downloading a fresh copy.

The most recent version is always available at http://files.mcupdater.com/MCU-FastPack-latest.jar.

There is no GUI for FastPack (we’ve had bad luck with graphical pack builders in the past), so to make things work, you will need to be comfortable typing at a command prompt. As our target audience is composed of people running their own Minecraft servers, I will quite blithely assume that you know how to open up a dos prompt or bash shell to the correct directory.

Since this is a jarfile we are executing from the command line, all FastPack calls will tend to be of the form java -jar MCU-FastPack-latest.jar (or whatever you may have renamed the jarfile to).

If you don’t provide any further parameters, it will give you an error saying which flags are absolutely required to get any output. For a list of all supported arguments, run FastPack with --help like so:

$ java -jar MCU-FastPack-latest.jar --help
Option                    Description
------                    -----------
--autoConnect <Boolean>   Auto-connect to server on launch (default: true)
--baseURL                 Base URL for downloads
--configsOnly             Generate all mods as overrides with ConfigFile entries
--debug                   Output full config matching data
--forge                   Forge version
--help                    Shows this help
--iconURL                 URL of icon to display in instance list (default: )
--id                      Server ID (default: fastpack)
--mainClass               Main class for launching Minecraft (default:
                          net.minecraft.launchwrapper.Launch)
--mc                      Minecraft version
--mcserver                Server address (default: )
--name                    Server name (default: FastPack Instance)
--newsURL                 URL to display in the News tab (default: about:blank)
--noConfigs               Do not generate ConfigFile entries
--out                     XML file to write
--path                    Path to scan for mods and configs
--revision                Revision string to display (default: 1)
--xslt                    Path of XSLT file (default: )

The options highlighted above are the bare minimum requirement for FastPack to run: --path, --baseURL, --mc, and --out. So for an example, I could do this with an empty directory:

$ ls example/
$ java -jar MCU-FastPack-latest.jar --path example --baseURL http://files.mcupdater.com/example --mc 1.7.10 --out EmptyExample.xml
Assigning configs to mods
===============
$

The net result is a perfectly usable, perfectly useless MCU serverpack:

<?xml version="1.0" encoding="UTF-8"?>
<ServerPack version="3.3" xmlns="http://www.mcupdater.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mcupdater.com http://files.mcupdater.com/ServerPackv2.xsd">
    <Server id="fastpack" name="FastPack Instance" newsUrl="about:blank" version="1.7.10" mainClass="net.minecraft.launchwrapper.Launch" revision="1" autoConnect="true">
    </Server>
</ServerPack>

This XML will load into MCU but won’t download any mods, etc… It won’t even install Forge, so let’s remedy that.

Suppose I am creating a fresh pack for a new server called FastPack Test (because I am brimming with creativity at the moment). At the very least, I would start by modifying the command above to get something that looks closer to this:

$ java -jar MCU-FastPack-latest.jar --path fptest --baseURL http://files.mcupdater.com/fptest --mc 1.7.10 --out FPTest.xml --id fptest --name "FastPack Test" --forge 10.13.4.1448

Now when we run FP, we’ll get an ever-so-slightly more useful XML back:

<?xml version="1.0" encoding="UTF-8"?>
<ServerPack version="3.3" xmlns="http://www.mcupdater.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mcupdater.com http://files.mcupdater.com/ServerPackv2.xsd">
    <Server id="fptest" name="FastPack Test" newsUrl="about:blank" version="1.7.10" mainClass="net.minecraft.launchwrapper.Launch" revision="1" autoConnect="true">
        <Import url="http://files.mcupdater.com/example/forge.php?mc=1.7.10&amp;forge=10.13.4.1448">forge</Import>
        <Module name="Minecraft Forge" id="forge-10.13.4.1448" depends="" side="BOTH">
            <Size>100000</Size>
            <Required>true</Required>
            <ModType order="1">Override</ModType>
        </Module>
    </Server>
</ServerPack>

In addition to populating the server ID and name attributes for us, it now also constructs an appropriate Forge import and a dummy Override to make the progress bar go a little nicer. You could safely remove the entire extra mod entry or you could update the Size to match the actual size of the forge jar if you wanted. Or you can just ignore it as good enough 😉

Now let’s add some mods. FP looks for mods in all folders below the --path that you start the search off in. For sanity, I’m going to put some mods under fptest/mods/ like so:

fptest
└── mods
    ├── ebxs-autumn-woods-0.0.3.jar
    └── ebxs-core-0.1.3.jar

Now, when we re-run the exact same command as above, we see some additional output on the console:

fptest/mods/ebxs-autumn-woods-0.0.3.jar: 70 entries in file.
fptest/mods/ebxs-core-0.1.3.jar: 63 entries in file.

This lets us know that it identified and parsed the two mods, and sure enough, it added them to the xml, yielding an entry for EBXS Core that looks like this:

<Module name="Extrabiomes Core" id="ExtrabiomesCore" depends="" side="BOTH">
	<URL priority="0">http://files.mcupdater.com/fptest/mods/ebxs-core-0.1.3.jar</URL>
	<Size>55660</Size>
	<Required>true</Required>
	<ModType>Regular</ModType>
	<MD5>5f632b403a23a3d7ac2eadf0f68a393d</MD5>
	<Meta>
		<credits>Extrabiomes Team</credits>
		<description>Core functionality of all Extrabiomes mods.</description>
		<version>0.1.3</version>
		<url>http://extrabiomes.com/core</url>
		<authors>allaryin</authors>
	</Meta>
</Module>

NOW we’re talking. It did a lot of things here:

  1. It constructed a download URL based on the base url and path provided.
  2. It measured the size of the download so the GUI can display a better progress bar.
  3. It assumed that the mod is both <Required/> and Regular.
  4. It calculated the MD5 checksum of the mod.
  5. It looked inside the jarfile and read the mcmod.info file and pulled out some metadata for generating a modlist.

Let’s add one more mod to the mix, along with its associated config file, so now our final directory structure for the silly modpack in question looks like this:

fptest
├── config
│   └── Carnivora.cfg
└── mods
    ├── carnivora-0.1.3.jar
    ├── ebxs-autumn-woods-0.0.3.jar
    └── ebxs-core-0.1.3.jar

When we run FastPack a final time, the results look like this:

$ java -jar MCU-FastPack-latest.jar --path fptest --baseURL http://files.mcupdater.com/fptest --mc 1.7.10 --out FPTest.xml --id fptest --name "FastPack Test" --forge 10.13.4.1448
fptest/mods/carnivora-0.1.3.jar: 32 entries in file.
fptest/mods/ebxs-autumn-woods-0.0.3.jar: 70 entries in file.
fptest/mods/ebxs-core-0.1.3.jar: 63 entries in file.
Assigning configs to mods
===============
config/Carnivora.cfg:
   >Carnivora - -20 (potential)
config/Carnivora.cfg: Carnivora (-20)

It identified the three mods correctly then it looked through additional files, assuming that they were configs. It did some pattern matching between what it knows about the mods in the list and the filenames of the configs to determine that config/Carnivora.cfg belonged to the mod named “Carnivora”, and generated the following XML for its entire mod entry:

<Module name="Carnivora" id="Carnivora" depends="" side="BOTH">
	<URL priority="0">http://files.mcupdater.com/fptest/mods/carnivora-0.1.3.jar</URL>
	<Size>21920</Size>
	<Required>true</Required>
	<ModType>Regular</ModType>
	<MD5>636691913dee65f56d1557f2b33716c5</MD5>
	<Meta>
		<credits>zenth - art</credits>
		<description>Eat more meat!</description>
		<version>0.1.3</version>
		<url>http://mods.mcupdater.com/carnivora/</url>
		<authors>allaryin</authors>
	</Meta>
	<ConfigFile>
		<URL>http://files.mcupdater.com/fptest/config/Carnivora.cfg</URL>
		<Path>config/Carnivora.cfg</Path>
		<NoOverwrite>false</NoOverwrite>
		<MD5>0dd31a6e8c2a9220554fcd615261b583</MD5>
	</ConfigFile>
</Module>

Sometimes there are problems with matching mods with configs, but in cases like this where the names are identical, it works like a dream 🙂