FrozenLib
A library that contains many tools for modders. May grow in the future.
This library lets you:
-
Have advanced configs
-
Add custom scheduledTick methods to any block
-
Allow Dripstone to trigger a scheduledTick on any block
-
Easily let Dripstone dry out and drip from any block
-
Decrease time from item cooldowns
-
Use moving looping sounds, use custom flyby sounds, and set up a custom interface to control when they should stop playing
-
Disable Hopper usage on any given BlockEntity
-
Use advanced math operations and noise sampling
-
Set up datafixers to convert old data to newer formats
-
Override entity textures
-
Add screen shaking effects
-
Modify gravity
-
Add new mobCategories
-
Use and extend a wind system
-
Modify advancements on runtime
-
Add MobEffects to Beacons
-
And much more!
Includes a Fabric implementation of The Quilt Project's DataFixerUpper API.
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
|
R
3.0.3
|
12h ago | 1 | |||
|
R
3.0.3
|
12h ago | 1 | |||
|
R
3.0.3
|
12h ago | 1 | |||
|
R
3.0.3
|
12h ago | 1 | |||
|
R
3.0.2
|
12h ago | 1 | |||
|
R
3.0.2
|
12h ago | 1 | |||
|
R
3.0.1
|
12h ago | 1 | |||
|
R
3.0.1
|
12h ago | 1 | |||
|
R
3.0.1
|
12h ago | 1 | |||
|
R
3.0.1
|
12h ago | 1 | |||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
|
R
1.9.4
|
12h ago | 1 | |||
|
R
1.9.4
|
12h ago | 1 | |||
|
R
1.9.4
|
12h ago | 1 | |||
|
R
1.9.3
|
12h ago | 1 | |||
|
R
1.9.3
|
12h ago | 1 | |||
|
R
1.9.3
|
12h ago | 1 | |||
|
R
1.9.3
|
12h ago | 1 | |||
|
R
1.9.3
|
12h ago | 1 | |||
|
R
1.9.3
|
12h ago | 1 | |||
|
R
1.9.2
|
12h ago | 1 | |||
|
R
1.9.2
|
12h ago | 1 | |||
|
R
1.9.2
|
12h ago | 1 | |||
|
R
1.9.2
|
12h ago | 1 | |||
|
R
1.9.2
|
12h ago | 1 | |||
|
R
1.9.2
|
12h ago | 1 | |||
|
R
1.9.1
|
12h ago | 1 | |||
|
R
1.9.1
|
12h ago | 1 | |||
|
R
1.9.1
|
12h ago | 1 | |||
|
R
1.9.1
|
12h ago | 1 | |||
|
R
1.9.1
|
12h ago | 1 | |||
|
R
1.9.1
|
12h ago | 1 | |||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
| 12h ago | 1 | ||||
|
R
1.1.5
|
12h ago | 1 | |||
|
R
1.1.4
|
12h ago | 1 | |||
|
R
1.1.3.1
|
12h ago | 1 | |||
|
R
1.1.3
|
12h ago | 1 | |||
|
R
1.1.2
|
12h ago | 1 | |||
|
R
1.1.1
|
12h ago | 1 | |||
|
R
1.1
|
12h ago | 1 | |||
|
R
1.0.4
|
12h ago | 1 | |||
|
R
1.0.3
|
12h ago | 1 | |||
|
R
1.0.2
|
12h ago | 1 | |||
|
R
1.0.1
|
12h ago | 1 | |||
|
R
1.0
|
12h ago | 1 |
- Added the
frozenlib:mobEntity Sub Predicate, returning true if an entity is an instance of theMobclass. - Added the
#frozenlib:spidersEntity Type Tag. - Added the
#frozenlib:horsesEntity Type Tag. - Added the
#frozenlib:equinesEntity Type Tag. - Added the
#frozenlib:camelsEntity Type Tag. - Added the
#frozenlib:nautiliEntity Type Tag. - Added the
#frozenlib:golemsEntity Type Tag. - Fixed an issue that caused FrozenLib's overworld biome parameter cache and config entry loading to produce inconsistent results when accessed from multiple threads. ([#87](https://github.com/FrozenBlock/FrozenLib/issues/87), [#88](https://github.com/FrozenBlock/FrozenLib/pull/88))
- Added the
frozenlib:mobEntity Sub Predicate, returning true if an entity is an instance of theMobclass. - Added the
#frozenlib:spidersEntity Type Tag. - Added the
#frozenlib:horsesEntity Type Tag. - Added the
#frozenlib:equinesEntity Type Tag. - Added the
#frozenlib:camelsEntity Type Tag. - Added the
#frozenlib:nautiliEntity Type Tag. - Added the
#frozenlib:golemsEntity Type Tag. - Fixed an issue that caused FrozenLib's overworld biome parameter cache and config entry loading to produce inconsistent results when accessed from multiple threads. ([#87](https://github.com/FrozenBlock/FrozenLib/issues/87), [#88](https://github.com/FrozenBlock/FrozenLib/pull/88))
- Added the
frozenlib:mobEntity Sub Predicate, returning true if an entity is an instance of theMobclass. - Added the
#frozenlib:spidersEntity Type Tag. - Added the
#frozenlib:horsesEntity Type Tag. - Added the
#frozenlib:equinesEntity Type Tag. - Added the
#frozenlib:camelsEntity Type Tag. - Added the
#frozenlib:nautiliEntity Type Tag. - Added the
#frozenlib:golemsEntity Type Tag. - Fixed an issue that caused FrozenLib's overworld biome parameter cache and config entry loading to produce inconsistent results when accessed from multiple threads. ([#87](https://github.com/FrozenBlock/FrozenLib/issues/87), [#88](https://github.com/FrozenBlock/FrozenLib/pull/88))
- Added the
frozenlib:mobEntity Sub Predicate, returning true if an entity is an instance of theMobclass. - Added the
#frozenlib:spidersEntity Type Tag. - Added the
#frozenlib:horsesEntity Type Tag. - Added the
#frozenlib:equinesEntity Type Tag. - Added the
#frozenlib:camelsEntity Type Tag. - Added the
#frozenlib:nautiliEntity Type Tag. - Added the
#frozenlib:golemsEntity Type Tag. - Fixed an issue that caused FrozenLib's overworld biome parameter cache and config entry loading to produce inconsistent results when accessed from multiple threads. ([#87](https://github.com/FrozenBlock/FrozenLib/issues/87), [#88](https://github.com/FrozenBlock/FrozenLib/pull/88))
- Fixed an issue that caused newer versions of NeoForge to crash.
- Fixed an issue that caused newer versions of NeoForge to crash.
- Fixed an issue that caused Data Attachments created with FrozenLib to always use the
frozenlibnamespace on NeoForge. - Likely fixed an issue that prevented non-host Players on LAN servers from receiving Photographs taken with Freeze Frame.
### 26.3+
- Implemented
FrozenLibRenderStatein many instances it was unintentionally skipped, now in parity with Fabric. - This also fixes a crash on NeoForge when using a Piston. ([#84](https://github.com/FrozenBlock/FrozenLib/issues/84))
- Fixed a crash on boot with NeoForge 26.3.0.20-beta+. ([#85](https://github.com/FrozenBlock/FrozenLib/issues/85))
- Fixed an issue that caused Data Attachments created with FrozenLib to always use the
frozenlibnamespace on NeoForge. - Likely fixed an issue that prevented non-host Players on LAN servers from receiving Photographs taken with Freeze Frame.
### 26.3+
- Implemented
FrozenLibRenderStatein many instances it was unintentionally skipped, now in parity with Fabric. - This also fixes a crash on NeoForge when using a Piston. ([#84](https://github.com/FrozenBlock/FrozenLib/issues/84))
- Fixed a crash on boot with NeoForge 26.3.0.20-beta+. ([#85](https://github.com/FrozenBlock/FrozenLib/issues/85))
- Fixed an issue that caused Data Attachments created with FrozenLib to always use the
frozenlibnamespace on NeoForge. - Likely fixed an issue that prevented non-host Players on LAN servers from receiving Photographs taken with Freeze Frame.
### 26.3+
- Implemented
FrozenLibRenderStatein many instances it was unintentionally skipped, now in parity with Fabric. - This also fixes a crash on NeoForge when using a Piston. ([#84](https://github.com/FrozenBlock/FrozenLib/issues/84))
- Fixed a crash on boot with NeoForge 26.3.0.20-beta+. ([#85](https://github.com/FrozenBlock/FrozenLib/issues/85))
- Fixed an issue that caused Data Attachments created with FrozenLib to always use the
frozenlibnamespace on NeoForge. - Likely fixed an issue that prevented non-host Players on LAN servers from receiving Photographs taken with Freeze Frame.
### 26.3+
- Implemented
FrozenLibRenderStatein many instances it was unintentionally skipped, now in parity with Fabric. - This also fixes a crash on NeoForge when using a Piston. ([#84](https://github.com/FrozenBlock/FrozenLib/issues/84))
- Fixed a crash on boot with NeoForge 26.3.0.20-beta+. ([#85](https://github.com/FrozenBlock/FrozenLib/issues/85))
- Ported to multiloader and added plenty of new Events & Helpers for multiloader development.
- Added
ConfigEntryGetter, a serializable way to access values fromConfigEntrys. - Added the
frozenlib:config_predicate_providerDynamic Registry, used to registerConfigPredicates. - All implementation of
ConfigPredicates have been updated to now useHolders andHolderSets, allowing modders to refer toConfigPredicates via their registered id or tags. - Added the
frozenlib:fabricConfig Predicate, returning whether the current mod loader is Fabric. - Added the
frozenlib:neoforgeConfig Predicate, returning whether the current mod loader is NeoForge. - Added the
frozenlib:modConfig Predicate, returning whether a mod with the given id (defined via theidfield) is loaded. - Added the
frozenlib:biome_environment_attribute_modificationDynamic Registry, with the following format: biomes: The id, a list of ids, or a tag of Biomes to modify.attributes: A map of Environment Attributes to merge into the givenbiomes.enabled_when: A Config Predicate, determining whether this instance can be used or should be skipped.- Migrated Serializable Item Cooldowns to Data Attachments and optimized its network performance.
- Added the
frozenlib:variant_spawn_injectionDynamic Registry, with the following format: registry: The id of the variant registry.variant: The id of the variant to inject custom spawn conditions into.spawn_conditions: The spawn conditions to inject into the variant, using the same format as thespawn_conditionsfield in other mob variants.- Removed the
WolfVariantBiomeRegistryclass, as Variant Spawn Injections supersede its functionality. - Added the following new Spawn Conditions (used for selecting mob variants within the
spawn_conditionsfield,) with the following formats: frozenlib:config: A Config Predicate, determining whether the condition was met.frozenlib:compoundconditions: A list of Spawn Conditions that all must be met.- Added the
frozenlib:visual/lightmap_brightnessEnvironment Attribute, controlling the brightness of the lightmap. - Can be any value between 0 and 1.
- Added the
PistonEventsclass, containing the following events: DETERMINE_BLOCK_ENTITY_PUSH_RESULT: Determines whether a Block with a Block Entity can be pushed by a Piston.DETERMINE_BLOCK_STICKINESS: Determines whether a Block is considered sticky when pushed by a Piston.- This will not enable any behavior on its own, and must be used in tandem with the
TRY_STICK_BLOCKS_TOGETHERevent to achieve the intended behavior. TRY_STICK_BLOCKS_TOGETHER: Determines whether two Blocks can stick together when pushed by a Piston.- This will not enable any behavior on its own, and must be used in tandem with the
DETERMINE_BLOCK_STICKINESSevent to achieve the intended behavior. ON_MOVING_BLOCK_SET: Triggers when a moved Block is placed.ON_PUSH_FAIL: Triggers when Piston structure resolution fails.- Renamed
PushableBlockEntityUtiltoPistonPushUtiland added a few new methods to help withPistonEventsusage. - Updated and renamed
BooleanPropertySculkBehaviortoBlockStatePropertySculkBehavior, with the additional functionality of being able to use any Block State Property. - Added the
frozenlib:selectorConfig Predicate, with the following format: selector: The Config Predicate used to determine which predicate to select.when_true: The Config Predicate to select whenselectorreturns true.when_false: The Config Predicate to select whenselectorreturns false.- Added the
frozenlib_with_fallbackConfig Predicate, with the following format: entry: The required Config Entry's id.predicate: The Config Predicate to use if the required Config Entry is present.fallback: The fallback value to use if the required Config Entry is not present.- Removed
BlockStateRenameFixandFrozenEntityRenameFix, as Vanilla provides the same functionality. - Renamed
SplashTextAPItoSplashTextEventsand migrated its functionality to events. - Added the following fields to Fire Types:
- Additions to
damage_settings: vulnerable_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity vulnerable to this Fire Type's damage.damage_immune_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity immune to this Fire Type's damage.- Additions to
spread_settings: always_apply_to_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity use this Fire Type if caught on fire.cannot_apply_to_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make this Fire Type unable to be applied to an Entity.- If conflicting Mob Effects are present, their total power will be summed by category (
always_applyvs.cannot_apply) and the category with the highest power will be chosen. - If their power is equal, the
cannot_applycategory will be chosen. - Fire Types now work as intended on Blazes, Fireballs, and Small Fireballs.
- Added the
#frozenlib:on_fireEntity Type Tag, defining which Entity Types are fire-like. - Contains
#frozenlib:blazes,minecraft:fireball, andminecraft:small_fireballby default. - Entities in this Tag will:
- Set their Fire Type upon spawning, instead of waiting to be set on fire.
- Not remove their attached Fire Type if their
remainingFireTicksfield is zero or less, unlike other entities. - Added the
#frozenlib:spawnerItem Tag, used to define which Items should display theInteract with Spawn Egg: Sets Mob Typetooltip. - Added the
frozenlib:damageConsume Effect Type, with the following format: amount: How much damage (must be above 0) to inflict upon the user.sound(Optional): The id of the Sound to play upon damaging the user.type: The id of the Damage Type to damage the user with.- Removed
DamageOnUseItemandDamageOnUseBlockItem, as their functionality has been superseded by thefrozenlib:damageConsume Effect Type. - Added Block Attachments, allowing data to be injected into Blocks for quick retrieval.
- Only the
REGISTERevent inBlockAttachmentEventsshould be used to attach new data to Blocks. - Are cleared each time Tags are loaded/reloaded.
- The
REGISTERevent is called whenever this occurs, as to keep attachments that may depend on Tags up-to-date. - Condensed
BlockScheduledTicks,BlockRandomTicks, andBlockAnimateTicksinto the newBlockTickEventsandBlockTickRegistryclasses. BlockTickEventsprovides events that trigger regardless of the Block.BlockTickRegistryuses the new Block Attachment system, and provides a simple way to add new Block-specific behavior.- Reworked the implementation of modded DataFixers, now allowing modders to register any amount of DataFixers per-mod as they'd like.
- Added
DataFixerEntrypoint(using the identifierfrozenlib:data_fixer,) allowing modders to register custom Entities and Block Entities to Vanilla's DataFixers. - This resolves a long-standing issue that caused many modded Entities and Block Entities to lose data across versions, without the need to use mixins.
- Fixed an issue that required Minecraft to run for an entire minute before finally shutting down. ([#81](https://github.com/FrozenBlock/FrozenLib/issues/81) - Fixed in pull request [#82](https://github.com/FrozenBlock/FrozenLib/pull/82))
- Fixed a major issue that caused certain DataFixers to not work as intended.
- Fixed a crash that could occur on clients when trying to sync Wind Manager Extensions with the server.
- Wind Manager Extensions now support modification as a method of syncing, instead of replacement.
- Fixed an issue that could cause the number of Wind Manager Extensions on the client to increase dramatically over time.
### 26.3+
- Added the
frozenlib:leaf_litter_providerandfrozenlib:flower_bed_providerBlock State Providers, with the following format: block: The id of the Block to generate.min_segment(Optional): The minimum amount of segments to provide, in a range of 1-4.- Provides 1 if empty.
max_segment: The maximum amount of segments to provide, in a range of 1-4.- Added
BlockTransformerEvents, enabling the modification ofBlockTransformersfor Shovel, Axe, and Hoe items. - This replaces the previous
ShovelApiandAxeApiclasses. - Added
PropertyTestingPredicate, a new abstractBlockPredicateused to compare Property values. - Added
HasMatchingAxisPredicate, used to compare theAXISProperty of a Block. - Added
ShearsDispenseItemBehaviorApi, used to register custom behaviors for Shears being used by a Dispenser. - Added the experimental
BlockRegistryModificationEventsclass, used to modify the Properties and Factory used to create Blocks. - Moved Wilder Wild's Potent Sulfur Geyser Wind Disturbance into FrozenLib.
- Added
StructureProcessorListAdditions, replacingStructureProcessorApiin a more stable and data-driven manner. - Added the
frozenlib:structure_processor_list_additionDynamic Registry with the following format: structures: A Structure's ID, a list of Structure IDs, or a Structure Tag thatprocessorswill be added to.processors: A list ofStructureProcessors to add tostructures.config_predicate: An optional field, determining whether this can be used.serialization_requirement: AConfigPredicate, determining whether this can be serialized (useful for mod compat.)- Added the
frozenlib:pathfinding_damaging_blocksBlock Tag, denoting extra Blocks to be considered as damaging while pathfinding. - Migrated
StructureGenerationConditionApito an event. - Migrated
StructurePlacementExclusionApito an event. - Added the
StructureSetApiclass, allowing modders to easily add or removeStructures to/fromStructureSets. - Added
MaterialRuleAdditions, replacing the previous API used to add newMaterialRuless to Levels. - Added the
frozenlib:material_rule_additionDynamic Registry, with the following format: dimensions: A Dimension Type's ID, a list of Dimension Type IDs, or a Dimension Type Tag thatrulewill be added to.has_preliminary_surface: Whetherrulecan only generate on the world's surface. (i.e., the surface of the Overworld.)rule: TheMaterialRulesto add todimensions.serialization_requirement: AConfigPredicate, determining whether this can be serialized (useful for mod compat.)- Removed
SurfaceRuleEvents,DimensionBoundRuleSource, andSurfaceRuleUtilas they are no longer needed. - Added the
#frozenlib:overworld,#frozenlib:nether, and#frozenlib:endDimension Type Tags. - Added
PlayerDamageTypeSounds, used to play a custom sound when a Player is damaged by a specificDamageType. - Added the
frozenlib:player_damage_type_soundDynamic Registry with the following format: damage_types: A Damage Type's ID, a list of Damage Type IDs, or a Damage Type Tag thatsound_eventwill be used for.sound_event: The Sound Event to play when a Player is damaged bydamage_types.config_predicate: An optional field, determining whether this can be used.- Removed the initial implementation, as this new data-driven implementation is far more stable.
- Added the
frozenlib:config_predicateTree Decorator, with the following format: decorator: The Tree Decorator to generate.predicate: The Config Predicate to test, determining whetherdecoratorcan generate.- Added the
frozenlib:probabilityTree Decorator, with the following format: decorator: The Tree Decorator to generate.probability: The probability fordecoratorto generate.DataMarkerProcessableSinglePoolElementandDataMarkerProcessableLegacySinglePoolElementare now both abstract classes.- This change allows for easy handling of Data Markers without the need for mixins.
- Added the
ParticleSpawnerclass, assisting in setting up client-sided particle spawners, e.g., Pollen particles spawning from Pollen blocks. - Added new implementations of
BlockRenameFixandBlockPropertyRenameAndFixthat work on 26.3-snapshot-7+.
- Ported to multiloader and added plenty of new Events & Helpers for multiloader development.
- Added
ConfigEntryGetter, a serializable way to access values fromConfigEntrys. - Added the
frozenlib:config_predicate_providerDynamic Registry, used to registerConfigPredicates. - All implementation of
ConfigPredicates have been updated to now useHolders andHolderSets, allowing modders to refer toConfigPredicates via their registered id or tags. - Added the
frozenlib:fabricConfig Predicate, returning whether the current mod loader is Fabric. - Added the
frozenlib:neoforgeConfig Predicate, returning whether the current mod loader is NeoForge. - Added the
frozenlib:modConfig Predicate, returning whether a mod with the given id (defined via theidfield) is loaded. - Added the
frozenlib:biome_environment_attribute_modificationDynamic Registry, with the following format: biomes: The id, a list of ids, or a tag of Biomes to modify.attributes: A map of Environment Attributes to merge into the givenbiomes.enabled_when: A Config Predicate, determining whether this instance can be used or should be skipped.- Migrated Serializable Item Cooldowns to Data Attachments and optimized its network performance.
- Added the
frozenlib:variant_spawn_injectionDynamic Registry, with the following format: registry: The id of the variant registry.variant: The id of the variant to inject custom spawn conditions into.spawn_conditions: The spawn conditions to inject into the variant, using the same format as thespawn_conditionsfield in other mob variants.- Removed the
WolfVariantBiomeRegistryclass, as Variant Spawn Injections supersede its functionality. - Added the following new Spawn Conditions (used for selecting mob variants within the
spawn_conditionsfield,) with the following formats: frozenlib:config: A Config Predicate, determining whether the condition was met.frozenlib:compoundconditions: A list of Spawn Conditions that all must be met.- Added the
frozenlib:visual/lightmap_brightnessEnvironment Attribute, controlling the brightness of the lightmap. - Can be any value between 0 and 1.
- Added the
PistonEventsclass, containing the following events: DETERMINE_BLOCK_ENTITY_PUSH_RESULT: Determines whether a Block with a Block Entity can be pushed by a Piston.DETERMINE_BLOCK_STICKINESS: Determines whether a Block is considered sticky when pushed by a Piston.- This will not enable any behavior on its own, and must be used in tandem with the
TRY_STICK_BLOCKS_TOGETHERevent to achieve the intended behavior. TRY_STICK_BLOCKS_TOGETHER: Determines whether two Blocks can stick together when pushed by a Piston.- This will not enable any behavior on its own, and must be used in tandem with the
DETERMINE_BLOCK_STICKINESSevent to achieve the intended behavior. ON_MOVING_BLOCK_SET: Triggers when a moved Block is placed.ON_PUSH_FAIL: Triggers when Piston structure resolution fails.- Renamed
PushableBlockEntityUtiltoPistonPushUtiland added a few new methods to help withPistonEventsusage. - Updated and renamed
BooleanPropertySculkBehaviortoBlockStatePropertySculkBehavior, with the additional functionality of being able to use any Block State Property. - Added the
frozenlib:selectorConfig Predicate, with the following format: selector: The Config Predicate used to determine which predicate to select.when_true: The Config Predicate to select whenselectorreturns true.when_false: The Config Predicate to select whenselectorreturns false.- Added the
frozenlib_with_fallbackConfig Predicate, with the following format: entry: The required Config Entry's id.predicate: The Config Predicate to use if the required Config Entry is present.fallback: The fallback value to use if the required Config Entry is not present.- Removed
BlockStateRenameFixandFrozenEntityRenameFix, as Vanilla provides the same functionality. - Renamed
SplashTextAPItoSplashTextEventsand migrated its functionality to events. - Added the following fields to Fire Types:
- Additions to
damage_settings: vulnerable_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity vulnerable to this Fire Type's damage.damage_immune_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity immune to this Fire Type's damage.- Additions to
spread_settings: always_apply_to_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity use this Fire Type if caught on fire.cannot_apply_to_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make this Fire Type unable to be applied to an Entity.- If conflicting Mob Effects are present, their total power will be summed by category (
always_applyvs.cannot_apply) and the category with the highest power will be chosen. - If their power is equal, the
cannot_applycategory will be chosen. - Fire Types now work as intended on Blazes, Fireballs, and Small Fireballs.
- Added the
#frozenlib:on_fireEntity Type Tag, defining which Entity Types are fire-like. - Contains
#frozenlib:blazes,minecraft:fireball, andminecraft:small_fireballby default. - Entities in this Tag will:
- Set their Fire Type upon spawning, instead of waiting to be set on fire.
- Not remove their attached Fire Type if their
remainingFireTicksfield is zero or less, unlike other entities. - Added the
#frozenlib:spawnerItem Tag, used to define which Items should display theInteract with Spawn Egg: Sets Mob Typetooltip. - Added the
frozenlib:damageConsume Effect Type, with the following format: amount: How much damage (must be above 0) to inflict upon the user.sound(Optional): The id of the Sound to play upon damaging the user.type: The id of the Damage Type to damage the user with.- Removed
DamageOnUseItemandDamageOnUseBlockItem, as their functionality has been superseded by thefrozenlib:damageConsume Effect Type. - Added Block Attachments, allowing data to be injected into Blocks for quick retrieval.
- Only the
REGISTERevent inBlockAttachmentEventsshould be used to attach new data to Blocks. - Are cleared each time Tags are loaded/reloaded.
- The
REGISTERevent is called whenever this occurs, as to keep attachments that may depend on Tags up-to-date. - Condensed
BlockScheduledTicks,BlockRandomTicks, andBlockAnimateTicksinto the newBlockTickEventsandBlockTickRegistryclasses. BlockTickEventsprovides events that trigger regardless of the Block.BlockTickRegistryuses the new Block Attachment system, and provides a simple way to add new Block-specific behavior.- Reworked the implementation of modded DataFixers, now allowing modders to register any amount of DataFixers per-mod as they'd like.
- Added
DataFixerEntrypoint(using the identifierfrozenlib:data_fixer,) allowing modders to register custom Entities and Block Entities to Vanilla's DataFixers. - This resolves a long-standing issue that caused many modded Entities and Block Entities to lose data across versions, without the need to use mixins.
- Fixed an issue that required Minecraft to run for an entire minute before finally shutting down. ([#81](https://github.com/FrozenBlock/FrozenLib/issues/81) - Fixed in pull request [#82](https://github.com/FrozenBlock/FrozenLib/pull/82))
- Fixed a major issue that caused certain DataFixers to not work as intended.
- Fixed a crash that could occur on clients when trying to sync Wind Manager Extensions with the server.
- Wind Manager Extensions now support modification as a method of syncing, instead of replacement.
- Fixed an issue that could cause the number of Wind Manager Extensions on the client to increase dramatically over time.
### 26.3+
- Added the
frozenlib:leaf_litter_providerandfrozenlib:flower_bed_providerBlock State Providers, with the following format: block: The id of the Block to generate.min_segment(Optional): The minimum amount of segments to provide, in a range of 1-4.- Provides 1 if empty.
max_segment: The maximum amount of segments to provide, in a range of 1-4.- Added
BlockTransformerEvents, enabling the modification ofBlockTransformersfor Shovel, Axe, and Hoe items. - This replaces the previous
ShovelApiandAxeApiclasses. - Added
PropertyTestingPredicate, a new abstractBlockPredicateused to compare Property values. - Added
HasMatchingAxisPredicate, used to compare theAXISProperty of a Block. - Added
ShearsDispenseItemBehaviorApi, used to register custom behaviors for Shears being used by a Dispenser. - Added the experimental
BlockRegistryModificationEventsclass, used to modify the Properties and Factory used to create Blocks. - Moved Wilder Wild's Potent Sulfur Geyser Wind Disturbance into FrozenLib.
- Added
StructureProcessorListAdditions, replacingStructureProcessorApiin a more stable and data-driven manner. - Added the
frozenlib:structure_processor_list_additionDynamic Registry with the following format: structures: A Structure's ID, a list of Structure IDs, or a Structure Tag thatprocessorswill be added to.processors: A list ofStructureProcessors to add tostructures.config_predicate: An optional field, determining whether this can be used.serialization_requirement: AConfigPredicate, determining whether this can be serialized (useful for mod compat.)- Added the
frozenlib:pathfinding_damaging_blocksBlock Tag, denoting extra Blocks to be considered as damaging while pathfinding. - Migrated
StructureGenerationConditionApito an event. - Migrated
StructurePlacementExclusionApito an event. - Added the
StructureSetApiclass, allowing modders to easily add or removeStructures to/fromStructureSets. - Added
MaterialRuleAdditions, replacing the previous API used to add newMaterialRuless to Levels. - Added the
frozenlib:material_rule_additionDynamic Registry, with the following format: dimensions: A Dimension Type's ID, a list of Dimension Type IDs, or a Dimension Type Tag thatrulewill be added to.has_preliminary_surface: Whetherrulecan only generate on the world's surface. (i.e., the surface of the Overworld.)rule: TheMaterialRulesto add todimensions.serialization_requirement: AConfigPredicate, determining whether this can be serialized (useful for mod compat.)- Removed
SurfaceRuleEvents,DimensionBoundRuleSource, andSurfaceRuleUtilas they are no longer needed. - Added the
#frozenlib:overworld,#frozenlib:nether, and#frozenlib:endDimension Type Tags. - Added
PlayerDamageTypeSounds, used to play a custom sound when a Player is damaged by a specificDamageType. - Added the
frozenlib:player_damage_type_soundDynamic Registry with the following format: damage_types: A Damage Type's ID, a list of Damage Type IDs, or a Damage Type Tag thatsound_eventwill be used for.sound_event: The Sound Event to play when a Player is damaged bydamage_types.config_predicate: An optional field, determining whether this can be used.- Removed the initial implementation, as this new data-driven implementation is far more stable.
- Added the
frozenlib:config_predicateTree Decorator, with the following format: decorator: The Tree Decorator to generate.predicate: The Config Predicate to test, determining whetherdecoratorcan generate.- Added the
frozenlib:probabilityTree Decorator, with the following format: decorator: The Tree Decorator to generate.probability: The probability fordecoratorto generate.DataMarkerProcessableSinglePoolElementandDataMarkerProcessableLegacySinglePoolElementare now both abstract classes.- This change allows for easy handling of Data Markers without the need for mixins.
- Added the
ParticleSpawnerclass, assisting in setting up client-sided particle spawners, e.g., Pollen particles spawning from Pollen blocks. - Added new implementations of
BlockRenameFixandBlockPropertyRenameAndFixthat work on 26.3-snapshot-7+.
- Ported to multiloader and added plenty of new Events & Helpers for multiloader development.
- Added
ConfigEntryGetter, a serializable way to access values fromConfigEntrys. - Added the
frozenlib:config_predicate_providerDynamic Registry, used to registerConfigPredicates. - All implementation of
ConfigPredicates have been updated to now useHolders andHolderSets, allowing modders to refer toConfigPredicates via their registered id or tags. - Added the
frozenlib:fabricConfig Predicate, returning whether the current mod loader is Fabric. - Added the
frozenlib:neoforgeConfig Predicate, returning whether the current mod loader is NeoForge. - Added the
frozenlib:modConfig Predicate, returning whether a mod with the given id (defined via theidfield) is loaded. - Added the
frozenlib:biome_environment_attribute_modificationDynamic Registry, with the following format: biomes: The id, a list of ids, or a tag of Biomes to modify.attributes: A map of Environment Attributes to merge into the givenbiomes.enabled_when: A Config Predicate, determining whether this instance can be used or should be skipped.- Migrated Serializable Item Cooldowns to Data Attachments and optimized its network performance.
- Added the
frozenlib:variant_spawn_injectionDynamic Registry, with the following format: registry: The id of the variant registry.variant: The id of the variant to inject custom spawn conditions into.spawn_conditions: The spawn conditions to inject into the variant, using the same format as thespawn_conditionsfield in other mob variants.- Removed the
WolfVariantBiomeRegistryclass, as Variant Spawn Injections supersede its functionality. - Added the following new Spawn Conditions (used for selecting mob variants within the
spawn_conditionsfield,) with the following formats: frozenlib:config: A Config Predicate, determining whether the condition was met.frozenlib:compoundconditions: A list of Spawn Conditions that all must be met.- Added the
frozenlib:visual/lightmap_brightnessEnvironment Attribute, controlling the brightness of the lightmap. - Can be any value between 0 and 1.
- Added the
PistonEventsclass, containing the following events: DETERMINE_BLOCK_ENTITY_PUSH_RESULT: Determines whether a Block with a Block Entity can be pushed by a Piston.DETERMINE_BLOCK_STICKINESS: Determines whether a Block is considered sticky when pushed by a Piston.- This will not enable any behavior on its own, and must be used in tandem with the
TRY_STICK_BLOCKS_TOGETHERevent to achieve the intended behavior. TRY_STICK_BLOCKS_TOGETHER: Determines whether two Blocks can stick together when pushed by a Piston.- This will not enable any behavior on its own, and must be used in tandem with the
DETERMINE_BLOCK_STICKINESSevent to achieve the intended behavior. ON_MOVING_BLOCK_SET: Triggers when a moved Block is placed.ON_PUSH_FAIL: Triggers when Piston structure resolution fails.- Renamed
PushableBlockEntityUtiltoPistonPushUtiland added a few new methods to help withPistonEventsusage. - Updated and renamed
BooleanPropertySculkBehaviortoBlockStatePropertySculkBehavior, with the additional functionality of being able to use any Block State Property. - Added the
frozenlib:selectorConfig Predicate, with the following format: selector: The Config Predicate used to determine which predicate to select.when_true: The Config Predicate to select whenselectorreturns true.when_false: The Config Predicate to select whenselectorreturns false.- Added the
frozenlib_with_fallbackConfig Predicate, with the following format: entry: The required Config Entry's id.predicate: The Config Predicate to use if the required Config Entry is present.fallback: The fallback value to use if the required Config Entry is not present.- Removed
BlockStateRenameFixandFrozenEntityRenameFix, as Vanilla provides the same functionality. - Renamed
SplashTextAPItoSplashTextEventsand migrated its functionality to events. - Added the following fields to Fire Types:
- Additions to
damage_settings: vulnerable_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity vulnerable to this Fire Type's damage.damage_immune_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity immune to this Fire Type's damage.- Additions to
spread_settings: always_apply_to_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity use this Fire Type if caught on fire.cannot_apply_to_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make this Fire Type unable to be applied to an Entity.- If conflicting Mob Effects are present, their total power will be summed by category (
always_applyvs.cannot_apply) and the category with the highest power will be chosen. - If their power is equal, the
cannot_applycategory will be chosen. - Fire Types now work as intended on Blazes, Fireballs, and Small Fireballs.
- Added the
#frozenlib:on_fireEntity Type Tag, defining which Entity Types are fire-like. - Contains
#frozenlib:blazes,minecraft:fireball, andminecraft:small_fireballby default. - Entities in this Tag will:
- Set their Fire Type upon spawning, instead of waiting to be set on fire.
- Not remove their attached Fire Type if their
remainingFireTicksfield is zero or less, unlike other entities. - Added the
#frozenlib:spawnerItem Tag, used to define which Items should display theInteract with Spawn Egg: Sets Mob Typetooltip. - Added the
frozenlib:damageConsume Effect Type, with the following format: amount: How much damage (must be above 0) to inflict upon the user.sound(Optional): The id of the Sound to play upon damaging the user.type: The id of the Damage Type to damage the user with.- Removed
DamageOnUseItemandDamageOnUseBlockItem, as their functionality has been superseded by thefrozenlib:damageConsume Effect Type. - Added Block Attachments, allowing data to be injected into Blocks for quick retrieval.
- Only the
REGISTERevent inBlockAttachmentEventsshould be used to attach new data to Blocks. - Are cleared each time Tags are loaded/reloaded.
- The
REGISTERevent is called whenever this occurs, as to keep attachments that may depend on Tags up-to-date. - Condensed
BlockScheduledTicks,BlockRandomTicks, andBlockAnimateTicksinto the newBlockTickEventsandBlockTickRegistryclasses. BlockTickEventsprovides events that trigger regardless of the Block.BlockTickRegistryuses the new Block Attachment system, and provides a simple way to add new Block-specific behavior.- Reworked the implementation of modded DataFixers, now allowing modders to register any amount of DataFixers per-mod as they'd like.
- Added
DataFixerEntrypoint(using the identifierfrozenlib:data_fixer,) allowing modders to register custom Entities and Block Entities to Vanilla's DataFixers. - This resolves a long-standing issue that caused many modded Entities and Block Entities to lose data across versions, without the need to use mixins.
- Fixed an issue that required Minecraft to run for an entire minute before finally shutting down. ([#81](https://github.com/FrozenBlock/FrozenLib/issues/81) - Fixed in pull request [#82](https://github.com/FrozenBlock/FrozenLib/pull/82))
- Fixed a major issue that caused certain DataFixers to not work as intended.
- Fixed a crash that could occur on clients when trying to sync Wind Manager Extensions with the server.
- Wind Manager Extensions now support modification as a method of syncing, instead of replacement.
- Fixed an issue that could cause the number of Wind Manager Extensions on the client to increase dramatically over time.
### 26.3+
- Added the
frozenlib:leaf_litter_providerandfrozenlib:flower_bed_providerBlock State Providers, with the following format: block: The id of the Block to generate.min_segment(Optional): The minimum amount of segments to provide, in a range of 1-4.- Provides 1 if empty.
max_segment: The maximum amount of segments to provide, in a range of 1-4.- Added
BlockTransformerEvents, enabling the modification ofBlockTransformersfor Shovel, Axe, and Hoe items. - This replaces the previous
ShovelApiandAxeApiclasses. - Added
PropertyTestingPredicate, a new abstractBlockPredicateused to compare Property values. - Added
HasMatchingAxisPredicate, used to compare theAXISProperty of a Block. - Added
ShearsDispenseItemBehaviorApi, used to register custom behaviors for Shears being used by a Dispenser. - Added the experimental
BlockRegistryModificationEventsclass, used to modify the Properties and Factory used to create Blocks. - Moved Wilder Wild's Potent Sulfur Geyser Wind Disturbance into FrozenLib.
- Added
StructureProcessorListAdditions, replacingStructureProcessorApiin a more stable and data-driven manner. - Added the
frozenlib:structure_processor_list_additionDynamic Registry with the following format: structures: A Structure's ID, a list of Structure IDs, or a Structure Tag thatprocessorswill be added to.processors: A list ofStructureProcessors to add tostructures.config_predicate: An optional field, determining whether this can be used.serialization_requirement: AConfigPredicate, determining whether this can be serialized (useful for mod compat.)- Added the
frozenlib:pathfinding_damaging_blocksBlock Tag, denoting extra Blocks to be considered as damaging while pathfinding. - Migrated
StructureGenerationConditionApito an event. - Migrated
StructurePlacementExclusionApito an event. - Added the
StructureSetApiclass, allowing modders to easily add or removeStructures to/fromStructureSets. - Added
MaterialRuleAdditions, replacing the previous API used to add newMaterialRuless to Levels. - Added the
frozenlib:material_rule_additionDynamic Registry, with the following format: dimensions: A Dimension Type's ID, a list of Dimension Type IDs, or a Dimension Type Tag thatrulewill be added to.has_preliminary_surface: Whetherrulecan only generate on the world's surface. (i.e., the surface of the Overworld.)rule: TheMaterialRulesto add todimensions.serialization_requirement: AConfigPredicate, determining whether this can be serialized (useful for mod compat.)- Removed
SurfaceRuleEvents,DimensionBoundRuleSource, andSurfaceRuleUtilas they are no longer needed. - Added the
#frozenlib:overworld,#frozenlib:nether, and#frozenlib:endDimension Type Tags. - Added
PlayerDamageTypeSounds, used to play a custom sound when a Player is damaged by a specificDamageType. - Added the
frozenlib:player_damage_type_soundDynamic Registry with the following format: damage_types: A Damage Type's ID, a list of Damage Type IDs, or a Damage Type Tag thatsound_eventwill be used for.sound_event: The Sound Event to play when a Player is damaged bydamage_types.config_predicate: An optional field, determining whether this can be used.- Removed the initial implementation, as this new data-driven implementation is far more stable.
- Added the
frozenlib:config_predicateTree Decorator, with the following format: decorator: The Tree Decorator to generate.predicate: The Config Predicate to test, determining whetherdecoratorcan generate.- Added the
frozenlib:probabilityTree Decorator, with the following format: decorator: The Tree Decorator to generate.probability: The probability fordecoratorto generate.DataMarkerProcessableSinglePoolElementandDataMarkerProcessableLegacySinglePoolElementare now both abstract classes.- This change allows for easy handling of Data Markers without the need for mixins.
- Added the
ParticleSpawnerclass, assisting in setting up client-sided particle spawners, e.g., Pollen particles spawning from Pollen blocks. - Added new implementations of
BlockRenameFixandBlockPropertyRenameAndFixthat work on 26.3-snapshot-7+.
- Ported to multiloader and added plenty of new Events & Helpers for multiloader development.
- Added
ConfigEntryGetter, a serializable way to access values fromConfigEntrys. - Added the
frozenlib:config_predicate_providerDynamic Registry, used to registerConfigPredicates. - All implementation of
ConfigPredicates have been updated to now useHolders andHolderSets, allowing modders to refer toConfigPredicates via their registered id or tags. - Added the
frozenlib:fabricConfig Predicate, returning whether the current mod loader is Fabric. - Added the
frozenlib:neoforgeConfig Predicate, returning whether the current mod loader is NeoForge. - Added the
frozenlib:modConfig Predicate, returning whether a mod with the given id (defined via theidfield) is loaded. - Added the
frozenlib:biome_environment_attribute_modificationDynamic Registry, with the following format: biomes: The id, a list of ids, or a tag of Biomes to modify.attributes: A map of Environment Attributes to merge into the givenbiomes.enabled_when: A Config Predicate, determining whether this instance can be used or should be skipped.- Migrated Serializable Item Cooldowns to Data Attachments and optimized its network performance.
- Added the
frozenlib:variant_spawn_injectionDynamic Registry, with the following format: registry: The id of the variant registry.variant: The id of the variant to inject custom spawn conditions into.spawn_conditions: The spawn conditions to inject into the variant, using the same format as thespawn_conditionsfield in other mob variants.- Removed the
WolfVariantBiomeRegistryclass, as Variant Spawn Injections supersede its functionality. - Added the following new Spawn Conditions (used for selecting mob variants within the
spawn_conditionsfield,) with the following formats: frozenlib:config: A Config Predicate, determining whether the condition was met.frozenlib:compoundconditions: A list of Spawn Conditions that all must be met.- Added the
frozenlib:visual/lightmap_brightnessEnvironment Attribute, controlling the brightness of the lightmap. - Can be any value between 0 and 1.
- Added the
PistonEventsclass, containing the following events: DETERMINE_BLOCK_ENTITY_PUSH_RESULT: Determines whether a Block with a Block Entity can be pushed by a Piston.DETERMINE_BLOCK_STICKINESS: Determines whether a Block is considered sticky when pushed by a Piston.- This will not enable any behavior on its own, and must be used in tandem with the
TRY_STICK_BLOCKS_TOGETHERevent to achieve the intended behavior. TRY_STICK_BLOCKS_TOGETHER: Determines whether two Blocks can stick together when pushed by a Piston.- This will not enable any behavior on its own, and must be used in tandem with the
DETERMINE_BLOCK_STICKINESSevent to achieve the intended behavior. ON_MOVING_BLOCK_SET: Triggers when a moved Block is placed.ON_PUSH_FAIL: Triggers when Piston structure resolution fails.- Renamed
PushableBlockEntityUtiltoPistonPushUtiland added a few new methods to help withPistonEventsusage. - Updated and renamed
BooleanPropertySculkBehaviortoBlockStatePropertySculkBehavior, with the additional functionality of being able to use any Block State Property. - Added the
frozenlib:selectorConfig Predicate, with the following format: selector: The Config Predicate used to determine which predicate to select.when_true: The Config Predicate to select whenselectorreturns true.when_false: The Config Predicate to select whenselectorreturns false.- Added the
frozenlib_with_fallbackConfig Predicate, with the following format: entry: The required Config Entry's id.predicate: The Config Predicate to use if the required Config Entry is present.fallback: The fallback value to use if the required Config Entry is not present.- Removed
BlockStateRenameFixandFrozenEntityRenameFix, as Vanilla provides the same functionality. - Renamed
SplashTextAPItoSplashTextEventsand migrated its functionality to events. - Added the following fields to Fire Types:
- Additions to
damage_settings: vulnerable_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity vulnerable to this Fire Type's damage.damage_immune_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity immune to this Fire Type's damage.- Additions to
spread_settings: always_apply_to_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make an Entity use this Fire Type if caught on fire.cannot_apply_to_mob_effects: A Mob Effect's id, a list of Mob Effect ids, or a Mob Effect Tag, defining which Mob Effects will make this Fire Type unable to be applied to an Entity.- If conflicting Mob Effects are present, their total power will be summed by category (
always_applyvs.cannot_apply) and the category with the highest power will be chosen. - If their power is equal, the
cannot_applycategory will be chosen. - Fire Types now work as intended on Blazes, Fireballs, and Small Fireballs.
- Added the
#frozenlib:on_fireEntity Type Tag, defining which Entity Types are fire-like. - Contains
#frozenlib:blazes,minecraft:fireball, andminecraft:small_fireballby default. - Entities in this Tag will:
- Set their Fire Type upon spawning, instead of waiting to be set on fire.
- Not remove their attached Fire Type if their
remainingFireTicksfield is zero or less, unlike other entities. - Added the
#frozenlib:spawnerItem Tag, used to define which Items should display theInteract with Spawn Egg: Sets Mob Typetooltip. - Added the
frozenlib:damageConsume Effect Type, with the following format: amount: How much damage (must be above 0) to inflict upon the user.sound(Optional): The id of the Sound to play upon damaging the user.type: The id of the Damage Type to damage the user with.- Removed
DamageOnUseItemandDamageOnUseBlockItem, as their functionality has been superseded by thefrozenlib:damageConsume Effect Type. - Added Block Attachments, allowing data to be injected into Blocks for quick retrieval.
- Only the
REGISTERevent inBlockAttachmentEventsshould be used to attach new data to Blocks. - Are cleared each time Tags are loaded/reloaded.
- The
REGISTERevent is called whenever this occurs, as to keep attachments that may depend on Tags up-to-date. - Condensed
BlockScheduledTicks,BlockRandomTicks, andBlockAnimateTicksinto the newBlockTickEventsandBlockTickRegistryclasses. BlockTickEventsprovides events that trigger regardless of the Block.BlockTickRegistryuses the new Block Attachment system, and provides a simple way to add new Block-specific behavior.- Reworked the implementation of modded DataFixers, now allowing modders to register any amount of DataFixers per-mod as they'd like.
- Added
DataFixerEntrypoint(using the identifierfrozenlib:data_fixer,) allowing modders to register custom Entities and Block Entities to Vanilla's DataFixers. - This resolves a long-standing issue that caused many modded Entities and Block Entities to lose data across versions, without the need to use mixins.
- Fixed an issue that required Minecraft to run for an entire minute before finally shutting down. ([#81](https://github.com/FrozenBlock/FrozenLib/issues/81) - Fixed in pull request [#82](https://github.com/FrozenBlock/FrozenLib/pull/82))
- Fixed a major issue that caused certain DataFixers to not work as intended.
- Fixed a crash that could occur on clients when trying to sync Wind Manager Extensions with the server.
- Wind Manager Extensions now support modification as a method of syncing, instead of replacement.
- Fixed an issue that could cause the number of Wind Manager Extensions on the client to increase dramatically over time.
### 26.3+
- Added the
frozenlib:leaf_litter_providerandfrozenlib:flower_bed_providerBlock State Providers, with the following format: block: The id of the Block to generate.min_segment(Optional): The minimum amount of segments to provide, in a range of 1-4.- Provides 1 if empty.
max_segment: The maximum amount of segments to provide, in a range of 1-4.- Added
BlockTransformerEvents, enabling the modification ofBlockTransformersfor Shovel, Axe, and Hoe items. - This replaces the previous
ShovelApiandAxeApiclasses. - Added
PropertyTestingPredicate, a new abstractBlockPredicateused to compare Property values. - Added
HasMatchingAxisPredicate, used to compare theAXISProperty of a Block. - Added
ShearsDispenseItemBehaviorApi, used to register custom behaviors for Shears being used by a Dispenser. - Added the experimental
BlockRegistryModificationEventsclass, used to modify the Properties and Factory used to create Blocks. - Moved Wilder Wild's Potent Sulfur Geyser Wind Disturbance into FrozenLib.
- Added
StructureProcessorListAdditions, replacingStructureProcessorApiin a more stable and data-driven manner. - Added the
frozenlib:structure_processor_list_additionDynamic Registry with the following format: structures: A Structure's ID, a list of Structure IDs, or a Structure Tag thatprocessorswill be added to.processors: A list ofStructureProcessors to add tostructures.config_predicate: An optional field, determining whether this can be used.serialization_requirement: AConfigPredicate, determining whether this can be serialized (useful for mod compat.)- Added the
frozenlib:pathfinding_damaging_blocksBlock Tag, denoting extra Blocks to be considered as damaging while pathfinding. - Migrated
StructureGenerationConditionApito an event. - Migrated
StructurePlacementExclusionApito an event. - Added the
StructureSetApiclass, allowing modders to easily add or removeStructures to/fromStructureSets. - Added
MaterialRuleAdditions, replacing the previous API used to add newMaterialRuless to Levels. - Added the
frozenlib:material_rule_additionDynamic Registry, with the following format: dimensions: A Dimension Type's ID, a list of Dimension Type IDs, or a Dimension Type Tag thatrulewill be added to.has_preliminary_surface: Whetherrulecan only generate on the world's surface. (i.e., the surface of the Overworld.)rule: TheMaterialRulesto add todimensions.serialization_requirement: AConfigPredicate, determining whether this can be serialized (useful for mod compat.)- Removed
SurfaceRuleEvents,DimensionBoundRuleSource, andSurfaceRuleUtilas they are no longer needed. - Added the
#frozenlib:overworld,#frozenlib:nether, and#frozenlib:endDimension Type Tags. - Added
PlayerDamageTypeSounds, used to play a custom sound when a Player is damaged by a specificDamageType. - Added the
frozenlib:player_damage_type_soundDynamic Registry with the following format: damage_types: A Damage Type's ID, a list of Damage Type IDs, or a Damage Type Tag thatsound_eventwill be used for.sound_event: The Sound Event to play when a Player is damaged bydamage_types.config_predicate: An optional field, determining whether this can be used.- Removed the initial implementation, as this new data-driven implementation is far more stable.
- Added the
frozenlib:config_predicateTree Decorator, with the following format: decorator: The Tree Decorator to generate.predicate: The Config Predicate to test, determining whetherdecoratorcan generate.- Added the
frozenlib:probabilityTree Decorator, with the following format: decorator: The Tree Decorator to generate.probability: The probability fordecoratorto generate.DataMarkerProcessableSinglePoolElementandDataMarkerProcessableLegacySinglePoolElementare now both abstract classes.- This change allows for easy handling of Data Markers without the need for mixins.
- Added the
ParticleSpawnerclass, assisting in setting up client-sided particle spawners, e.g., Pollen particles spawning from Pollen blocks. - Added new implementations of
BlockRenameFixandBlockPropertyRenameAndFixthat work on 26.3-snapshot-7+.
- Fixed a crash that could occur on clients when trying to sync Wind Manager Extensions with the server.
- Wind Manager Extensions now support modification as a method of syncing, instead of replacement.
- Fixed an issue that could cause the number of Wind Manager Extensions on the client to increase dramatically over time.
- Fixed a crash when trying to access Fire Types on servers without FrozenLib.
- Fixed a major issue with Config Syncing.
- 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.
- 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.
- 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.
- 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.
- 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.
- Added the
itemToPatternMappingsmethod toDecoratedPotPatternRegistryEntrypoint. - Removed
SherdRegistry. - 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.
- Fixed a critical issue that prevented DataFixing from working as intended.
- Cleaned up the implementation of multiple DataFixer helpers.
- Restored modmenu-specific features.
- Restored modmenu-specific features.
- Fixed the structure_upgrade command.
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.
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. - 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.
- 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.
- 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.
### 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.
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.
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. - 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.
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.
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. - 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.
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.
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. - 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.
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.
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. - 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.
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.
- 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.
- 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.
### 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.
