[Let's Do] Crash Fix
A standalone patch‑only Forge 1.20.1 mod containing three categories of fixes:
Startup crash caused by multiple [Let's Do] mods (Meadow, BloomingNature, Vinery, etc.) writing concurrently to vanilla
FireBlockflammable block tables during the parallel‑phaseFMLCommonSetupEvent:java.lang.ArrayIndexOutOfBoundsException: Index 1024 out of bounds for length 513Create's Schematicannon crashes when loading schematics containing [Let's Do] block entities (such as StorageBlockEntity):
java.lang.ClassCastException: SchematicLevel cannot be cast to ServerLevelFarmer's Delight Rich Soil Farmland fails to recognize the Farm & Charm Water Sprinkler as a water source. As a result, rich soil cannot stay moist near sprinklers and degrades back into ordinary dirt.
Mechanism
Vanilla FireBlock stores block flammability chances inside two non‑thread‑safe fastutil hash tables. Multiple Let's Do mods independently call FireBlock.registerFlammable (SRG name m_53444_) concurrently from their own FlammableBlockRegistry.init(). When both tables are rehashed and modified at the same time, their key‑value array lengths fall out‑of‑sync and trigger an out‑of‑bounds crash.
Vinery’s StorageBlockEntity.setChanged() forcibly casts its level to ServerLevel. Create’s blueprint system uses a dummy SchematicLevel fake world; this hard cast throws an exception and prevents blueprint loading.
Farmer's Delight’s RichSoilFarmlandBlock.isNearWater() only checks for vanilla water blocks. The Farm & Charm water_sprinkler block should count as a valid water source but is ignored, causing nearby rich soil to degrade.
This mod applies vanilla‑targeted Mixins to:
- Wrap both
Object2IntMap.putcalls insideFireBlock.m_53444_behind a global lock, serializing all flammability registration writes; - Skip execution of
setChanged()for a total of 13 block‑entity classes from Vinery / Meadow / BloomingNature / Brewery / Farm & Charm / Bakery / doapi whenever the entity resides inside a fake world that is not aServerLevel; - Inject an extra water‑source check into
Farmer's Delight'sRichSoilFarmlandBlock.isNearWater(), so the Farm & Charmwater_sprinklerblock is treated as valid water.
No files from original mods are modified, and no game save data is altered.
Usage
Place dist/letsdo‑crashfix‑1.0.3‑mc1.20.1‑forge.jar into your mods folder (no additional dependency mods required).
The patch is active once you see this line in your startup log:
[Let's Do] Crash Fix: flammable registration is now serialized via FireBlock mixin.

