Thermoo

Thermoo

Mod

A temperature library mod for Fabric and Quilt. Used by Frostiful and Scorchful.

Client and server Library

310.1k downloads
47 followers
Createda year ago
Updated6 days ago

Follow Save
Host your Minecraft server on BisectHosting - get 25% off your first month with code MODRINTH.
Filter loader...
Filter versions...
Filter channels...

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 to thermoo/temperature_effect, to reflect similar changes made to the vanilla game.
  • The constant fields in ThermooAttributes now have type RegistryEntry<EntityAttribute> rather than EntityAttribute
  • EnvironmentController#getBaseValueForAttribute had its signature changed to take a RegistryEntry<EntityAttribute> rather than EntityAttribute
  • ScalingAttributeModifierTemperatureEffect.Config had several changes in both Java and Datapack APIs. The attribute type was changed to RegistryEntry<EntityAttribute> rather than EntityAttribute, and the UUID and name fields were removed and replaced with an identifier field called id, with this change also affecting datapacks. Furthermore, datapack's operation field must now be one of add_value, add_multiplied_base, or add_multiplied_total.
  • Temperature effects and custom Loot Condition types now have a MapCodec instead of a Codec (however temperature effect configs are still regular Codecs).
  • The class ThermooSeasons was renamed to ThermooSeason.
  • PlayerEnvironmentEvents.CAN_APPLY_PASSIVE_TEMPERATURE_CHANGE now returns a TriState 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 is a hotfix update to update the Colorful Hearts integration to work with the new version of Colorful Hearts.

  • Fixed colorful hearts crashing (by Terrails)
  • Corresponding updates for Frostiful and Thermoo Patches coming soon

This is just a small update to add some new translations

  • Added Finnish Translations (by N0aW) 🇫🇮
  • Added Vietnamese Translations (by godkyo98) 🇻🇳

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 and at 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 of UPPER_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 from minecraft:entity_properties loot conditions
  • Added thermoo:temperature and thermoo:soaked loot conditions
  • Added the event StatusBarOverlayRenderEvents.AFTER_MOUNT_HEALTH_BAR, which is very similar to the AFTER_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 of 600 instead of the usual 0. 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 with EmptyEnvironmentController.
  • 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 to PlayerEnvironmentEvents.
  • 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+

Project members

TheDeathlyCow

Owner


Technical information

License
LGPL-3.0-only
Client side
required
Server side
required
Project ID