Block Heat Properties - TeamPneumatic/pnc-repressurized GitHub Wiki

Block Heat Properties

Block Heat Properties recipes allow custom heat properties (temperature & thermal resistance) to be assigned to any block in the game, including non-tile entity blocks. For example, default recipes define Lava and Magma as having a very high temperature, and Ice/Packed Ice/Blue Ice as having a low temperature. PneumaticCraft: Repressurized blocks & machines which support the concept of temperature (e.g. the Refinery, Thermopneumatic Processing Plant or Heat Pipe) will heat up or cool down when adjacent to such blocks.

Additionally, block transforms can be defined; when too much heat is added or removed, the block should transform to a different one. For example Lava transforms to Obsidian when too much heat is removed (e.g. absorbed by a Refinery), and Ice transforms to Water when too much heat is added (e.g. placed next to a hot advanced compressor).

It's also important to note that such blocks don't directly exchange heat with each other since they have no heat logic of their own. To force heat exchange, a ticking PneumaticCraft tile entity with heat logic must be placed between them, e.g. a Heat Pipe.

An example (default) heat properties entry, for Campfires:

{
  "type": "pneumaticcraft:heat_properties",
  "block": "minecraft:campfire",
  "statePredicate": {
    "lit": "true"
  },
  "temperature": 1700,
  "thermalResistance": 5000,
  "heatCapacity": 10000,
  "transformCold": {
    "block": "minecraft:campfire[lit=false]"
  }
}
  • The type field must be present and always be pneumaticcraft:heat_properties
  • One of (but not both) block and fluid fields must be present, and are the registry name of the block or fluid respectively
  • The statePredicate field is optional, and limits the test to only specific blockstates
    • In the example above, the Campfire must be lit (lit=true) to qualify as a hot block
  • The temperature field is mandatory for blocks, but optional for fluids (since fluids are registered with a default temperature, e.g. Lava is 1300K and Water is 300K). The temperature is in Kelvin (K).
  • The thermalResistance field is optional, and defaults to values defined in the mod config (Heat section). Thermal resistance limits the transfer rate of heat between neighbouring blocks; the higher the resistance, the slower heat transfers.
    • For blocks, see blockThermalResistance in mod config.
    • For fluids, see fluidThermalResistance in mod config.
  • The transformCold, transformHot, transformColdFlowing & transformHotFlowing fields are all optional; these control whether the block or fluid will transform into a new block or fluid when too much heat is added or removed.
    • The value of these fields is a blockstate definition, in string form. Blockstate definitions are the block's registry name, optionally including one or more blockstate property values. E.g. in the example above, a lit Campfire transforms to an unlit Campfire (lit=false) when too much heat is removed.
    • transformColdFlowing & transformHotFlowing apply only to liquids, and are used to transform the flowing version of a liquid. E.g. Lava source blocks transform to Obsidian, but flowing blocks transform to Cobblestone.
  • The heatCapacity field is optional, and only relevant when block transforms are in effect; it defines the total amount of heat which can be gained or lost before the block transforms.
    • If omitted, the behaviour for blocks is not to transform ever, and for fluids, to use the defaultFluidHeatCapacity value from mod config. (If you want a fluid which never transforms, simply set heatCapacity to 0 and/or omit all transformXXX fields).