/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.plugins.forge; import com.google.common.collect.Lists; import cpw.mods.fml.common.registry.GameRegistry; import mods.railcraft.common.items.IItemMetaEnum; import mods.railcraft.common.items.RailcraftItem; import mods.railcraft.common.util.misc.Game; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.FurnaceRecipes; import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe; import org.apache.logging.log4j.Level; import java.util.List; /** * @author CovertJaguar <http://www.railcraft.info> */ public class CraftingPlugin { public static void addFurnaceRecipe(ItemStack input, ItemStack output, float xp) { if (input == null && output == null) { Game.logTrace(Level.WARN, "Tried to define invalid furnace recipe, the input and output were both null. Skipping"); return; } if (input == null) { Game.logTrace(Level.WARN, "Tried to define invalid furnace recipe for {0}, the input was null. Skipping", output.getUnlocalizedName()); return; } if (output == null) { Game.logTrace(Level.WARN, "Tried to define invalid furnace recipe for {0}, the output was null. Skipping", input.getUnlocalizedName()); return; } FurnaceRecipes.smelting().func_151394_a(input, output, xp); } private static Object[] cleanRecipeArray(Object[] recipeArray) { List<Object> recipeList = Lists.newArrayList(recipeArray); for (int i = 0; i < recipeList.size(); i++) { Object obj = recipeList.get(i); if (obj instanceof RailcraftItem) { Object obj2 = i + 1 < recipeList.size() ? recipeList.get(i + 1) : null; if (obj2 instanceof IItemMetaEnum) { recipeList.set(i, ((RailcraftItem) obj).getRecipeObject((IItemMetaEnum) obj2)); recipeList.remove(i + 1); } else { recipeList.set(i, ((RailcraftItem) obj).getRecipeObject()); } } } return recipeList.toArray(); } public static void addShapedRecipe(ItemStack result, Object... recipeArray) { if (result == null || result.stackSize <= 0) { Game.logTrace(Level.WARN, "Tried to define invalid shaped recipe, the result was null or zero. Skipping"); return; } recipeArray = cleanRecipeArray(recipeArray); boolean oreRecipe = false; for (Object obj : recipeArray) { if (obj instanceof String) { if (((String) obj).length() > 3) oreRecipe = true; } else if (obj instanceof Boolean) oreRecipe = true; else if (obj == null) { Game.logTrace(Level.WARN, "Tried to define invalid shaped recipe for {0}, a necessary item was probably disabled. Skipping", result.getUnlocalizedName()); return; } } if (oreRecipe) { IRecipe recipe = new ShapedOreRecipe(result, recipeArray); addRecipe(recipe); } else GameRegistry.addRecipe(result, recipeArray); } /** * @param result * @param recipeArray */ public static void addShapelessRecipe(ItemStack result, Object... recipeArray) { if (result == null || result.stackSize <= 0) { Game.logTrace(Level.WARN, "Tried to define invalid shapeless recipe, the result was null or zero. Skipping"); return; } recipeArray = cleanRecipeArray(recipeArray); boolean oreRecipe = false; for (Object obj : recipeArray) { if (obj instanceof String) oreRecipe = true; else if (obj == null) { Game.logTrace(Level.WARN, "Tried to define invalid shapeless recipe for {0}, a necessary item was probably disabled. Skipping", result.getUnlocalizedName()); return; } } if (oreRecipe) { IRecipe recipe = new ShapelessOreRecipe(result, recipeArray); addRecipe(recipe); } else GameRegistry.addShapelessRecipe(result, recipeArray); } public static void addRecipe(IRecipe recipe) { GameRegistry.addRecipe(recipe); } }