- 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.
- Added a new
applyAwareHeat
method to the environment controller - Cleaned up the cardinal components internals a bit
- Made the
getEnvironmentTemperatureForPlayer
return the base local temperature by default instead of 0.
This is just a small update to hopefully improve server performance by synchronizing temperatures fewer times.
- Temperature-affected entities will now only sync their temperature to players within 32 blocks of their location
- Temperature-affected entities will now attempt to sync to players every 20 ticks.
- This update can be added to servers without a client update.
- Added a new
entity_type
field to temperature effects - this is a new field that causes the effect to only apply to the specific entity type. This is also more performant than using predicates for this, as the effect will only be ticked for that type. Unfortunately, this means that tags won't work in this field. However, for effects that should only apply to a single type of entity (eg players), using this field can significantly reduce the amount of stuff the server has to tick. If this field is unspecified, then the existing behaviour of ticking the effect on all entities is retained. - Added a new
maxWetTicks(Soakable)
method to the environment controller. In order to preserve existing functionality, this defaults to a value of600
instead of the usual0
. However, this value may now be overridden by mods as they see fit. - Fixed up some javadoc on the environment controller that was outdated
This is a backport of the data sync changes made in 2.0.2 due to their criticality.
- Fixed data sync randomly breaking for temperature and wetness when class initialization order does not match on client and server.
- Set all attributes of Thermoo to be synchronized between client and server
Increased Cardinality
- Switched from using data tracker and custom fields to using Cardinal Components for internal tracking of temperature and wetness
- You should not need to download Cardinal Components for this update
- This should also fix temperature not properly syncing on dedicated servers
This update brings several major breaking changes to the Thermoo backend, hence the version number being set to 2.0.0. I hope I don't feel the need to do this again, but hopefully these changes make the mod a lot nicer to use. Most notably for users, this update removes Cloth as a dependency of Thermoo so now Thermoo's only dependency is Fabric API.
Changelog:
- Removed the
DefaultEnvironmentController
and replaced it withEmptyEnvironmentController
. - Removed Cloth as a direct dependency of Thermoo.
- Removed all config options, they are now once again a part of Frostiful
- Removed almost all events
- Added
CAN_APPLY_PASSIVE_TEMPERATURE_CHANGE
toPlayerEnvironmentEvents
. - Added a
EnvironmentControllerInitializeEvent
to control the order of environment controller decorator application. - Set the base min/max temperature attribute values to 0.
- Fixed an issue where entities would not have their passive temperature changes properly calculated while riding a vehicle TheDeathlyCow/Frostiful#47.
For most developers, I would strongly recommend rereading the Environment Controller wiki page, as it has almost entirely been rewritten. It is available here: https://github.com/TheDeathlyCow/thermoo/wiki/Environment-Controller-and-Events-(Mods)
This version is incompatible with Frostiful 0.8.1!! Do not update Thermoo until Frostiful is also updated!
- Marked as compatible with 1.20+
Pails and Tails
Thermoo is now updated to 1.20.1! This was a fairly small update, with only one real back end change
- Updated to MC 1.20.1
- Changed the order in which the evaluation of whether to apply a temperature effect is made, and slightly optimized the
ScalingAttributeModifierTemperatureEffect
- Made the hot floor temperature change require approval from an event listener
Thermoo is now updated to 1.19.4!
Changes:
- Updated to 1.19.4
- Added fallback translations for command text feedback
- The
LegacyDamageTemperatureEffect
is now deprecated, as well as its implementationthermoo:freeze_damage_legacy
- Added the temperature effect
thermoo:damage
- Breaking change: the constructor for
LegacyDamageTemperatureEffect
now requires aFunction<ServerWorld, DamageSource>
instead of just aDamageSource
. - Changed the logic for how status effect temperature effects are refreshed
- Added passive snow to the environment controller
- Removed
isCold()
check on applying heat sources - this is now left to users - Added a temperature predicate to entity predicates
- Starting at 1.3.1 as I have been experimenting with publishing on jitpack