<div style="font-family: 'JetBrains Mono',monospace;
background-color: #212121;
color: #aaafb6;"><span style="color: #ffffff;
font-size: 22;
font-weight: bold;">2.4</span><br><br>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Mod Compatibility Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Added integration with JEI:</span>
<ul style="margin-left: 10px;">
<li>Insulation items have "sewing" recipes, showing how they can be applied to armor</li>
<li>Fuel items for the hearth, boiler, and icebox have recipes showing how long they last</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Expanded/Tweaked integration with Create:</span>
<ul style="margin-left: 10px;">
<li>Pipes and fluid tanks now emit temperature if they contain fluids that emit temperature</li>
<li>Boilers now emit temperature based on the temperature of the water inside them</li>
<li>Blaze burners now emit heat when fueled</li>
<li>The netherite jetpack from Create: Stuff n' Additions now grants 90% heat dampening when the full set is worn</li>
<li>Create's netherite backtank no longer provides cold protection by default</li>
<li>The attribute modifiers for the Create netherite diving set have been removed from the helmet, leggings, and boots
<ul style="margin-left: 15px;">
<li>The backtank now gives the full effect (+100% heat dampening, +50% cold dampening)</li>
</ul>
</li>
</ul>
</li>
<li>Added integration with Iron's Spells & Spellbooks:
<ul style="margin-left: 10px;">
<li>The Frostward and Fireward rings now give buffs that allow the player to survive in colder/hotter climates</li>
</ul>
</li>
<li>Added integration with Boatload:
<ul style="margin-left: 10px;">
<li>Furnace boats now emit temperature if fueled</li>
<li>For parity, furnace minecarts now also emit temperature if fueled</li>
</ul>
</li>
<li>Added integration with Ad Astra:
<ul style="margin-left: 10px;">
<li>This is an updated and fixed port of Mars Popsicle by igalaxy</li>
</ul>
</li>
<li>Added integration with Regions Unexplored:
<ul style="margin-left: 10px;">
<li>Added custom temperatures to many biomes</li>
</ul>
</li>
<li>Added integration with Soul Fire'd:
<ul style="margin-left: 10px;">
<li>When an entity is burning from soul fire, it will now emit cold</li>
<li>This is an entity_temp defined via JSON</li>
</ul>
</li>
<li>Added integration with some Tough as Nails items:
<ul style="margin-left: 10px;">
<li>Wool armor: provides the same insulation as wool</li>
<li>Leaf armor: provides the same insulation as leather, but with no cold protection</li>
<li>Thermoregulator: now gives warmth & frigidness as a hearth would</li>
</ul>
</li>
<li>Improved Primal Winter support:
<ul style="margin-left: 10px;">
<li>Now respects disabled biomes/dimensions in Primal Winter's config</li>
<li>Only decreases the temperature for configured biomes, since Primal Winter already changes default biome temperatures</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">New armor set: Chameleon Scale:</span>
<ul style="font-size: 13;">
<li>Crafted with chameleon molt in typical armor patterns</li>
<li><span style="color: #ffffff; font-weight: bold;">Visually adapts to the ambient temperature</span></li>
<li>Each armor piece provides 20% more than maximum adaptive insulation</li>
<li>Cannot be insulated in the sewing table</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Smokestack Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">The smokestack block can now be placed in all directions</span>
<ul style="margin-left: 10px;">
<li>This allows for creating "pipes" that transport air from the hearth/boiler/icebox</li>
<li>This is a built-in alternative to using Create's pipes, but those still work as well</li>
<li>A smokestack connected on more than one axis (like in corners) will become a "junction", which takes up a full block</li>
<li>Junctions do not allow air to pass around them- only through them via connected smokestacks</li>
<li>A smokestack can be right-clicked with cobblestone to create a junction, which is useful for venting air through walls</li>
<li>The smoke & steam emitted from the thermal sources will travel through the smokestack line and emit from the end(s)</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Changed the smokestack recipe:</span>
<ul style="margin-left: 10px;">
<li><span style="color: #ffffff; font-weight: bold;">No longer require redstone to craft</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Now gives 4 smokestacks</span>
<ul style="margin-left: 15px;">
<li>This is more efficient with resources and will hopefully clue players into the fact that multiple can be connected together</li>
</ul>
</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Insulation Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Tweaked how the insulation system works:</span>
<ul style="margin-left: 10px;">
<li>Each insulation slot now represents an item, rather than 2 insulation points</li>
<li>This enables more powerful insulation items to take up only one slot</li>
<li>Added custom tooltip graphic for "compound" insulation items</li>
<li>Added new parameter to insulator configs: "fill_slots"
<ul style="margin-left: 15px;">
<li>This will make the insulator take up multiple slots as normal</li>
</ul>
</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Armor now drops its insulation upon breaking</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Armor items that provide built-in insulation can now accept insulation themselves</span>
<ul style="margin-left: 10px;">
<li>Built-in armor insulation can also be configured to either take up the item's available insulation slots, or not</li>
</ul>
</li>
<li>Using 4 or more insulation items that are part of the #minecraft:freeze_immune_wearables will now prevent the player from freezing in powder snow
<ul style="margin-left: 10px;">
<li>Added leather and goat fur to the tag by default</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Insulation-granting armors (leather, hoglin hide, goat fur, chameleon scale) can no longer be sewn into other armor by default</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Increased the amount of insulation provided by leather, hoglin hide, goat fur, and chameleon scale armor when worn by 20%</span>
<ul style="margin-left: 10px;">
<li>This incentivizes players to</li>
</ul>
</li>
<li>Adaptive insulation now adapts at a consistent rate instead of slowing down as it reaches its target</li>
<li>Minecart insulation can now be crafted with fur instead of wool</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Hearth, Boiler & Icebox Changes:</span>
<ul style="font-size: 13;">
<li>The hearth/boiler now emit warm air particles from their smokestacks, rather than smoke</li>
<li>The fuel slot of iceboxes/boilers can no longer be taken from by automation (i.e. hoppers)
<ul style="margin-left: 10px;">
<li>This makes automation easier and more consistent with Vanilla blocks like furnaces</li>
</ul>
</li>
<li>Moved the hearth's fluid intakes to coincide with its fuel inputs</li>
<li><span style="color: #ffffff; font-weight: bold;">The hearth's redstone inputs have been changed:</span>
<ul style="margin-left: 10px;">
<li><span style="color: #ffffff; font-weight: bold;">Heat is now emitted if the left or back side is powered</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Cold is not emitted if the right or bottom side is powered</span></li>
<li>Tweaked the design of the redstone inputs to be more obvious</li>
<li>The redstone inputs are now hidden if "Automatic Hearth" is enabled in the configs</li>
</ul>
</li>
<li>Dried kelp blocks can now be used as fuel in hearths and boilers</li>
<li>Adjusted the fuel values of some items:
<ul style="margin-left: 10px;">
<li>Coal: 37 -> 55</li>
<li>Logs: 37 -> 40</li>
<li>Dried Kelp Block: 92 -> 40</li>
<li>Coal Block: 333 -> 500</li>
<li>Snow Block: 100 -> 40</li>
<li><span style="color: #ffffff; font-weight: bold;">These changes will be applied automatically upon updating</span></li>
</ul>
</li>
<li>The boiler now only lights up when it is performing a fuel-draining task:
<ul style="margin-left: 10px;">
<li>Heating waterskins</li>
<li>Purifying drinkable items (with Thirst Was Taken)</li>
<li>Warming a room with a smokestack</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Soul Sprout/Stalk Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Soul stalks now have an initial "bud" stage when placed</span>
<ul style="margin-left: 10px;">
<li>This is a small, 1-block-tall stage that will grow into a full stalk</li>
</ul>
</li>
<li>Soul stalks now grow twice as fast, and bear soul sprouts 60% more often</li>
<li><span style="color: #ffffff; font-weight: bold;">Soul sprouts can now be planted with dispensers</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Removed sticks from the loot table for soul stalk</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Glowstone can now be used to "bonemeal" soul stalks (#cold_sweat:grows_soul_stalk)</span>
<ul style="margin-left: 10px;">
<li>It can also be applied by a dispenser</li>
</ul>
</li>
<li>Soul stalk now generates more commonly in the soul sand valley biome</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Texture Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Added new block textures to the hearth for when it is burning hot fuel or has cold fuel</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Redesigned some parts of the hearth, boiler, and icebox GUIs</span>
<ul style="margin-left: 10px;">
<li>New fuel gauge textures that are more in line with Vanilla</li>
<li>Less prominent particle visibility toggle button</li>
<li>Tweaked the position & design of redstone current indicators</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Tweaked sewing table block and GUI textures</span></li>
<li>Tweaked textures for several other things:
<ul style="margin-left: 10px;">
<li><span style="color: #ffffff; font-weight: bold;">Items:</span>
<ul style="margin-left: 15px;">
<li>Chameleon Molt</li>
<li>Chameleon Scale Armor</li>
<li>Goat Fur Parka</li>
<li>Hoglin Hide Armor</li>
<li>Hearth</li>
<li>Insulated Minecart (very slightly)</li>
<li>These changes are a mix of general design improvements and more closely aligning them with the Vanilla style</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Blocks:</span>
<ul style="margin-left: 15px;">
<li>Boiler, Icebox</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">UI:</span>
<ul style="margin-left: 15px;">
<li>World temperature gauge (both with and without thermometer)</li>
<li>Ice Resistance icon</li>
</ul>
</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Water-Related Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Water droplets are now tinted to the biome's water color</span></li>
<li>Water droplets caused by being wet now only show on the sides of the screen to reduce obstruction</li>
<li>Made water droplets more evenly distributed when the player emerges from water</li>
<li><span style="color: #ffffff; font-weight: bold;">Water droplets no longer display if the player is fully immune to water</span></li>
<li>Tweaked water droplet trails to not be so long in colder temperatures</li>
<li>Added option to change the opacity of water droplets on-screen
<ul style="margin-left: 10px;">
<li>Slightly reduced opacity by default</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Being wet now extinguishes fire, and being on fire now dries the player</span></li>
<li>Waterskins now make the player wet when poured</li>
<li>Removed the cooldown when filling waterskins</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">World Temperature Changes:</span>
<ul style="font-size: 13;">
<li>The temperature underground is now 60 °F instead of 75 °F</li>
<li>Adjusted the temperature of plains biomes to be warmer at night</li>
<li>Adjusted the temperature of river biomes to match plains biomes</li>
<li>Decreased the temperatures of some cold biomes that generate ice, so the ice doesn't immediately melt</li>
<li><span style="color: #ffffff; font-weight: bold;">Water temperature is now biome-dependent</span>
<ul style="margin-left: 10px;">
<li>Each biome has its own "water_temp" field in JSON</li>
<li>Can also be set in toml by adding a parameter after the "units" parameter</li>
<li>Setting this is optional. If unset, a default water temperature will be used</li>
</ul>
</li>
<li>Temperature changes from shade and overcast mechanics are now handled by a single dedicated temperature modifier
<ul style="margin-left: 10px;">
<li>This change "upgrades" the shade mechanic from being a side-effect of the depth system to a real feature</li>
<li>In turn, the depth system now does not count leaf blocks as solid ground</li>
<li>The temperature effect of shade/overcast can be configured with the "Shade Temperature Offset" setting, which replaces "Overcast Temperature Offset"</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Lava now increases the player's temperature logarithmically (A.K.A. diminishing returns), as the amount of lava increases</span>
<ul style="margin-left: 10px;">
<li>This means one block of lava is more effective than before, but a whole pool of lava is slightly less effective</li>
<li>This should make it more fair as both a tool for warming up and a hazard to avoid</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Player Temperature Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Added a new "acclimation" mechanic:</span>
<ul style="margin-left: 10px;">
<li>By spending time in hotter or colder climates, player can now adapt to more comfortably live in them</li>
<li>This causes their livable temperature range to be shifted upward or downward</li>
<li>The player can acclimate to live in climates up to 20°F/10°C hotter or colder than normal (configurable)</li>
<li>Complete acclimation takes about 15 minutes (also configurable)</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">The rate at which the player is damaged by freezing/overheating is now dependent on how fast they are freezing/overheating</span>
<ul style="margin-left: 10px;">
<li>For example, if the player is in a 100°F/37°C area, they will take damage at the normal rate</li>
<li>If the player is in a 400°F/200°C area, they will take damage much faster</li>
<li>Wearing insulation slows down the rate of damage</li>
</ul>
</li>
<li>Switching to spectator mode now sets your body temperature to 0</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Misc. Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">The heart of the sea inside the soulspring lamp is now animated</span></li>
<li>Changed wording of "it is freezing/sweltering outside" messages to "it is freezing/sweltering here" for more clarity</li>
<li>Packed ice can now be instantly mined with an efficiency V diamond pickaxe or faster</li>
<li>Removed "un-crafting" recipes for packed ice and blue ice
<ul style="margin-left: 10px;">
<li>These recipes were arbitrary and could lead to duplication with some mods</li>
</ul>
</li>
<li>The thermometer can now be equipped as a curio by right-clicking</li>
<li><span style="color: #ffffff; font-weight: bold;">Increased ice resistance potion durations:</span>
<ul style="margin-left: 10px;">
<li>Normal length: 90 seconds -> 3 minutes</li>
<li>Extended length: 3 minutes -> 6 minutes</li>
</ul>
</li>
<li>Soul fire now deals contact damage (like normal fire)</li>
<li>Naturally-generated igloos are no longer warmer inside</li>
<li>Changed the sewing table recipe to be consistent with other workstations (like the smithing table)</li>
<li>If the player is on fire and wet, they will now be extinguished and dried off</li>
<li>Eating temperature-affecting foods now properly replaces the preexisting effect for that item
<ul style="margin-left: 10px;">
<li>i.e. eating a soul sprout will now reset the "coldness" timer if its effect is already active, rather than doing nothing</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Advancement Changes:</span>
<ul style="font-size: 13;">
<li>Added new advancement "Getting Cozy" for successfully creating a setup with the icebox/boiler and a smokestack</li>
<li>The "Desperate Measures" advancement now requires the player to be standing in fire or lava to prevent accidental triggering</li>
<li>Renamed the "Dressed to Go" advancement to "Dressed for a Quest"</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">UI Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Added UI element displaying food temperature effects</span>
<ul style="margin-left: 10px;">
<li>Shows a timer for the effect, and its strength</li>
<li>Has settings for repositioning and toggling like other UI elements</li>
</ul>
</li>
<li>Increased the responsiveness of body temperature UI elements</li>
<li>The icon of the input slot in the sewing table now switches between leather and shears to indicate that shears can be used</li>
<li>The body temperature readout (with a thermometer) now shows a gradient rising from the bottom as the player's temperature exceeds 100/-100</li>
<li>ID Changes:-</li>
<li><span style="color: orange;">! Changed armor item IDs to follow the normal helmet/chestplate/leggings/boots convention</span>
<ul style="margin-left: 10px;">
<li>i.e. cold_sweat:goat_fur_parka is now cold_sweat:goat_fur_chestplate</li>
<li>Old configs targeting these IDs will continue to work, but should be updated when possible</li>
<li>Existing items in worlds will be automatically converted to the new IDs</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Config Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Big improvements to config files:</span>
<ul style="margin-left: 10px;">
<li>Improved the formatting and wording of comments, making them more readable and clear</li>
<li>Improved the spacing between config settings and comments, making it easier to locate specific settings</li>
<li>List-based configs are now formatted vertically with one element per line, rather than all elements on one line
<ul style="margin-left: 15px;">
<li>This behavior is indicated by the "//v" tag at the top of the config's comment. Removing the tag reverts this behavior</li>
<li>Formatting changes take effect upon restarting the game</li>
</ul>
</li>
<li><span style="color: orange;">! Existing configs should be updated automatically, but backing up is recommended</span></li>
<li>TOML configs that take in IDs, like blocks, items, entities, biomes, etc. now support negation (i.e. "!minecraft:stone")
<ul style="margin-left: 15px;">
<li>Most useful when used in lists. Excludes the given ID from having the setting applied to it</li>
<li>Also supports negating tags ("!#minecraft:leaves")</li>
<li>i.e. "#forge:dyes,!minecraft:black_dye" applies to all dyes EXCEPT black dye</li>
</ul>
</li>
<li><span style="color: orange;">! Some config settings have been moved:</span>
<ul style="margin-left: 15px;">
<li>"Require Thermometer": main.toml -> item.toml</li>
<li>"Fire/Ice Resistance Immunity" main.toml -> item.toml</li>
</ul>
</li>
</ul>
</li>
<li><span style="color: orange;">! Renamed all instances of "carried item temperature" to "item temperature":</span>
<ul style="margin-left: 10px;">
<li>TOML: "Carried Item Temperatures" -> "Item Temperatures"</li>
<li><span style="color: #ffffff; font-weight: bold;">TOML configs will be RESET. Please back up TOML configs before updating</span></li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Mod compat for specific mods can now be disabled by using the "disabled_mods" file in the CS config folder</span>
<ul style="margin-left: 10px;">
<li>These mods will still work, but special integration features will not be applied</li>
</ul>
</li>
<li>Insulation tooltips can now be configured to show under specific circumstances (client.toml):
<ul style="margin-left: 10px;">
<li>"always": Always show the tooltip (even for armor items with no insulation)</li>
<li>"if_present": The default behavior. Shows the tooltip only if the item gives or has insulation</li>
<li>"on_shift": Show the insulation tooltip if SHIFT is held (even for armor items with no insulation)</li>
<li>"shift_and_present": Show the tooltip if SHIFT is held AND the item gives or has insulation</li>
<li>"never": Never show the insulation tooltip for any items</li>
</ul>
</li>
<li>The primary (right-click) and secondary (sneak-right-click) actions for the waterskin are now configurable (client.toml):
<ul style="margin-left: 10px;">
<li>Both can now be set to either drink or pour, so they can be swapped around or disabled</li>
<li>These settings are in client.toml and are player-specific</li>
</ul>
</li>
<li>Added setting to change how often the player takes damage when overheating/freezing (main.toml)
<ul style="margin-left: 10px;">
<li>This is the base value, which will still be increased when the player is in very extreme temperatures</li>
</ul>
</li>
<li>The "Require Thermometer" and "Fire/Ice Resistance Immunity" settings have been moved to item.toml</li>
<li><span style="color: #ffffff; font-weight: bold;">Added new "Temperature Effects" sub-page to the config menu, which allows for individually tweaking the negative effects of freezing/overheating</span>
<ul style="margin-left: 10px;">
<li>This includes new settings for changing the blur and camera sway effects from overheating</li>
</ul>
</li>
<li>Changed the name of "Temperature Damage" to "Temp. Damage" so it fits better in the config menu</li>
<li>Rearranged some config settings in the in-game menu to be less cramped and more organized</li>
<li>Default water temperature and soak speed are now configurable (world.toml)
<ul style="margin-left: 10px;">
<li>"Soak speed" controls how fast the player becomes wet</li>
<li>Rain soak speed and water soak speed are individually configurable</li>
</ul>
</li>
<li>Added new configs for the waterskin:
<ul style="margin-left: 10px;">
<li>"Waterskin Hotbar Strength": The strength of the gradual cooling/heating of waterskins in the hotbar</li>
<li>"Waterskin Neutralize Speed": The speed at which waterskins' temperature will drain when in the hotbar</li>
</ul>
</li>
<li>Added option to give filled waterskins more than one use when drinking</li>
<li>Lava temperature is now TOML-based so it can be more easily changed</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Command Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Added command: "/coldsweat reload"</span>
<ul style="margin-left: 10px;">
<li>Reloads all configs (TOML, JSON, KubeJS) live, without having to rejoin the world or restart the server</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Added command: "/coldsweat dumpconfigs"</span>
<ul style="margin-left: 10px;">
<li>Dumps all loaded config data into the "config/coldsweat/dump" directory</li>
<li>Useful for debugging or when making datapacks</li>
</ul>
</li>
<li>The "modify" subcommand for /temperature has been renamed to "attribute"</li>
<li>Added "add" subcommand for /temperature
<ul style="margin-left: 10px;">
<li>Increases/Decreases the target's body temperature by the specified amount</li>
</ul>
</li>
<li>Added "modifier" subcommand for /temperature
<ul style="margin-left: 10px;">
<li>Enables adding/removing temperature modifiers on entities</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Tooltip Changes:</span>
<ul style="font-size: 13;">
<li>Some insulators that require certain criteria now display a hint in their tooltip
<ul style="margin-left: 10px;">
<li>i.e. the Create netherite backtank now has the requirement "Wearing full netherite diving suit" in its tooltip</li>
<li>Implementation of this system is explained in the "Technical Changes" section</li>
</ul>
</li>
<li>When hovering over an insulation item, holding CTRL now shows its exact numerical insulation value</li>
<li><span style="color: #ffffff; font-weight: bold;">Adjusted how the tooltip for filled waterskins is displayed:</span>
<ul style="margin-left: 10px;">
<li>No longer shows water temperature in real-world units. This looks arbitrary when the player's body temperature ranges from -100 to 100</li>
<li>Instead, shows a "When Used" tooltip showing the actual effect it has on your temperature (between -50 and 50 by default)</li>
</ul>
</li>
<li>(1.16) Improved the reliability of tooltip image insertions, especially when other mods are installed</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Entity Changes:</span>
<ul style="font-size: 13;">
<li><span style="color: #ffffff; font-weight: bold;">Chameleons now require player interaction to shed</span>
<ul style="margin-left: 10px;">
<li>This is to inhibit very easy farming by putting a chameleon on top of a hopper</li>
<li>When a chameleon is ready to shed, it will start emitting particles and send a vibration with signal strength 4</li>
<li>When the player right-clicks the chameleon, it will shed chameleon molt as normal
<ul style="margin-left: 15px;">
<li>This can also be done with shears in a dispenser</li>
</ul>
</li>
<li>This change can be reverted by enabling "Chameleons Shed Automatically" in entity.toml</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Entities can now be configured to be affected by temperature</span>
<ul style="margin-left: 10px;">
<li><span style="color: orange;">! This mechanic is experimental and disabled by default. It can be enabled in entity.toml</span></li>
<li>Configured animals will heat up and cool down, and can die from overheating/freezing</li>
<li>Default entities are pigs, cows, sheep, chickens, goats, horses, donkeys, mules, and llamas</li>
<li>Each of these entities are also best suited for different climates</li>
<li>Entities in an uninhabitable climate will emit hot or cold "angry" particles</li>
<li>Entity temperature uses a heavily simplified version of the player temperature system
<ul style="margin-left: 15px;">
<li>This should be fine in most scenarios, but the option is present to enable more robust measurements</li>
<li>This is disabled by default, as it is less performant</li>
</ul>
</li>
<li>Configurable via TOML, JSON, and KubeJS</li>
</ul>
</li>
<li>Entities caught on fire will now heat up the nearby area
<ul style="margin-left: 10px;">
<li>You can also warm yourself up this way!</li>
</ul>
</li>
</ul>
<br>
<span style="color: #ffffff;
font-size: 18;
font-weight: bold;">Technical Changes:</span><br><br>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">General:</span>
<ul style="font-size: 13;">
<li>Added SimpleTempModifier (cold_sweat:simple), a basic TempModifier controlled by NBT
<ul style="margin-left: 10px;">
<li>Good for use in commands or simple KubeJS implementations</li>
<li>Parameters:
<ul style="margin-left: 15px;">
<li>"Temperature": The value to apply to the entity's temperature</li>
<li>"Operation": Any of: add, subtract, multiply, divide, power, root, set, max, min
<ul style="margin-left: 20px;">
<li>Augment what the modifier does to the entity's temperature</li>
<li>"set" overrides the entity's temperature with the modifier's value</li>
<li>"max" ensures the entity's temperature is >= the modifier's value</li>
<li>"min" ensures the entity's temperature is <= the modifier's value</li>
</ul>
</li>
</ul>
</li>
<li>Changes to the modifier's NBT will be reflected immediately</li>
<li>When modifying the NBT in Java or KubeJS, make sure to call markDirty() so the changes are sent to clients</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Tags:</span>
<ul style="font-size: 13;">
<li>Chameleons will now target and eat any entities in the #cold_sweat:chameleon_eats tag</li>
<li>Create backtank pressure now drains if the player has any insulator equipped that is in the #drains_backtank tag and passes its requirements</li>
<li>Added #forge:soul_campfires tag (#c:soul_campfires in NeoForge), which is now used by the block temperature of soul campfires</li>
<li>Blocks which are affected by the "Cold Soul Fire" setting are now controlled by the "forge:soul_fire" tag ("c:soul_fire" in NeoForge)
<ul style="margin-left: 10px;">
<li>Any blocks in this tag will have their temperatures inverted if the setting is enabled</li>
</ul>
</li>
<li>Armor crafting and repair materials are now handled by tags:
<ul style="margin-left: 10px;">
<li>Hoglin: #forge:leathers/hoglin</li>
<li>Goat Fur: #forge:furs/goat</li>
<li>Chameleon: #forge:scales/chameleon</li>
<li>These tags are in the "c" domain in 1.21 (i.e. "c:furs/goat")</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">JSON:</span>
<ul style="font-size: 13;">
<li><span style="color: orange;">! The "data" field in item JSON configs has been renamed to "item" for consistency with other configs</span></li>
<li><span style="color: orange;">! (1.16) The file structure of JSON registries has changed to match that of other versions:</span>
<ul style="margin-left: 10px;">
<li>Registries are now located in data/<yourmod>/cold_sweat/* (instead of data/cold_sweat/config/*)</li>
<li>This means that JSON registries registered by other mods will have that mod's namespace in their IDs</li>
<li>Datapacks still do not work. This is only for mod developers</li>
</ul>
</li>
<li><span style="color: orange;">! Renamed all instances of "carried item temperature" to "item temperature" (item/carried_temp -> item/item_temp)</span>
<ul style="margin-left: 10px;">
<li>JSON configs will not work until they are put in the new directory. No formatting changes are required</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Some arguments for JSON configs now support a new type "Negatable List":</span>
<ul style="margin-left: 10px;">
<li>Defines a list of "requirements" and "exclusions" which must be met</li>
<li>Example: "entity":{"require":[{"entities":[#minecraft:skeletons]}],"exclude":[{"entities":[minecraft:wither_skeleton]}]}
<ul style="margin-left: 15px;">
<li>Applies to all skeleton types except wither skeletons</li>
</ul>
</li>
<li>Any block, entity, item, or location requirement can be negated in this way (except fields defined within requirements themselves)</li>
<li>The "old" format of these arguments will continue to be supported (i.e. "entity":{"entities":[#minecraft:skeletons]})</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Expanded the registry removal system into a new system called "registry modifiers"</span>
<ul style="margin-left: 10px;">
<li>Registry modifiers can edit the data of existing configs, or disable them like before</li>
<li>A registry modifier contains a list of operations, which support the following:
<ul style="margin-left: 15px;">
<li>"disable": Disables the config (same as before)</li>
<li>"replace": Replaces a field with the given data</li>
<li>"merge": Merges the given data with the existing data, with the new data overwriting the existing data
<ul style="margin-left: 20px;">
<li>If the data contains a list, the new list will be appended to the existing list</li>
</ul>
</li>
<li>"append": Merges the given data without overwriting any existing data
<ul style="margin-left: 20px;">
<li>Does not affect lists</li>
</ul>
</li>
<li>"remove": Removes the specified keys from the config. Also supports removing list elements</li>
</ul>
</li>
<li><span style="color: orange;">! Because this new system introduces formatting changes, existing registry removal configs will need to be updated</span></li>
<li><span style="color: #ffffff; font-weight: bold;">See the documentation for formatting guides and examples</span></li>
</ul>
</li>
<li>The "matches" field in registry modifiers now uses NBT requirements instead of normal NBT
<ul style="margin-left: 10px;">
<li>This means that Cold Sweat's special NBT functions (cs:any_of, etc.) can now be used</li>
</ul>
</li>
<li>Registry modifiers can now choose which config types to target via the "config_type" field
<ul style="margin-left: 10px;">
<li>Accepts a list of strings ("toml", "json", or "kubejs")</li>
</ul>
</li>
<li>Registry modifiers now support targeting JSON registries by ID (i.e. "cold_sweat:entity/entity_temp/on_fire") via the "entries" field
<ul style="margin-left: 10px;">
<li>This does not work for TOML or KubeJS configs, as they do not have registry IDs</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">JSON configs can now use a wildcard "*" to apply to all objects in a registry</span>
<ul style="margin-left: 10px;">
<li>i.e. {"items": ["*"]} applies to all items</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">The "items" field in JSON item requirements, and "entities" field in entity requirements, are now required</span>
<ul style="margin-left: 10px;">
<li>This is because configs now do nothing if these fields are empty</li>
</ul>
</li>
<li>Enum-type config fields in JSON are now case-insensitive (previously required lower-case)
<ul style="margin-left: 10px;">
<li>Examples of field types affected:
<ul style="margin-left: 15px;">
<li>Temperature Units (i.e. "f", "C", "Mc")</li>
<li>Temperature Type (i.e. "world", "CORE", "fReEzInG_pOiNt")</li>
<li>Config Type (i.e. "toml", "JSON", "KubeJS")</li>
<li>Slot Type (i.e. "head", "CHEST", "Inventory")</li>
</ul>
</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Insulation item configs now accept a list of insulation</span>
<ul style="margin-left: 10px;">
<li>This allows for adding multiple types (or slots) of insulation to a single item</li>
<li>Example: "insulation": [{"cold": 1, "hot": 0}, {"cold": 1, "hot": 0} (occupies 2 slots with lesser cold insulation)</li>
<li>Defining a single insulation is still allowed as to not break existing JSON</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Added new "world temp" requirement for JSON</span>
<ul style="margin-left: 10px;">
<li>Accepts decimal values</li>
<li>Also accepts some preset string values:
<ul style="margin-left: 15px;">
<li>"freezing", "cold", "cool", "temperate", "warm", "hot", "burning"</li>
<li>Ordered from coldest to hottest. Based on the min/max temperature config settings</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Now used in the min/max_temp fields in block temperature JSON</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Added as "world temp bounds" to location requirement JSON:</span>
<ul style="margin-left: 15px;">
<li>Has min/max values, each of which is a world temp requirement</li>
</ul>
</li>
</ul>
</li>
<li>Block temperature JSON configs can now be added to "effect groups"
<ul style="margin-left: 10px;">
<li>Block temperatures in an effect group will count towards each other's max effect limits</li>
<li>i.e. if redstone lamps and copper bulbs are part of the same group, redstone lamps will count towards the max number of copper bulbs and vice-versa</li>
<li>Implemented via the "effect_group" field in block temperature JSON configs
<ul style="margin-left: 15px;">
<li>This field takes in a tag ID containing block temps (i.e. "yourpack:yourtag" [no #hashtag])</li>
<li>Add your block temp tag to data/<yourpack>/tags/cold_sweat/block/block_temp/<yourtag>.json</li>
<li>Include the IDs of the block temps in the tag (i.e. "yourpack:your_block_temp")</li>
</ul>
</li>
</ul>
</li>
<li>The min/max temperature fields in block temperature JSON are now world temp requirements</li>
<li>Added "temperature" field to location requirement</li>
<li>Insulators can now have a "hint" that is displayed if their requirements are not met.
<ul style="margin-left: 10px;">
<li>Added a "hint" field that takes two optional arguments:
<ul style="margin-left: 15px;">
<li>"text": Display static text</li>
<li>"key": Use a translation key</li>
<li>Usage: "hint": {"text": "Wearing full iron armor", "key": "tooltip.cold_sweat.example"}</li>
<li>Only one of these fields is required</li>
<li>If both fields are defined, "key" will be tried first and "text" will be used as a fallback</li>
</ul>
</li>
</ul>
</li>
<li>Added optional "affects_self" field to entity temperature JSON configs
<ul style="margin-left: 10px;">
<li>This will cause the entity to be affected by its own temperature (defaults to "false")</li>
</ul>
</li>
<li>Added optional fields "count" and "location" to entity spawn biome configs:
<ul style="margin-left: 10px;">
<li>"count": The number of entities that can spawn in a group</li>
<li>"location": A negatable list of location requirements that must be met for the entity to spawn</li>
</ul>
</li>
<li>Added optional "location" field to block temperature JSON</li>
<li>Added new field to insulator configs: "fill_slots"
<ul style="margin-left: 10px;">
<li>This will make the insulator take up multiple slots if its total insulation is more than 2 (reverts the new "one item per slot" system)</li>
<li>This is "true" by default</li>
</ul>
</li>
<li>(1.20-) Added new type-specific entity requirements (ported from 1.21):
<ul style="margin-left: 10px;">
<li>(1.18+) "variant": Checks the entity's variant (cat color, axolotl color, etc.)</li>
<li>"fishing_hook": Checks if the fishing bobber entity is in open water (this is a Vanilla thing, IDK)</li>
<li>(1.18+) "lightning_bolt": Checks blocks set on fire and entities struck by the lightning</li>
<li>"piglin_neutral_armor": Checks if the entity is wearing armor that pacifies piglins</li>
<li>"player": Checks player-specific data (game mode, stats, advancements, etc.)</li>
<li>"raider": Checks pillager-specific data (part of an active raid, is the raid captain)</li>
<li>"slime": Checks the size of the slime</li>
<li>(1.18+) "snow_boots": Checks if the player is wearing boots that prevent falling through powder snow</li>
</ul>
</li>
<li>All JSON configs that start with the word "default" will be loaded last, rather than just the ones named "default"</li>
<li>Insulating mount JSON now has an "immune_temp_modifiers" field, similar to insulator items</li>
<li>The "cold_insulation" and "heat_insulation" fields in insulating mount JSON are now optional (defaulting to 0)</li>
<li>Added "logarithmic" (boolean) field to block temp configs
<ul style="margin-left: 10px;">
<li>Makes a block deliver "diminishing returns" as more of them are present around the player</li>
</ul>
</li>
<li>Block requirements now accept a list of enum properties when checking block state (i.e. "type": ["top", "bottom"])</li>
<li><span style="color: orange;">! Formatting changes to numerical ranges in NBT</span>
<ul style="margin-left: 10px;">
<li>Now separated by a colon (:) instead of a hyphen (-)
<ul style="margin-left: 15px;">
<li>This is to enable the use of negative numbers, which was previously not possible</li>
<li>Example: {"Damage": "5-10"} -> {"Damage": "5:10"}</li>
</ul>
</li>
<li>Now support boundless ranges
<ul style="margin-left: 15px;">
<li>Example: {"Damage": "5:"} means 5 or more, {"Damage": ":10"} means 10 or less</li>
</ul>
</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">KubeJS:</span>
<ul style="font-size: 13;">
<li><span style="color: orange;">! Renamed all instances of "carried item temperature" to "item temperature"</span>
<ul style="margin-left: 10px;">
<li>In ModRegistriesEvent: addCarriedItemTemperature() -> addItemTemperature()</li>
</ul>
</li>
<li>Added entity temperature, spawn biome, and insulating mount configs support to KubeJS</li>
<li>Insulators can now have a "hint" that is displayed if their requirements are not met.
<ul style="margin-left: 10px;">
<li>Added "hintText" and "hintKey" methods to insulator builders:
<ul style="margin-left: 15px;">
<li>hintText: Text to be displayed</li>
<li>hintKey: A translation key for the text to be displayed</li>
<li>Only one of these fields is required</li>
<li>If both fields are defined, "hintKey" will be tried first and "hintText" will be used as a fallback</li>
</ul>
</li>
</ul>
</li>
<li>Added "logarithmic" (boolean) field to block temp configs
<ul style="margin-left: 10px;">
<li>Makes a block deliver "diminishing returns" as more of them are present around the player</li>
</ul>
</li>
<li>Added convert() method to KubeJS (mirror of the method from the Temperature class)</li>
<li>KubeJS configs are now passed through the normal config pipeline
<ul style="margin-left: 10px;">
<li>They are now present in CreateRegistriesEvent</li>
<li>They can now be targeted by registry modifiers</li>
</ul>
</li>
</ul>
<span style="color: #305cde;
font-size: 15;
font-weight: bold;">Java:</span>
<ul style="font-size: 13;">
<li><span style="color: orange;">! Custom Cold Sweat registries are now officially unsupported in 1.18</span>
<ul style="margin-left: 10px;">
<li>This is because 1.18's registry loading system disallows initializing registries outside the standard time during mod loading</li>
<li>Because not all mods have been loaded yet at this stage, there is no guarantee that all registries will load successfully</li>
</ul>
</li>
<li><span style="color: orange;">! Rearranged/simplified some methods in ItemInsulationManager</span>
<ul style="margin-left: 10px;">
<li>Some methods have been removed or renamed. See the code for details</li>
</ul>
</li>
<li><span style="color: orange;">! Removed Temperature#getTemperatureAt(), since it was moved to WorldHelper in 2.3.10</span></li>
<li><span style="color: #ffffff; font-weight: bold;">Changed how the GatherDefaultTempModifiers event works:</span>
<ul style="margin-left: 10px;">
<li>Name changed to DefaultTempModifiersEvent</li>
<li>Now fired for all temperature traits simultaneously instead of a separate event for each trait</li>
<li>Now uses a Map<Trait, List<TempModifier>> for collecting modifiers</li>
<li>Methods for adding/removing modifiers must now specify the trait to apply to</li>
<li>The old version of the event still functions, but is deprecated and will be deleted in a future release</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">A single modifier instance can now be added to multiple traits on an entity</span>
<ul style="margin-left: 10px;">
<li>This single instance will be preserved when saving & loading the entity</li>
<li>getLastInput() and getLastOutput() are now stored per-trait, and now take in a Trait argument</li>
<li>Added getFunction() method to TempModifier, which also takes in a Trait argument</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Added tick() method to TempModifier</span>
<ul style="margin-left: 10px;">
<li>Naturally, this method is called every tick</li>
<li>This can be used to handle central calculations that aren't tied to any specific trait</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Temperature effects are now a modular system</span>
<ul style="margin-left: 10px;">
<li>Added a new TempEffect Forge (Java-based) registry</li>
<li>Each individual temperature effect (freezing health, screen blur, etc.) is now registered as a TempEffect</li>
<li>TempEffects are assigned to entities via JSON, and apply to certain temperature ranges
<ul style="margin-left: 15px;">
<li>i.e. health freezes over if the player's temperature is between -50 and -100</li>
</ul>
</li>
<li>This system will be expanded upon and more thoroughly documented in the future</li>
</ul>
</li>
<li>TemperatureChangedEvent now fires every time an entity's temperature changes, instead of only when it is changed manually</li>
<li>The player's body temperature equalization rate is no longer halved when temperature modifiers are applied to it
<ul style="margin-left: 10px;">
<li>For some custom temperature modifiers applied to the CORE trait, this means their rate might need to be increased</li>
</ul>
</li>
<li>WorldHelper#getRoughTemperatureAt() now uses a less accurate but more performant method of getting the temperature
<ul style="margin-left: 10px;">
<li>Now accepts flags as a 3rd argument. 1 = use more accurate temperature, 2 = force update (forces a new calculation)</li>
<li>The "more accurate" system is the old system, which is generally still less precise but more performant than getTemperatureAt()</li>
</ul>
</li>
<li>CreateRegistriesEvent has been broken up into two events:
<ul style="margin-left: 10px;">
<li>AddRegistriesEvent: Fires right before Cold Sweat registers its registries to Minecraft's datapack system.
<ul style="margin-left: 15px;">
<li>Use this event to make new registries. They will now be properly registered as Minecraft registries</li>
</ul>
</li>
<li>LoadRegistriesEvent: Drop-in replacement for CreateRegistriesEvent. Has Pre/Post sub-classes that fire at the same stages of registry loading</li>
</ul>
</li>
<li><span style="color: #ffffff; font-weight: bold;">Custom registries are now initialized during startup immediately after mods are loaded, instead of upon joining a world/server</span></li>
<li>registerByClassName() in TempModifierRegisterEvent now accepts constructor arguments as its last parameter (varargs)
<ul style="margin-left: 10px;">
<li>These arguments will be passed to the constructor of the modifier class upon creation</li>
</ul>
</li>
<li>Added new methods to TempModifier that fire when they are are added/removed on an entity:
<ul style="margin-left: 10px;">
<li>onAdded/onRemoved: Fires on the TempModifier immediately when it is added/removed</li>
<li>onSiblingAdded/onSiblingRemoved: Fires on all other TempModifiers applied to a trait when a new modifier is added/removed</li>
</ul>
</li>
</ul>
<br>
</div>
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" }