Thermoo

Thermoo

Mod

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

Client and server Library

510.3k downloads
68 followers
Follow Save
90% of ad revenue goes to creators. Go ad-free while supporting creators with Modrinth Plus. Subscribe today!
Filter loader...
Filter versions...
Filter channels...
  • 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 and ArmorMaterialEvents.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 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

Project members

TheDeathlyCow

Owner

Details

Licensed LGPL-3.0-only
Published a year ago
Updated 2 months ago