
FirmaLifeHardCore
A mod that completely overhauls Firmalife's cellar and greenhouse mechanics — no Climate Station required. Enclosed spaces are auto-detected via BFS floodfill with dynamic AABB tracking. Any insulating blocks form a functional cellar or greenhouse.
Links
Tags
Creators
Details
0.3.0-beta
Compatibility
Required content
Changes
0.3.0-beta
Additions
- 4-set BFS model: OBSTACLE split into pure obstacle + RECEIVER — containers, planters, sprinklers, and cheese wheels are now properly distinguished from inert blocks.
- Unified
#firmalifehardcore:climate_receiverstag covering all ClimateReceiver blocks. - BFS cell expansion logic extracted to shared
updateBounds()helper. /flhc cellar cleardebug command — clears all tracked spaces (permission 4).CellarDetector.DetectResult— distinguishes "BFS genuinely failed" from "interrupted by unloaded chunk".receiverPositionspersisted in save data with full backward compatibility.
Changes
- Command alias shortened:
/firmalifehardcore→/flhc. broadcastToContainersandinvalidateSpacenow only iteratereceiverPositionsinstead of all interior/obstacle positions.CellarEventHandler.isRelevantBlock→affectsCellar— clearer naming.- Health check now destroys spaces with zero receivers (fragment cleanup).
- BFS aborts gracefully when encountering unloaded chunks, preserving existing space data.
- Pending discovery candidates expanded: any non-WALL block is a valid BFS seed.
- Load errors skip individual spaces instead of crashing.
Fixes
- Fragment cleanup: 1-block cavities and receiver-less spaces are now auto-destroyed by the health check.
- Seed candidate blind spot: BFS can now start from obstacle/receiver blocks, not just air.
- Orphaned containers: When a cellar is split by a new wall, containers on the isolated side are immediately invalidated.
- Chunk boundary resilience: Spaces spanning chunk borders no longer get destroyed by incomplete BFS data.
- PumpNBT log spam removed.
Optional dependencies
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:diur6Jqx:TIEsPVVm"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:diur6Jqx:TIEsPVVm"
}
