// 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.IDrawable;
import mezz.jei.api.gui.IGuiItemStackGroup;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ITooltipCallback;
import mezz.jei.api.recipe.BlankRecipeCategory;
import mezz.jei.api.recipe.IRecipeWrapper;
import mezz.jeiaddons.plugins.thaumcraft.ThaumcraftRecipeUids;
import mezz.jeiaddons.utils.Log;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import javax.annotation.Nonnull;
import java.util.List;

	@Nonnull
	@Override
	public String getUid() {
		return ThaumcraftRecipeUids.INFERNAL;
	}

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

		guiItemStacks.init(inputSlot, true, 0, 0);
		guiItemStacks.init(outputSlotSmelt, false, 60, 18);
		guiItemStacks.init(outputSlotBonus, false, bonusSlotX, bonusSlotY);

		if (recipeWrapper instanceof InfernalSmeltingRecipeWrapper) {
			InfernalSmeltingRecipeWrapper recipe = (InfernalSmeltingRecipeWrapper) recipeWrapper;

			guiItemStacks.setFromRecipe(inputSlot, recipe.getInputs());
			guiItemStacks.set(outputSlotSmelt, recipe.getSmeltingOutput());
			guiItemStacks.set(outputSlotBonus, recipe.getBonusOutput());

			guiItemStacks.addTooltipCallback(new ITooltipCallback<ItemStack>() {
				@Override
				public void onTooltip(int slotIndex, boolean input, ItemStack ingredient, List<String> tooltip) {
					if (slotIndex == outputSlotBonus) {
						tooltip.add(bonusString);
					}
				}
			});
		} 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/infernal/InfernalSmeltingRecipeCategory.java
import mezz.jei.api.IGuiHelper;
import mezz.jei.api.gui.IDrawable;
import mezz.jei.api.gui.IGuiItemStackGroup;
import mezz.jei.api.gui.IRecipeLayout;
import mezz.jei.api.gui.ITooltipCallback;
import mezz.jei.api.recipe.BlankRecipeCategory;
import mezz.jei.api.recipe.IRecipeWrapper;
import mezz.jeiaddons.plugins.thaumcraft.ThaumcraftRecipeUids;
import mezz.jeiaddons.utils.Log;
import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import javax.annotation.Nonnull;
import java.util.List;

	@Nonnull
	@Override
	public String getUid() {
		return ThaumcraftRecipeUids.INFERNAL;
	}

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

		guiItemStacks.init(inputSlot, true, 0, 0);
		guiItemStacks.init(outputSlotSmelt, false, 60, 18);
		guiItemStacks.init(outputSlotBonus, false, bonusSlotX, bonusSlotY);

		if (recipeWrapper instanceof InfernalSmeltingRecipeWrapper) {
			InfernalSmeltingRecipeWrapper recipe = (InfernalSmeltingRecipeWrapper) recipeWrapper;

			guiItemStacks.setFromRecipe(inputSlot, recipe.getInputs());
			guiItemStacks.set(outputSlotSmelt, recipe.getSmeltingOutput());
			guiItemStacks.set(outputSlotBonus, recipe.getBonusOutput());

			guiItemStacks.addTooltipCallback(new ITooltipCallback<ItemStack>() {
				@Override
				public void onTooltip(int slotIndex, boolean input, ItemStack ingredient, List<String> tooltip) {
					if (slotIndex == outputSlotBonus) {
						tooltip.add(bonusString);
					}
				}
			});
		} else {

			Log.error("Unknown recipe wrapper type: {}", recipeWrapper);
