// Path: src/main/java/mezz/jeiaddons/plugins/thaumcraft/ThaumcraftRecipeUids.java
// public class ThaumcraftRecipeUids {
// 	public static final String ARCANE = "thaumcraft.arcane";
// 	public static final String CRUCIBLE = "thaumcraft.crucible";
// 	public static final String INFERNAL = "thaumcraft.infernal";
// 	public static final String INFUSION = "thaumcraft.infusion";
// }
// 
// Path: src/main/java/mezz/jeiaddons/utils/Log.java
// public class Log {
// 
// 	public static void trace(String message, Object... params) {
// 		log(Level.TRACE, message, params);
// 	}
// 
// 	public static void debug(String message, Object... params) {
// 		log(Level.DEBUG, message, params);
// 	}
// 
// 	public static void info(String message, Object... params) {
// 		log(Level.INFO, message, params);
// 	}
// 
// 	public static void warning(String message, Object... params) {
// 		log(Level.WARN, message, params);
// 	}
// 
// 	public static void error(String message, Object... params) {
// 		log(Level.ERROR, message, params);
// 	}
// 
// 	private static void log(Level logLevel, String message, Object... params) {
// 		LogManager.getLogger(JEIAddons.MOD_ID).log(logLevel, message, params);
// 	}
// }


import mezz.jei.api.IGuiHelper;
import mezz.jei.api.gui.ICraftingGridHelper;
import mezz.jei.api.gui.IDrawable;
import mezz.jei.api.gui.IGuiItemStackGroup;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.recipe.BlankRecipeCategory;
import mezz.jei.api.recipe.IRecipeWrapper;
import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper;
import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper;
import mezz.jeiaddons.plugins.thaumcraft.ThaumcraftRecipeUids;
import mezz.jeiaddons.utils.Log;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import javax.annotation.Nonnull;


	@Override
	public void drawExtras(@Nonnull Minecraft minecraft) {
		GlStateManager.enableBlend();
		wand.draw(minecraft, 58, 0);
		GlStateManager.disableBlend();
	}

	@Override
	public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) {
		IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks();

		guiItemStacks.init(craftOutputSlot, false, 94, 18);

		for (int y = 0; y < 3; ++y) {
			for (int x = 0; x < 3; ++x) {
				int index = craftInputSlot1 + x + (y * 3);
				guiItemStacks.init(index, true, x * 18, y * 18);
			}
		}

		if (recipeWrapper instanceof IShapedCraftingRecipeWrapper) {
			IShapedCraftingRecipeWrapper wrapper = (IShapedCraftingRecipeWrapper) recipeWrapper;
			craftingGridHelper.setInput(guiItemStacks, wrapper.getInputs(), wrapper.getWidth(), wrapper.getHeight());
			craftingGridHelper.setOutput(guiItemStacks, wrapper.getOutputs());
		} else if (recipeWrapper instanceof ICraftingRecipeWrapper) {
			ICraftingRecipeWrapper wrapper = (ICraftingRecipeWrapper) recipeWrapper;
			craftingGridHelper.setInput(guiItemStacks, wrapper.getInputs());
			craftingGridHelper.setOutput(guiItemStacks, wrapper.getOutputs());
		} else {

// Path: src/main/java/mezz/jeiaddons/plugins/thaumcraft/ThaumcraftRecipeUids.java
// public class ThaumcraftRecipeUids {
// 	public static final String ARCANE = "thaumcraft.arcane";
// 	public static final String CRUCIBLE = "thaumcraft.crucible";
// 	public static final String INFERNAL = "thaumcraft.infernal";
// 	public static final String INFUSION = "thaumcraft.infusion";
// }
// 
// Path: src/main/java/mezz/jeiaddons/utils/Log.java
// public class Log {
// 
// 	public static void trace(String message, Object... params) {
// 		log(Level.TRACE, message, params);
// 	}
// 
// 	public static void debug(String message, Object... params) {
// 		log(Level.DEBUG, message, params);
// 	}
// 
// 	public static void info(String message, Object... params) {
// 		log(Level.INFO, message, params);
// 	}
// 
// 	public static void warning(String message, Object... params) {
// 		log(Level.WARN, message, params);
// 	}
// 
// 	public static void error(String message, Object... params) {
// 		log(Level.ERROR, message, params);
// 	}
// 
// 	private static void log(Level logLevel, String message, Object... params) {
// 		LogManager.getLogger(JEIAddons.MOD_ID).log(logLevel, message, params);
// 	}
// }


// Path: src/main/java/mezz/jeiaddons/plugins/thaumcraft/arcane/ArcaneRecipeCategory.java
import mezz.jei.api.IGuiHelper;
import mezz.jei.api.gui.ICraftingGridHelper;
import mezz.jei.api.gui.IDrawable;
import mezz.jei.api.gui.IGuiItemStackGroup;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.recipe.BlankRecipeCategory;
import mezz.jei.api.recipe.IRecipeWrapper;
import mezz.jei.api.recipe.wrapper.ICraftingRecipeWrapper;
import mezz.jei.api.recipe.wrapper.IShapedCraftingRecipeWrapper;
import mezz.jeiaddons.plugins.thaumcraft.ThaumcraftRecipeUids;
import mezz.jeiaddons.utils.Log;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import javax.annotation.Nonnull;


	@Override
	public void drawExtras(@Nonnull Minecraft minecraft) {
		GlStateManager.enableBlend();
		wand.draw(minecraft, 58, 0);
		GlStateManager.disableBlend();
	}

	@Override
	public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) {
		IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks();

		guiItemStacks.init(craftOutputSlot, false, 94, 18);

		for (int y = 0; y < 3; ++y) {
			for (int x = 0; x < 3; ++x) {
				int index = craftInputSlot1 + x + (y * 3);
				guiItemStacks.init(index, true, x * 18, y * 18);
			}
		}

		if (recipeWrapper instanceof IShapedCraftingRecipeWrapper) {
			IShapedCraftingRecipeWrapper wrapper = (IShapedCraftingRecipeWrapper) recipeWrapper;
			craftingGridHelper.setInput(guiItemStacks, wrapper.getInputs(), wrapper.getWidth(), wrapper.getHeight());
			craftingGridHelper.setOutput(guiItemStacks, wrapper.getOutputs());
		} else if (recipeWrapper instanceof ICraftingRecipeWrapper) {
			ICraftingRecipeWrapper wrapper = (ICraftingRecipeWrapper) recipeWrapper;
			craftingGridHelper.setInput(guiItemStacks, wrapper.getInputs());
			craftingGridHelper.setOutput(guiItemStacks, wrapper.getOutputs());
		} else {

			Log.error("Can't handle unknown recipe wrapper: {}", recipeWrapper);
