Versions For Things

Because I have the memory of a goldfish.

Yeah the CSS on these tables is ass, I will fix it later.

Class formats

Java version Class format
8 52
16 60
17 61
21 65

A mnemonic (which is at least true for Java 5 thru 24): 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

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 21.0.5, support for any version of Java later than 8 has not been dropped; all --releases between 8 and 21 are accepted.

Minecraft Java versions

Game version Java version Note
1.20.5 Java 21
1.18.0 Java 17
1.17.0 Java 16 Most people use Java 17
1.12.0 Java 8
Older versions Java 5/6 In the modded ecosystem, Java 8 is safe to assume as far back as 1.7.10

Versions of Forge for versions until partway through 1.7.10 crash on classes compiled for Java 8; you really do need to use a Java 6-compatible compiler. (As in: The last version of Forge for 1.7.10 supports Java 8, but the first version did not, and versions of Forge for 1.6- all crash.)

There are some True Sickos who get Java 21 running on old versions of the game, too.

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.6+1.20.1 1.20.1+build.10
1.20.5 0.97.8+1.20.5 1.20.5+build.1
1.21.1 0.116.4+1.21.1 1.21.1+build.3
1.21.5 0.128.1+1.21.5 1.21.5+build.1

The same version of Fabric Loader works on all minecraft versions. At the time of writing, the latest version is 0.16.14.

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.

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"

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.186
1.21.5 21.5.81
Newer check homepage or projects list

Also they’re still supporting 1.21.1 so this page will get out-of-date quick.

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.20.5 32 41
1.21.1 34 48
1.21.5 55 71

Mods end up sharing pack.mcmeta across the resource and data pack just due to how modloaders load the mod jar as a resourcepack and a datapack. Forge, from 1.18 through 1.20.1 (and maybe later but who cares right), had a split pack_format thing for the pedants; neoforge has apparently removed the requirement to add pack.mcmeta in the first place. But all versions accept "pack_format": 99999 :)