@SideOnly(Side.CLIENT)
  @Override
  public void renderRecipe(IGuiLexiconEntry gui, int mx, int my) {
    oreDictRecipe = shapelessRecipe = false;

    renderCraftingRecipe(gui, recipe);

    TextureManager render = Minecraft.getMinecraft().renderEngine;
    render.bindTexture(craftingOverlay);

    GL11.glEnable(GL11.GL_BLEND);
    GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    GL11.glColor4f(1F, 1F, 1F, 1F);
    ((GuiScreen) gui)
        .drawTexturedModalRect(gui.getLeft(), gui.getTop(), 0, 0, gui.getWidth(), gui.getHeight());

    int iconX = gui.getLeft() + 115;
    int iconY = gui.getTop() + 12;

    GL11.glEnable(GL11.GL_BLEND);
    GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

    if (shapelessRecipe) {
      ((GuiScreen) gui).drawTexturedModalRect(iconX, iconY, 240, 0, 16, 16);

      if (mx >= iconX && my >= iconY && mx < iconX + 16 && my < iconY + 16)
        RenderHelper.renderTooltip(
            mx, my, Arrays.asList(StatCollector.translateToLocal("botaniamisc.shapeless")));

      iconY += 20;
    }

    render.bindTexture(craftingOverlay);
    GL11.glEnable(GL11.GL_BLEND);

    if (oreDictRecipe) {
      ((GuiScreen) gui).drawTexturedModalRect(iconX, iconY, 240, 16, 16, 16);

      if (mx >= iconX && my >= iconY && mx < iconX + 16 && my < iconY + 16)
        RenderHelper.renderTooltip(
            mx, my, Arrays.asList(StatCollector.translateToLocal("botaniamisc.oredict")));
    }
    GL11.glDisable(GL11.GL_BLEND);
  }
  @Override
  @SideOnly(Side.CLIENT)
  public void renderRecipe(IGuiLexiconEntry gui, int mx, int my) {
    T recipe = recipes.get(recipeAt);
    TextureManager render = Minecraft.getMinecraft().renderEngine;

    renderItemAtGridPos(gui, 3, 0, recipe.getOutput(), false);
    renderItemAtGridPos(gui, 2, 1, getMiddleStack(), false);

    List<Object> inputs = recipe.getInputs();
    int degreePerInput = (int) (360F / inputs.size());
    float currentDegree =
        ConfigHandler.lexiconRotatingItems
            ? (GuiScreen.isShiftKeyDown()
                ? ticksElapsed
                : (float) (ticksElapsed + ClientTickHandler.partialTicks))
            : 0;

    for (Object obj : inputs) {
      Object input = obj;
      if (input instanceof String) input = OreDictionary.getOres((String) input).get(0);

      renderItemAtAngle(gui, currentDegree, (ItemStack) input);

      currentDegree += degreePerInput;
    }

    renderManaBar(gui, recipe, mx, my);

    render.bindTexture(petalOverlay);

    GL11.glEnable(GL11.GL_BLEND);
    GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
    GL11.glColor4f(1F, 1F, 1F, 1F);
    ((GuiScreen) gui)
        .drawTexturedModalRect(gui.getLeft(), gui.getTop(), 0, 0, gui.getWidth(), gui.getHeight());
    GL11.glDisable(GL11.GL_BLEND);
  }
 /** Draws a textured rectangle at the current z-value. */
 public void drawTexturedModalRect(
     int x, int y, int textureX, int textureY, int width, int height) {
   this.proxy.blit(x, y, textureX, textureY, width, height);
   super.drawTexturedModalRect(x, y, textureX, textureY, width, height);
 }