This update brings Thermoo to 1.21.3. This is the first step in updating Frostiful and Scorchful. 1.21.1 will still continue to receive updates and fixes along with 1.21.3 for the foreseeable future, this is just for those who wish to play with newer versions.
Also, the Scorchful update may take a bit longer than Frostiful as it is currently blocked by Satin needing to update. Stay tuned!
Changelog:
- Updates Thermoo to 1.21.3
- Removed Armor Materials API including all tags and events. Unfortunately, the Armor Material registry was removed in 1.21.2, and so this API was completely unable to be updated. As an alternative, I would recommend checking out the Item Components mod as it provides a much more powerful way to modify the base settings of items (including attributes) in a data-driven format.
- Removed the
generic.
prefix from all attribute IDs. For example, the ID for Frost Resistance was previouslythermoo:generic.frost_resistance
, but is now simplythermoo:frost_resistance
. This change was made to reflect similar changes to attribute IDs in the vanilla game. - For old worlds being updated to 1.21.3 for the first time, this prefix change will be datafixed so all items and entities should retain their old attribute values (and you won't get any unknown attribute spam in the console). However, API users (i.e., mods, mod packs, and data packs) will have to adjust their code for this change manually.
- The season events now MUST return the correct season type. If a listener attempts to return the wrong season type, then it will be skipped and an empty will be returned instead. For example, if a
GET_TROPICAL_SEASON
attempts to return summer instead of tropical wet or dry, then it will be ignored.
- Fixed NPE with Colorful Hearts
- Fixed #35: Crash with N=1 mod 10 hearts
- Fixed a crash with Pokemon Trainer Mob
- Added conventional thermoo tags for temperature-related consumeables
- Added some builder helper methods for the custom loot conditions
- Fixed a crash with Pokemon Trainer Mob
- Added a
thermoo:attribute_modifier
temperature effect that applies "fixed" attribute modifiers to affected entities. - Added the tropical Wet and Dry Seasons to the Seasons API, along with an event to query these seasons
- Cardinal Components API is no longer embedded with Thermoo - users must now download it separately from Thermoo.
- Fixed armor material attribute IDs overriding each other
- Fixed the check temperature command sending an error
Adds a new armour materials API to sort of replace the primary use case of the old item attribute modifiers API.
- Added new armor material tags for different levels of frost and heat resistance. Note that these are tags for armor materials, not armor items, and therefore go in
data/<namespace>/tags/armor_material/
. - Added two new events:
ArmorMaterialEvents.GET_HEAT_RESISTANCE
andArmorMaterialEvents.GET_FROST_RESISTANCE
to get the respective heat and frost resistance for an armor material and armor type (like boots, chestplate, helmet). - Known issue: Using the tags to apply heat and frost resistance doesn't really work with a datapack's normal world-independence. For now, the tags should only be used in datapacks that apply to all worlds on a modpack/server.
Updates Thermoo to MC 1.21. Includes several breaking changes:
- Thermoo now requires Java 21, matching Minecraft's requirement.
- Removed item attribute modifiers, without replacement. This was too difficult of a feature to update with item components, but a replacement feature may come soon.
- The path of temperature effects was changed from
thermoo/temperature_effects
tothermoo/temperature_effect
, to reflect similar changes made to the vanilla game. - The constant fields in
ThermooAttributes
now have typeRegistryEntry<EntityAttribute>
rather thanEntityAttribute
EnvironmentController#getBaseValueForAttribute
had its signature changed to take aRegistryEntry<EntityAttribute>
rather thanEntityAttribute
ScalingAttributeModifierTemperatureEffect.Config
had several changes in both Java and Datapack APIs. Theattribute
type was changed toRegistryEntry<EntityAttribute>
rather thanEntityAttribute
, and the UUID and name fields were removed and replaced with an identifier field calledid
, with this change also affecting datapacks. Furthermore, datapack'soperation
field must now be one ofadd_value
,add_multiplied_base
, oradd_multiplied_total
.- Temperature effects and custom Loot Condition types now have a
MapCodec
instead of aCodec
(however temperature effect configs are still regular Codecs). - The class
ThermooSeasons
was renamed toThermooSeason
. PlayerEnvironmentEvents.CAN_APPLY_PASSIVE_TEMPERATURE_CHANGE
now returns aTriState
instead of a boolean, making it clearer when a listener is passing.
The following additions were made to Thermoo:
- Added default temperature converter settings instances for all units
This update adds new features to temperature effects, and a new command
- Resolves #15: Fabric resource conditions may now be applied to temperature effects
- Resolves #16: Added a new
soaking
command to read and write to an entity's soaking value - Resolves #19: Added optional
loading_priority
to temperature effects - Loading priority allows for load-order independent overriding of temperature effects between mods and datapacks to allow for easier compatibility patching
- Resolves #20: Added new temperature effect type
thermoo:function
- Function temperature effects run a datapack function on a regular interval. The config provides options for the function to execute, the length of the interval (in ticks), the permission level of the function to execute, and the macro arguments of the function. The execution context of the function will be
as
andat
the entity.
- Fixed an issue with item attribute modifier codecs that caused them to fail to encode when using tags on servers.
- Added a
require_preferred_slot
field to item attribute modifiers
- Fixed log spam with Eldritch Mobs and Mouse Wheelie
- Updated to 1.20.4
- Added Javadoc to the loot condition types
Thermoo is now updated to 1.20.2. This is the first step to updating to 1.20.4. This update includes a few breaking changes to the temperature effect and item attribute modifiers APIs. The JSON APIs will mostly work as before, with only a few changes. This will likely be the only update for 1.20.2.
Changelog:
- Updated Thermoo to MC 1.20.2
- Refactored temperature effects to use codecs instead of serializers.
- Some nonsensical values in temperature effect JSONs are no longer allowed
- Equipment slot and attribute operations are now supplied as
lower_case
strings instead ofUPPER_CASE
. - Removed built in integrations for Fabric Seasons, Colorful Hearts, and Overflowing bars. These have been moved to Thermoo Patches.
- Removed the deprecated temperature effect
thermoo:freeze_damage_legacy
and associated Legacy Damage temperature effect type. - Removed the
thermoo.temperature
field fromminecraft:entity_properties
loot conditions - Added
thermoo:temperature
andthermoo:soaked
loot conditions
- Added the event
StatusBarOverlayRenderEvents.AFTER_MOUNT_HEALTH_BAR
, which is very similar to theAFTER_HEALTH_BAR
event, except it renders after the health bar of the player's current mount (eg, pigs, horses, camels).
This update adds a new experimental item attribute modifiers datapack API, as well as a new temperature effect and some new APIs.
- Gave the wiki a facelift to improve user experience! Give a look!
- Updated the mod page to reflect changes in Thermoo 2.0.
- Updated the mod icon!
- Added experimental item attribute modifiers
- Added Temperature unit API
- Added
thermoo:sequence
temperature effect - Added client-only
HeartOverlayRenderEvent
for rendering temperature overlays on the health bar - Added a seasons integration API
- Added Chinese translations, thanks JellyBubb1e!
Item Attribute Modifiers
Item attribute modifiers have been ported from Frostiful. They allow datapacks to modify the default attributes of items easily. This is particularly useful for mod pack developers who want to add attributes to non-Thermoo based modded armors. It allows for attributes to be applied to items based on both tags and item IDs.
The major enhancement it makes over Frostiful is that these datapacks can be applied server side and, provided clients have Thermoo installed, will sync automatically so that they will actually appear on the tooltip in multiplayer. The previous system did not do this, and so often times the tooltip would not show modified attributes, which may have led to some confusion.
This feature is still experimental and could change or even be removed in future versions of Thermoo. A particular issue is that it could cause some lag issues when there are a lot of attribute modifiers defined by the datapack and a lot of item stacks are created at once. Furthermore, MC 1.20.5's changes to item stack NBT may make this almost entirely redundant or broken. Proceed with caution!
Here is an example item attribute modifier JSON file:
{
"attribute": "thermoo:generic.heat_resistance",
"modifier": {
"uuid": "413a10a0-bf0b-47db-a9a9-2eb3dda3bbaf",
"name": "Test",
"value": -1.0,
"operation": "ADDITION"
},
"item": {
"items": [
"minecraft:diamond_helmet",
"minecraft:iron_helmet",
"minecraft:leather_helmet"
],
// you can also use a tag here
"tag": "example:all_helmets"
},
// replace with any equipment slot, like CHEST, LEGS, FEET, MAINHAND, OFFHAND
"slot": "HEAD"
}
Temperature Unit API
This is a new java and command API that allows users to convert between temperature-points-per-tick values and ambient temperature values in normal temperature units (like Celsius, Fahrenheit, etc). By default, it converts based in Celsius and with 0 -1 temp/tick = 5C -14C, temp/tick = 15C - 24C, 1 temp/tick = 25C - 34C, etc. You can adjust how this works using the settings
parameter. You can visualize how to convert Celsius to temperature per tick using this Desmos graph: https://www.desmos.com/calculator/z1tqbiol9l. In the red line, the x-axis is ambient temperature in Celsius, and the y-axis is temperature per tick. In the blue line, its the opposite: the x-axis is temperature per tick and the y-axis is ambient temperature in Celsius.
Sequence Temperature Effect
Added a new meta temperature effect: thermoo:sequence
.
Config consists of a single field - children
- which is a list of other temperature effects. Each temperature effect is applied in order.
Heart Overlay Event
The new HeartOverlayRenderEvent.AFTER_HEALTH_BAR
event is a new client-side-only event that is meant to unify the code for temperature overlays in Frostiful and Scorchful. This new event comes with support for Colorful Hearts and Overflowing Bars, but this may be moved to a separate mod in the future that focuses more on compatibility patches for Thermoo.
Seasons integration API
A new API for providing better compatibility with Seasons mods like Fabric Seasons and Serene Seasons. Currently, only Fabric Seasons is supported, however this will be removed from Thermoo in the future and moved to a dedicated patches mod. You can access seasons through the ThermooSeasons
class.