44 lines
1.2 KiB
Java
44 lines
1.2 KiB
Java
package mekanism.common.util;
|
|
|
|
import mekanism.api.Coord4D;
|
|
import mekanism.api.IHeatTransfer;
|
|
import mekanism.api.transmitters.IGridTransmitter;
|
|
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
public class HeatUtils
|
|
{
|
|
public static double[] simulate(IHeatTransfer source)
|
|
{
|
|
double heatTransferred[] = new double[] {0,0};
|
|
|
|
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
|
|
{
|
|
IHeatTransfer sink = source.getAdjacent(side);
|
|
|
|
if(sink != null)
|
|
{
|
|
double invConduction = sink.getInverseConductionCoefficient() + source.getInverseConductionCoefficient();
|
|
double heatToTransfer = source.getTemp() / invConduction;
|
|
source.transferHeatTo(-heatToTransfer);
|
|
sink.transferHeatTo(heatToTransfer);
|
|
|
|
if(!(sink instanceof IGridTransmitter))
|
|
{
|
|
heatTransferred[0] += heatToTransfer;
|
|
}
|
|
|
|
continue;
|
|
}
|
|
|
|
//Transfer to air otherwise
|
|
double invConduction = IHeatTransfer.AIR_INVERSE_COEFFICIENT + source.getInsulationCoefficient(side) + source.getInverseConductionCoefficient();
|
|
double heatToTransfer = source.getTemp() / invConduction;
|
|
source.transferHeatTo(-heatToTransfer);
|
|
heatTransferred[1] += heatToTransfer;
|
|
}
|
|
|
|
return heatTransferred;
|
|
}
|
|
}
|