2.5-mc26.2
on Jun 17, 2026- Removed the
permanentfield fromFireData. - Revamped
FireTypes to be much more flexible. Their new data structure and functionality is as follows:source_settings:fire_source_blocks: A block's ID, a list of block IDs, or a Block Tag defining which blocks use this Fire Type. (i.e, Fire, Campfire, Torch.)supporting_blocks: A block's ID, a list of block IDs, or a Block Tag defining which blocks support this Fire Type on top of them.
damage_settings:damage: The amount of damage to inflict while burning.vulnerable_damageThe amount of damage to inflict while an entity who is vulnerable to this Fire Type is burning.vulnerable_entity_types: An entity type ID, a list of entity type IDs, or an Entity Type Tag defining which entity types are vulnerable to this Fire Type.damage_immune_entity_types: An entity type ID, a list of entity type IDs, or an Entity Type Tag defining which entity types are immune to damage from this Fire Type.
spread_settings:spreads_from_zombie_attack: Whether this Fire Type can be spread to the victim of a burning Zombie's attack.spreads_from_ignite_enchantments: Whether this Fire Type can be spread to the victim of an attack of a burning entity using an enchantment that ignites entities.replaceable_by_other_fire_types: Whether this Fire Type can be replaced by another Fire Type while burning.always_apply_to_entity_types: An entity type ID, a list of entity type IDs, or an Entity Type Tag defining which entity types will always use this Fire Type while burning.cannot_apply_to_entity_types: An entity type ID, a list of entity type IDs, or an Entity Type Tag defining which entity types cannot use this Fire Type.
textures:texture_0: The first texture to use for this Fire Type.texture_1: The second texture to use for this Fire Type, also used for the first-person burning overlay.
particle_settings:smoke_particle: TheParticleOptionsto use for this Fire Type's smoke.large_smoke_particle: TheParticleOptionsto use for this Fire Type's large smoke.smoke_config_predicate: AConfigPredicate, optionally used to dictate whethersmoke_particleandlarge_smoke_particlecan be used.campfire_cosy_smoke_particle: TheParticleOptionsto use for this Fire Type's campfire cosy smoke.campfire_signal_smoke_particle: TheParticleOptionsto use for this Fire Type's campfire signal smoke.campfire_smoke_config_predicate: AConfigPredicate, optionally used to dictate whethercampfire_cosy_smoke_particleandcampfire_signal_smoke_particlecan be used.lava_particle: TheParticleOptionsto use for this Fire Type's lava particle (Used for campfires.)lava_config_predicate: AConfigPredicate, optionally used to dictate whetherlava_config_predicatecan be used.
config_predicate: AConfigPredicate, optionally used to dictate whether this Fire Type can be used.
- Removed the built-in
frozenlib:soul_fireFireType. - Added a builder for Fire Types to make their creation much simpler.
- Added the
FireEventsclass, containing the following Events:SELECT_FIRE_TYPE- Is triggered when an Entity is catching on fire and the FireType is being selected.
- Is used to modify the FireType to be set.
AFTER_FIRE_TYPE_SET- Is triggered after the FireType is set on an Entity.
ON_ENTITY_BURN_TICK- Is triggered each time an Entity is burnt from a fire lingering on them.
SELECT_FIRE_BLOCK_STATE- Is triggered when a Fire block is selecting which BlockState to place as.
- Is used to modify the BlockState to be set.
- Added
ClipGroups.- Clip Groups define a list of blocks that crosshair clipping can pass through, while inside one of their blocks.
- For example, while inside Wilder Wild's Mesoglea, Mesoglea blocks are no longer selected and you can attack entities and place/break blocks as normal.
- Added the
frozenlib:clip_groupdynamic registry.- Each Clip Group simply contains a block's ID, a list of block IDs, or a Block Tag.
- Clip Groups define a list of blocks that crosshair clipping can pass through, while inside one of their blocks.
- Added the
WaterLikeBlockinterface.- Is used to create blocks that have water-like properties, such as Wilder Wild's Mesoglea.
- Can optionally support Bubble Columns.
- Provides different particles and a fog color to use in place of Water's.
- Added the
frozenlib:water_like_typedynamic registry.- Provides a block's ID, a list of block IDs, or a Block Tag that list the blocks within a specific Water-Like Type.
- Provies swimming, splashing, enter, exit, and ambient loop sounds to use for the Water-Like Type.
- Added
ConfigPredicates!- Provides a way to utilize config from a data-driven context.
- These are modeled after Mojang's
BlockPredicates, aiming to be easy to utilize in Data Packs. - Multiple predicate types are available, including:
any_of: Returnstrueif any of the containedConfigPredicatesreturnedtrue.all_of: Returnstrueif all the containedConfigPredicatesreturnedtrue.all_match: Returnstrueif all the containedConfigPredicatesreturned the same value.not: Returnstrueif the containedConfigPredicatereturnsfalse.exists: Returnstrueif the aConfigEntrywith the providedIDexists.true: Always returnstrue.- The primary five predicate types are as follows:
equal_to: Returnstrueif theConfigEntry's value matches thetargetvalue.greater_than: Returnstrueif theConfigEntry's value is greater than thetargetvalue.greater_than_or_equal_to: Returnstrueif theConfigEntry's value is greater than or equal to thetargetvalue.less_than: Returnstrueif theConfigEntry's value is less than thetargetvalue.less_than_or_equal_to: Returnstrueif theConfigEntry's value is less than or equal to thetargetvalue.- These all share the same two fields:
entry: The targetConfigEntry'sID.target: The value the targetConfigEntry's value is being compared with.
- Can be used as a
BlockPredicatevia theasBlockPredicatemethod. - Can be used as a
PlacementFiltervia theasPlacementFiltermethod. - Can be used as a
LootItemConditionvia theasLootConditionmethod. - Can be used as a
ConditionSourcevia theasConditionSourcemethod.
- Added the
ConfigSelectorConfigured Feature, configured withConfigSelectorFeatureConfiguration:config_predicate: TheConfigPredicateto use.feature_if_true: ThePlacedFeatureto be placed ifconfig_predicatereturns true.feature_if_false: ThePlacedFeatureto be placed ifconfig_predicatereturns false.
- Refactored and renamed many worldgen-related classes to be more consistent with Vanilla.
ColumnWithDiskFeatureConfigurationnow uses twoBlockStateProviders instead of aBlockStateand Block Tag.- Renamed the
block_state_providerfield toblock_stateand thestop_when_encountering_unreplaceable_blockfield tostop_at_unreplaceable_blockinColumnFeatureConfiguration. - Removed
FrozenLibGrassColorModifiers, as this functionality is redundant thanks to Enum Extensions in Fabric Loader 0.19+. - Block Sound Type Overwrites have been removed, and replaced with a newer version that utilizes Dynamic Registries.
- We understand this may upset some players, but the Resource Pack functionality would cause sound type desyncs between the server and client.
- The new system will allow players to accomplish the same results, but via Data Pack!
- Added the
SoundTypeOverride, containing the following fields:blocks: A block's ID, a list of block IDs, or a Block Tag that thesound_typeapplies to.sound_type: TheSoundTypeto be used.volume: The volume to use.pitch: The pitch to use.break_sound: The break sound to use.step_sound: The step sound to use.place_sound: The place sound to use.hit_sound: The hit sound to use.fall_sound: The fall sound to use. Notice a pattern?
config_predicate: An optional field, supplying aConfigPredicatethat determines whether the override can be used.
- Added the
frozenlib_sound_type_overrideDynamic Registry. - The
frozenlib_config reloadCommand now provides completion suggestions and requires Game Master permissions to use. - Added the
frozenlib_config_clientCommand, allowing clients to use config commands locally without affecting the server. - Renamed
FrozenClothConfigtoFrozenLibClothConfigGuiHelper. - Added multiple new helper methods to
FrozenLibClothConfigGuiHelper. - Renamed
PlayerStructureStatustoStructureStatus. - Revamped the way
StructureStatuses are handled and sent to the client.- These now rely on Fabric's
Attachmentsystem, ultimately leading to the removal of custom networking & mixins related to syncing them. - Added a debug text entry option to display current statuses.
- These now rely on Fabric's
- Revamped Structure-based Music.
StructureMusicis now serializable and its contents have changed, containing the following fields:structures: A structure's ID or a list of structure IDs thatmusicwill play within.background_music: TheBackgroundMusicto play.must_be_inside_piece: Whether the Player must be located inside aStructurePieceformusicto play.config_predicate: An optional field, supplying aConfigPredicatethat determines whether the music can be played.
- Added the
frozenlib:structure_musicDynamic Registry.
- Added the
frozenlib:controlled_noteParticle Type, which takes an Integer as a parameter to use for the particle's color. - Added colored variants of Smoke and Campfire Smoke Particles, using
ColoredSmokeParticleOptions.- These particles will start off with a tint, and fade back into their Vanilla coloration.
- Removed the
frozenlib:biome_tag_condition_sourceandfrozenlib:optimized_biome_tag_condition_sourceSurface RuleConditionSources, as they are redundant. - Added
SulfurCubeUtilAndEvents, containing the following events:ON_INTERACTON_ARCHETYPE_DATA_REMOVEON_ARCHETYPE_APPLYON_POWER_CHANGEDON_PUSH_SOUND_PLAYEDON_PUSHON_HITON_SQUISH
- Added the
AbstractBlockLikeMob, used to create Mobs that render like Blocks and rotate as they move.- Based upon 26w14a's implementation.
- Renders using the model of the provided
BlockStateit is given.
- Added the
NoOpModel, in cases aLivingEntityRendereris required but noModelis wanted. - Revamped Spotting Icons.
- Refactored all classes into the
entitypackage. - Spotting Icons now render as part of the game's HUD.
- Removed the
frozenlib:spotting_icon_predicateRegistry. - Removed
SpottingIconPredicates. - Spotting Icons now use Fabric's Data Attachment system, using the
SpottingIconsclass.- This class contains methods to add, remove, and check a predicate against its Spotting Icons.
- An Entity can now have multiple Spotting Icons at once.
- Spotting Icons a much more flexible fading system.
- A custom start and end value can now be defined.
- Fades can be used for both the Icon's scale and transparency.
- Refactored all classes into the
- Migrated server texture packets to use Fabric's packet splitter.
- Revamped FrozenLib Cape implementation.
- Migrated to Fabric's Data Attachment system and Render State Data Keys.
- Fixed a bug that caused a Player's FrozenLib Cape to not sync to clients when joining a server.
- Revamped Screen Shake implementation.
- Migrated to Fabric's Data Attachment system and Fabric's Level Tick Event instead of using separate mixins.
- Screen Shakes can now have a "minimum distance", which will override the calculated distance to the Screen Shake if it is lower than this.
- Added a
Builderfor Screen Shakes. - Screen Shakes no longer have separate implementation for Levels and Entities, now being universal and easy to use for both.
- Updated the
frozenlib screenshakecommand and its feedback.
- Revamped Wind implementation.
- Migrated to Fabric's Data Attachment system.
ClientWindManagerhas been removed andWindManageris now used on both the server and client.- Removed the ability and config option to use Wind on the client without a server that has Wind.
WindManagerExtensions now use a registry instead of a list.WindDisturbances have been completely revamped, using Fabric's Data Attachment system and allowing for the creation of customWindDisturbanceTypesfor more dynamic usage.
- Revamped Moving Sound Manager implementation.
- Migrated to Fabric's Data Attachment system.
MovingSoundTypes can now be registered to FrozenLib's newfrozenlib:moving_sound_typeRegistry.- Each
MovingSoundTypehandles the ticking (and optionally removal) of each sound per-entity, similar to the original sound managers. - Thanks to these changes, multiple mixins and duplicate implementations have been removed.
- Added the
frozenlib:moving_sound_managerDynamic Registry. - Removed the Warden Spawn Tracker config option, as the command can now be enabled in Vanilla via launch arguments.
- Refactored the
lootpackage into theitempackage. - Refactored the
recipepackage into theitempackage.
2.4.5 (26.2-snapshot-6)
on May 5, 2026- Added Fire Types.
- Fire Types control the amount of damage an entity will take and the textures to use while on fire.
- A data-driven registry is used to create Fire Types:
blocks: An ID, a list of IDs, or a tag of Blocks that correspond to the Fire Type. (e.g., Fire and Campfire)damage: The amount of damage the Fire Type will inflict.spreads_from_zombie: Whether the Fire Type can be spread from Zombie attacks.spreads_from_ignite_enchantments: Whether the Fire Type can be spread from Enchantments that ignite entities.replaceable: Whether this Fire Type can be overriden by another upon contact.texture_0: The first Fire overlay texture.texture_1: The second Fire overlay texture, also used in first-person view.
- Added the
frozenlib:default_fire_blocksBlock Tag, containing the Fire and Campfire blocks by default. - Added the
frozenlib:soul_fire_blocksBlock Tag, which is empty by default.
2.4.4 (26.2-snapshot-5)
on May 1, 2026- Added the
itemToPatternMappingsmethod toDecoratedPotPatternRegistryEntrypoint.- Removed
SherdRegistry.
- Removed
- Added the
frozenlib:scares_piglinEntity Type tag. - Added the
frozenlib:blazesEntity Type tag. - Added the
frozenlib:hoglinsEntity Type tag. - Added the
frozenlib:ghost_likeEntity Type tag. - Fixed a critical issue that prevented DataFixing from working as intended.
- Cleaned up the implementation of multiple DataFixer helpers.
2.4.4 (26.1-26.1.2)
on May 1, 2026- Fixed a critical issue that prevented DataFixing from working as intended.
- Cleaned up the implementation of multiple DataFixer helpers.
2.4.3 (26.2-snapshot-1)
on Apr 7, 20262.4.3 (26.1)
on Mar 26, 2026- Restored modmenu-specific features.
2.4.2 (26.1)
on Mar 24, 2026- Fixed the structure_upgrade command.
2.4.1 (26.1)
on Mar 24, 2026Server Textures
ServerTextures now support.jpegfiles!- Files ending in
.mcphotowill also be treated as.jpegfiles. - All methods pertaining to finding files for
ServerTextures will no longer work if a file extension is included in thefileNameparameter.- Instead, an automatic search has been added which looks for matching file names, ending in the
.png,.jpeg, and.mcphotoextensions respectively. - When a match is found, it will be read.
- Instead, an automatic search has been added which looks for matching file names, ending in the
- Files ending in
FileTransferPackets now require a list of file extensions for requests.- This lets modders request files that could have a different file extension (e.g., photos ending in
.pngor.jpeg.) - Transfers are untouched, and still require the file extension to be part of the
fileNameparameter.- Please refrain from using the
fileExtensionsparameter when sending transfers, only use it for requests.
- Please refrain from using the
- This lets modders request files that could have a different file extension (e.g., photos ending in
- Updated the whitelisted file extensions for file requests and transfers.
.png,.jpeg,.mcphoto,.json.
- Fixed a bug that could occur when running a dedicated server from the same directory a client is running from, which is connected to the dedicated server.
ServerTextures would continuously request their texture file while the server would continuously send it, resulting in the file being constantly rewritten and never read as a texture.
- Added
BuiltInBlockModelRegistry, helping modders register their own built-in Block models.
Added the brand new Config V2!
The goal of Config V2 is to substantially improve performance, memory usage, and network usage overall, while maintaining FrozenLib's unique config features.
Multiple issues that would result in players being kicked, crashing, or experiencing lag have all been fixed.
Config Entries
- Contain an id, Entry Type, default value, and properties.
- The id is used for naming the Entry.
- Entry names can be anything you'd like, with
/being used as a way to "nest" entries. - For example, "test/sectionA/1" and "test/sectionA/2" would both be encoded to and parsed from an array in the config file, namely "sectionA".
- However, an Entry with the id "test/sectionB/1" would be nested in its own array, "sectionB".
- Nesting can occur recursively.
- Do note that giving an Entry the same name as a nest array will cause issues, please avoid doing so.
- Entry names can be anything you'd like, with
- The Entry Type is a new class, providing a Codec and Stream Codec for the Entry to use.
- Config entries are now encoded and decoded with codecs, opposed to writing present data to a file and hoping the encode/decode will return the anticipated result.
- As a result of this, it is now possible to use much more complex classes in configs without issues.
- Stream codecs are now used for config syncing, instead of sending the entire config file over the network.
- This both significantly improves network performance and also cuts down on packet sizes tremendously, eliminating an edge-case that could kick players.
- The default value is of course, the default value the Entry will use when unchanged.
- Entry properties contain a few fields to control the behavior of an Entry.
- The
syncablefield determines whether the Entry is able to sync between clients and servers. - The
modifiablefield determines whether the config modification system can be used on the Entry. - The
commentfield provides an optional comment that can be saved alongside the Entry.- Depending on the file type used, this will be saved either as:
- An array containing the Entry's value and the comment.
- A comment, not affecting the file's structure.
- Depending on the file type used, this will be saved either as:
- The
visibilityPredicatefield is optional, and determines whether the entry will be accessible in the config screen (only implemented for Cloth Config). - The
textSupplierfield is optional, and determines what text should be used for the entry's values in the config screen (only implemented for Cloth Config). - The
requireRestartfield is optional, and determines whether the entry will prompt Cloth Config's restart screen.
- The
Config Data
- Config Data provides the base id for all config entries, as well as the file path to save the config file to.
- Config Entries are created using an existing Config Data instance.
- This is done to ensure Entries can be saved to their respective files, and won't get mixed up or lost.
- Config Settings are provided, determining what file type to use for the config.
2.4.1 (26.1-rc-3)
on Mar 24, 20262.4.1 (26.1-rc-2)
on Mar 21, 20262.4.1 (26.1-pre-3)
on Mar 18, 2026ServerTextures now support.jpegfiles!- Files ending in
.mcphotowill also be treated as.jpegfiles. - All methods pertaining to finding files for
ServerTextures will no longer work if a file extension is included in thefileNameparameter.- Instead, an automatic search has been added which looks for matching file names, ending in the
.png,.jpeg, and.mcphotoextensions respectively. - When a match is found, it will be read.
- Instead, an automatic search has been added which looks for matching file names, ending in the
- Files ending in
FileTransferPackets now require a list of file extensions for requests.- This lets modders request files that could have a different file extension (e.g., photos ending in
.pngor.jpeg.) - Transfers are untouched, and still require the file extension to be part of the
fileNameparameter.- Please refrain from using the
fileExtensionsparameter when sending transfers, only use it for requests.
- Please refrain from using the
- This lets modders request files that could have a different file extension (e.g., photos ending in
- Updated the whitelisted file extensions for file requests and transfers.
.png,.jpeg,.mcphoto,.json.
- Fixed a bug that could occur when running a dedicated server from the same directory a client is running from, which is connected to the dedicated server.
ServerTextures would continuously request their texture file while the server would continuously send it, resulting in the file being constantly rewritten and never read as a texture.
- Added
BuiltInBlockModelRegistry, helping modders register their own built-in Block models.
2.4.1 (26.1-pre-2)
on Mar 15, 2026ServerTextures now support.jpegfiles!- Files ending in
.mcphotowill also be treated as.jpegfiles. - All methods pertaining to finding files for
ServerTextures will no longer work if a file extension is included in thefileNameparameter.- Instead, an automatic search has been added which looks for matching file names, ending in the
.png,.jpeg, and.mcphotoextensions respectively. - When a match is found, it will be read.
- Instead, an automatic search has been added which looks for matching file names, ending in the
- Files ending in
FileTransferPackets now require a list of file extensions for requests.- This lets modders request files that could have a different file extension (e.g., photos ending in
.pngor.jpeg.) - Transfers are untouched, and still require the file extension to be part of the
fileNameparameter.- Please refrain from using the
fileExtensionsparameter when sending transfers, only use it for requests.
- Please refrain from using the
- This lets modders request files that could have a different file extension (e.g., photos ending in
- Updated the whitelisted file extensions for file requests and transfers.
.png,.jpeg,.mcphoto,.json.
- Fixed a bug that could occur when running a dedicated server from the same directory a client is running from, which is connected to the dedicated server.
ServerTextures would continuously request their texture file while the server would continuously send it, resulting in the file being constantly rewritten and never read as a texture.
2.4 (26.1-pre-2)
on Mar 14, 20262.4 (26.1-snapshot-11)
on Mar 5, 20262.4 (26.1-snapshot-9)
on Feb 24, 2026Added the brand new Config V2!
The goal of Config V2 is to substantially improve performance, memory usage, and network usage overall, while maintaining FrozenLib's unique config features.
Multiple issues that would result in players being kicked, crashing, or experiencing lag have all been fixed.
Config Entries
- Contain an id, Entry Type, default value, and properties.
- The id is used for naming the Entry.
- Entry names can be anything you'd like, with
/being used as a way to "nest" entries. - For example, "test/sectionA/1" and "test/sectionA/2" would both be encoded to and parsed from an array in the config file, namely "sectionA".
- However, an Entry with the id "test/sectionB/1" would be nested in its own array, "sectionB".
- Nesting can occur recursively.
- Do note that giving an Entry the same name as a nest array will cause issues, please avoid doing so.
- Entry names can be anything you'd like, with
- The Entry Type is a new class, providing a Codec and Stream Codec for the Entry to use.
- Config entries are now encoded and decoded with codecs, opposed to writing present data to a file and hoping the encode/decode will return the anticipated result.
- As a result of this, it is now possible to use much more complex classes in configs without issues.
- Stream codecs are now used for config syncing, instead of sending the entire config file over the network.
- This both significantly improves network performance and also cuts down on packet sizes tremendously, eliminating an edge-case that could kick players.
- The default value is of course, the default value the Entry will use when unchanged.
- Entry properties contain a few fields to control the behavior of an Entry.
- The
syncablefield determines whether the Entry is able to sync between clients and servers. - The
modifiablefield determines whether the config modification system can be used on the Entry. - The
commentfield provides an optional comment that can be saved alongside the Entry.- Depending on the file type used, this will be saved either as:
- An array containing the Entry's value and the comment.
- A comment, not affecting the file's structure.
- Depending on the file type used, this will be saved either as:
- The
visibilityPredicatefield is optional, and determines whether the entry will be accessible in the config screen (only implemented for Cloth Config). - The
textSupplierfield is optional, and determines what text should be used for the entry's values in the config screen (only implemented for Cloth Config). - The
requireRestartfield is optional, and determines whether the entry will prompt Cloth Config's restart screen.
- The
Config Data
- Config Data provides the base id for all config entries, as well as the file path to save the config file to.
- Config Entries are created using an existing Config Data instance.
- This is done to ensure Entries can be saved to their respective files, and won't get mixed up or lost.
- Config Settings are provided, determining what file type to use for the config.
