One seemingly silly problem to deal with for those who host a “modded” Minecraft server is getting people to properly install those modifications. Copying a few files here and there seems simple enough, but it would be silly to say that connecting a backup generator to an electrical mains should be easy, just because it was easy to someone who dealt in the business. It comes down to an issue of numbers: if the difficulty was, for example, 10% harder, that could mean that there are 20% less people who can do it.
Several months ago, I updated my Minecraft launcher to support custom downloads and open sourced the entire launcher. While the update system worked pretty well, there was one caveat: it required that downloads be digitally signed, similar in principle to the browser verification of yourbank.com truly coming from yourbank.com. Setting up digital signatures is pretty straightforward, but it’s a straightforward in the same vein as client installation – it is easy if you are familiar with the tasks involved. For that reason, as of today, I have decided to disable digital signature verification for custom packages, which should make it vastly easier (vanilla downloads from Mojang are unaffected). I was trying hard to avoid this, but other, more elegant options require a currently unrealistic input of time and effort from me.
tl;dr: I have made a change to my Minecraft launcher which vastly makes the use of the custom update feature easier to setup, which allows you to setup a custom modified MC client for people. Use it to make playing with friends less hectic, or use it to distribute necessary files for a modded server. After following the steps described within this post, you should be able to distribute your own files and install them into a user’s game. Towards the end of the post will be a discussion of some non-technical issues involved with this. Update to the latest version of the launcher to use this newest change.
Building the package
You’ll need three files:
- A .zip file containing the files to install. This archive should contain files that would be placed into the root Minecraft folder (aka. .minecraft).
- A package XML file containing a list of files to install, with a link to the ZIP archive.
- An update XML file containing a link to the package file and a version string.
The package XML file is the more complicated file, as it has to contain all the files that need to be installed even on a fresh installation of Minecraft. You’ll see in the example file below three
<filegroup> sections, the first of which is your main concern, as it points to the ZIP archive mentioned above. The other file group sections merely point the launcher to where additional required Minecraft files can be acquired. As you may notice, you would have to change the directory URL for the ZIP file, the filename of the ZIP file, as well as the size in bytes so that the launcher can accurately draw the download progress bar.
The latter update XML file is considerably simple. The version string you choose can be anything, but it must stay the same until you issue an update. Upon the launcher finding a different version, it will download the referenced URL to update. The URL points to the current latest package version.
Once you’ve placed all three files on a web server somewhere, fire up the launcher, create a new configuration, choose a folder to store the files, and insert the URL to the update XML file.
The next question arises is that of “how does the launcher actually install the file?” It simply extracts the files over the Minecraft directory and overwrites any files. As for updates, the launcher keeps track of the list of files from prior updates and removes any files that disappeared between updates. A player’s saves would not be removed because it would not be part of the download ZIP, but any configuration change made by the user on a file added by the update would be wiped on next update. Overall, this process allows for very simple installation at the cost of some flexibility.
Support for incremental updates is there, as the resources downloaded from Mojang use that, but it is a bit convoluted and meant to fit in with Mojang’s existing download scheme. I may detail how it works in a future post, but for now, sticking to full updates is easier to get working.
The other issues
What about minecraft.jar? You have bundle that with the .zip (to keep it simple for you), which is not entirely kosher, but remember that you can already download Minecraft (without logging in) from assets.minecraft.net. However, this decision is up to you.
The second issue is that you may distribute other people’s work, which will inevitably happen, and so I can only ask of you to be sure that to have permission to distribute the files. The terms are often mentioned on people’s posts, but send them a friendly message if they are not clear about it.
There are currently a few rough edges with the launcher. The fact that you have to fiddle with the configuration screen is not ideal, and the fact that you can’t just two click add a configuration is another dislike from me. Letting users add their own client customization is also not so easy, although it could argued that you would not want to make that easy. If you distribute your own copy of the launcher (and make appropriate modifications), these rough edges disappear, but this is obviously not the best option. I will see if I can find some time to sand out some of the left over difficulties. Remember that you can contribute to the project, as it is open source.