Minecraft 26.3
Overview
The most notable change in Minecraft 26.3 is the switch from GLFW to SDL, as well as more things being migrated to use Data Components.
event.button() == 0 or button == 1 to test for left/right mouse buttons, you must update to use the appropriate InputConstants field instead. The numeric values have changed due to the migration to SDL.Version Catalog
⚠️ Known Issues
Breaking Changes
Removed BalmHooks#setBurnTime
Minecraft provides a Data Component CookingFuel now that you should use.
Removed BalmHooks#blockGrowFeature
This method was only used to fire an event on Forge. There is no direct replacement. If you have need for this, you can define a bi-directional event mapper or use a platform proxy.
Removed BalmCompostableRegistrar
Minecraft provides a Data Component Compostable now that you should use.
Removed BalmResourceReloadListenerRegistrar.VanillaKeys#advancements() and #recipes()
Recipes and Advancements appear to no longer use a resource reload listener.
Replaced BalmItemTags with ConventionalItemTags
Use ConventionalItemTags for conventional c: item tags. Most constants keep the same name, with the following exceptions:
BalmItemTags.DIAMONDSis nowConventionalItemTags.DIAMOND_GEMS.BalmItemTags.EMERALDSis nowConventionalItemTags.EMERALD_GEMS.BalmItemTags.DYE_TAGSis nowConventionalItemTags.COLOR_DYESand uses aColorCollection<TagKey<Item>>instead of an array.BalmItemTags.COOKING_OILhas no replacement, since it was not an official conventional tag.
Balm no longer ships the outdated c: tag data that previously populated these tags. Both Fabric and NeoForge already take care of that.
Removed BalmHooks#useFluidTank
This method has not been updated in years. There is no current equivalent in Balm; you would need to use a platform proxy to implement this logic yourself.
There are plans to bring the Transfer API to Balm, which would likely reintroduce an easier way to deal with fluid tank interactions.
BalmRegistrar#register now returns BalmHolderRegistration
The register methods on BalmRegistrar and BalmRegistrar.Scoped now return a BalmHolderRegistration<T> instead of a Holder<T> directly.
Use the appropriate conversion method for the type you need:
asHolder()returns the registered value as aHolder<T>.asSupplier()returns it as aSupplier<T>.asResourceKey()returns itsResourceKey<T>.
For example, code that stores the result as a holder must now call asHolder():
SPARK = spells.register("spark", id -> new ExampleSpell("Spark")).asHolder();