Forge Version: 37.0.0
Minecraft Version: 1.17.1
Installer: AdFocus Direct
MDK: AdFocus Direct
The first release of 1.17 is ready!
Before you dive in, we have to address some things.
We were planning to release this sooner, but real-life matters and the update to Java 16 meant we were waiting for other projects to conclude before we can release.
It is not the fault of any one person or project, this delay was caused by a number of factors.
However, enough waiting has occured, and we want to put this in the hands of the players.
This is an *early access beta* build. Nothing here is final, it's merely an introduction for modders to get used to the new features.
We have lots of changes still to come, but the main things are here. The FML peel, the game test system, Java 16 features..
Java 16 and Modules
Almost every Java 16 feature is open to mods. Go ham.
However, modules are a bit of a pain to use.
If you do use the module-info system in your mod, make sure you fully understand what it is and how it is exposed to other modules (mods) at compile time.
Currently, module-infos will be ignored at runtime but NOT at compile time.
Our ongoing advice is to not develop your mod as a module.
Mixins do not work with the new Modlauncher yet, and we are waiting for Mumfrey to review and update Mixin.
Once he gives us the go ahead that it is stable and supports the new systems, we'll ship it again.
As such, we're going to release the first few builds of Forge without them.
As a reminder, once 1.17 is released, 1.16 and 1.15 become joint LTS versions - 1.15 is now in grace.
In 1 month (22nd August 2021), 1.15 will be dropped altogether.
We plan that once 1.18 releases, 1.16 will stay as LTS and 1.17 will be dropped, but this is just a plan and is not solid.
ForgeGradle 5 just had a Recommended Build. There will be no breaking changes in the tool until the next minor version.
1.16 and 1.17 now also use ForgeGradle 5 by default, to make it easier for modders that use both versions and don't wish to deal with the mess that is Java 16 support.
ForgeGradle still follows the even-odd versioning, where odd minor versions (5.1, 5.3. 5.5...) have no breaking changes, and even minor versions (5.2, 5.4, 5.6...) are breaking/development phases.
This system may seem strange at first, but it helps us remove unnecessary technical debt.
I recommend hardcoding the version to 5.1.+ (or see the new default MDK buildscript) to avoid unwanted breakages in your project.
FML and the Modlauncher system was designed for Java 9+ modularity from the start - using modules is something we have been intending to do from day one.
However, there are a few complications with integrating with such an unnecessarily complicated system as Java modularity, so the internal FML APIs are not solid.
Any mod interfacing with the FML APIs before the RB may encounter crashes with the next update, as we figure out where things belong and move them accordingly.
Anything inside these packages are liable to be moved, changed, or removed on any minor update before the first RB:
However, once it's all finished, we can properly reimplement things like native API exposure for mods via package exports, native jar-in-jar loading, etc.
Lots of cool opportunities for modules in mods.
Forge Repo Structure
With the FML Peel complete, the structure of the Forge repos has become a bit more complex;
There are many subprojects, each containing a part of the whole project.
A main part of this is to facilitate the new fmlonly configuration - where the modloader can be built without the API.
This can theoretically enable modding on snapshots, given a small amount of work done on the backend.
Installers and the Server
Due to the way the module system works in Java, the server now launches in a much different way.
It is no longer feasible to provide a single executable jar like was done before, so we use a workaround:
When you install a server, you'll see two run scripts (one for linux and mac, one for Windows) and argument files.
The arguments are added in the order:
java @user_jvm_args.txt @forge_args.txt <user game args>
As you can tell by the name, only the user_jvm_args.txt file is are intended to be modified by the end user.
There is a written example provided by me in the user_jvm_args file that explains the most commonly used arguments (-Xmx, -Xms).
Tutorials for creating a server will no longer work on Forge >=37.0. You must use one of the command files (.bash / .sh) provided, or the game will not be able to load.
With all that said, we're looking forward to having people play with Forge. Remember, if you see any bugs, feel free to report them here (the forums), our Discord server or on the issue tracker.