Program: 157085
Project: 157085
Buggy source:
@Override public void updateEntity(){
  boolean isBurning=this.deviceCookTime > 0;
  boolean sendUpdate=false;
  if (this.deviceCookTime > 0) {
    this.deviceCookTime--;
  }
  if (!this.worldObj.isRemote) {
    if (this.deviceCookTime == 0 && this.canCalcinate()) {
      this.fuelBurnTime=this.deviceCookTime=TileEntityFurnace.getItemBurnTime(this.inventory[FUEL_INVENTORY_INDEX]);
      if (this.deviceCookTime > 0) {
        sendUpdate=true;
        if (this.inventory[FUEL_INVENTORY_INDEX] != null) {
          --this.inventory[FUEL_INVENTORY_INDEX].stackSize;
          if (this.inventory[FUEL_INVENTORY_INDEX].stackSize == 0) {
            this.inventory[FUEL_INVENTORY_INDEX]=this.inventory[FUEL_INVENTORY_INDEX].getItem().getContainerItemStack(inventory[FUEL_INVENTORY_INDEX]);
          }
        }
      }
    }
    if (this.deviceCookTime > 0 && this.canCalcinate()) {
      this.itemCookTime++;
      if (this.itemCookTime == 200) {
        this.itemCookTime=0;
        this.calcinateItem();
        sendUpdate=true;
      }
    }
 else {
      this.itemCookTime=0;
    }
    if (isBurning != this.deviceCookTime > 0) {
      sendUpdate=true;
    }
  }
  if (sendUpdate) {
    this.onInventoryChanged();
    this.state=this.deviceCookTime > 0 ? (byte)1 : (byte)0;
    this.worldObj.addBlockEvent(this.xCoord,this.yCoord,this.zCoord,this.getBlockType().blockID,1,this.state);
    this.worldObj.addBlockEvent(this.xCoord,this.yCoord,this.zCoord,this.getBlockType().blockID,2,getLeftStackSize());
    this.worldObj.addBlockEvent(this.xCoord,this.yCoord,this.zCoord,this.getBlockType().blockID,3,getLeftStackColour());
    this.worldObj.addBlockEvent(this.xCoord,this.yCoord,this.zCoord,this.getBlockType().blockID,4,getRightStackSize());
    this.worldObj.addBlockEvent(this.xCoord,this.yCoord,this.zCoord,this.getBlockType().blockID,5,getRightStackColour());
    this.worldObj.notifyBlockChange(this.xCoord,this.yCoord,this.zCoord,this.getBlockType().blockID);
  }
}

Fixed version (ground truth):
@Override public void updateEntity(){
  boolean isBurning=this.deviceCookTime > 0;
  boolean sendUpdate=false;
  if (this.deviceCookTime > 0) {
    this.deviceCookTime--;
  }
  if (!this.worldObj.isRemote) {
    if (this.deviceCookTime == 0 && this.canCalcinate()) {
      this.fuelBurnTime=this.deviceCookTime=TileEntityFurnace.getItemBurnTime(this.inventory[FUEL_INVENTORY_INDEX]);
      if (this.deviceCookTime > 0) {
        sendUpdate=true;
        if (this.inventory[FUEL_INVENTORY_INDEX] != null) {
          --this.inventory[FUEL_INVENTORY_INDEX].stackSize;
          if (this.inventory[FUEL_INVENTORY_INDEX].stackSize == 0) {
            this.inventory[FUEL_INVENTORY_INDEX]=this.inventory[FUEL_INVENTORY_INDEX].getItem().getContainerItemStack(inventory[FUEL_INVENTORY_INDEX]);
          }
        }
      }
    }
    if (this.deviceCookTime > 0 && this.canCalcinate()) {
      this.itemCookTime++;
      if (this.itemCookTime == 200) {
        this.itemCookTime=0;
        this.calcinateItem();
        sendUpdate=true;
      }
    }
 else {
      this.itemCookTime=0;
    }
    if (isBurning != this.deviceCookTime > 0) {
      sendUpdate=true;
    }
  }
  if (sendUpdate) {
    this.onInventoryChanged();
    this.state=this.deviceCookTime > 0 ? (byte)1 : (byte)0;
    this.worldObj.addBlockEvent(this.xCoord,this.yCoord,this.zCoord,this.getBlockType().blockID,1,this.state);
    sendDustPileData();
    this.worldObj.notifyBlockChange(this.xCoord,this.yCoord,this.zCoord,this.getBlockType().blockID);
  }
}