public AdaptiveSmelteryGui(
     InventoryPlayer inventoryplayer,
     AdaptiveSmelteryLogic smeltery,
     World world,
     int x,
     int y,
     int z) {
   super((ActiveContainer) smeltery.getGuiContainer(inventoryplayer, world, x, y, z));
   logic = smeltery;
   username = inventoryplayer.player.username;
   xSize = 248;
   scomp = logic.getSmeltery();
   multitank = logic.getMultiTank();
   scomp.update();
 }
  @Override
  protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) {
    fontRenderer.drawString(StatCollector.translateToLocal("crafters.Smeltery"), 86, 5, 0x404040);
    fontRenderer.drawString(
        StatCollector.translateToLocal("container.inventory"), 90, (ySize - 96) + 2, 0x404040);

    int base = 0;
    int cornerX = (width - xSize) / 2 + 36;
    int cornerY = (height - ySize) / 2;
    FluidTankInfo[] info = logic.getTankInfo(ForgeDirection.UNKNOWN);

    int capacity = 0;

    for (int i = 0; i < info.length - 1; i++) {
      FluidStack liquid = info[i].fluid;
      if (liquid != null) capacity += info[i].capacity;
    }

    for (int i = 0; i < info.length - 1; i++) {
      FluidStack liquid = info[i].fluid;
      int basePos = 54;
      int initialLiquidSize = 0;
      int liquidSize = 0;
      if (capacity > 0) {
        liquidSize = liquid.amount * 52 / capacity;
        if (liquidSize == 0) liquidSize = 1;
        base += liquidSize;
      }

      int leftX = cornerX + basePos;
      int topY = (cornerY + 68) - base;
      int sizeX = 52;
      int sizeY = liquidSize;
      if (mouseX >= leftX && mouseX <= leftX + sizeX && mouseY >= topY && mouseY < topY + sizeY) {
        drawFluidStackTooltip(liquid, mouseX - cornerX + 36, mouseY - cornerY);
      }
    }
    if (scomp.fuelGague > 0) {
      int leftX = cornerX + 117;
      int topY = (cornerY + 68) - scomp.getScaledFuelGague(52);
      int sizeX = 12;
      int sizeY = scomp.getScaledFuelGague(52);
      if (mouseX >= leftX && mouseX <= leftX + sizeX && mouseY >= topY && mouseY < topY + sizeY) {
        drawFluidStackTooltip(
            new FluidStack(-37, scomp.fuelAmount), mouseX - cornerX + 36, mouseY - cornerY);
      }
    }
  }
  protected void updateScrollbar(int mouseX, int mouseY, float par3) {
    if (logic.getSizeInventory() > 24) {
      boolean mouseDown = Mouse.isButtonDown(0);
      int lefto = this.guiLeft;
      int topo = this.guiTop;
      int xScroll = lefto + 67;
      int yScroll = topo + 8;
      int scrollWidth = xScroll + 14;
      int scrollHeight = yScroll + 144;

      if (!this.wasClicking
          && mouseDown
          && mouseX >= xScroll
          && mouseY >= yScroll
          && mouseX < scrollWidth
          && mouseY < scrollHeight) {
        this.isScrolling = true;
      }

      if (!mouseDown) {
        this.isScrolling = false;
      }

      if (wasClicking && !isScrolling && slotPos != prevSlotPos) {
        prevSlotPos = slotPos;
      }

      this.wasClicking = mouseDown;

      if (this.isScrolling) {
        this.currentScroll = (mouseY - yScroll - 7.5F) / (scrollHeight - yScroll - 15.0F);

        if (this.currentScroll < 0.0F) {
          this.currentScroll = 0.0F;
        }

        if (this.currentScroll > 1.0F) {
          this.currentScroll = 1.0F;
        }

        int s = ((AdaptiveSmelteryContainer) this.container).scrollTo(this.currentScroll);
        if (s != -1) slotPos = s;
      }
    }
  }
  @Override
  protected void drawGuiContainerBackgroundLayer(float f, int mouseX, int mouseY) {
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.mc.getTextureManager().bindTexture(background);
    int cornerX = (width - xSize) / 2 + 36;
    int cornerY = (height - ySize) / 2;
    drawTexturedModalRect(cornerX + 46, cornerY, 0, 0, 176, ySize);

    // Fuel - Lava
    this.mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
    if (scomp.fuelGague > 0) {
      Icon lavaIcon = Block.lavaStill.getIcon(0, 0);
      int fuel = scomp.getScaledFuelGague(52);
      int count = 0;
      while (fuel > 0) {
        int size = fuel >= 16 ? 16 : fuel;
        fuel -= size;
        drawLiquidRect(cornerX + 117, (cornerY + 68) - size - 16 * count, lavaIcon, 12, size);
        count++;
      }
    }

    FluidTankInfo[] info = logic.getTankInfo(ForgeDirection.UNKNOWN);
    int capacity = 0;

    for (int i = 0; i < info.length - 1; i++) {
      FluidStack liquid = info[i].fluid;
      if (liquid != null) capacity += info[i].capacity;
    }

    // Liquids - molten metal
    int base = 0;
    for (int i = 0; i < info.length - 1; i++) {
      FluidStack liquid = info[i].fluid;
      Icon renderIndex = liquid.getFluid().getStillIcon();
      int basePos = 54;
      if (capacity > 0) {
        int liquidSize = liquid.amount * 52 / capacity;
        if (liquidSize == 0) liquidSize = 1;
        while (liquidSize > 0) {
          int size = liquidSize >= 16 ? 16 : liquidSize;
          drawLiquidRect(cornerX + basePos, (cornerY + 68) - size - base, renderIndex, 16, size);
          drawLiquidRect(
              cornerX + basePos + 16, (cornerY + 68) - size - base, renderIndex, 16, size);
          drawLiquidRect(
              cornerX + basePos + 32, (cornerY + 68) - size - base, renderIndex, 16, size);
          drawLiquidRect(
              cornerX + basePos + 48, (cornerY + 68) - size - base, renderIndex, 4, size);
          liquidSize -= size;
          base += size;
        }
      }
    }

    // Liquid gague
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);

    this.mc.getTextureManager().bindTexture(background);
    drawTexturedModalRect(cornerX + 54, cornerY + 16, 176, 76, 52, 52);

    // Side inventory
    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
    this.mc.getTextureManager().bindTexture(backgroundSide);
    // if (logic.layers > 0)
    {
      /*if (logic.layers == 1)
      {
          drawTexturedModalRect(cornerX - 46, cornerY, 0, 0, 98, 43);
          drawTexturedModalRect(cornerX - 46, cornerY + 43, 0, 133, 98, 25);
      }
      else if (logic.layers == 2)
      {
          drawTexturedModalRect(cornerX - 46, cornerY, 0, 0, 98, 61);
          drawTexturedModalRect(cornerX - 46, cornerY + 61, 0, 97, 98, 61);
      }
      else*/
      {
        drawTexturedModalRect(cornerX - 46, cornerY, 0, 0, 98, ySize - 8);
      }
      drawTexturedModalRect(cornerX + 32, (int) (cornerY + 8 + 127 * currentScroll), 98, 0, 12, 15);
    }

    // Temperature
    int slotSize = logic.getSizeInventory();
    if (slotSize > 24) slotSize = 24;
    for (int iter = 0; iter < slotSize; iter++) {
      int slotTemp = logic.getTempForSlot(iter + slotPos * 3) - 20;
      int maxTemp = logic.getMeltingPointForSlot(iter + slotPos * 3) - 20;
      if (slotTemp > 0 && maxTemp > 0) {
        int size = 16 * slotTemp / maxTemp + 1;
        drawTexturedModalRect(
            cornerX - 38 + (iter % 3 * 22),
            cornerY + 8 + (iter / 3 * 18) + 16 - size,
            98,
            15 + 16 - size,
            5,
            size);
      }
    }
  }