Advanced

Loader Parity

Understand the differences and caveats of Balm on each supported loader.

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.

NeoForgeFabricForgeNotes
BalmDataAttachmentTypeRegistrarAttempting to register or access on Forge will throw.
BalmCompostableRegistrarAttempting to register or access on Forge will throw.
BalmResourceReloadListenerRegistrar#addDependencyAttempting to define a dependency on Forge will throw.
BalmClientResourceReloadListenerRegistrar#addDependencyAttempting 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.