- Updated to Minecraft 1.21.5
- Added `BalmModule` and `BalmClientModule` as an alternative more structured way of initializing a mod with Balm
- Added `Balm.onRuntimeAvailable` and `BalmClient.onRuntimeAvailable` to allow more stable access to Balm outside of mod loader lifecycles
- Added `BlockGetter` and `BlockPos` to `DigSpeedEvent`, now sets the final value on all loaders
- Refactored Capabilities support to reduce mod-loader-specific overhead
- Refactored Configs to allow for declarative config schemas and cleaner implementation
- Balm mods no longer need to register their own config sync packet
- Added `BalmClient.addResourceReloadListener()`
- Added `ConfigLoadedEvent`
- Fixed `ScreenInit` events not firing reliably for all screens
- Fixed `GuiDrawEvent` not firing
- Changed config i18n to use `modid.configuration.category.key` format
- Changed client-side registration methods to require identifiers
- Removed several obsolete hooks from `BalmHooks`
- Removed obsolete key mapping methods - use Kuma instead
- Removed obsolete `BalmTextures`
- Removed `ExtractionAwareContainer` in favor of `WorldlyContainer`
- Added `BalmNetworking.defineNetworkVersion` for more control over network compatibility
- Fabric's remote version check now uses the network version (which defaults to the mod version)
- Network version is also used to version the channel on NeoForge
- Added remote version verification even on client/server-only compatible mods if they are installed on both sides
- Added `BalmResources.registerResourceCondition` to register custom resource conditions
- Added `balm:config` resource condition to check a config option against a stringified value
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }