All Mods Resource Packs Data Packs Shaders Modpacks Plugins
Thermoo

Thermoo

by TheDeathlyCow • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

Thermoo - Temperature and Environment API

Thermoo is a temperature and environment library mod for Minecraft. It is meant to help provide compatibility between mods and datapacks that use temperature as a core mechanic, such as Frostiful or Scorchful. Using this mod on its own will have no gameplay or visual effects. It is designed to be used by Mods written in both Java and Kotlin, as well as Datapacks through Commands and other registries.

Developer Features and Wiki

Thermoo provides a number of useful features for developers of temperature mods and datapacks, including:

  • A unified framework for dealing with Temperature and Wetness/Soaking
  • Cross-compatibility with other Thermoo mods, without needing to specify direct compatibility patches
  • Powerful datapack-based Environment API
  • Data-driven temperature effects
  • Event-driven configuration of default item attributes
  • Robust API for working with unit-agnostic temperature records (like Celsius and Fahrenheit)
  • Integration with Seasons mods
  • Powerful commands
  • Extensive customizability for your own mods
  • Can run Server-side only with Polymer (Fabric only)

Thermoo has an extensive developer wiki on GitHub, available here. If you have trouble with something, feel free to ask in my Discord.

Configs for Modpack Authors

By itself, Thermoo should have no impact on your game. However, other mods may be installed that rely on features of Thermoo such as temperature effects and freezing. I would also recommend checking out the API Overview section of the wiki if you want to configure those mods.

Recommended Mods

Thermoo is the core of my other mods, Frostiful and Scorchful. If you want to see Thermoo in action, be sure to check it out!

License and Porting

Thermoo is licensed under LGPL-3.0. It is a mod developed primarily for the Fabric and Quilt mod loaders, with limited Neoforge support. Old versions of Minecraft will only be supported according to the LTS Policy. I have no plans to port to other loaders such as LexForge or Bukkit.

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.1.x
Fabric Quilt
1d ago 1
26.1.x
Neoforge
1d ago 1
26.1.x
Neoforge
1d ago 1
26.1.x
Fabric Quilt
1d ago 1
26.1.x
Neoforge
1d ago 1
26.1.x
Fabric Quilt
1d ago 1
26.1.x
Fabric Quilt
1d ago 1
26.1.x
Neoforge
1d ago 1
26.1.x
Fabric Quilt
1d ago 1
26.1.x
Fabric Quilt
1d ago 1
26.1.x
Fabric Quilt
1d ago 1
26.1
Fabric Quilt
1d ago 1
26.1-rc-1
Fabric Quilt
1d ago 1
26.1-pre-2
Fabric Quilt
1d ago 1
26.1-pre-2
Fabric Quilt
1d ago 1
1.21.1
Neoforge
1d ago 1
1.21.1
Neoforge
1d ago 1
26.1-snapshot-11
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.11
Fabric Quilt
1d ago 1
1.21.1
Neoforge
1d ago 1
1.21.1
Neoforge
1d ago 1
1.21.11
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.8
Fabric Quilt
1d ago 1
1.21.8
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.5
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.5
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.5
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.5
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.5
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.5
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.3
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.3
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.3
Fabric Quilt
1d ago 1
1.21.1
Fabric Quilt
1d ago 1
1.21.3
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.3
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.20.1
Fabric Quilt
1d ago 1
1.21.x
Fabric Quilt
1d ago 1
1.21
Fabric Quilt
1d ago 1
1.21
Fabric Quilt
1d ago 1
1.21
Fabric Quilt
1d ago 1
1.20.1
Fabric Quilt
1d ago 1
1.20.4
Fabric Quilt
1d ago 1
1.20.4
Fabric Quilt
1d ago 1
1.20.4
Fabric Quilt
1d ago 1
1.20.4
Fabric Quilt
1d ago 1
1.20.4
Fabric Quilt
1d ago 1
1.20.1
Fabric Quilt
1d ago 1
1.20.4
Fabric Quilt
1d ago 1
1.20.2
Fabric Quilt
1d ago 1
1.20.1
Fabric Quilt
1d ago 1
1.20.1
Fabric Quilt
1d ago 1
1.20.x
Fabric Quilt
1d ago 1
1.20.x
Fabric Quilt
1d ago 1
1.20.x
Fabric Quilt
1d ago 1
1.19.2
Fabric Quilt
1d ago 1
1.20.x
Fabric Quilt
1d ago 1
1.20.x
Fabric Quilt
1d ago 1
1.20.x
Fabric Quilt
1d ago 1
1.20.x
Fabric Quilt
1d ago 1
1.20.1
Fabric
1d ago 1
1.19.4
Fabric Quilt
1d ago 1
1.19.4
Fabric Quilt
1d ago 1
1.19.4
Fabric Quilt
1d ago 1
1.19.2
Fabric Quilt
1d ago 1
1.19.2
Fabric Quilt
1d ago 1
[10.1.5] Thermoo Fabric 10.1.5 by TheDeathlyCow on Oct 09, 2026
Download
  • Moved mod metadata files to common module
  • This should make classtweakers apply for users relying on the common module in Loom
[10.1.5] Thermoo NeoForge 10.1.5 by TheDeathlyCow on Oct 09, 2026
Download
  • Moved mod metadata files to common module
  • This should make classtweakers apply for users relying on the common module in Loom
[10.1.4] Thermoo NeoForge 10.1.4 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo 10.1.4

  • Publish MDG-compatible AT/Interface injections via NeoLoom
  • Updated Argentine Spanish translations

[10.1.4] Thermoo Fabric 10.1.4 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo 10.1.4

  • Publish MDG-compatible AT/Interface injections via NeoLoom
  • Updated Argentine Spanish translations

[10.1.3] Thermoo NeoForge 10.1.3 by TheDeathlyCow on Oct 09, 2026
Download
  • Fixed crash with Polymer patch

[10.1.3] Thermoo Fabric 10.1.3 by TheDeathlyCow on Oct 09, 2026
Download
  • Fixed crash with Polymer patch

[10.1.1] Thermoo Fabric 10.1.1 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo 10.1: Multiloaderification

Thermoo now fully supports both Fabric and Neoforge for Minecraft 26.1.x. The Neoforge version of Thermoo no longer requires Forgified Fabric API, but it does require the Yumi Minecraft Foundation library (which is bundled with the mod).

This release should also be fully compatible with 10.0.x. There are should be no breaking changes for users of this mod. However, as Thermoo now ships a common module, some things may change for developers consuming this mod.

Changelog:

  • Ported Thermoo to a multi-loader architecture based on Neo-Loom.
  • Thermoo now ships thermoo-common, thermoo-fabric, and thermoo-neoforge jars.
  • Added support for Neoforge.
  • Added a new ThermooDataComponentMapBuilder interface to support what the FabricDataComponentMapBuilder interface does, but in a loader-agnostic way.

10.1.1 changelog:
  • Fixed javadoc jar not generating any data
  • Fixed the patch list url and removed the option from the default config
[10.1.1] Thermoo NeoForge 10.1.1 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo 10.1: Multiloaderification

Thermoo now fully supports both Fabric and Neoforge for Minecraft 26.1.x. The Neoforge version of Thermoo no longer requires Forgified Fabric API, but it does require the Yumi Minecraft Foundation library (which is bundled with the mod).

This release should also be fully compatible with 10.0.x. There are should be no breaking changes for users of this mod. However, as Thermoo now ships a common module, some things may change for developers consuming this mod.

Changelog:

  • Ported Thermoo to a multi-loader architecture based on Neo-Loom.
  • Thermoo now ships thermoo-common, thermoo-fabric, and thermoo-neoforge jars.
  • Added support for Neoforge.
  • Added a new ThermooDataComponentMapBuilder interface to support what the FabricDataComponentMapBuilder interface does, but in a loader-agnostic way.

10.1.1 changelog:
  • Fixed javadoc jar not generating any data
  • Fixed the patch list url and removed the option from the default config
[10.0.1] Thermoo 10.0.1 by TheDeathlyCow on Oct 09, 2026
Download
  • Fixed attribute modifier temperature status effect removing itself wrongly
[10.0.0] Thermoo 10.0.0 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo 10.0.0 for Minecraft 26.1.x

The full release of Thermoo 10 for Minecraft 26.1.x. Thermoo 10 is now considered stable and no further breaking changes are planned. Documentation has now also been updated.

New from 10.0.0-beta.4:
  • Added a IS_COLD_ENOUGH_TO_SNOW event to the ThermooSeasonEvents class.
  • This provides a way to check if a seasons mod believes that an area should be snowy without relying on multiple redundant or inconsistent vanilla checks.
  • A convenience method to invoke this event has been added in ThermooSeason.
  • Introduced a more fool-proof way of registering attributes to entities to avoid invalid data from other mods prematurely cancelling createLivingAttributes.

Full changelog from 9.x:

  • Updated to Minecraft 26.1.x
  • Replaced API exposure of Fabric API with Yumi classes.
  • For example:
  • net.fabricmc.fabric.api.event.Event -> dev.yumi.commons.event.Event,
  • net.fabricmc.fabric.api.util.TriState -> dev.yumi.commons.TriState
  • Usage of Yumi events is essentially identical to Fabric API events, but it does not tie Thermoo's API to another Minecraft mod.
  • This is primarily intended to make a future non-FFAPI based Neoforge port of Thermoo possible.
  • I will not be making FFAPI-free ports of Frostiful.
  • Replaced the Temperature Effect API with the Temperature Status API ([#104](https://github.com/TheDeathlyCow/thermoo/pull/104)).
  • Added Temperature Status Tags ([#106](https://github.com/TheDeathlyCow/thermoo/pull/106)).
  • Replaced HeatingMode with a data-driven temperature sources API ([#109](https://github.com/TheDeathlyCow/thermoo/pull/109)).
  • Added F3 debug screen entries for temperature, soaking, and environment providers.
  • Added a new event: TemperatureStatusEvents#ALLOW_TEMPERATURE_STATUS that allows for finer grained control over temperature statuses than the enable/disable API.
  • The command /thermoo temperature status now permits enable or disable syntax as an alternative to set_enabled.
  • Removed previously deprecated usage of /thermoo environment relativehumidity, users must now use /thermoo environment relative_humidity.
  • Added version numbers to API packages.
  • For example:
  • com.github.thedeathlycow.thermoo.api.command -> com.github.thedeathlycow.thermoo.api.command.v1
  • com.github.thedeathlycow.thermoo.api.temperature.effect -> com.github.thedeathlycow.thermoo.api.temperature.status.v2
  • com.github.thedeathlycow.thermoo.api.environment.* -> com.github.thedeathlycow.thermoo.api.environment.v2.*
  • com.github.thedeathlycow.thermoo.api.item.* -> com.github.thedeathlycow.thermoo.api.item.v2.*
  • com.github.thedeathlycow.thermoo.api.season.* -> com.github.thedeathlycow.thermoo.api.season.v2.*
  • com.github.thedeathlycow.thermoo.api.util.* -> com.github.thedeathlycow.thermoo.api.util.v1.* (these classes may still be split up to more specific packages)
  • com.github.thedeathlycow.thermoo.api.client.* -> com.github.thedeathlycow.thermoo.api.client.v1.*
  • Removed command definition classes from API.
  • These are now implementation classes.
  • Renamed *ArgumentType classes to *Argument in the command API.
  • Moved the ThermooRegistries and ThermooRegistryKeys classes to a registry package in the core API
  • Moved the predicate package and ThermooAttributes class to a new entity API package: com.github.thedeathlycow.thermoo.api.entity.v1
  • Split the Item and EntityType tags in ThermooTags into classes in the entity API (ThermooEntityTypeTags) and item API (ThermooItemTags), respectively
  • Removed ThermooTags.
  • Usage of GuiGraphics in StatusBarOverlayRenderEvents was replaced with GuiGraphicsExtractor
  • Moved all classes previously under the util package to the core.v2 package.
  • Renamed TemperatureRecord#add(TemperatureRecord) to TemperatureRecord#shift(TemperatureRecord), and deprecated the add method.
  • Added convenience methods for creating instances of TemperatureChange to BuiltinTemperatureSources.
  • Refactored the TemperatureLootCondition and SoakedLootCondition classes to no longer be records.
  • Replaced the EnvironmentProviderType class and its usage with direct registration of MapCodecs.
  • Established a more uniform and consistent naming scheme for the builtin implementations of EnvironmentProvider. Classes were renamed as follows:
  • ConstantEnvironmentProvider -> ConstantProvider
  • ModifyEnvironmentProvider -> ModifyProvider
  • TemperatureShiftEnvironmentProvider -> ShiftTemperatureProvider
  • SetTemperatureFromPressure -> SetTemperatureFromPressureProvider
  • SetPressureFromAltitude -> SetPressureFromAltitudeProvider
  • TemperateSeasonEnvironmentProvider -> TemperateSeasonSelector
  • TropicalSeasonEnvironmentProvider -> TropicalSeasonSelector
  • LightThresholdLightProvider -> LightThresholdSelector
  • WeatherStateEnvironmentProvider -> WeatherStateSelector
  • BiomePrecipitationTypeEnvironmentProvider -> PrecipitationTypeSelector
  • Renamed Thermoo registry classes to match Mojmap:
  • ThermooRegistries -> ThermooBuiltInRegistries
  • ThermooRegistryKeys -> ThermooRegistries

## Data-driven Temperature Sources

  • Moved all classes and packages under com.github.thedeathlycow.thermoo.api.temperature.* EXCEPT for the status package to com.github.thedeathlycow.thermoo.api.core.v2.
  • Removed the HeatingMode and HeatingModes classes.
  • The method TemperatureAware#thermoo$addTemperature(int, HeatingMode) was converted to TemperatureAware#thermoo$addTemperature(int, TemperatureChange).
  • TemperatureChange now stores information about the context of individual temperature changes, including source, cause, direct cause, and position, and this data is now passed to various temperature change related events.
  • Added a new ThermooLevel interface that is injected onto all Level instances by mixin.
  • ThermooLevel provides access to a set of shared instances of TemperatureChange.
  • The ALLOW_X_UPDATE and ALLOW_X_CHANGE events in LivingEntityTemperatureTickEvents were removed and replaced with more general events in TemperatureChangeEvents.
  • The GET_X_CHANGE event in LivingEntityTemperatureTickEvents is now a source-key mapped event returned by getTemperatureChange that allows for the same sort of event to apply to any temperature source - except absolute and environment sources.
  • The /thermoo temperature (add|remove) sub-commands now provide more ability to specify context about a temperature change with at and by syntax, essentially to provide the data for the TemperatureChange class.

### Example Migration

A simple migration of adding temperature:

``diff
void foo(LivingEntity e) {
  • e.thermoo$addTemperature(10, HeatingModes.ACTIVE);
+ e.thermoo$addTemperature(10, e.level().thermoo$temperatureSources().active());
}
`

## Temperature Status API

The Temperature Effect API was rewritten and renamed to the Temperature Status API to better distinguish between the JSON files (statuses) and the effect types that actually do the work. The API largely does the same thing, but here is a summary of the changes:

  • Replaced the thermoo/temperature_effect registry with thermoo/temperature_status registry
  • The new status registry is now an actual registry, which supports tags, synchronisation, and Holders, and all that.
  • Replaced config objects with a direct effects list entry.
  • Moved type delegation to entries of the effects, rather than at the root of the registry object.
  • Merged the attribute_modifier and scaling_attribute_modifier into a single type, differentiated with a field.
  • Removed the empty and sequence types, they are no longer needed.
  • Added a way to define the application order of statuses with the thermoo:application_order temperature status tag.

This also removed some functionality:

  • Temperature statuses can no longer be "hot reloaded"; you must restart the server to reload them.
  • There is no longer a loading_priority field. The intended functionality behind this was to allow Thermoo Patches to override the effects from Frostiful/Scorchful with a check for Origin. This was superseded by the enable API. It is not known if anyone else used this for any particular functionality that was actually necessary, so it is being removed.

### Example migration

Old effect

`json
{
"type": "thermoo:damage",
"temperature_scale_range": {
"max": -0.99
},
"config": {
"amount": 1,
"damage_interval": 20,
"damage_type": "minecraft:freeze"
}
}
`

New status

`json
{
"temperature_scale_range": {
"max": -0.99
},
"interval": 20,
"effects": [
{
"type": "thermoo:damage",
"amount": 1,
"damage_type": "minecraft:freeze"
}
]
}
``

# Thermoo 10.0.0 Beta 3 for Minecraft 26.1

Another beta build for Thermoo 10 for Minecraft 26.1, this time targeting the full release. While this is targeting the release version, **further breaking changes are still possible.**. Documentation has not yet been updated either, but it will be soon.

## Beta 4

  • Fixed Yumi libraries not loading correctly, causing a start-up crash.

## Beta 3

  • Updated to release 26.1
  • Updated Polymer integration
  • Breaking change: Renamed Thermoo registry classes to match Mojmap:
  • ThermooRegistries -> ThermooBuiltInRegistries
  • ThermooRegistryKeys -> ThermooRegistries

## Beta 2

  • Replaced usage of net.fabricmc.fabric.api.util.TriState in the public API with dev.yumi.commons.TriState
  • Added a new event: TemperatureStatusEvents#ALLOW_TEMPERATURE_STATUS that allows for finer grained control over temperature statuses than the enable/disable API.
  • Added F3 debug screen entries for temperature and soaking.
  • The command /thermoo temperature status now permits enable or disable syntax as an alternative to set_enabled.
  • Removed previously deprecated usage of /thermoo environment relativehumidity, users must now use /thermoo environment relative_humidity.

## Beta 1

  • Bumped the version of the core package to v2 to align with the general vibe of changes 26.1 is introducing.
  • Moved all classes previously under the util.v1 package to the core.v2 package.
  • Renamed TemperatureRecord#add(TemperatureRecord) to TemperatureRecord#shift(TemperatureRecord), and deprecated the add method.
  • Added convenience methods for creating instances of TemperatureChange to BuiltinTemperatureSources.
  • Replaced API exposure of Fabric API with Yumi Commons by LambdAurora.
  • Replaced all usage of Fabric API event classes (net.fabricmc.fabric.api.event.Event) with Yumi event classes (dev.yumi.commons.event.Event).
  • Usage of Yumi events is essentially identical to Fabric API events, but it does not tie Thermoo's API to another Minecraft mod.
  • This is primarily intended to make a future non-FFAPI based Neoforge port of Thermoo possible.
  • I will not be making FFAPI-free ports of Frostiful.
  • Refactored the TemperatureLootCondition and SoakedLootCondition classes to no longer be records.
  • Replaced the EnvironmentProviderType class and its usage with direct registration of MapCodecs.
  • Established a more uniform and consistent naming scheme for the builtin implementations of EnvironmentProvider. Classes were renamed as follows:
  • ConstantEnvironmentProvider -> ConstantProvider
  • ModifyEnvironmentProvider -> ModifyProvider
  • TemperatureShiftEnvironmentProvider -> ShiftTemperatureProvider
  • SetTemperatureFromPressure -> SetTemperatureFromPressureProvider
  • SetPressureFromAltitude -> SetPressureFromAltitudeProvider
  • TemperateSeasonEnvironmentProvider -> TemperateSeasonSelector
  • TropicalSeasonEnvironmentProvider -> TropicalSeasonSelector
  • LightThresholdLightProvider -> LightThresholdSelector
  • WeatherStateEnvironmentProvider -> WeatherStateSelector
  • BiomePrecipitationTypeEnvironmentProvider -> PrecipitationTypeSelector

## Alpha 2

  • Replaced HeatingMode with a data-driven temperature sources API ([#109](https://github.com/TheDeathlyCow/thermoo/pull/109)).
  • Moved all remaining API packages to versioned packages, as follows:
  • com.github.thedeathlycow.thermoo.api.environment.* -> com.github.thedeathlycow.thermoo.api.environment.v2.*
  • com.github.thedeathlycow.thermoo.api.item.* -> com.github.thedeathlycow.thermoo.api.item.v2.*
  • com.github.thedeathlycow.thermoo.api.season.* -> com.github.thedeathlycow.thermoo.api.season.v2.*
  • com.github.thedeathlycow.thermoo.api.util.* -> com.github.thedeathlycow.thermoo.api.util.v1.* (these classes may still be split up to more specific packages)
  • com.github.thedeathlycow.thermoo.api.client.* -> com.github.thedeathlycow.thermoo.api.client.v1.*
  • Moved the ThermooRegistries and ThermooRegistryKeys classes to a registry package in the core API
  • Moved the predicate package and ThermooAttributes class to a new entity API package: com.github.thedeathlycow.thermoo.api.entity.v1
  • Split the Item and EntityType tags in ThermooTags into classes in the entity API (ThermooEntityTypeTags) and item API (ThermooItemTags), respectively
  • Removed ThermooTags.
  • Usage of GuiGraphics in StatusBarOverlayRenderEvents was replaced with GuiGraphicsExtractor

## Data-driven Temperature Sources

  • Moved all classes and packages under com.github.thedeathlycow.thermoo.api.temperature.* EXCEPT for the status package to com.github.thedeathlycow.thermoo.api.core.v2.
  • Removed the HeatingMode and HeatingModes classes.
  • The method TemperatureAware#thermoo$addTemperature(int, HeatingMode) was converted to TemperatureAware#thermoo$addTemperature(int, TemperatureChange).
  • TemperatureChange now stores information about the context of individual temperature changes, including source, cause, direct cause, and position, and this data is now passed to various temperature change related events.
  • Added a new ThermooLevel interface that is injected onto all Level instances by mixin.
  • ThermooLevel provides access to a set of shared instances of TemperatureChange.
  • The ALLOW_X_UPDATE and ALLOW_X_CHANGE events in LivingEntityTemperatureTickEvents were removed and replaced with more general events in TemperatureChangeEvents.
  • The GET_X_CHANGE event in LivingEntityTemperatureTickEvents is now a source-key mapped event returned by getTemperatureChange that allows for the same sort of event to apply to any temperature source - except absolute and environment sources.
  • The /thermoo temperature (add|remove) sub-commands now provide more ability to specify context about a temperature change with at and by syntax, essentially to provide the data for the TemperatureChange class.

## Alpha 1

  • Begun adding version numbers to API packages.
  • So far this has impacted the following packages:
  • com.github.thedeathlycow.thermoo.api.command -> com.github.thedeathlycow.thermoo.api.command.v1
  • com.github.thedeathlycow.thermoo.api.temperature.effect -> com.github.thedeathlycow.thermoo.api.temperature.status.v2
  • More packages will be moved before the full 26.1 release.
  • Removed command definition classes from API.
  • These are now implementation classes.
  • Renamed *ArgumentType classes to *Argument in the command API.
  • Replaced the Temperature Effect API with the Temperature Status API ([#104](https://github.com/TheDeathlyCow/thermoo/pull/104)).
  • Added Temperature Status Tags ([#106](https://github.com/TheDeathlyCow/thermoo/pull/106)).

### Example Migration

A simple migration of adding temperature:

``diff
void foo(LivingEntity e) {
  • e.thermoo$addTemperature(10, HeatingModes.ACTIVE);
+ e.thermoo$addTemperature(10, e.level().thermoo$temperatureSources().active());
}
`

## Temperature Status API

The Temperature Effect API was rewritten and renamed to the Temperature Status API to better distinguish between the JSON files (statuses) and the effect types that actually do the work. The API largely does the same thing, but here is a summary of the changes:

  • Replaced the thermoo/temperature_effect registry with thermoo/temperature_status registry
  • The new status registry is now an actual registry, which supports tags, synchronisation, and Holders, and all that.
  • Replaced config objects with a direct effects list entry.
  • Moved type delegation to entries of the effects, rather than at the root of the registry object.
  • Merged the attribute_modifier and scaling_attribute_modifier into a single type, differentiated with a field.
  • Removed the empty and sequence types, they are no longer needed.
  • Added a way to define the application order of statuses with the thermoo:application_order temperature status tag.

This also removed some functionality:

  • Temperature statuses can no longer be "hot reloaded"; you must restart the server to reload them.
  • There is no longer a loading_priority field. The intended functionality behind this was to allow Thermoo Patches to override the effects from Frostiful/Scorchful with a check for Origin. This was superseded by the enable API. It is not known if anyone else used this for any particular functionality that was actually necessary, so it is being removed.

### Example migration

Old effect

`json
{
"type": "thermoo:damage",
"temperature_scale_range": {
"max": -0.99
},
"config": {
"amount": 1,
"damage_interval": 20,
"damage_type": "minecraft:freeze"
}
}
`

New status

`json
{
"temperature_scale_range": {
"max": -0.99
},
"interval": 20,
"effects": [
{
"type": "thermoo:damage",
"amount": 1,
"damage_type": "minecraft:freeze"
}
]
}
``

# Thermoo 10.0.0 Beta 3 for Minecraft 26.1

Another beta build for Thermoo 10 for Minecraft 26.1, this time targeting the full release. While this is targeting the release version, **further breaking changes are still possible.**. Documentation has not yet been updated either, but it will be soon.

## Beta 3

  • Updated to release 26.1
  • Updated Polymer integration
  • Breaking change: Renamed Thermoo registry classes to match Mojmap:
  • ThermooRegistries -> ThermooBuiltInRegistries
  • ThermooRegistryKeys -> ThermooRegistries

## Beta 2

  • Replaced usage of net.fabricmc.fabric.api.util.TriState in the public API with dev.yumi.commons.TriState
  • Added a new event: TemperatureStatusEvents#ALLOW_TEMPERATURE_STATUS that allows for finer grained control over temperature statuses than the enable/disable API.
  • Added F3 debug screen entries for temperature and soaking.
  • The command /thermoo temperature status now permits enable or disable syntax as an alternative to set_enabled.
  • Removed previously deprecated usage of /thermoo environment relativehumidity, users must now use /thermoo environment relative_humidity.

## Beta 1

  • Bumped the version of the core package to v2 to align with the general vibe of changes 26.1 is introducing.
  • Moved all classes previously under the util.v1 package to the core.v2 package.
  • Renamed TemperatureRecord#add(TemperatureRecord) to TemperatureRecord#shift(TemperatureRecord), and deprecated the add method.
  • Added convenience methods for creating instances of TemperatureChange to BuiltinTemperatureSources.
  • Replaced API exposure of Fabric API with Yumi Commons by LambdAurora.
  • Replaced all usage of Fabric API event classes (net.fabricmc.fabric.api.event.Event) with Yumi event classes (dev.yumi.commons.event.Event).
  • Usage of Yumi events is essentially identical to Fabric API events, but it does not tie Thermoo's API to another Minecraft mod.
  • This is primarily intended to make a future non-FFAPI based Neoforge port of Thermoo possible.
  • I will not be making FFAPI-free ports of Frostiful.
  • Refactored the TemperatureLootCondition and SoakedLootCondition classes to no longer be records.
  • Replaced the EnvironmentProviderType class and its usage with direct registration of MapCodecs.
  • Established a more uniform and consistent naming scheme for the builtin implementations of EnvironmentProvider. Classes were renamed as follows:
  • ConstantEnvironmentProvider -> ConstantProvider
  • ModifyEnvironmentProvider -> ModifyProvider
  • TemperatureShiftEnvironmentProvider -> ShiftTemperatureProvider
  • SetTemperatureFromPressure -> SetTemperatureFromPressureProvider
  • SetPressureFromAltitude -> SetPressureFromAltitudeProvider
  • TemperateSeasonEnvironmentProvider -> TemperateSeasonSelector
  • TropicalSeasonEnvironmentProvider -> TropicalSeasonSelector
  • LightThresholdLightProvider -> LightThresholdSelector
  • WeatherStateEnvironmentProvider -> WeatherStateSelector
  • BiomePrecipitationTypeEnvironmentProvider -> PrecipitationTypeSelector

## Alpha 2

  • Replaced HeatingMode with a data-driven temperature sources API ([#109](https://github.com/TheDeathlyCow/thermoo/pull/109)).
  • Moved all remaining API packages to versioned packages, as follows:
  • com.github.thedeathlycow.thermoo.api.environment.* -> com.github.thedeathlycow.thermoo.api.environment.v2.*
  • com.github.thedeathlycow.thermoo.api.item.* -> com.github.thedeathlycow.thermoo.api.item.v2.*
  • com.github.thedeathlycow.thermoo.api.season.* -> com.github.thedeathlycow.thermoo.api.season.v2.*
  • com.github.thedeathlycow.thermoo.api.util.* -> com.github.thedeathlycow.thermoo.api.util.v1.* (these classes may still be split up to more specific packages)
  • com.github.thedeathlycow.thermoo.api.client.* -> com.github.thedeathlycow.thermoo.api.client.v1.*
  • Moved the ThermooRegistries and ThermooRegistryKeys classes to a registry package in the core API
  • Moved the predicate package and ThermooAttributes class to a new entity API package: com.github.thedeathlycow.thermoo.api.entity.v1
  • Split the Item and EntityType tags in ThermooTags into classes in the entity API (ThermooEntityTypeTags) and item API (ThermooItemTags), respectively
  • Removed ThermooTags.
  • Usage of GuiGraphics in StatusBarOverlayRenderEvents was replaced with GuiGraphicsExtractor

## Data-driven Temperature Sources

  • Moved all classes and packages under com.github.thedeathlycow.thermoo.api.temperature.* EXCEPT for the status package to com.github.thedeathlycow.thermoo.api.core.v2.
  • Removed the HeatingMode and HeatingModes classes.
  • The method TemperatureAware#thermoo$addTemperature(int, HeatingMode) was converted to TemperatureAware#thermoo$addTemperature(int, TemperatureChange).
  • TemperatureChange now stores information about the context of individual temperature changes, including source, cause, direct cause, and position, and this data is now passed to various temperature change related events.
  • Added a new ThermooLevel interface that is injected onto all Level instances by mixin.
  • ThermooLevel provides access to a set of shared instances of TemperatureChange.
  • The ALLOW_X_UPDATE and ALLOW_X_CHANGE events in LivingEntityTemperatureTickEvents were removed and replaced with more general events in TemperatureChangeEvents.
  • The GET_X_CHANGE event in LivingEntityTemperatureTickEvents is now a source-key mapped event returned by getTemperatureChange that allows for the same sort of event to apply to any temperature source - except absolute and environment sources.
  • The /thermoo temperature (add|remove) sub-commands now provide more ability to specify context about a temperature change with at and by syntax, essentially to provide the data for the TemperatureChange class.

## Alpha 1

  • Begun adding version numbers to API packages.
  • So far this has impacted the following packages:
  • com.github.thedeathlycow.thermoo.api.command -> com.github.thedeathlycow.thermoo.api.command.v1
  • com.github.thedeathlycow.thermoo.api.temperature.effect -> com.github.thedeathlycow.thermoo.api.temperature.status.v2
  • More packages will be moved before the full 26.1 release.
  • Removed command definition classes from API.
  • These are now implementation classes.
  • Renamed *ArgumentType classes to *Argument in the command API.
  • Replaced the Temperature Effect API with the Temperature Status API ([#104](https://github.com/TheDeathlyCow/thermoo/pull/104)).
  • Added Temperature Status Tags ([#106](https://github.com/TheDeathlyCow/thermoo/pull/106)).

### Example Migration

A simple migration of adding temperature:

``diff
void foo(LivingEntity e) {
  • e.thermoo$addTemperature(10, HeatingModes.ACTIVE);
+ e.thermoo$addTemperature(10, e.level().thermoo$temperatureSources().active());
}
`

## Temperature Status API

The Temperature Effect API was rewritten and renamed to the Temperature Status API to better distinguish between the JSON files (statuses) and the effect types that actually do the work. The API largely does the same thing, but here is a summary of the changes:

  • Replaced the thermoo/temperature_effect registry with thermoo/temperature_status registry
  • The new status registry is now an actual registry, which supports tags, synchronisation, and Holders, and all that.
  • Replaced config objects with a direct effects list entry.
  • Moved type delegation to entries of the effects, rather than at the root of the registry object.
  • Merged the attribute_modifier and scaling_attribute_modifier into a single type, differentiated with a field.
  • Removed the empty and sequence types, they are no longer needed.
  • Added a way to define the application order of statuses with the thermoo:application_order temperature status tag.

This also removed some functionality:

  • Temperature statuses can no longer be "hot reloaded"; you must restart the server to reload them.
  • There is no longer a loading_priority field. The intended functionality behind this was to allow Thermoo Patches to override the effects from Frostiful/Scorchful with a check for Origin. This was superseded by the enable API. It is not known if anyone else used this for any particular functionality that was actually necessary, so it is being removed.

### Example migration

Old effect

`json
{
"type": "thermoo:damage",
"temperature_scale_range": {
"max": -0.99
},
"config": {
"amount": 1,
"damage_interval": 20,
"damage_type": "minecraft:freeze"
}
}
`

New status

`json
{
"temperature_scale_range": {
"max": -0.99
},
"interval": 20,
"effects": [
{
"type": "thermoo:damage",
"amount": 1,
"damage_type": "minecraft:freeze"
}
]
}
``

# Thermoo 10.0.0 Beta 1 for Minecraft 26.1-pre-2

A beta build for Thermoo 10 for Minecraft 26.1. At this time, I have implemented all the features I plan to release for 26.1. However, **further breaking changes are still possible.** Because of this, **the documentation has also not yet been updated!** The Thermoo Docs will be fully updated when the API changes are finalized for 26.1.

## Beta 2

  • Replaced usage of net.fabricmc.fabric.api.util.TriState in the public API with dev.yumi.commons.TriState
  • Added a new event: TemperatureStatusEvents#ALLOW_TEMPERATURE_STATUS that allows for finer grained control over temperature statuses than the enable/disable API.
  • Added F3 debug screen entries for temperature and soaking.
  • The command /thermoo temperature status now permits enable or disable syntax as an alternative to set_enabled.
  • Removed previously deprecated usage of /thermoo environment relativehumidity, users must now use /thermoo environment relative_humidity.

## Beta 1

  • Bumped the version of the core package to v2 to align with the general vibe of changes 26.1 is introducing.
  • Moved all classes previously under the util.v1 package to the core.v2 package.
  • Renamed TemperatureRecord#add(TemperatureRecord) to TemperatureRecord#shift(TemperatureRecord), and deprecated the add method.
  • Added convenience methods for creating instances of TemperatureChange to BuiltinTemperatureSources.
  • Replaced API exposure of Fabric API with Yumi Commons by LambdAurora.
  • Replaced all usage of Fabric API event classes (net.fabricmc.fabric.api.event.Event) with Yumi event classes (dev.yumi.commons.event.Event).
  • Usage of Yumi events is essentially identical to Fabric API events, but it does not tie Thermoo's API to another Minecraft mod.
  • This is primarily intended to make a future non-FFAPI based Neoforge port of Thermoo possible.
  • I will not be making FFAPI-free ports of Frostiful.
  • Refactored the TemperatureLootCondition and SoakedLootCondition classes to no longer be records.
  • Replaced the EnvironmentProviderType class and its usage with direct registration of MapCodecs.
  • Established a more uniform and consistent naming scheme for the builtin implementations of EnvironmentProvider. Classes were renamed as follows:
  • ConstantEnvironmentProvider -> ConstantProvider
  • ModifyEnvironmentProvider -> ModifyProvider
  • TemperatureShiftEnvironmentProvider -> ShiftTemperatureProvider
  • SetTemperatureFromPressure -> SetTemperatureFromPressureProvider
  • SetPressureFromAltitude -> SetPressureFromAltitudeProvider
  • TemperateSeasonEnvironmentProvider -> TemperateSeasonSelector
  • TropicalSeasonEnvironmentProvider -> TropicalSeasonSelector
  • LightThresholdLightProvider -> LightThresholdSelector
  • WeatherStateEnvironmentProvider -> WeatherStateSelector
  • BiomePrecipitationTypeEnvironmentProvider -> PrecipitationTypeSelector

## Alpha 2

  • Replaced HeatingMode with a data-driven temperature sources API ([#109](https://github.com/TheDeathlyCow/thermoo/pull/109)).
  • Moved all remaining API packages to versioned packages, as follows:
  • com.github.thedeathlycow.thermoo.api.environment.* -> com.github.thedeathlycow.thermoo.api.environment.v2.*
  • com.github.thedeathlycow.thermoo.api.item.* -> com.github.thedeathlycow.thermoo.api.item.v2.*
  • com.github.thedeathlycow.thermoo.api.season.* -> com.github.thedeathlycow.thermoo.api.season.v2.*
  • com.github.thedeathlycow.thermoo.api.util.* -> com.github.thedeathlycow.thermoo.api.util.v1.* (these classes may still be split up to more specific packages)
  • com.github.thedeathlycow.thermoo.api.client.* -> com.github.thedeathlycow.thermoo.api.client.v1.*
  • Moved the ThermooRegistries and ThermooRegistryKeys classes to a registry package in the core API
  • Moved the predicate package and ThermooAttributes class to a new entity API package: com.github.thedeathlycow.thermoo.api.entity.v1
  • Split the Item and EntityType tags in ThermooTags into classes in the entity API (ThermooEntityTypeTags) and item API (ThermooItemTags), respectively
  • Removed ThermooTags.
  • Usage of GuiGraphics in StatusBarOverlayRenderEvents was replaced with GuiGraphicsExtractor

## Data-driven Temperature Sources

  • Moved all classes and packages under com.github.thedeathlycow.thermoo.api.temperature.* EXCEPT for the status package to com.github.thedeathlycow.thermoo.api.core.v2.
  • Removed the HeatingMode and HeatingModes classes.
  • The method TemperatureAware#thermoo$addTemperature(int, HeatingMode) was converted to TemperatureAware#thermoo$addTemperature(int, TemperatureChange).
  • TemperatureChange now stores information about the context of individual temperature changes, including source, cause, direct cause, and position, and this data is now passed to various temperature change related events.
  • Added a new ThermooLevel interface that is injected onto all Level instances by mixin.
  • ThermooLevel provides access to a set of shared instances of TemperatureChange.
  • The ALLOW_X_UPDATE and ALLOW_X_CHANGE events in LivingEntityTemperatureTickEvents were removed and replaced with more general events in TemperatureChangeEvents.
  • The GET_X_CHANGE event in LivingEntityTemperatureTickEvents is now a source-key mapped event returned by getTemperatureChange that allows for the same sort of event to apply to any temperature source - except absolute and environment sources.
  • The /thermoo temperature (add|remove) sub-commands now provide more ability to specify context about a temperature change with at and by syntax, essentially to provide the data for the TemperatureChange class.

## Alpha 1

  • Begun adding version numbers to API packages.
  • So far this has impacted the following packages:
  • com.github.thedeathlycow.thermoo.api.command -> com.github.thedeathlycow.thermoo.api.command.v1
  • com.github.thedeathlycow.thermoo.api.temperature.effect -> com.github.thedeathlycow.thermoo.api.temperature.status.v2
  • More packages will be moved before the full 26.1 release.
  • Removed command definition classes from API.
  • These are now implementation classes.
  • Renamed *ArgumentType classes to *Argument in the command API.
  • Replaced the Temperature Effect API with the Temperature Status API ([#104](https://github.com/TheDeathlyCow/thermoo/pull/104)).
  • Added Temperature Status Tags ([#106](https://github.com/TheDeathlyCow/thermoo/pull/106)).

### Example Migration

A simple migration of adding temperature:

``diff
void foo(LivingEntity e) {
  • e.thermoo$addTemperature(10, HeatingModes.ACTIVE);
+ e.thermoo$addTemperature(10, e.level().thermoo$temperatureSources().active());
}
`

## Temperature Status API

The Temperature Effect API was rewritten and renamed to the Temperature Status API to better distinguish between the JSON files (statuses) and the effect types that actually do the work. The API largely does the same thing, but here is a summary of the changes:

  • Replaced the thermoo/temperature_effect registry with thermoo/temperature_status registry
  • The new status registry is now an actual registry, which supports tags, synchronisation, and Holders, and all that.
  • Replaced config objects with a direct effects list entry.
  • Moved type delegation to entries of the effects, rather than at the root of the registry object.
  • Merged the attribute_modifier and scaling_attribute_modifier into a single type, differentiated with a field.
  • Removed the empty and sequence types, they are no longer needed.
  • Added a way to define the application order of statuses with the thermoo:application_order temperature status tag.

This also removed some functionality:

  • Temperature statuses can no longer be "hot reloaded"; you must restart the server to reload them.
  • There is no longer a loading_priority field. The intended functionality behind this was to allow Thermoo Patches to override the effects from Frostiful/Scorchful with a check for Origin. This was superseded by the enable API. It is not known if anyone else used this for any particular functionality that was actually necessary, so it is being removed.

### Example migration

Old effect

`json
{
"type": "thermoo:damage",
"temperature_scale_range": {
"max": -0.99
},
"config": {
"amount": 1,
"damage_interval": 20,
"damage_type": "minecraft:freeze"
}
}
`

New status

`json
{
"temperature_scale_range": {
"max": -0.99
},
"interval": 20,
"effects": [
{
"type": "thermoo:damage",
"amount": 1,
"damage_type": "minecraft:freeze"
}
]
}
``

# Thermoo 10.0.0 Beta 1 for Minecraft 26.1-pre-2

A beta build for Thermoo 10 for Minecraft 26.1. At this time, I have implemented all the features I plan to release for 26.1. However, **further breaking changes are still possible.** Because of this, **the documentation has also not yet been updated!** The Thermoo Docs will be fully updated when the API changes are finalized for 26.1.

## Beta 1

  • Bumped the version of the core package to v2 to align with the general vibe of changes 26.1 is introducing.
  • Moved all classes previously under the util.v1 package to the core.v2 package.
  • Renamed TemperatureRecord#add(TemperatureRecord) to TemperatureRecord#shift(TemperatureRecord), and deprecated the add method.
  • Added convenience methods for creating instances of TemperatureChange to BuiltinTemperatureSources.
  • Replaced API exposure of Fabric API with Yumi Commons by LambdAurora.
  • Replaced all usage of Fabric API event classes (net.fabricmc.fabric.api.event.Event) with Yumi event classes (dev.yumi.commons.event.Event).
  • Usage of Yumi events is essentially identical to Fabric API events, but it does not tie Thermoo's API to another Minecraft mod.
  • This is primarily intended to make a future non-FFAPI based Neoforge port of Thermoo possible.
  • I will not be making FFAPI-free ports of Frostiful.
  • Refactored the TemperatureLootCondition and SoakedLootCondition classes to no longer be records.
  • Replaced the EnvironmentProviderType class and its usage with direct registration of MapCodecs.
  • Established a more uniform and consistent naming scheme for the builtin implementations of EnvironmentProvider. Classes were renamed as follows:
  • ConstantEnvironmentProvider -> ConstantProvider
  • ModifyEnvironmentProvider -> ModifyProvider
  • TemperatureShiftEnvironmentProvider -> ShiftTemperatureProvider
  • SetTemperatureFromPressure -> SetTemperatureFromPressureProvider
  • SetPressureFromAltitude -> SetPressureFromAltitudeProvider
  • TemperateSeasonEnvironmentProvider -> TemperateSeasonSelector
  • TropicalSeasonEnvironmentProvider -> TropicalSeasonSelector
  • LightThresholdLightProvider -> LightThresholdSelector
  • WeatherStateEnvironmentProvider -> WeatherStateSelector
  • BiomePrecipitationTypeEnvironmentProvider -> PrecipitationTypeSelector

## Alpha 2

  • Replaced HeatingMode with a data-driven temperature sources API ([#109](https://github.com/TheDeathlyCow/thermoo/pull/109)).
  • Moved all remaining API packages to versioned packages, as follows:
  • com.github.thedeathlycow.thermoo.api.environment.* -> com.github.thedeathlycow.thermoo.api.environment.v2.*
  • com.github.thedeathlycow.thermoo.api.item.* -> com.github.thedeathlycow.thermoo.api.item.v2.*
  • com.github.thedeathlycow.thermoo.api.season.* -> com.github.thedeathlycow.thermoo.api.season.v2.*
  • com.github.thedeathlycow.thermoo.api.util.* -> com.github.thedeathlycow.thermoo.api.util.v1.* (these classes may still be split up to more specific packages)
  • com.github.thedeathlycow.thermoo.api.client.* -> com.github.thedeathlycow.thermoo.api.client.v1.*
  • Moved the ThermooRegistries and ThermooRegistryKeys classes to a registry package in the core API
  • Moved the predicate package and ThermooAttributes class to a new entity API package: com.github.thedeathlycow.thermoo.api.entity.v1
  • Split the Item and EntityType tags in ThermooTags into classes in the entity API (ThermooEntityTypeTags) and item API (ThermooItemTags), respectively
  • Removed ThermooTags.
  • Usage of GuiGraphics in StatusBarOverlayRenderEvents was replaced with GuiGraphicsExtractor

## Data-driven Temperature Sources

  • Moved all classes and packages under com.github.thedeathlycow.thermoo.api.temperature.* EXCEPT for the status package to com.github.thedeathlycow.thermoo.api.core.v2.
  • Removed the HeatingMode and HeatingModes classes.
  • The method TemperatureAware#thermoo$addTemperature(int, HeatingMode) was converted to TemperatureAware#thermoo$addTemperature(int, TemperatureChange).
  • TemperatureChange now stores information about the context of individual temperature changes, including source, cause, direct cause, and position, and this data is now passed to various temperature change related events.
  • Added a new ThermooLevel interface that is injected onto all Level instances by mixin.
  • ThermooLevel provides access to a set of shared instances of TemperatureChange.
  • The ALLOW_X_UPDATE and ALLOW_X_CHANGE events in LivingEntityTemperatureTickEvents were removed and replaced with more general events in TemperatureChangeEvents.
  • The GET_X_CHANGE event in LivingEntityTemperatureTickEvents is now a source-key mapped event returned by getTemperatureChange that allows for the same sort of event to apply to any temperature source - except absolute and environment sources.
  • The /thermoo temperature (add|remove) sub-commands now provide more ability to specify context about a temperature change with at and by syntax, essentially to provide the data for the TemperatureChange class.

## Alpha 1

  • Begun adding version numbers to API packages.
  • So far this has impacted the following packages:
  • com.github.thedeathlycow.thermoo.api.command -> com.github.thedeathlycow.thermoo.api.command.v1
  • com.github.thedeathlycow.thermoo.api.temperature.effect -> com.github.thedeathlycow.thermoo.api.temperature.status.v2
  • More packages will be moved before the full 26.1 release.
  • Removed command definition classes from API.
  • These are now implementation classes.
  • Renamed *ArgumentType classes to *Argument in the command API.
  • Replaced the Temperature Effect API with the Temperature Status API ([#104](https://github.com/TheDeathlyCow/thermoo/pull/104)).
  • Added Temperature Status Tags ([#106](https://github.com/TheDeathlyCow/thermoo/pull/106)).

### Example Migration

A simple migration of adding temperature:

``diff
void foo(LivingEntity e) {
  • e.thermoo$addTemperature(10, HeatingModes.ACTIVE);
+ e.thermoo$addTemperature(10, e.level().thermoo$temperatureSources().active());
}
`

## Temperature Status API

The Temperature Effect API was rewritten and renamed to the Temperature Status API to better distinguish between the JSON files (statuses) and the effect types that actually do the work. The API largely does the same thing, but here is a summary of the changes:

  • Replaced the thermoo/temperature_effect registry with thermoo/temperature_status registry
  • The new status registry is now an actual registry, which supports tags, synchronisation, and Holders, and all that.
  • Replaced config objects with a direct effects list entry.
  • Moved type delegation to entries of the effects, rather than at the root of the registry object.
  • Merged the attribute_modifier and scaling_attribute_modifier into a single type, differentiated with a field.
  • Removed the empty and sequence types, they are no longer needed.
  • Added a way to define the application order of statuses with the thermoo:application_order temperature status tag.

This also removed some functionality:

  • Temperature statuses can no longer be "hot reloaded"; you must restart the server to reload them.
  • There is no longer a loading_priority field. The intended functionality behind this was to allow Thermoo Patches to override the effects from Frostiful/Scorchful with a check for Origin. This was superseded by the enable API. It is not known if anyone else used this for any particular functionality that was actually necessary, so it is being removed.

### Example migration

Old effect

`json
{
"type": "thermoo:damage",
"temperature_scale_range": {
"max": -0.99
},
"config": {
"amount": 1,
"damage_interval": 20,
"damage_type": "minecraft:freeze"
}
}
`

New status

`json
{
"temperature_scale_range": {
"max": -0.99
},
"interval": 20,
"effects": [
{
"type": "thermoo:damage",
"amount": 1,
"damage_type": "minecraft:freeze"
}
]
}
``

# Thermoo 10.0.0 Alpha 2 for Minecraft 26.1-snapshot-11

A second pre-release build for Thermoo 10 for Minecraft 26.1. This is an alpha version, and the API remains extremely unstable as **further breaking changes are planned.** Because of this, **the documentation has also not yet been updated!** The Thermoo Docs will be fully updated when the API changes are finalized for 26.1.

This release is primarily intended for me to get a head start on updating Frostiful and Scorchful, and also to open Thermoo up to public bugtesting from whomever wants to do that.

## Alpha 1

  • Begun adding version numbers to API packages.
  • So far this has impacted the following packages:
  • com.github.thedeathlycow.thermoo.api.command -> com.github.thedeathlycow.thermoo.api.command.v1
  • com.github.thedeathlycow.thermoo.api.temperature.effect -> com.github.thedeathlycow.thermoo.api.temperature.status.v2
  • More packages will be moved before the full 26.1 release.
  • Removed command definition classes from API.
  • These are now implementation classes.
  • Renamed *ArgumentType classes to *Argument in the command API.
  • Replaced the Temperature Effect API with the Temperature Status API ([#104](https://github.com/TheDeathlyCow/thermoo/pull/104)).
  • Added Temperature Status Tags ([#106](https://github.com/TheDeathlyCow/thermoo/pull/106)).

## Alpha 2

  • Replaced HeatingMode with a data-driven temperature sources API ([#109](https://github.com/TheDeathlyCow/thermoo/pull/109)).
  • Moved all remaining API packages to versioned packages, as follows:
  • com.github.thedeathlycow.thermoo.api.environment.* -> com.github.thedeathlycow.thermoo.api.environment.v2.*
  • com.github.thedeathlycow.thermoo.api.item.* -> com.github.thedeathlycow.thermoo.api.item.v2.*
  • com.github.thedeathlycow.thermoo.api.season.* -> com.github.thedeathlycow.thermoo.api.season.v2.*
  • com.github.thedeathlycow.thermoo.api.util.* -> com.github.thedeathlycow.thermoo.api.util.v1.* (these classes may still be split up to more specific packages)
  • com.github.thedeathlycow.thermoo.api.client.* -> com.github.thedeathlycow.thermoo.api.client.v1.*
  • Moved the ThermooRegistries and ThermooRegistryKeys classes to a registry package in the core API
  • Moved the predicate package and ThermooAttributes class to a new entity API package: com.github.thedeathlycow.thermoo.api.entity.v1
  • Split the Item and EntityType tags in ThermooTags into classes in the entity API (ThermooEntityTypeTags) and item API (ThermooItemTags), respectively
  • Removed ThermooTags.
  • Usage of GuiGraphics in StatusBarOverlayRenderEvents was replaced with GuiGraphicsExtractor

## Data-driven Temperature Sources

  • Moved all classes and packages under com.github.thedeathlycow.thermoo.api.temperature.* EXCEPT for the status package to com.github.thedeathlycow.thermoo.api.core.v1.
  • Removed the HeatingMode and HeatingModes classes.
  • The method TemperatureAware#thermoo$addTemperature(int, HeatingMode) was converted to TemperatureAware#thermoo$addTemperature(int, TemperatureChange).
  • TemperatureChange now stores information about the context of individual temperature changes, including source, cause, direct cause, and position, and this data is now passed to various temperature change related events.
  • Added a new ThermooLevel interface that is injected onto all Level instances by mixin.
  • ThermooLevel provides access to a set of shared instances of TemperatureChange.
  • The ALLOW_X_UPDATE and ALLOW_X_CHANGE events in LivingEntityTemperatureTickEvents were removed and replaced with more general events in TemperatureChangeEvents.
  • The GET_X_CHANGE event in LivingEntityTemperatureTickEvents is now a source-key mapped event returned by getTemperatureChange that allows for the same sort of event to apply to any temperature source - except absolute and environment sources.
  • The /thermoo temperature (add|remove) sub-commands now provide more ability to specify context about a temperature change with at and by syntax, essentially to provide the data for the TemperatureChange class.

### Example Migration

A simple migration of adding temperature:

``diff
void foo(LivingEntity e) {
  • e.thermoo$addTemperature(10, HeatingModes.ACTIVE);
+ e.thermoo$addTemperature(10, e.level().thermoo$temperatureSources().active());
}
`

## Temperature Status API

The Temperature Effect API was rewritten and renamed to the Temperature Status API to better distinguish between the JSON files (statuses) and the effect types that actually do the work. The API largely does the same thing, but here is a summary of the changes:

  • Replaced the thermoo/temperature_effect registry with thermoo/temperature_status registry
  • The new status registry is now an actual registry, which supports tags, synchronisation, and Holders, and all that.
  • Replaced config objects with a direct effects list entry.
  • Moved type delegation to entries of the effects, rather than at the root of the registry object.
  • Merged the attribute_modifier and scaling_attribute_modifier into a single type, differentiated with a field.
  • Removed the empty and sequence types, they are no longer needed.
  • Added a way to define the application order of statuses with the thermoo:application_order temperature status tag.

This also removed some functionality:

  • Temperature statuses can no longer be "hot reloaded"; you must restart the server to reload them.
  • There is no longer a loading_priority field. The intended functionality behind this was to allow Thermoo Patches to override the effects from Frostiful/Scorchful with a check for Origin. This was superseded by the enable API. It is not known if anyone else used this for any particular functionality that was actually necessary, so it is being removed.

### Example migration

Old effect

`json
{
"type": "thermoo:damage",
"temperature_scale_range": {
"max": -0.99
},
"config": {
"amount": 1,
"damage_interval": 20,
"damage_type": "minecraft:freeze"
}
}
`

New status

`json
{
"temperature_scale_range": {
"max": -0.99
},
"interval": 20,
"effects": [
{
"type": "thermoo:damage",
"amount": 1,
"damage_type": "minecraft:freeze"
}
]
}
``

# Thermoo 4.8.1 for Minecraft 1.21.1

  • Added ability to dynamically toggle temperature effects on and off on a per-entity basis using the command /thermoo temperature effect set_enabled.
  • Fixed some temperature effects not being properly removed.
  • Hotfix 4.8.1: publish interface injection data as a classified artifact
# Thermoo 4.8.0 for Minecraft 1.21.1

  • Added ability to dynamically toggle temperature effects on and off on a per-entity basis using the command /thermoo temperature effect set_enabled.
  • Fixed some temperature effects not being properly removed.
# Thermoo 10.0.0 Alpha 1 for Minecraft 26.1-snapshot-11

A first pre-release build for Thermoo 10 for Minecraft 26.1. This is an alpha version, and the API remains extremely unstable as **further breaking changes are planned.** Because of this, **the documentation has also not yet been updated!** The Thermoo Docs will be fully updated when the API changes are finalized for 26.1.

This release is primarily intended for me to get a head start on updating Frostiful and Scorchful, and also to open Thermoo up to public bugtesting from whomever wants to do that.

  • Begun adding version numbers to API packages.
  • So far this has impacted the following packages:
  • com.github.thedeathlycow.thermoo.api.command -> com.github.thedeathlycow.thermoo.api.command.v1
  • com.github.thedeathlycow.thermoo.api.temperature.effect -> com.github.thedeathlycow.thermoo.api.temperature.status.v2
  • More packages will be moved before the full 26.1 release.
  • Removed command definition classes from API.
  • These are now implementation classes.
  • Renamed *ArgumentType classes to *Argument in the command API.
  • Replaced the Temperature Effect API with the Temperature Status API ([#104](https://github.com/TheDeathlyCow/thermoo/pull/104)).
  • Added Temperature Status Tags ([#106](https://github.com/TheDeathlyCow/thermoo/pull/106)).

## Temperature Status API

The Temperature Effect API was rewritten and renamed to the Temperature Status API to better distinguish between the JSON files (statuses) and the effect types that actually do the work. The API largely does the same thing, but here is a summary of the changes:

  • Replaced the thermoo/temperature_effect registry with thermoo/temperature_status registry
  • The new status registry is now an actual registry, which supports tags, synchronisation, and Holders, and all that.
  • Replaced config objects with a direct effects list entry.
  • Moved type delegation to entries of the effects, rather than at the root of the registry object.
  • Merged the attribute_modifier and scaling_attribute_modifier into a single type, differentiated with a field.
  • Removed the empty and sequence types, they are no longer needed.
  • Added a way to define the application order of statuses with the thermoo:application_order temperature status tag.

This also removed some functionality:

  • Temperature statuses can no longer be "hot reloaded"; you must restart the server to reload them.
  • There is no longer a loading_priority field. The intended functionality behind this was to allow Thermoo Patches to override the effects from Frostiful/Scorchful with a check for Origin. This was superseded by the enable API. It is not known if anyone else used this for any particular functionality that was actually necessary, so it is being removed.

### Example migration

Old effect

``json
{
"type": "thermoo:damage",
"temperature_scale_range": {
"max": -0.99
},
"config": {
"amount": 1,
"damage_interval": 20,
"damage_type": "minecraft:freeze"
}
}
`

New status

`json
{
"temperature_scale_range": {
"max": -0.99
},
"interval": 20,
"effects": [
{
"type": "thermoo:damage",
"amount": 1,
"damage_type": "minecraft:freeze"
}
]
}
``

[4.8.0] Thermoo 4.8.0 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo 4.8.0 for Minecraft 1.21.1

  • Added ability to dynamically toggle temperature effects on and off on a per-entity basis using the command /thermoo temperature effect set_enabled.
  • Fixed some temperature effects not being properly removed.
[9.1.0] Thermoo 9.1.0 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo 9.1: Atmospheric Pressure

  • Added ability to dynamically toggle temperature effects on and off on a per-entity basis using the command /thermoo temperature effect set_enabled.
  • Added a Java API to dynamically toggle temperature effects on and off on a per-entity basis to the ConfiguredTemperatureEffect class.
  • Added Thermoo specific entries to the F3 debug screen, these are disabled by default.
  • Added an atmospheric pressure environment component type.
  • This component stores the local atmospheric pressure in millibars.
  • Added an atmospheric pressure gameplay environment attribute.
  • This attribute is used as the default value for the environment component map.
  • Added a sub-command to /thermoo environment to get the atmospheric pressure value at a block position.
  • Added thermoo:set_temperature_from_pressure environment provider type.
  • Added thermoo:set_pressure_from_altitude environment provider type.
  • The relative humidity can now be queried using /thermoo environment relative_humidity.
  • The old usage of /thermoo environment relativehumidity still works but is now deprecated.
# Thermoo for Neoforge 1.21.1

Thermoo has now been ported to Neoforge 1.21.1, courtesy
of [Forgified Fabric API](https://github.com/Sinytra/ForgifiedFabricAPI). This port may not be fully stable just yet and
as such is released as an Alpha. However, it does _not_ require Connector and as such should work a bit better.

Server owners should note that this port does not include the Polymer patch, as Polymer is a Fabric-only mod. If you
want to use Thermoo server side with Polymer, you will still need to use the Fabric version of Thermoo via Connector.

  • I do not plan to update this port to any game version other than 1.21.1.** FFAPI is currently not available for any
later version, and I am just simply uninterested in 1.20.1 (not to mention that I would also need to translate Thermoo
1.20.1 to Mojmap). If/when FFAPI updates to a newer Minecraft version, I will remake the port for that version too.

Changes from Thermoo 4.7.0+neoforge:
  • 4.7.1: Published interface injection data
# Thermoo for Neoforge 1.21.1

Thermoo has now been ported to Neoforge 1.21.1, courtesy
of [Forgified Fabric API](https://github.com/Sinytra/ForgifiedFabricAPI). This port may not be fully stable just yet and
as such is released as an Alpha. However, it does _not_ require Connector and as such should work a bit better.

Server owners should note that this port does not include the Polymer patch, as Polymer is a Fabric-only mod. If you
want to use Thermoo server side with Polymer, you will still need to use the Fabric version of Thermoo via Connector.

  • I do not plan to update this port to any game version other than 1.21.1.** FFAPI is currently not available for any
later version, and I am just simply uninterested in 1.20.1 (not to mention that I would also need to translate Thermoo
1.20.1 to Mojmap). If/when FFAPI updates to a newer Minecraft version, I will remake the port for that version too.

[9.0.0] Thermoo 9.0.0 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo 9.0.0

This update brings Thermoo to Minecraft 1.21.11. Per the LTS policy, this release marks the end of support for Minecraft
1.21.9-10.

  • Updated to Minecraft 1.21.11.
  • Added new Environment Attributes to control seasons and temperature.
  • Reworked the seasons API to better support the environment attribute integration. This is a major breaking change for
anyone using the Java-side Seasons API. See below for details. The JSON API should remain exactly the same.
  • Added a new mild tropical season.

## Environment Attributes

Thermoo now provides several new environment attributes that integrate this new vanilla system with seasons and
temperature. These new attributes are documented on
the [Thermoo wiki](https://thermoo.thedeathlycow.com/datapacks/environment_attributes/).

## Seasons API Rework

The Seasons API has been reworked with, broadly, two major changes to support better future extensibility: First, the
ThermooSeason enum was converted into an interface which is implemented by two separate enums for temperate and
tropical seasons, called TemperateSeason and TropicalSeason respectively. A mild tropical season was also added
with this change to represent transition periods from wet to dry.

Secondly, the type returned by the seasons events was changed from an optional season to an optional season _state_,
which includes not only the original season but also a new progress value. This captures the "state" of a season at
some particular point in time. The new progress value is a number in the range [0, 1] which represents how far the
season has progressed.

Here is a basic migration overview:
  • ThermooSeason.SPRING -> TemperateSeason.SPRING
  • ThermooSeason.AUTUMN -> TemperateSeason.AUTUMN
  • ThermooSeason.SUMMER -> TemperateSeason.SUMMER
  • ThermooSeason.WINTER -> TemperateSeason.WINTER
  • ThermooSeason.TROPICAL_DRY -> TropicalSeason.DRY
  • ThermooSeason.TROPICAL_WET -> TropicalSeason.WET
  • Added TropicalSeason.MILD
  • ThermooSeason#getCurrentSeason(Level) -> TemperateSeason#getCurrentState(Level, BlockPos) (note the added BlockPos parameter)
  • ThermooSeason#getCurrentTropicalSeason(Level, BlockPos) -> TropicalSeason#getCurrentState(Level, BlockPos).map()

Examples:

``diff
  • Optional<ThermooSeason> season = ThermooSeason#getCurrentSeason(level);
+Optional<TemperateSeason> season = TemperateSeason#getCurrentState(level, pos).map(ThermooSeasonState::season);
`

`diff
ThermooSeasonEvents.GET_CURRENT_TROPICAL_SEASON.register(
(level, pos) -> {
  • return Optional.of(ThermooSeason.TROPICAL_WET);
+ return Optional.of(TropicalSeason.WET.createState());
}
);
``


[8.1.1] Thermoo 8.1.1 by TheDeathlyCow on Oct 09, 2026
Download
  • The entity position chosen for the environment tick context is now based on the entity's root vehicle, and not their actual position.
  • This fixes some downstream issues with Frostiful where players would not warm up when in a boat. See [#90](https://github.com/TheDeathlyCow/thermoo/issues/90).
[4.7.1] Thermoo 4.7.1 by TheDeathlyCow on Oct 09, 2026
Download
  • The entity position chosen for the environment tick context is now based on the entity's root vehicle, and not their actual position.
  • This fixes some downstream issues with Frostiful where players would not warm up when in a boat. See [#90](https://github.com/TheDeathlyCow/thermoo/issues/90).
[4.7.0] Thermoo 4.7.0 by TheDeathlyCow on Oct 09, 2026
Download
# Migration to Mojang Mappings

  • This is a backport of Thermoo 8.1.0 for Minecraft 1.21.10*

Based Mojang's move towards removing obfuscation, and anticipating Fabric's move to MojMap, I have remapped Thermoo to MojMap. This was a big change code-side for Thermoo but, thanks to intermediary, this should not constitute any breaking changes to the public API. However, I may have messed something up, so this version will initially be released as a beta.

While no breaking changes are planned to be made at this time, a few fields and methods have been renamed to better conform to Official Mappings standards. These are as follows:

  • EnvironmentProvider.ENTRY_CODEC -> EnvironmentProvider.HOLDER_CODEC
  • LightThresholdLightProvider#lightType -> LightThresholdLightProvider#lightLayer
  • AttributeModifierTemperatureEffect$Config#id -> AttributeModifierTemperatureEffect$Config#location
  • ScalingAttributeModifierTemperatureEffect$Config#id -> ScalingAttributeModifierTemperatureEffect$Config#location
  • EnvironmentTickContext#world -> EnvironmentTickContext#level
  • TemperatureEffects.STATUS_EFFECT -> TemperatureEffects.MOB_EFFECT

The resource location of the temperature effect type thermoo:status_effect was changed to thermoo:mob_effect, however an alias has been added to allow existing datapacks to continue to work.

All old fields and methods have been deprecated and just redirect to the new ones, so there are no breaking changes.

When Minecraft fully moves over to using the unobfuscated jar (the update after Mounts of Mayhem), the old fields will be removed and other names, particularly class names, that could not be easily changed without breaking the public API will also be changed.
[8.1.0] Thermoo 8.1.0 by TheDeathlyCow on Oct 09, 2026
Download
# Migration to Mojang Mappings

Based Mojang's move towards removing obfuscation, and anticipating Fabric's likely inevitable move to MojMap, I have remapped Thermoo to MojMap. This was a big change code-side for Thermoo but, thanks to intermediary, this should not constitute any breaking changes to the public API. However, I may have messed something up, so this version will initially be released as a beta.

While no breaking changes are planned to be made at this time, a few fields and methods have been renamed to better conform to Official Mappings standards. These are as follows:

  • EnvironmentProvider.ENTRY_CODEC -> EnvironmentProvider.HOLDER_CODEC
  • LightThresholdLightProvider#lightType -> LightThresholdLightProvider#lightLayer
  • AttributeModifierTemperatureEffect$Config#id -> AttributeModifierTemperatureEffect$Config#location
  • ScalingAttributeModifierTemperatureEffect$Config#id -> ScalingAttributeModifierTemperatureEffect$Config#location
  • EnvironmentTickContext#world -> EnvironmentTickContext#level
  • TemperatureEffects.STATUS_EFFECT -> TemperatureEffects.MOB_EFFECT

The resource location of the temperature effect type thermoo:status_effect was changed to thermoo:mob_effect, however an alias has been added to allow existing datapacks to continue to work.

All old fields and methods have been deprecated and just redirect to the new ones, so there are no breaking changes.

When Minecraft fully moves over to using the unobfuscated jar (the update after Mounts of Mayhem), the old fields will be removed and other names, particularly class names, that could not be easily changed without breaking the public API will also be changed.

[8.0.2] Thermoo 8.0.2 by TheDeathlyCow on Oct 09, 2026
Download
  • Updated to run natively on Minecraft 1.21.10, this should still work on 1.21.9.
[8.0.1] Thermoo 8.0.1 by TheDeathlyCow on Oct 09, 2026
Download
  • Thermoo is now targeting 1.21.9 directly
  • Mod metadata now requires at least 1.21.9 to load

[8.0.0] Thermoo 8.0.0 by TheDeathlyCow on Oct 09, 2026
Download
# Thermoo for MC 1.21.9

  • Updated to 1.21.9-rc1, this will likely work with the full release of 1.21.9. Per the LTS policy, this release represents the end of support for 1.21.6-8.
  • While there are no breaking changes in Thermoo itself, changes to the Entity#getWorld() method in Minecraft means this release breaks binary compatibility with 1.21.6-8, so Thermoo is therefore getting a major version bump.
  • Updated Argentine Spanish translations (thanks [Texaliuz](https://github.com/TheDeathlyCow/thermoo/pull/85)!)

Thermoo Icon
Download Thermoo
Select game version
Select platform