Minecraft 1.21.6
These migration notes cover only the changes made to Balm APIs.
For Minecraft and mod-loader specific migrations, check out their respective release announcements or primers.
Overview
In Minecraft 1.21.6, Balm has cleaned up some method names and deprecated some serialization-related methods in favor of Minecraft's newer ValueInput and ValueOutput APIs.
⚠️ Known Issues
/balm export icons is not yet functional
The command has not yet been updated to Minecraft's rendering changes.
Minor Changes
BalmCapabilities.registerProvider now takes a Supplier<Set<BlockEntityType<?>>> instead of Supplier<List<BlockEntityType<?>>>
This change was made because passed in types should be unique.
BalmEnvironment.SERVER has been renamed to BalmEnvironment.DEDICATED_SERVER
This change was made to avoid confusion with logical sides (i.e. ClientLevel vs ServerLevel).
BalmRenderers.setBlockRenderType now takes a ChunkSectionLayer instead of RenderType
This is to align with Minecraft's API changes.
BalmBlockEntity.writeUpdateTag now takes a ValueOutput instead of CompoundTag
This change was made to align with Minecraft's API changes.
Deprecations
DefaultContainer.serialize and DefaultContainer.deserialize have been deprecated
Use net.minecraft.world.ContainerHelper#loadAllItems(ValueInput, NonNullList) and net.minecraft.world.ContainerHelper#saveAllItems(ValueOutput, NonNullList) instead, which are identical.
ImplementedContainer.deserializeInventory and ImplementedContainer.serializeInventory have been deprecated
Use net.minecraft.world.ContainerHelper#loadAllItems(ValueInput, NonNullList) and net.minecraft.world.ContainerHelper#saveAllItems(ValueOutput, NonNullList) instead, which are identical.
DefaultEnergyStorage.serialize() and DefaultEnergyStorage.deserialize() have been deprecated
Use the methods of same name that take a ValueOutput or ValueInput instead. Note that, unlike the removed methods, these methods write into an "Energy" key instead of returning an IntTag directly. You may have to migrate data manually if you want to support upgrading older worlds.
DefaultFluidTank.serialize() and DefaultFluidTank.deserialize() have been deprecated
Use the methods of same name that take a ValueOutput or ValueInput instead.
Removals
Balm.initialize has been removed in favor of Balm.initializeMod
The methods are otherwise the same, this was just a name change for better clarity.
BalmClient.initialize has been removed in favor of BalmClient.initializeMod
The methods are otherwise the same, this was just a name change for better clarity.
TickType.Entity has been removed in favor of TickType.ServerEntity and TickType.ClientEntity
This change was made to match the other tick types in style.
SidedProxy.get() has been removed in favor of build or buildLazily
This change makes the intent over when the proxy is initialized more clear.
ListUtils has been removed
It was not used in Balm anymore and can easily be copied into individual projects if needed.