Versions For Things
Because I have the memory of a goldfish.
Class formats
| Java version | Class format |
|---|---|
| 8 | 52 |
| 16 | 60 |
| 17 | 61 |
| 21 | 65 |
| 25 | 69 |
A mnemonic (which is at least true for Java 5 thru 26): take the Java version and add 44, that’s the class format version.
More at this stackoverflow answer, which people seem to update when new versions of Java come out, and this part of the Java specification.
Compiler version supprt
javac version |
Lower limit | Upper limit | Note |
|---|---|---|---|
| 8 | -source 1.1 -target 1.1 |
-source 8 -target 8 |
Also against Java 6 with -source 6 -target 6 |
| 11 | --release 6 |
--release 11 |
Latest version which supports Java 6 |
| 17 | --release 8 |
--release 17 |
|
| 21 | --release 8 |
--release 21 |
|
| 25 | --release 8 |
--release 25 |
Java 9 added the --release X flag. Anything older requires -source X -target X.
Since at least java 11, valid options for --release are visible in javac -help.
On-line documentation for modern-ish versions simply says “The supported values of release are the current Java SE release and a limited number of previous releases, detailed in the command-line help.” As of javac 25.0.3, support for any version of Java later than 8 has not been dropped; all --releases between 8 and 25 are accepted, although it does warn that version 8 will be removed in the future.
Piston-meta
Mojang’s jsons about all published minecraft versions
https://piston-meta.mojang.com/mc/game/version_manifest_v2.json
Minecraft Java version changeovers
| Game version | Java version |
|---|---|
| Really old versions | Java 5 or 6 |
| Since 1.12.0 | Java 8 |
| Since 1.17.0 | Java 16 |
| Since 1.18.0 | Java 17 |
| Since 1.20.5 | Java 21 |
| Since 26.1 | Java 25 |
And popular versions for modding:
| Game version | Java version |
|---|---|
| 1.7.10 | Most people use Java 8 |
| 1.7.10 but like gregtech | Probably Java 25 |
| 1.12.2 | Java 8 |
| 1.16.5 | Java 8 |
| 1.20.1 | Java 17 |
| 1.21.1 | Java 21 |
| 26.1.2 | Java 25 |
Later versions of Forge for 1.7.10 support classes compiled for Java 8 but earlier versions didn’t. (It tries to parse mod classes with a too-old version of OW ASM.)
Obfuscation
Officially
| Game version | Obfuscation situation |
|---|---|
| Older | Third-party mappings only |
| 1.14.4 - 1.21.11 | Official mappings |
| 1.21.11_unobfuscated | Test unobfuscated version |
| 26.1.0 - ? | Unobfuscated only |
Modded 1.21.11 players don’t play on the unobfuscated test version.
Neoforge extended universe
| Game version | Mapping solution |
|---|---|
| Old - 1.6.4 | Python-script MCP? |
| 1.7.10 - 1.12.2 | MCPBot? |
| 1.12.2 - 1.16.4 | Forge MCPConfig using MCP-derived names |
| 1.16.5 | Forge MCPConfig using transitional names |
| 1.17.0 - 1.20.1 | Forge MCPConfig with official names |
| 1.20.2 - 1.21.11 | Neoform with official names |
| 26.1.0 - ? | Neoform with no obfuscation |
Notable is that Forge tooling didn’t adopt official names until 1.17, and in 1.16.5 they had a transitional thing (I think the class names were official but the field/method names were derived from MCP?)
Forgers may object to calling MCPConfig/Neoform a “mapping solution” because it’s more of an all-in-one “let me mod minecraft” tool that happens to include mappings out of necessity.
Fabric cinematic universe
| Game version | Mapping solution |
|---|---|
| 1.14.0 Pre-Release 1 - 1.21.11 | Yarn |
| 26.1.0 | Unobfuscated |
Third-party projects:
- “Legacy Fabric” maintains Yarn from 1.3 thru 1.13.2
- Ornithe maintains mappings from Alpha thru 1.14.4
- Modification Station / MCPHackers is doing… something
April foolishness
| Year | Joke | Mappings |
|---|---|---|
| Older | Older | ? |
| 2019 | 3D Shareware v1.34 |
Yarn |
| 2020 | 20w14infinite |
Official, Yarn, MCPConfig |
| 2021 | The screensaver | - |
| 2022 | 22w13oneBlockAtATime |
Official, Yarn, MCPConfig |
| 2023 | 23w13a_or_b |
Official, Yarn, MCPConfig |
| 2024 | 24w14potato |
Official, Yarn, Neoform |
| 2025 | 25w14craftmine |
Official, Yarn, Neoform |
| 2026 | 26w14a |
Unobfuscated |
You can write Fabric mods for all of these versions, Forge/Neoforge mods not so sure.
Minecraft tooling versions
- Fabric Loom: https://maven.fabricmc.net/fabric-loom/fabric-loom.gradle.plugin/
- Fabric Loom 1.10.x requires Java 17, or Java 21 if targeting Minecraft 1.21 (for some reason)
- Fabric Loom 1.11+ requires Java 21 and will support Gradle 9
- ModDevGradle: https://projects.neoforged.net/neoforged/ModDevGradle
2.0.94is the first version to support Gradle 9 apparently
- ForgeGradle 6: https://files.minecraftforge.net/net/minecraftforge/gradle/ForgeGradle/index.html
6.0.31is the first version to support Gradle 8.136.0.26is the first version to support Gradle 8.96.0.16is the first version to support Gradle 8.4
- ForgeGradle 5: latest version is
5.1.76- Does not work on Gradle 8
If you can believe it, I suck at remembering the version numbers for my own plugins:
- voldeloom: https://repo.sleeping.town/agency/highlysuspect/voldeloom/
- minivan: https://repo.sleeping.town/agency/highlysuspect/minivan/
- crossroad: https://repo.sleeping.town/agency/highlysuspect/crossroad/
TODO, fill in more details about which versions of which tools work on which Gradle versions and which Java versions…
Fabric versions
This site will be more up-to-date https://fabricmc.net/develop/ but these should be good-enough for your build gradles.
| Game version | Fabric API version | Yarn version |
|---|---|---|
| 1.16.5 | 0.42.0+1.16 |
1.16.5+build.10 |
| 1.18.2 | 0.77.0+1.18.2 |
1.18.2+build.4 |
| 1.19.2 | 0.77.0+1.19.2 |
1.19.2+build.28 |
| 1.19.4 | 0.87.2+1.19.4 |
1.19.4+build.2 |
| 1.20.1 | 0.92.11+1.20.1 |
1.20.1+build.10 |
| 1.21.1 | 0.116.15+1.21.1 |
1.21.1+build.3 |
| 26.1.2 | 0.155.2+26.1.2 |
- |
The same version of Fabric Loader works on all minecraft versions. At the time of writing, the latest version is 0.19.3.
dependencies {
minecraft "com.mojang:minecraft: <minecraft version> "
mappings "net.fabricmc:yarn: <loom version> :v2"
modImplementation "net.fabricmc:fabric-loader: <fabric loader version> "
modImplementation "net.fabricmc.fabric-api:fabric-api: <fabric api version> "
//or this, for official names
mappings loom.officialMojangMappings()
}Double-check fabric-loader is in modImplementation, not just implementation, or you will crash during runClient with an obscure error.
Forge versions
dependencies {
minecraft "net.minecraftforge:forge: <forge version>"
}| Game version | Forge version |
|---|---|
| 1.3.2 | 1.3.2-4.3.5.318 |
| 1.4.7 | 1.4.7-6.6.2.534 |
| 1.5.2 | 1.5.2-7.8.1.738 |
| 1.6.4 | 1.6.4-9.11.1.1345 |
| 1.7.10 | 1.7.10-10.13.4.1614-1.7.10 |
| 1.12.2 | 1.12.2-14.23.5.2860 |
| 1.16.5 | 1.16.5-36.2.42 |
| 1.18.2 | 1.18.2-40.3.10 |
| 1.19.2 | 1.19.2-43.5.0 |
| 1.19.4 | 1.19.4-45.4.0 |
| 1.20.1 | 1.20.1-47.4.3, Neoforge fork point at 1.20.1-47.1.3 |
| Newer | Neoforge |
Yes 1.7.10 includes the Minecraft version number twice.
Neoforge versions
ModDevGradle parses the Minecraft version out of Neoforge’s contents, so there is no need to separately set the minecraft version. In ModDevGradle you set the NeoForge version like this:
neoForge {
version = " <neoforge version> "
}| Game version | Neoforge version |
|---|---|
| 1.21.1 | 21.1.248 |
| 26.1.2 | 26.1.2.94 |
| Newer | check homepage or projects list |
Voldeloom info
1.3 thru 1.5:
forge "net.minecraftforge:forge:${forgeVersion}:universal@zip"
mappings "net.minecraftforge:forge:${forgeVersion}:src@zip"1.6.4 no longer needs @zip on the :universal artifact.
forge "net.minecraftforge:forge:${forgeVersion}:universal"
mappings "net.minecraftforge:forge:${forgeVersion}:src@zip"For 1.7.10, I’d say it’s best to use MCPBot mappings if you’re making a greenfield project:
forge "net.minecraftforge:forge:${forgeVersion}:universal"
mappings volde.layered {
importMCPBot("https://mcpbot.unascribed.com/", minecraftVersion, "stable", "12-1.7.10")
}If you need compatibility with other toolchains (such as, I’ve heard, RetroFuturaGradle), since Voldeloom 2.5 the less-complete Forge userdev mappings are supported.
mappings "net.minecraftforge:forge:${forgeVersion}:userdev"pack_format
https://minecraft.wiki/w/Pack_format
Common modding versions:
| Game version | Resource pack format | Data pack format |
|---|---|---|
| 1.12.2 | 3 | - |
| 1.16.5 | 6 | 6 |
| 1.18.2 | 8 | 9 |
| 1.19.2 | 9 | 10 |
| 1.19.4 | 13 | 12 |
| 1.20.1 | 15 | 15 |
| 1.21.1 | 34 | 48 |
| 26.1.2 | 55 | 71 |
Mods end up sharing pack.mcmeta across the resource and data pack just due to how modloaders treat the mod jar as simultaneously both types of pack. Forge, from 1.18 through 1.20.1, had a split pack_format thing; neoforge has removed the requirement to add pack.mcmeta in the first place and always assumes the appropriate version. All versions accept "pack_format": 99999.