# 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());
}
);
```
Optional dependencies
Thermoo Patches
Any compatible version
Polymer
Any compatible version
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }