package com.jaquadro.minecraft.gardenstuff.integration.nei;
import codechicken.nei.NEIClientUtils;
import codechicken.nei.NEIServerUtils;
import codechicken.nei.PositionedStack;
import codechicken.nei.recipe.TemplateRecipeHandler;
import com.jaquadro.minecraft.gardenstuff.GardenStuff;
import com.jaquadro.minecraft.gardenstuff.client.gui.GuiBloomeryFurnace;
import com.jaquadro.minecraft.gardenstuff.core.ModItems;
import net.minecraft.block.Block;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
public class BloomeryFurnaceRecipeHandler extends TemplateRecipeHandler
{
private static class FuelPair {
public PositionedStack stack;
public int burnTime;
public FuelPair (ItemStack ingred, int burnTime) {
this.stack = new PositionedStack(ingred, 51, 42, false);
this.burnTime = burnTime;
}
}
public class SmeltingPair extends CachedRecipe {
PositionedStack ingred1;
PositionedStack ingred2;
PositionedStack result;
public SmeltingPair (ItemStack ingred1, ItemStack ingred2, ItemStack result) {
ingred1.stackSize = 1;
ingred2.stackSize = 1;
this.ingred1 = new PositionedStack(ingred1, 51, 6);
this.ingred2 = new PositionedStack(ingred2, 30, 6);
this.result = new PositionedStack(result, 111, 24);
}
@Override
public List<PositionedStack> getIngredients () {
return getCycledIngredients(BloomeryFurnaceRecipeHandler.this.cycleticks / 48, Arrays.asList(new PositionedStack[] { ingred1, ingred2 }));
}
@Override
public PositionedStack getResult () {
return result;
}
@Override
public PositionedStack getOtherStack () {
return (BloomeryFurnaceRecipeHandler.afuels.get(BloomeryFurnaceRecipeHandler.this.cycleticks / 48 % BloomeryFurnaceRecipeHandler.afuels.size())).stack;
}
}
public static ArrayList<FuelPair> afuels;
public static HashSet<Block> efuels;
public BloomeryFurnaceRecipeHandler () { }
public void loadTransferRects () {
this.transferRects.add(new RecipeTransferRect(new Rectangle(50, 23, 18, 18), "fuel", new Object[0]));
this.transferRects.add(new RecipeTransferRect(new Rectangle(74, 23, 24, 18), "smelting", new Object[0]));
}
@Override
public Class<? extends GuiContainer> getGuiClass () {
return GuiBloomeryFurnace.class;
}
@Override
public String getGuiTexture () {
return GardenStuff.MOD_ID + ":textures/gui/bloomery_furnace.png";
}
@Override
public String getRecipeName () {
return NEIClientUtils.translate("recipe.gardenstuff.bloomeryFurnace", new Object[0]);
}
@Override
public TemplateRecipeHandler newInstance () {
if (afuels == null || afuels.isEmpty())
findFuels();
return super.newInstance();
}
@Override
public void loadCraftingRecipes (String outputId, Object... results) {
if (outputId.equals("bloomerySmelting") && getClass() == BloomeryFurnaceRecipeHandler.class) {
arecipes.add(new SmeltingPair(new ItemStack(Items.iron_ingot), new ItemStack(Blocks.sand), new ItemStack(ModItems.wroughtIronIngot)));
arecipes.add(new SmeltingPair(new ItemStack(Blocks.iron_ore), new ItemStack(Blocks.sand), new ItemStack(ModItems.wroughtIronIngot)));
}
else
super.loadCraftingRecipes(outputId, results);
}
@Override
public void loadCraftingRecipes (ItemStack result) {
if (NEIServerUtils.areStacksSameType(new ItemStack(ModItems.wroughtIronIngot), result)) {
arecipes.add(new SmeltingPair(new ItemStack(Items.iron_ingot), new ItemStack(Blocks.sand), new ItemStack(ModItems.wroughtIronIngot)));
arecipes.add(new SmeltingPair(new ItemStack(Blocks.iron_ore), new ItemStack(Blocks.sand), new ItemStack(ModItems.wroughtIronIngot)));
}
}
@Override
public void loadUsageRecipes (String inputId, Object... ingredients) {
//if (inputId.equals("bloomerySmelting") && getClass() == BloomeryFurnaceRecipeHandler.class)
// loadCraftingRecipes("bloomerySmelting", new Object[0]);
//else
super.loadUsageRecipes(inputId, ingredients);
}
@Override
public void loadUsageRecipes (ItemStack ingredient) {
ItemStack[] primary = new ItemStack[] { new ItemStack(Items.iron_ingot), new ItemStack(Blocks.iron_ore) };
ItemStack[] secondary = new ItemStack[] { new ItemStack(Blocks.sand) };
for (ItemStack stack : primary) {
if (NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)) {
for (ItemStack secondaryStack : secondary) {
SmeltingPair arecipe = new SmeltingPair(stack, secondaryStack, new ItemStack(ModItems.wroughtIronIngot));
arecipe.setIngredientPermutation(Arrays.asList(new PositionedStack[]{arecipe.ingred1}), ingredient);
arecipes.add(arecipe);
}
}
}
for (ItemStack stack : secondary) {
if (NEIServerUtils.areStacksSameTypeCrafting(stack, ingredient)) {
for (ItemStack primaryStack : primary) {
SmeltingPair arecipe = new SmeltingPair(primaryStack, stack, new ItemStack(ModItems.wroughtIronIngot));
arecipe.setIngredientPermutation(Arrays.asList(new PositionedStack[]{arecipe.ingred2}), ingredient);
arecipes.add(arecipe);
}
}
}
}
@Override
public void drawExtras (int recipe) {
this.drawProgressBar(51, 25, 176, 0, 14, 14, 48, 7);
this.drawProgressBar(74, 23, 176, 14, 24, 16, 48, 0);
}
private static void findFuels () {
afuels = new ArrayList<FuelPair>();
afuels.add(new FuelPair(new ItemStack(Items.coal, 1, 1), 1600));
}
@Override
public String getOverlayIdentifier () {
return "bloomerySmelting";
}
}