Skip to content

Modding Notes

1.21.1 (and why you should be on it)

1.21 OVERHAULED the chunk accessing and scheduling system, among other things. This overhaul has SUBSTANTIALLY increased performance by a factor of ~4x as measured.

More importantly, it resolves several critical roadblocks to multithreading entities.

MCMT and any "Async Mod" prior to 1.21 will not work. I spent 2 months trying to fix this, and the scheduler will always deadlock trying to access a chunk that doesn't exist yet (i.e. during generation). This happens when entities (typically block entities) are spawned in as part of modded structures during worldgen. This cannot be worked around as it is present in basically every entity/blockentity system (light opacity levels, facing direction, etc.).

Jar Prefix Naming Scheme

I have a system that makes modpack dev work much more enjoyable. I prefix jars with a category. This lets me group mods by "dependency layer", client/server, etc.

[[[[server]]]] obvious.jar
[[[lib]]] library_dependency.jar
[[client]] obvious.jar
[[clientperformance]] obvious.jar
[[performance]] obvious.jar
[tier0] any_mod_that_does_not_add_blocks_or_items.jar
[tier1] content_mods.jar
[tier2] addon_mods.jar
[worldgen] biome_mods_and_dungeon_mods_etc.jar

Modpack Launchers

I use the technic launcher because it gives me total control over the modpack without a ton of patching work. When you use curseforge, any tweaks you make have to be written as patch jars. Since I don't publish my modpacks its more efficient if I just hack stuff together quickly (direct mod edits and version control), and never worrying about file availability issues. I also like the simplicity of hosting a single archive file on my own server, it makes downloading fast.