Summary:
A temperature mod for Terrafirmacraft, A complex temperature system that can also be extended to non player entities.
Mechanics:
- Realistic and dynamic solar heating with working raycast shadow and occlusion
- Realistic wind chill and cooling with raycast occlusion
- Detailed source exposure with angles and multiple samples raycast allowing for partial exposure
Interiors:
- Dynamic flood fill system allowing for any structure up to 13824 blocks by default
- Thermodynamic based model, Internal volume requires energy and time to warm or cool
- Block seal system for edge blocks allowing for functional windows and partial blocks
- Heating through sources or solar heating peaking at the day
- Cooling through sinks and opening windows with the wind
Keeping Warm:
- Seeking sunlight
- Sheltering from wind
- Heat sources such as fire, TFC sources are also supported
- Heated items such as ingots, pots, etc.
- Insulation or clothing
Keeping Cool:
- Seeking shade
- Seeking wind
- Swimming
- Contact with cold blocks such as ice
- Insulation or clothing
Data Driven:
Entity Temperature Data Map: data/thermia/data_maps/entity_type/entity_temperatures.json
Entity Temperature is the primary data map that you'll encounter and is the method to add or remove the temperature system to entities. It has the following data:
- max_entity_temperature: Maximum temperature or climate for an entity.
- min_entity_temperature: Minimum temperature or climate for an entity.
- is_mob: This is for deciding if the entity receives the simple or complex player model.
- is_tamed: If the entity requires taming for the temperature system to enable.
Player entry for example:
"minecraft:player": {
"is_mob": false,
"is_tamed": false,
"max_entity_temperature": 25.0,
"min_entity_temperature": 5.0
}
Block Temperature Data Map: data/thermia/data_maps/block/block_temperature.json
Block Temperature is another primary data map. It's what tells thermia what block has what temperature and if it's hot and radiative or cold and conductive. It has the following data:
- temperature: Temperature of the block or default temperature if it has blockstates, If hasTFCHeat is true this must be 0.
- search_cap: How many should thermia look for and save in each nearby block search.
- has_tfc_heat: If the block has TFC's heat mechanic, If this is true the temperature must be 0.
- is_radiative: If this block should be treated like a radiation source. If this is false it's treated as a contact source, Eg. Ice.
- state_temps: This is more complex, This allows for specific blockstates to have different temperatures.
Bloomery entry for example:
"tfc:bloomery": {
"has_tfc_heat": false,
"is_radiative": true,
"search_cap": 16,
"state_temps": [
{
"value": 1200.0,
"when": [
"lit=true"
]
}
],
"temperature": 0.0
}
Fluid Temperature Data Map: data/thermia/data_maps/fluid/fluid_temperature.json
Much like Block Temperature, This handles fluid temperature. It will also allow you to define radiative temperatures for blocks containing these fluids such as tanks. Note this data map does not have special block state handling. It has the following data:
- temperature: Temperature of the fluid.
- search_cap: How many should thermia look for and save in each nearby block search.
- is_radiative: If this block should be treated like a radiation source. If this is false it's treated as a submersion source, Eg. Water.
Lava entry for example:
"minecraft:lava": {
"is_radiative": true,
"search_cap": 32,
"temperature": 1000.0
}
Block Porosity Data Map data/thermia/data_maps/block/block_porosity.json
The Block Seal Data Map is for defining the leakiness of a block for interiors. As the interior system only uses Block Seal and isSolidRender to determine boundaries, Block Porosity also acts as a whitelist to allow non solid blocks as walls or edges. It has the following data:
- state_block_seal: Much like the state_temps value for Block Temperature, This is a complex entry for allowing a block with multiple block state values to have differing porosity or leakiness values. As with trapdoors their vertical position is considered "open" however closed for the purpose of a window.
- default_block_seal: The default porosity if none of the state_porosity values apply.
Fences entry for example:
"#c:fences": {
"default_block_seal": 0.5,
"state_block_seal": [
{
"value": 0.25,
"when": [
"east=true",
"west=false"
]
},
{
"value": 0.25,
"when": [
"east=false",
"west=true"
]
},
{
"value": 0.25,
"when": [
"south=true",
"north=false"
]
},
{
"value": 0.25,
"when": [
"south=false",
"north=true"
]
}
]
}
Item Insulation Data Map: data/thermia/data_maps/item/item_insulation.json
Item insulation is a key part of Thermia's thermal system. It isolates you from the environment slowing or even stopping environmental temperature change. There are 4 attributes to the clothing system. It has the following data:
conductionProtection: Conduction does double duty, First and foremost it helps protect against contact sources like cold blocks. It also helps dampen the pull of environmental temperature. Must be within -1 to 1.
radiationProtection: Radiation protects from radiative sources like lava, fire or the sun. This helps with the sun on a hot day or when working by a forge. Must be within -1 to 1.
convectionProtection: This guards against the wind or moving air, Helping keeping the entity warm. Must be within -1 to 1.
rainProtection: Rain protection is fairly simple, It's a simple limit to how wet you can get while in the rain. Must be within 0 to 1.
Black bear pelt coat for example:
"thermia:black_bear_lined_coat": {
"conduction_protection": 0.85,
"convection_protection": 0.4,
"radiation_protection": 0.1,
"rain_protection": 0.85
}