Balm generally attempts to behave identical across its supported loaders, but there are some cases where parity has not been reached.
The following is an overview of all known and unresolved differences in feature support.
| NeoForge | Fabric | Forge | Notes | |
|---|---|---|---|---|
BalmDataAttachmentTypeRegistrar | ✅ | ✅ | ⛔ | Attempting to register or access on Forge will throw. |
BalmCompostableRegistrar | ✅ | ✅ | ⛔ | Attempting to register or access on Forge will throw. |
BalmResourceReloadListenerRegistrar#addDependency | ✅ | ✅ | ⛔ | Attempting to define a dependency on Forge will throw. |
BalmClientResourceReloadListenerRegistrar#addDependency | ✅ | ✅ | ⛔ | Attempting to define a dependency on Forge will throw. |
ScreenCallback.Render.AFTER_BACKGROUND | ✅ | ✅ | ⚠️ | mouseX, mouseY and tickDelta are always 0 on Forge |
ServerPlayerCallback.Respawn.EVENT | ⚠️ | ✅ | ⚠️ | oldPlayer and newPlayer are always the same on Neo/Forge |
ServerTickCallback.ServerEntityTick | ✅ | ✅ | ⚠️ | Only fired for living entities on Forge; BEFORE and AFTER fire at the same time on Forge |
BalmCapabilities#registerType | ✅ | ✅ | ⚠️ | registerType will make a type known to Balm, but registration on Forge is only possible with a Forge-specific annotation, and therefore no longer trivially achievable in common code. |
BalmLootModifiers | ⚠️ | ⚠️ | ⚠️ | Balm does not support ordering of individual loot modifiers at the moment - all Balm-registered modifiers are treated as one batch. |