PatchLib is a random assortment of bug fixes, crash fixes and compatibility patches for various mods — Farmer's Delight, Tom's Simple Storage, Vampirism, Toxony, Create, KubeJS, Arclight and more.
I originally built it just to stop the servers I run from crashing. Over time it grew into a proper little library of fixes, and at some point it stopped making sense to keep it to myself — if one of these crashes has cost you a server restart at 2 AM, this is for you.
Patches only run when they are actually needed
This is the part that matters if you maintain a modpack. PatchLib never touches a mod you do not have installed. Before a single patch is applied, it checks:
- Is the target mod installed? If not, the patch is skipped — no errors, no log spam.
- Is the mod version actually affected? Several fixes are bound to the exact versions that carry the bug. Update the mod past it and the patch quietly steps aside instead of fighting the official fix.
- Does another mod already patch this? Known conflicts disable the patch automatically.
- Is this the right side? Client-only fixes are never loaded on a dedicated server.
Every decision is printed on startup, so you always know what is running:
[PatchLib] --- Patch Status Report (dedicated server) ---
[PatchLib] compat.create_contraption_collider [...] -> ACTIVE
[PatchLib] farmersdelight.tag_load_order [...] -> SKIPPED (target not present)
[PatchLib] patchouli.book_registry_lookup [...] -> CLIENT ONLY (not loaded on a dedicated server)
[PatchLib] --- 5 of 18 patches active ---
Drop it into a pack with none of the target mods and it does exactly nothing.
Included fixes
Crash fixes
| Mod | What it fixes |
|---|---|
| Tom's Simple Storage | IllegalStateException: Do not call getCapability on an invalid cache crashing the tick loop from InventoryConnectorBlockEntity. A retired capability cache is now treated as an empty inventory. |
| Toxony | Thrown Oil Pot crashing with a null itemStack after a chunk reload or restart — the stack is now saved to NBT, and onHit is guarded. |
| Prickle / PigPen | Unreadable config aborting the whole datapack load, leaving the server hung at startup. Falls back to defaults, keeps a copy of the broken file, and lets the config heal itself. |
| Prickle | Config format flipping between runs because the property adapters are resolved through the thread context classloader. Now resolved deterministically. |
| Portable Tanks | NullPointerException when a tank item has no fluid NBT. |
| KubeJS | ClassCastException during capability registration and server script loading when a pack registers builders of mixed types. |
| Vampirism | NullPointerException in ActionHandler.deactivateAllActions on hybrid servers. |
Arclight / hybrid server fixes
ClassCastExceptionwhen modded entities run Villager AI tasksNullPointerExceptioninBrain.tickfrom Arclight's villager career redirectClassCastExceptionmapping Friends & Foes entities to Bukkit wrappers
These only load when Bukkit classes are present, so they are inert on plain NeoForge.
Compatibility & behaviour fixes
| Mod | What it fixes |
|---|---|
| Create | NullPointerException in ContraptionCollider when a movement axis is null |
| YUNG's Better End Island | Ender Dragon being spawned twice |
| Farmer's Delight | Tag keys left null by mod load order |
| Copper Age Backport | Copper armour registered without durability |
| Subtle Effects | End Remastered portal frame ticker never firing |
| Just Enough Resources (client) | Modded biomes missing from JER tabs |
| Patchouli (client) | Modded book cover items failing to resolve |
Version-bound patches
A few fixes only apply to the mod versions that actually carry the bug. If your version is newer, PatchLib reports the patch as skipped — that is intended, not a failure:
| Patch | Applies to |
|---|---|
| Farmer's Delight — tag load order | 1.3.1 only |
| KubeJS — builder casts | below 2101.7.2 (and disabled when KubeJS Tweaks is present) |
| Copper Age Backport — armour durability | 0.1.4 and older |
| Subtle Effects — End Remastered ticker | 1.11.0 only |
Everything else applies to any version of its target mod.
Configuration
Every patch has its own toggle in config/patchlib-patches.properties. The file is generated on first launch with one commented entry per patch:
# --- toms_storage ---
# Treats a retired NeoForge BlockCapabilityCache as an empty inventory instead of throwing
# IllegalStateException out of InventoryConnectorBlockEntity ticking
toms_storage.stale_capability_cache=true
If a fix ever conflicts with something, turn off that one line — no need to remove the mod.
Sides
PatchLib is a server-side mod, optional on the client. It registers no network packets and no registry entries, so players without it can join your server normally. Installing it on the client as well simply adds the two client-side fixes on top.
Requirements
- Minecraft 1.21.1
- NeoForge 21.1+
- No dependencies
⚠ Please read before reporting
These patch bugs in other people's mods. As those mods update, some of these issues will be fixed properly at the source. Where I know the affected version range, PatchLib disables the patch automatically once you update past it — but I cannot predict every future release. If a mod fixes something natively and the patch gets in the way, just set it to false in the config.
Bug reports about the patches themselves are very welcome. Bug reports about the patched mods belong to their authors.

