Program: 34847
Project: 34847
Buggy source:
@Override public void updateEntity(){
  super.updateEntity();
  if (data.moved) {
    data.afterMoveCheck(worldObj);
    worldObj.scheduleBlockUpdate(xCoord,yCoord,zCoord,worldObj.getBlock(xCoord,yCoord,zCoord),80);
  }
  if (master == null && !isMaster())   findMaster();
  if (master == null && !isMaster())   return;
  if (valve && upgrades.hasUpgrade(EnumMachineUpgrades.AUTO_OUTPUT)) {
    for (    ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
      Location location=new Location(this).move(direction);
      TileEntity entity=location.getTileEntity();
      if (entity != null && entity instanceof IFluidHandler && !(entity instanceof TileCoolingTower) && master.output.getFluidType() != null) {
        IFluidHandler tank=(IFluidHandler)entity;
        int drain=tank.fill(direction.getOpposite(),new FluidStack(master.output.getFluidType(),ConfigurationHandler.coolingTowerAutoExportMaxTransfer),false);
        FluidStack stack=master.drain(drain,true,1);
        tank.fill(direction.getOpposite(),stack,true);
      }
    }
  }
  if (valve && upgrades.hasUpgrade(EnumMachineUpgrades.AUTO_IMPORT)) {
    if (master == null)     findMaster();
    if (master == null)     return;
    for (    ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
      Location location=new Location(this).move(direction);
      TileEntity tile=location.getTileEntity();
      if (tile != null && tile instanceof IFluidHandler && !master.input.isFull()) {
        IFluidHandler tank=(IFluidHandler)tile;
        FluidStack drain=tank.drain(direction.getOpposite(),ConfigurationHandler.coolingTowerAutoImportMaxTransfer,false);
        int fill=fill(ForgeDirection.UNKNOWN,drain,true);
        if (fill > 0) {
          tank.drain(direction.getOpposite(),fill,true);
        }
      }
    }
  }
  if (!isMaster())   return;
  if (input.getFluid() != null && input.getFluid().amount <= 0)   input.setFluid(null);
  if (output.getFluid() != null && output.getFluid().amount <= 0)   output.setFluid(null);
  while (!coolant.isEmpty() && heat > 0) {
    ICoolant cooling=CoolantManager.INSTANCE.getCoolant(coolant.getFluid().getFluid());
    if (cooling == null)     break;
    coolant.drain(1,true);
    float factor=1;
    if (upgrades.hasUpgrade(EnumMachineUpgrades.EFFICIENCY_1))     factor+=ConfigurationHandler.coolingTowerEfficiency1CoolingModifier;
    if (upgrades.hasUpgrade(EnumMachineUpgrades.EFFICIENCY_2))     factor+=ConfigurationHandler.coolingTowerEfficiency2CoolingModifier;
    if (upgrades.hasUpgrade(EnumMachineUpgrades.EFFICIENCY_3))     factor+=ConfigurationHandler.coolingTowerEfficiency3CoolingModifier;
    heat-=cooling.getDegreesCoolingPerMB(heat) * factor;
  }
  int count=1;
  if (upgrades.hasUpgrade(EnumMachineUpgrades.SPEED_1))   count+=ConfigurationHandler.coolingTowerSpeed1SpeedModifier;
  if (upgrades.hasUpgrade(EnumMachineUpgrades.SPEED_2))   count+=ConfigurationHandler.coolingTowerSpeed2SpeedModifier;
  if (upgrades.hasUpgrade(EnumMachineUpgrades.SPEED_3))   count+=ConfigurationHandler.coolingTowerSpeed3SpeedModifier;
  for (int i=0; i < count; i++) {
    if (heat > 80 || recipe == null || output.isFull() || input.isEmpty() || !input.getFluid().isFluidEqual(recipe.getInput()) || input.getFluidAmount() < recipe.getInput().amount || (!output.isEmpty() && !output.getFluid().isFluidEqual(recipe.getOutput())) || output.getFreeSpace() < recipe.getOutput().amount)     return;
    input.drain(recipe.getInput().amount,true);
    output.fill(recipe.getOutput(),true);
    heat+=recipe.getHeat();
  }
}

Fixed version (ground truth):
@Override public void updateEntity(){
  super.updateEntity();
  if (data.moved) {
    data.afterMoveCheck(worldObj);
    worldObj.scheduleBlockUpdate(xCoord,yCoord,zCoord,worldObj.getBlock(xCoord,yCoord,zCoord),80);
  }
  if (master == null && !isMaster())   findMaster();
  if (master == null && !isMaster())   return;
  if (valve && upgrades.hasUpgrade(EnumMachineUpgrades.AUTO_OUTPUT)) {
    for (    ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
      Location location=new Location(this).move(direction);
      TileEntity entity=location.getTileEntity();
      if (entity != null && entity instanceof IFluidHandler && !(entity instanceof TileCoolingTower) && master.output.getFluidType() != null) {
        IFluidHandler tank=(IFluidHandler)entity;
        int drain=tank.fill(direction.getOpposite(),new FluidStack(master.output.getFluidType(),ConfigurationHandler.coolingTowerAutoExportMaxTransfer),false);
        FluidStack stack=master.drain(drain,true,1);
        tank.fill(direction.getOpposite(),stack,true);
      }
    }
  }
  if (valve && upgrades.hasUpgrade(EnumMachineUpgrades.AUTO_IMPORT)) {
    if (master == null)     findMaster();
    if (master == null)     return;
    for (    ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
      Location location=new Location(this).move(direction);
      TileEntity tile=location.getTileEntity();
      if (tile != null && tile instanceof IFluidHandler) {
        IFluidHandler tank=(IFluidHandler)tile;
        FluidStack drain=tank.drain(direction.getOpposite(),ConfigurationHandler.coolingTowerAutoImportMaxTransfer,false);
        int fill=fill(direction.getOpposite(),drain,true);
        if (fill > 0) {
          tank.drain(direction.getOpposite(),fill,true);
        }
      }
    }
  }
  if (!isMaster())   return;
  if (input.getFluid() != null && input.getFluid().amount <= 0)   input.setFluid(null);
  if (output.getFluid() != null && output.getFluid().amount <= 0)   output.setFluid(null);
  while (!coolant.isEmpty() && heat > 0) {
    ICoolant cooling=CoolantManager.INSTANCE.getCoolant(coolant.getFluid().getFluid());
    if (cooling == null)     break;
    coolant.drain(1,true);
    float factor=1;
    if (upgrades.hasUpgrade(EnumMachineUpgrades.EFFICIENCY_1))     factor+=ConfigurationHandler.coolingTowerEfficiency1CoolingModifier;
    if (upgrades.hasUpgrade(EnumMachineUpgrades.EFFICIENCY_2))     factor+=ConfigurationHandler.coolingTowerEfficiency2CoolingModifier;
    if (upgrades.hasUpgrade(EnumMachineUpgrades.EFFICIENCY_3))     factor+=ConfigurationHandler.coolingTowerEfficiency3CoolingModifier;
    heat-=cooling.getDegreesCoolingPerMB(heat) * factor;
  }
  int count=1;
  if (upgrades.hasUpgrade(EnumMachineUpgrades.SPEED_1))   count+=ConfigurationHandler.coolingTowerSpeed1SpeedModifier;
  if (upgrades.hasUpgrade(EnumMachineUpgrades.SPEED_2))   count+=ConfigurationHandler.coolingTowerSpeed2SpeedModifier;
  if (upgrades.hasUpgrade(EnumMachineUpgrades.SPEED_3))   count+=ConfigurationHandler.coolingTowerSpeed3SpeedModifier;
  for (int i=0; i < count; i++) {
    if (heat > 80 || recipe == null || output.isFull() || input.isEmpty() || !input.getFluid().isFluidEqual(recipe.getInput()) || input.getFluidAmount() < recipe.getInput().amount || (!output.isEmpty() && !output.getFluid().isFluidEqual(recipe.getOutput())) || output.getFreeSpace() < recipe.getOutput().amount)     return;
    input.drain(recipe.getInput().amount,true);
    output.fill(recipe.getOutput(),true);
    heat+=recipe.getHeat();
  }
}