Clean out the old transmutation stone recipes (obsolete once DynEMC is finished), fix up discovering all recipeless items

This commit is contained in:
pahimar 2013-07-03 18:57:58 -04:00
parent 05be819d18
commit c1efbe06a7
7 changed files with 18 additions and 506 deletions

View file

@ -152,9 +152,6 @@ public class EquivalentExchange3 {
// Initialize custom rendering and pre-load textures (Client only)
proxy.initRenderingAndTextures();
// Load the Transmutation Stone recipes
//RecipesTransmutationStone.init();
// Add in the ability to dye Alchemical Bags
CraftingManager.getInstance().getRecipeList().add(new RecipesAlchemicalBagDyes());

View file

@ -1,45 +0,0 @@
package com.pahimar.ee3.core.addons;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import com.pahimar.ee3.core.util.LogHelper;
import com.pahimar.ee3.core.util.RecipeHelper;
import com.pahimar.ee3.recipe.RecipesTransmutationStone;
import cpw.mods.fml.common.Loader;
/**
* Equivalent-Exchange-3
*
* AddonRedPower2
*
* @author pahimar
* @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html)
*
*/
public class AddonRedPower2 {
public static Block rp2Stone = null;
public static void initWorld() {
if (Loader.isModLoaded("RedPowerWorld")) {
try {
rp2Stone = (Block) Class.forName("com.eloraam.redpower.RedPowerWorld").getField("blockStone").get(null);
for (ItemStack stone : RecipesTransmutationStone.transmutationStones) {
// Extremely temporary recipe
RecipeHelper.addRecipe(new ItemStack(rp2Stone.blockID, 1, 3), stone, Block.cobblestone, Block.cobblestone, Block.cobblestone, Block.cobblestone, Block.cobblestone, Block.cobblestone);
}
LogHelper.info("Loaded RP2 World addon");
}
catch (Exception e) {
LogHelper.severe("Could not load RP2 World addon");
e.printStackTrace(System.err);
}
}
}
}

View file

@ -1,7 +1,5 @@
package com.pahimar.ee3.core.handlers;
import com.pahimar.ee3.core.addons.AddonRedPower2;
/**
* Equivalent-Exchange-3
*
@ -15,7 +13,6 @@ public class AddonHandler {
public static void init() {
AddonRedPower2.initWorld();
}
}

View file

@ -1,15 +1,11 @@
package com.pahimar.ee3.core.util;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.oredict.OreDictionary;
import com.pahimar.ee3.item.CustomWrappedStack;
import com.pahimar.ee3.item.ModItems;
import com.pahimar.ee3.lib.Colours;
import com.pahimar.ee3.lib.Strings;
@ -91,42 +87,6 @@ public class ItemUtil {
return false;
}
public static ArrayList<CustomWrappedStack> collateStacks(List<CustomWrappedStack> unCollatedStacks) {
ArrayList<CustomWrappedStack> collatedStacks = new ArrayList<CustomWrappedStack>();
for (int i = 0; i < unCollatedStacks.size(); i++) {
if (collatedStacks.size() == 0) {
collatedStacks.add(unCollatedStacks.get(i));
}
else {
boolean found = false;
for (int j = 0; j < collatedStacks.size(); j++) {
if (unCollatedStacks.get(i).getWrappedStack() instanceof ItemStack && collatedStacks.get(j).getWrappedStack() instanceof ItemStack) {
if (compare((ItemStack) unCollatedStacks.get(i).getWrappedStack(), (ItemStack) collatedStacks.get(j).getWrappedStack())) {
collatedStacks.get(j).setStackSize(collatedStacks.get(j).getStackSize() + 1);
found = true;
}
}
else if (unCollatedStacks.get(i).getWrappedStack() instanceof OreStack && collatedStacks.get(j).getWrappedStack() instanceof OreStack) {
if (OreStack.compareStacks((OreStack) unCollatedStacks.get(i).getWrappedStack(), (OreStack) collatedStacks.get(j).getWrappedStack())) {
collatedStacks.get(j).setStackSize(collatedStacks.get(j).getStackSize() + 1);
found = true;
}
}
}
if (!found) {
collatedStacks.add(unCollatedStacks.get(i));
}
}
}
return collatedStacks;
}
public static boolean hasColor(ItemStack itemStack) {
return !itemStack.hasTagCompound() ? false : !itemStack.getTagCompound().hasKey(Strings.NBT_ITEM_DISPLAY) ? false : itemStack.getTagCompound().getCompoundTag(Strings.NBT_ITEM_DISPLAY).hasKey(Strings.NBT_ITEM_COLOR);

View file

@ -2,11 +2,8 @@ package com.pahimar.ee3.core.util;
import java.util.ArrayList;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.ShapedRecipes;
import net.minecraft.item.crafting.ShapelessRecipes;
@ -16,8 +13,6 @@ import net.minecraftforge.oredict.ShapelessOreRecipe;
import com.pahimar.ee3.item.CustomWrappedStack;
import cpw.mods.fml.common.registry.GameRegistry;
/**
* Equivalent-Exchange-3
*
@ -172,194 +167,4 @@ public class RecipeHelper {
return recipeInputs;
}
public static ArrayList<CustomWrappedStack> getCollatedRecipeInputs(IRecipe recipe) {
return ItemUtil.collateStacks(getRecipeInputs(recipe));
}
public static ArrayList<IRecipe> getReverseRecipes(CustomWrappedStack wrappedStack) {
ArrayList<IRecipe> reverseRecipeList = new ArrayList<IRecipe>();
@SuppressWarnings("unchecked")
ArrayList<IRecipe> recipeList = new ArrayList<IRecipe>(CraftingManager.getInstance().getRecipeList());
for (IRecipe recipe : recipeList) {
if (recipe.getRecipeOutput() != null) {
if (wrappedStack.getWrappedStack() instanceof ItemStack) {
if (ItemUtil.compare((ItemStack) wrappedStack.getWrappedStack(), recipe.getRecipeOutput())) {
reverseRecipeList.add(recipe);
}
}
else if (wrappedStack.getWrappedStack() instanceof OreStack) {
if (OreDictionary.getOreID(recipe.getRecipeOutput()) != -1) {
// TODO Generalize comparison of OreStacks and OreStacks|ItemStacks
if (OreDictionary.getOreID(((OreStack) wrappedStack.getWrappedStack()).oreName) == OreDictionary.getOreID(recipe.getRecipeOutput())) {
reverseRecipeList.add(recipe);
}
}
}
}
}
return reverseRecipeList;
}
public static void addRecipe(ItemStack output, Object... input) {
GameRegistry.addShapelessRecipe(output, input);
}
public static void addRecipe(ItemStack output, ItemStack transmutationStone, Object... input) {
Object[] inputs = new Object[input.length + 1];
System.arraycopy(input, 0, inputs, 0, input.length);
inputs[input.length] = transmutationStone;
addRecipe(output, inputs);
}
public static void addRecipe(Block output, Object... input) {
addRecipe(new ItemStack(output), input);
}
public static void addRecipe(Block output, int count, Object... input) {
addRecipe(new ItemStack(output, count), input);
}
public static void addRecipe(Item output, Object... input) {
addRecipe(new ItemStack(output), input);
}
public static void addRecipe(Item output, int count, Object... input) {
addRecipe(new ItemStack(output, count), input);
}
public static Object[] getMetaCycle(Object input, int n) {
ArrayList<ItemStack> list = new ArrayList<ItemStack>();
ItemStack stack;
for (int i = 0; i < n; i++) {
stack = GeneralHelper.convertObjectToItemStack(input);
stack.setItemDamage(i);
list.add(stack);
}
return list.toArray();
}
public static Object[] getMetaCycle(Object input, int n, int... excludedMeta) {
ArrayList<ItemStack> list = new ArrayList<ItemStack>();
ItemStack stack;
int i = 0;
while (i < n) {
for (int j : excludedMeta) {
if (i == j) {
++i;
}
}
if (!(i < n)) {
break;
}
stack = GeneralHelper.convertObjectToItemStack(input);
stack.setItemDamage(i);
list.add(stack);
++i;
}
return list.toArray();
}
/*
* Pass this a Block, Item or ItemStack and the maximum number of indexes,
* EXCLUDING zero
*/
protected static void addMetaCycleRecipe(Object input, ItemStack stone, int n) {
int outputI;
/*
* Makes a single item cycle through its meta values when it's crafted
* with a PStone
*/
for (int i = 0; i < n; i++) {
outputI = i == n - 1 ? 0 : i + 1;
if (input instanceof Block) {
GameRegistry.addShapelessRecipe(new ItemStack((Block) input, 1, outputI), stone, new ItemStack((Block) input, 1, i));
}
else if (input instanceof Item) {
GameRegistry.addShapelessRecipe(new ItemStack((Item) input, 1, outputI), stone, new ItemStack((Item) input, 1, i));
}
else if (input instanceof ItemStack) {
GameRegistry.addShapelessRecipe(new ItemStack(((ItemStack) input).itemID, 1, outputI), stone, new ItemStack(((ItemStack) input).itemID, 1, i));
}
}
}
protected static void addMetaCycleRecipe(Object input, ItemStack stone, int n, int... excludedMeta) {
int i = 0;
int outputI = 1;
while (i < n && outputI != 0) {
outputI = i == n - 1 ? 0 : i + 1;
for (int j : excludedMeta) {
if (outputI == j) {
outputI = (outputI + 1) % 16;
}
}
if (input instanceof Block) {
GameRegistry.addShapelessRecipe(new ItemStack((Block) input, 1, outputI), stone, new ItemStack((Block) input, 1, i));
}
else if (input instanceof Item) {
GameRegistry.addShapelessRecipe(new ItemStack((Item) input, 1, outputI), stone, new ItemStack((Item) input, 1, i));
}
else if (input instanceof ItemStack) {
GameRegistry.addShapelessRecipe(new ItemStack(((ItemStack) input).itemID, 1, outputI), stone, new ItemStack(((ItemStack) input).itemID, 1, i));
}
i = outputI;
}
}
public static void addSmeltingRecipe(ItemStack input, ItemStack stone, ItemStack fuel) {
ItemStack result = FurnaceRecipes.smelting().getSmeltingResult(input);
if (input == null || input.getItem() == null || result == null)
return;
Object[] list = new Object[9];
list[0] = stone;
list[1] = fuel;
for (int i = 2; i < 9; i++) {
list[i] = new ItemStack(input.getItem(), 1, input.getItemDamage());
}
if (result.stackSize * 7 <= result.getItem().getItemStackLimit()) {
GameRegistry.addShapelessRecipe(new ItemStack(result.getItem(), result.stackSize * 7, result.getItemDamage()), list);
}
else {
GameRegistry.addShapelessRecipe(new ItemStack(result.getItem(), result.getItem().getItemStackLimit(), result.getItemDamage()), list);
}
}
}

View file

@ -88,6 +88,7 @@ public class RecipeRegistry {
Iterator<CustomWrappedStack> recipeKeySetIterator = recipeKeySet.iterator();
CustomWrappedStack recipeOutput = null;
// Discover all stacks involved in the recipes we know about
while (recipeKeySetIterator.hasNext()) {
recipeOutput = recipeKeySetIterator.next();
@ -98,13 +99,16 @@ public class RecipeRegistry {
for (List<CustomWrappedStack> recipeInputs : recipes.get(recipeOutput)) {
for (CustomWrappedStack recipeInput : recipeInputs) {
if (!discoveredStacks.contains(new CustomWrappedStack(recipeInput.getWrappedStack()))) {
discoveredStacks.add(new CustomWrappedStack(recipeInput.getWrappedStack()));
CustomWrappedStack unwrappedRecipeInput = new CustomWrappedStack(recipeInput.getWrappedStack());
if (!discoveredStacks.contains(unwrappedRecipeInput)) {
discoveredStacks.add(unwrappedRecipeInput);
}
}
}
}
// Discover all stacks from the vanilla Items array
ArrayList<ItemStack> subItemList = new ArrayList<ItemStack>();
for (int i = 0; i < Item.itemsList.length; i++) {
@ -121,7 +125,6 @@ public class RecipeRegistry {
if (!discoveredStacks.contains(customWrappedStack)) {
discoveredStacks.add(customWrappedStack);
recipelessStacks.add(customWrappedStack);
}
}
}
@ -132,11 +135,22 @@ public class RecipeRegistry {
if (!discoveredStacks.contains(customWrappedStack)) {
discoveredStacks.add(customWrappedStack);
recipelessStacks.add(customWrappedStack);
}
}
}
}
/*
* For every stack we have discovered, check to see if we know a recipe for it. If we don't
* and we haven't already added it to the recipeless stack list, add it to the recipeless stack
* list
*/
for (CustomWrappedStack discoveredStack : discoveredStacks) {
if (recipes.get(discoveredStack).size() == 0 && !recipelessStacks.contains(discoveredStack)) {
recipelessStacks.add(discoveredStack);
}
}
}
public boolean hasRecipe(CustomWrappedStack customWrappedStack) {

View file

@ -1,216 +0,0 @@
package com.pahimar.ee3.recipe;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.FurnaceRecipes;
import net.minecraftforge.oredict.OreDictionary;
import com.pahimar.ee3.core.handlers.EquivalencyHandler;
import com.pahimar.ee3.core.util.GeneralHelper;
import com.pahimar.ee3.core.util.RecipeHelper;
import com.pahimar.ee3.item.ModItems;
import com.pahimar.ee3.lib.Reference;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
/**
* Equivalent-Exchange-3
*
* RecipesTransmutationStone
*
* @author pahimar
* @license Lesser GNU Public License v3 (http://www.gnu.org/licenses/lgpl.html)
*
*/
public class RecipesTransmutationStone {
private static ItemStack philStone = new ItemStack(ModItems.philStone, 1, OreDictionary.WILDCARD_VALUE);
private static ItemStack miniumStone = new ItemStack(ModItems.miniumStone, 1, OreDictionary.WILDCARD_VALUE);
public static List<ItemStack> transmutationStones = Arrays.asList(miniumStone, philStone);
private static ItemStack anyCoal = new ItemStack(Item.coal, 1, OreDictionary.WILDCARD_VALUE);
private static ItemStack anyWood = new ItemStack(Block.wood, 1, OreDictionary.WILDCARD_VALUE);
private static ItemStack anyPlank = new ItemStack(Block.planks, 1, OreDictionary.WILDCARD_VALUE);
private static ItemStack anySandStone = new ItemStack(Block.sandStone, 1, OreDictionary.WILDCARD_VALUE);
private static ItemStack dyeBoneMeal = new ItemStack(Item.dyePowder, 1, 15);
public static void init() {
initEquivalencyList();
for (ItemStack stone : transmutationStones) {
initTransmutationRecipes(stone);
initEquivalenceRecipes(stone);
//initReconstructiveRecipes(stone);
initDestructorRecipes(stone);
initPortableSmeltingRecipes(stone);
}
if (Reference.DEBUG_MODE) {
EquivalencyHandler.instance().debug();
}
}
public static void initTransmutationRecipes(ItemStack transmutationStone) {
/* 4 Cobble <-> 1 Flint */
RecipeHelper.addRecipe(Item.flint, transmutationStone, Block.cobblestone, Block.cobblestone, Block.cobblestone, Block.cobblestone);
RecipeHelper.addRecipe(new ItemStack(Block.cobblestone, 4), transmutationStone, Item.flint);
/* 4 Dirt <-> 1 Gravel */
RecipeHelper.addRecipe(Block.gravel, transmutationStone, Block.dirt, Block.dirt, Block.dirt, Block.dirt);
RecipeHelper.addRecipe(new ItemStack(Block.dirt, 4), transmutationStone, Block.gravel);
/* 4 Sand <-> 1 Sandstone */
// Vanilla Recipes exist to make SandStone from 4 Sand
RecipeHelper.addRecipe(new ItemStack(Block.sand, 4), transmutationStone, anySandStone);
/* 2 Sticks -> Wood Plank */
RecipeHelper.addRecipe(Block.planks, transmutationStone, Item.stick, Item.stick);
// Vanilla recipe exists to make sticks from planks
/* 4 Wood Planks -> Wood Block */
RecipeHelper.addRecipe(Block.wood, transmutationStone, anyPlank, anyPlank, anyPlank, anyPlank);
// Vanilla recipes exist to make planks from any wood log
/* 4 Gravel/Sandstone/Flint -> 1 Clay Ball, 1 Clay Ball -> 4 Gravel */
RecipeHelper.addRecipe(Item.clay, transmutationStone, Block.gravel, Block.gravel, Block.gravel, Block.gravel);
RecipeHelper.addRecipe(Item.clay, transmutationStone, anySandStone, anySandStone, anySandStone, anySandStone);
RecipeHelper.addRecipe(Item.clay, transmutationStone, Item.flint, Item.flint, Item.flint, Item.flint);
RecipeHelper.addRecipe(new ItemStack(Block.gravel, 4), transmutationStone, Item.clay);
/* 2 Wood Log <-> 1 Obsidian */
RecipeHelper.addRecipe(Block.obsidian, transmutationStone, anyWood, anyWood);
RecipeHelper.addRecipe(new ItemStack(Block.wood, 2), transmutationStone, Block.obsidian);
/* 4 Clay Ball <-> 1 Clay Block */
// Vanilla recipe exists to make clay blocks from clay balls
RecipeHelper.addRecipe(new ItemStack(Item.clay, 4), transmutationStone, Block.blockClay);
/* 4 Obsidian/Clay Block -> 1 Iron Ingot, Iron Ingot -> Clay Block */
RecipeHelper.addRecipe(Item.ingotIron, transmutationStone, Block.obsidian, Block.obsidian, Block.obsidian, Block.obsidian);
RecipeHelper.addRecipe(Item.ingotIron, transmutationStone, Block.blockClay, Block.blockClay, Block.blockClay, Block.blockClay);
RecipeHelper.addRecipe(new ItemStack(Block.blockClay, 4), transmutationStone, Item.ingotIron);
/* 8 Iron Ingot <-> 1 Gold Ingot */
RecipeHelper.addRecipe(Item.ingotGold, transmutationStone, Item.ingotIron, Item.ingotIron, Item.ingotIron, Item.ingotIron, Item.ingotIron, Item.ingotIron, Item.ingotIron, Item.ingotIron);
RecipeHelper.addRecipe(new ItemStack(Item.ingotIron, 8), transmutationStone, Item.ingotGold);
/* 4 Gold Ingot <-> 1 Diamond */
RecipeHelper.addRecipe(Item.diamond, transmutationStone, Item.ingotGold, Item.ingotGold, Item.ingotGold, Item.ingotGold);
RecipeHelper.addRecipe(new ItemStack(Item.ingotGold, 4), transmutationStone, Item.diamond);
/* 8 Iron Block <-> 1 Gold Block */
RecipeHelper.addRecipe(Block.blockGold, transmutationStone, Block.blockIron, Block.blockIron, Block.blockIron, Block.blockIron, Block.blockIron, Block.blockIron, Block.blockIron, Block.blockIron);
RecipeHelper.addRecipe(new ItemStack(Block.blockIron, 8), transmutationStone, Block.blockGold);
/* 4 Gold Block <-> 1 Diamond Block */
RecipeHelper.addRecipe(Block.blockDiamond, transmutationStone, Block.blockGold, Block.blockGold, Block.blockGold, Block.blockGold);
RecipeHelper.addRecipe(new ItemStack(Block.blockGold, 4), transmutationStone, Block.blockDiamond);
/* 1 Ender Pearl <-> 4 Iron Ingot */
RecipeHelper.addRecipe(Item.enderPearl, transmutationStone, Item.ingotIron, Item.ingotIron, Item.ingotIron, Item.ingotIron);
RecipeHelper.addRecipe(new ItemStack(Item.ingotIron, 4), transmutationStone, Item.enderPearl);
}
public static void initEquivalenceRecipes(ItemStack stone) {
int outputI;
for (ArrayList<ItemStack> itemStackList : EquivalencyHandler.instance().getAllLists()) {
ItemStack[] currentList = new ItemStack[itemStackList.size()];
currentList = itemStackList.toArray(currentList);
for (int i = 0; i < currentList.length; i++) {
outputI = i == currentList.length - 1 ? 0 : i + 1;
RecipeHelper.addRecipe(currentList[outputI], stone, GeneralHelper.convertSingleStackToPluralStacks(currentList[i]));
}
}
}
public static void initReconstructiveRecipes(ItemStack stone) {
/* 3 Bone Meal --> 1 Bone */
RecipeHelper.addRecipe(Item.bone, stone, dyeBoneMeal, dyeBoneMeal, dyeBoneMeal);
/* 2 Blaze Powder --> 1 Blaze Rod */
RecipeHelper.addRecipe(Item.blazeRod, stone, Item.blazePowder, Item.blazePowder);
}
public static void initDestructorRecipes(ItemStack stone) {
/* Smooth Stone -> Cobble Stone */
RecipeHelper.addRecipe(Block.cobblestone, stone, Block.stone);
/* Glass -> Sand */
RecipeHelper.addRecipe(Block.sand, stone, Block.glass);
/* Glowstone Block -> 4 Glowstone Dust */
RecipeHelper.addRecipe(new ItemStack(Item.lightStoneDust, 4), stone, Block.glowStone);
/* Brick Block -> 4 Bricks */
RecipeHelper.addRecipe(new ItemStack(Item.brick, 4), stone, Block.brick);
}
@SuppressWarnings("rawtypes")
public static void initPortableSmeltingRecipes(ItemStack stone) {
Map furnaceMap = FurnaceRecipes.smelting().getSmeltingList();
Map furnaceMetaMap = ObfuscationReflectionHelper.getPrivateValue(FurnaceRecipes.class, FurnaceRecipes.smelting(), "metaSmeltingList");
Iterator iterFurnaceKeyMap = furnaceMap.keySet().iterator();
Iterator iterFurnaceMetaKeyMap = furnaceMetaMap.keySet().iterator();
Integer furnaceMapKey;
List furnaceMetaMapKey;
ItemStack unSmeltedStack;
while (iterFurnaceKeyMap.hasNext()) {
furnaceMapKey = (Integer) iterFurnaceKeyMap.next();
unSmeltedStack = new ItemStack(furnaceMapKey, 1, 0);
RecipeHelper.addSmeltingRecipe(unSmeltedStack, stone, anyCoal);
}
while (iterFurnaceMetaKeyMap.hasNext()) {
furnaceMetaMapKey = (List) iterFurnaceMetaKeyMap.next();
unSmeltedStack = new ItemStack((Integer) furnaceMetaMapKey.get(0), 1, (Integer) furnaceMetaMapKey.get(1));
RecipeHelper.addSmeltingRecipe(unSmeltedStack, stone, anyCoal);
}
}
protected static void initEquivalencyList() {
EquivalencyHandler.instance().addObjects(Block.sand, Block.dirt, Block.cobblestone, Block.grass);
EquivalencyHandler.instance().addObjects(Block.plantYellow, Block.plantRed);
EquivalencyHandler.instance().addObjects(Block.mushroomRed, Block.mushroomBrown);
EquivalencyHandler.instance().addObjects(Item.pumpkinSeeds, Item.melonSeeds);
EquivalencyHandler.instance().addObjects(Block.pumpkin, Block.melon);
EquivalencyHandler.instance().addObjects(Block.pumpkinStem, Block.melonStem);
EquivalencyHandler.instance().addObjects(Block.stairsWoodSpruce, Block.stairsWoodBirch, Block.stairsWoodJungle);
EquivalencyHandler.instance().addObjects(new ItemStack(Item.paper, 3), new ItemStack(Item.reed, 3));
EquivalencyHandler.instance().addObjects(new ItemStack(Item.flint, 2), new ItemStack(Block.gravel, 2), new ItemStack(Block.sandStone, 2, 0), new ItemStack(Block.sandStone, 2, 1), new ItemStack(Block.sandStone, 2, 2));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.planks, 4));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.wood, 4));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.woodSingleSlab, 4));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.woodDoubleSlab, 4));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.sapling, 4));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.leaves, 4));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.tallGrass, 3));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.cloth, 16));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Block.stoneBrick, 4));
EquivalencyHandler.instance().addObjects(RecipeHelper.getMetaCycle(Item.dyePowder, 16, 3, 4, 15));
}
}