Program: 117153
Project: 117153
Buggy source:
@Override protected void drawGuiContainerBackgroundLayer(float partialTicks,int mouseX,int mouseY){
  GuiHelper.drawGuiBaseBackground(this,guiLeft,guiTop,xSize,ySize);
  GuiHelper.drawColouredRect(guiLeft + 3,guiTop + 3,xSize - 6,110,0xFF00FFFF);
  GuiHelper.drawColouredRect(guiLeft + 4,guiTop + 4,xSize - 8,108,0xFF000000);
  if (currentRecipe != null && canCraft != null && canCraft.equals("String_Node_Str")) {
    GuiHelper.drawColouredRect(guiLeft + 15,guiTop + 7,20,100,0xFFAA00FF);
    GuiHelper.drawColouredRect(guiLeft + 16,guiTop + 8,18,98,0xFF000000);
    GuiHelper.drawColouredRect(guiLeft + xSize - 35,guiTop + 7,20,100,0xFFAA00FF);
    GuiHelper.drawColouredRect(guiLeft + xSize - 34,guiTop + 8,18,98,0xFF000000);
    GuiHelper.drawColouredRect(guiLeft + (xSize / 2) - 10,guiTop + 24,20,64,0xFF00FFFF);
    GuiHelper.drawColouredRect(guiLeft + (xSize / 2) - 9,guiTop + 25,18,62,0xFF000000);
  }
  drawCenteredString(fontRendererObj,I18n.format("String_Node_Str"),guiLeft + (xSize / 2),guiTop + 5,InfoHelper.GUI_TITLE);
  GlStateManager.color(1F,1F,1F,1F);
  ResourceHelperDE.bindTexture(DETextures.GUI_FUSION_CRAFTING);
  GuiHelper.drawPlayerSlots(this,guiLeft + (xSize / 2),guiTop + 115,true);
  if (currentRecipe == null || canCraft == null || !canCraft.equals("String_Node_Str")) {
    drawTexturedModalRect(guiLeft + (xSize / 2) - 9,guiTop + 25,138,0,18,18);
    if (tile.getStackInSlot(1) != null) {
      drawTexturedModalRect(guiLeft + (xSize / 2) - 9,guiTop + 69,138,0,18,18);
    }
  }
  if (currentRecipe != null) {
    GuiHelper.drawStack2D(currentRecipe.getRecipeOutput(tile.getStackInCore(0)),mc,guiLeft + (xSize / 2) - 8,guiTop + 70,16F);
    List ingredients=currentRecipe.getRecipeIngredients();
    int centerX=guiLeft + xSize / 2;
    int centerY=guiTop + ySize / 2 - 42;
    if (tile.isCrafting.value && tile.craftingStage.value > 0) {
      GlStateManager.depthMask(false);
      double charge=tile.craftingStage.value / 1000D;
      if (charge > 1) {
        charge=1;
      }
      int size=(int)((1D - charge) * 98);
      RenderEnergyBolt.renderBoltBetween(new Vec3D(guiLeft + 16 + boltStats[0],guiTop + 106,0),new Vec3D(guiLeft + 16 + boltStats[1],guiTop + 8 + size,0),1,charge * 10,10,boltStats[2],true);
      RenderEnergyBolt.renderBoltBetween(new Vec3D(guiLeft + 16 + boltStats[3],guiTop + 106,0),new Vec3D(guiLeft + 16 + boltStats[4],guiTop + 8 + size,0),1,charge * 10,10,boltStats[5],true);
      RenderEnergyBolt.renderBoltBetween(new Vec3D(guiLeft + xSize - 34 + boltStats[0],guiTop + 106,0),new Vec3D(guiLeft + xSize - 34 + boltStats[1],guiTop + 8 + size,0),1,charge * 10,10,boltStats[2],true);
      RenderEnergyBolt.renderBoltBetween(new Vec3D(guiLeft + xSize - 34 + boltStats[3],guiTop + 106,0),new Vec3D(guiLeft + xSize - 34 + boltStats[4],guiTop + 8 + size,0),1,charge * 10,10,boltStats[5],true);
    }
    for (int i=0; i < ingredients.size(); i++) {
      boolean isLeft=i % 2 == 0;
      boolean isOdd=ingredients.size() % 2 == 1;
      int sideCount=ingredients.size() / 2;
      if (isOdd && !isLeft) {
        sideCount--;
      }
      int xPos;
      int yPos;
      if (isLeft) {
        xPos=centerX - 65;
        int ySize=80 / Math.max(sideCount - (isOdd ? 0 : 1),1);
        int sideIndex=i / 2;
        if (sideCount <= 1 && (!isOdd || ingredients.size() == 1)) {
          sideIndex=1;
          ySize=40;
        }
        yPos=centerY - 40 + (sideIndex * ySize);
      }
 else {
        xPos=centerX + 65;
        int ySize=80 / Math.max(sideCount - (isOdd ? 0 : 1),1);
        int sideIndex=i / 2;
        if (isOdd) {
          sideCount++;
        }
        if (sideCount <= 1) {
          sideIndex=1;
          ySize=40;
        }
        yPos=centerY - 40 + (sideIndex * ySize);
      }
      GuiHelper.drawStack2D(OreDictHelper.resolveObject(ingredients.get(i)),mc,xPos - 8,yPos - 8,16F);
    }
    if (tile.isCrafting.value && tile.craftingStage.value >= 0) {
      int state=tile.craftingStage.value;
      String status=state > 1000 ? I18n.format("String_Node_Str") : I18n.format("String_Node_Str");
      double d=state > 1000 ? (state - 1000F) / 1000D : state / 1000D;
      drawCenteredString(fontRendererObj,status + "String_Node_Str" + TextFormatting.GOLD+ ((int)(d * 100) + "String_Node_Str"),width / 2,guiTop + 95,state < 1000 ? 0x00FF00 : 0x00FFFF);
    }
  }
}

Fixed version (ground truth):
@Override protected void drawGuiContainerBackgroundLayer(float partialTicks,int mouseX,int mouseY){
  GuiHelper.drawGuiBaseBackground(this,guiLeft,guiTop,xSize,ySize);
  GuiHelper.drawColouredRect(guiLeft + 3,guiTop + 3,xSize - 6,110,0xFF00FFFF);
  GuiHelper.drawColouredRect(guiLeft + 4,guiTop + 4,xSize - 8,108,0xFF000000);
  if (currentRecipe != null && canCraft != null && canCraft.equals("String_Node_Str")) {
    GuiHelper.drawColouredRect(guiLeft + 15,guiTop + 7,20,100,0xFFAA00FF);
    GuiHelper.drawColouredRect(guiLeft + 16,guiTop + 8,18,98,0xFF000000);
    GuiHelper.drawColouredRect(guiLeft + xSize - 35,guiTop + 7,20,100,0xFFAA00FF);
    GuiHelper.drawColouredRect(guiLeft + xSize - 34,guiTop + 8,18,98,0xFF000000);
    GuiHelper.drawColouredRect(guiLeft + (xSize / 2) - 10,guiTop + 24,20,64,0xFF00FFFF);
    GuiHelper.drawColouredRect(guiLeft + (xSize / 2) - 9,guiTop + 25,18,62,0xFF000000);
  }
  drawCenteredString(fontRendererObj,I18n.format("String_Node_Str"),guiLeft + (xSize / 2),guiTop + 5,InfoHelper.GUI_TITLE);
  GlStateManager.color(1F,1F,1F,1F);
  ResourceHelperDE.bindTexture(DETextures.GUI_FUSION_CRAFTING);
  GuiHelper.drawPlayerSlots(this,guiLeft + (xSize / 2),guiTop + 115,true);
  if (currentRecipe == null || canCraft == null || !canCraft.equals("String_Node_Str")) {
    drawTexturedModalRect(guiLeft + (xSize / 2) - 9,guiTop + 25,138,0,18,18);
    if (tile.getStackInSlot(1) != null) {
      drawTexturedModalRect(guiLeft + (xSize / 2) - 9,guiTop + 69,138,0,18,18);
    }
  }
  if (currentRecipe != null) {
    GuiHelper.drawStack2D(currentRecipe.getRecipeOutput(tile.getStackInCore(0)),mc,guiLeft + (xSize / 2) - 8,guiTop + 70,16F);
    List ingredients=currentRecipe.getRecipeIngredients();
    int centerX=guiLeft + xSize / 2;
    int centerY=guiTop + ySize / 2 - 42;
    if (tile.isCrafting.value && tile.craftingStage.value > 0) {
      GlStateManager.depthMask(false);
      double charge=tile.craftingStage.value / 1000D;
      if (charge > 1) {
        charge=1;
      }
      int size=(int)((1D - charge) * 98);
      RenderEnergyBolt.renderBoltBetween(new Vec3D(guiLeft + 16 + boltStats[0],guiTop + 106,0),new Vec3D(guiLeft + 16 + boltStats[1],guiTop + 8 + size,0),1,charge * 10,10,boltStats[2],true);
      RenderEnergyBolt.renderBoltBetween(new Vec3D(guiLeft + 16 + boltStats[3],guiTop + 106,0),new Vec3D(guiLeft + 16 + boltStats[4],guiTop + 8 + size,0),1,charge * 10,10,boltStats[5],true);
      RenderEnergyBolt.renderBoltBetween(new Vec3D(guiLeft + xSize - 34 + boltStats[0],guiTop + 106,0),new Vec3D(guiLeft + xSize - 34 + boltStats[1],guiTop + 8 + size,0),1,charge * 10,10,boltStats[2],true);
      RenderEnergyBolt.renderBoltBetween(new Vec3D(guiLeft + xSize - 34 + boltStats[3],guiTop + 106,0),new Vec3D(guiLeft + xSize - 34 + boltStats[4],guiTop + 8 + size,0),1,charge * 10,10,boltStats[5],true);
      GlStateManager.depthMask(true);
    }
    for (int i=0; i < ingredients.size(); i++) {
      boolean isLeft=i % 2 == 0;
      boolean isOdd=ingredients.size() % 2 == 1;
      int sideCount=ingredients.size() / 2;
      if (isOdd && !isLeft) {
        sideCount--;
      }
      int xPos;
      int yPos;
      if (isLeft) {
        xPos=centerX - 65;
        int ySize=80 / Math.max(sideCount - (isOdd ? 0 : 1),1);
        int sideIndex=i / 2;
        if (sideCount <= 1 && (!isOdd || ingredients.size() == 1)) {
          sideIndex=1;
          ySize=40;
        }
        yPos=centerY - 40 + (sideIndex * ySize);
      }
 else {
        xPos=centerX + 65;
        int ySize=80 / Math.max(sideCount - (isOdd ? 0 : 1),1);
        int sideIndex=i / 2;
        if (isOdd) {
          sideCount++;
        }
        if (sideCount <= 1) {
          sideIndex=1;
          ySize=40;
        }
        yPos=centerY - 40 + (sideIndex * ySize);
      }
      GuiHelper.drawStack2D(OreDictHelper.resolveObject(ingredients.get(i)),mc,xPos - 8,yPos - 8,16F);
    }
    if (tile.isCrafting.value && tile.craftingStage.value >= 0) {
      int state=tile.craftingStage.value;
      String status=state > 1000 ? I18n.format("String_Node_Str") : I18n.format("String_Node_Str");
      double d=state > 1000 ? (state - 1000F) / 1000D : state / 1000D;
      drawCenteredString(fontRendererObj,status + "String_Node_Str" + TextFormatting.GOLD+ ((int)(d * 100) + "String_Node_Str"),width / 2,guiTop + 95,state < 1000 ? 0x00FF00 : 0x00FFFF);
    }
  }
}