package com.jaquadro.minecraft.gardentrees.core.recipe; import com.jaquadro.minecraft.gardencore.api.WoodRegistry; import com.jaquadro.minecraft.gardencore.util.UniqueMetaIdentifier; import com.jaquadro.minecraft.gardentrees.block.tile.TileEntityWoodProxy; import com.jaquadro.minecraft.gardentrees.core.ModBlocks; import net.minecraft.block.Block; import net.minecraft.init.Items; import net.minecraft.inventory.InventoryCrafting; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraft.world.World; import java.util.ArrayList; import java.util.List; public class WoodPostRecipe implements IRecipe { public static final List<Item> axeList = new ArrayList<Item>(); static { axeList.add(Items.wooden_axe); axeList.add(Items.stone_axe); axeList.add(Items.iron_axe); axeList.add(Items.golden_axe); axeList.add(Items.diamond_axe); } private UniqueMetaIdentifier woodType; public WoodPostRecipe (UniqueMetaIdentifier uid) { woodType = uid; } @Override public boolean matches (InventoryCrafting inventory, World world) { return getCraftingResult(inventory) != null; } @Override public ItemStack getCraftingResult (InventoryCrafting inventory) { int size = getGridSize(inventory); for (int row = 0; row < size - 1; row++) { for (int col = 0; col < size; col++) { ItemStack axe = inventory.getStackInRowAndColumn(col, row); if (!isValidAxe(axe)) continue; ItemStack wood = inventory.getStackInRowAndColumn(col, row + 1); if (wood == null) continue; Block woodBlock = Block.getBlockFromItem(wood.getItem()); int woodMeta = wood.getItemDamage(); if (!WoodRegistry.instance().contains(woodBlock, woodMeta)) continue; if (woodBlock == woodType.getBlock() && woodMeta == woodType.meta) return new ItemStack(ModBlocks.thinLog, 4, TileEntityWoodProxy.composeMetadata(woodBlock, woodMeta)); } } return null; } @Override public int getRecipeSize () { return 4; } @Override public ItemStack getRecipeOutput () { return new ItemStack(ModBlocks.thinLog, 4, TileEntityWoodProxy.composeMetadata(woodType.getBlock(), woodType.meta)); } private int getGridSize (InventoryCrafting inventory) { return (int)Math.sqrt(inventory.getSizeInventory()); } private boolean isValidAxe (ItemStack itemStack) { if (itemStack == null) return false; Item item = itemStack.getItem(); for (int i = 0, n = axeList.size(); i < n; i++) { if (item == axeList.get(i)) return true; } return false; } }