content: package mods.eln.transparentnode.heatfurnace;
  
  import mods.eln.generic.GenericItemUsingDamage;
  import mods.eln.item.ThermalIsolatorElement;
  import mods.eln.misc.INBTTReady;
  import mods.eln.misc.Utils;
  import mods.eln.server.SaveConfig;
  import mods.eln.sim.IProcess;
  import net.minecraft.init.Items;
  import net.minecraft.item.ItemStack;
  import net.minecraft.nbt.NBTTagCompound;
  
  public class HeatFurnaceInventoryProcess implements IProcess, INBTTReady {
  
      HeatFurnaceElement furnace;
      //double combustibleEnergyMax = 40000 * 2;
      double combustibleBuffer = 0;
  
      public HeatFurnaceInventoryProcess(HeatFurnaceElement furnace) {
          this.furnace = furnace;
      }
  
      @Override
      public void process(double time) {
          ItemStack combustibleStack = furnace.inventory.getStackInSlot(HeatFurnaceContainer.combustibleId);
          ItemStack combustionChamberStack = furnace.inventory.getStackInSlot(HeatFurnaceContainer.combustrionChamberId);
          ItemStack isolatorChamberStack = furnace.inventory.getStackInSlot(HeatFurnaceContainer.isolatorId);
  
          double isolationFactor = 1;
          if (isolatorChamberStack != null) {
              if (furnace.thermalLoad.temperatureCelsius > ((ThermalIsolatorElement)ThermalIsolatorElement.getDescriptor(isolatorChamberStack)).getTmax()) {
                  furnace.inventory.decrStackSize(HeatFurnaceContainer.isolatorId, 1);
              } else {
                  ThermalIsolatorElement iso = (ThermalIsolatorElement) ((GenericItemUsingDamage) isolatorChamberStack.getItem()).getDescriptor(isolatorChamberStack);
                  isolationFactor = iso.getConductionFactor();
              }
          }
          furnace.thermalLoad.setRp(furnace.descriptor.thermal.Rp / isolationFactor);
  
          int combustionChamberNbr = 0;
          if (combustionChamberStack != null) {
              combustionChamberNbr = combustionChamberStack.stackSize;
          }
          furnace.furnaceProcess.nominalPower = furnace.descriptor.nominalPower + furnace.descriptor.combustionChamberPower * combustionChamberNbr;
  
          if (furnace.getTakeFuel() && SaveConfig.instance != null) {
              if (!SaveConfig.instance.heatFurnaceFuel) {
                  combustibleBuffer = furnace.furnaceProcess.nominalCombustibleEnergy;
              } else if (combustibleStack != null) {
                  double itemEnergy = Utils.getItemEnergie(combustibleStack);
                  if (itemEnergy != 0) {
                      if (furnace.furnaceProcess.combustibleEnergy + combustibleBuffer < furnace.furnaceProcess.nominalCombustibleEnergy) {
                          //	furnace.furnaceProcess.combustibleEnergy += itemEnergy;
                          combustibleBuffer += itemEnergy;
                          furnace.inventory.decrStackSize(HeatFurnaceContainer.combustibleId, 1);
                          if (combustibleStack.getItem().getUnlocalizedName().toLowerCase().contains("bucket")) {
                              furnace.inventory.setInventorySlotContents(HeatFurnaceContainer.combustibleId, new ItemStack(Items.bucket));
                          }
                      }
                  }
              }
          }
  
          if (furnace.furnaceProcess.combustibleEnergy + combustibleBuffer < furnace.furnaceProcess.nominalCombustibleEnergy) {
              furnace.furnaceProcess.combustibleEnergy += combustibleBuffer;
              combustibleBuffer = 0;
          } else {
              double delta = furnace.furnaceProcess.nominalCombustibleEnergy - furnace.furnaceProcess.combustibleEnergy;
              furnace.furnaceProcess.combustibleEnergy += delta;
              combustibleBuffer -= delta;
          }
      }
  
      @Override
      public void readFromNBT(NBTTagCompound nbt, String str) {
          combustibleBuffer = nbt.getDouble(str + "HFIP" + "combustribleBuffer");
      }
  
      @Override
      public void writeToNBT(NBTTagCompound nbt, String str) {
          nbt.setDouble(str + "HFIP" + "combustribleBuffer", combustibleBuffer);
      }
  }
  