@Override
  public void drawScreen(int mouseX, int mouseY, float ticks) {
    super.drawScreen(mouseX, mouseY, ticks);

    int i = 0;

    if (prevHover.checkHover(mouseX, mouseY)) {
      i = -1;
    } else if (nextHover.checkHover(mouseX, mouseY)) {
      i = 1;
    }

    if (container.isRecipes() && i != 0) {
      ItemStack stack = container.getNextRecipe(i);

      drawCreativeTabHoveringText(stack.getDisplayName(), mouseX, mouseY);
    }

    if (container.isRecipes()
        && mouseX >= guiLeft + recipesX - 5
        && mouseX <= guiLeft + xSize - 5
        && mouseY >= guiTop + recipesY - 4
        && mouseY <= guiTop + recipesY + 10) {
      tooltips.clear();

      for (ItemStack stack : container.getRecipes()) {
        tooltips.add(stack.getDisplayName());
      }

      drawHoveringText(tooltips, mouseX, mouseY);
    }
  }
  @Override
  protected void mouseClicked(int mouseX, int mouseY, int code) throws IOException {
    super.mouseClicked(mouseX, mouseY, code);

    if (code == 0
        && mouseX >= guiLeft
        && mouseX <= guiLeft + 20
        && mouseY >= guiTop
        && mouseY <= guiTop + 20) {
      nextButton.playPressSound(mc.getSoundHandler());

      ItemStack[] items = new ItemStack[container.craftMatrix.getSizeInventory()];

      for (int i = 0; i < items.length; ++i) {
        items[i] = container.craftMatrix.removeStackFromSlot(i);
      }

      CraftingEX.NETWORK.sendToServer(new OpenCraftingMessage(pos, items));
    } else if (code == 0
        && mouseX <= guiLeft + xSize
        && mouseX >= guiLeft + xSize - 50
        && mouseY >= guiTop
        && mouseY <= guiTop + 20
        && container.isRecipes()) {
      mc.displayGuiScreen(new GuiCraftingResult(this, container.getRecipes()));
    }
  }