Here you can find a list of Forge mods with links to their Fabric alternatives.
gist |
collected 2021-01-02 at 02:30 UTC | |
Total mods: 2781 | |
Total mods using MCreator: 97 (5.0% of Forge mods) | |
Total mods with core mods: 56 (2.9% of Forge mods, 3.0% excluding MCreator) | |
Total mods with access transformers: 471 (24.5% of Forge mods, 25.9% excluding MCreator) | |
Forge mods using Mixins: 220 (11.4% of Forge mods, 12.1% excluding MCreator) | |
Fabric mods using Mixins: 728 (85.9% of Fabric mods) | |
Fabric: 847 (30.4%) Forge: 1915 (68.8%) Both: 14 (0.5%) Forge 1.12 or below: 1 (0.0%) Neither: 4 (0.1%) |
In the transition of Minecraft version 1.14 to 1.15, Mojang introduced some sweeping changes to the way rendering is performed; while the internal code still relies on GL1-era immediate-mode, block and entity renderer classes now provide their vertices to a specific RenderLayer* which are later rendered in ordered batches.
These changes broke a majority of Minecraft mods; in the process of porting a mod to 1.15, I had to frequently rely on a tool called “apitrace”, and I thought a quick how-to might come in handy for others struggling with similar problems. Apitrace allows capturing every OpenGL call an application makes, and later replaying these calls and inspecting the entire GL state machine at each rendering step.
For this tutorial, I am using the MultiMC launcher.
- Overview of Resource Reloading in 1.14.4/Fabric
- Updating to Fabric 1.17 notes
- Updating to Fabric 1.18 notes
- Fabric 1.16 Datagens (this was before Fabric API added stuff)
- how 2 angry lex.md (1.12.2 Forge coremodding)
- Fix stuff being broke in IntelliJ (old ForgeGradles)
If you want to load some resources or data in Fabric 1.14 or 1.15, do this:
ResourceManagerHelper.get(ResourceType.ASSETS).registerReloadListener(new SimpleResourceReloadListener<MyResource>() {
@Override
public Identifier getFabricId() {
return new Identifier("some_identifier", "that_describes_this_task");
}
const fs = require('fs'); | |
const path = require('path'); | |
const crypto = require('crypto'); | |
const compare = (a, b) => parseInt(a.replace(/\D/g, ''), 10) - parseInt(b.replace(/\D/g, ''), 10); | |
const data = fs.readdirSync('./frames') | |
.sort(compare) | |
.map((file, index) => { | |
const hash = crypto.createHash('md5').update(fs.readFileSync(`./frames/${file}`)).digest('hex'); |
This primer is licensed under CC0, do whatever you want.
BUT do note that this can be updated, so leave a link here so readers can see the updated information themselves.
1.13 and 1.14 are lumped together in this doc, you're on your own if you just want to go to 1.13 and not 1.14, for some reason.
1.15 stuff: https://gist.github.com/williewillus/30d7e3f775fe93c503bddf054ef3f93e
ResourceLocation
now throw on non-snake-case names instead of silently lowercasing for you, so you probably should go and change all those string constants now. More precisely, domains must only contain alphanumeric lowercase, underscore (_), dash (-), or dot (.). Paths have the same restrictions, but can also contain forward slashes (/).