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:

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

If you can believe it, I suck at remembering the version numbers for my own plugins:

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.