/*******************************************************************************
* AbyssalCraft
* Copyright (c) 2012 - 2017 Shinoow.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0.txt
*
* Contributors:
* Shinoow - implementation
******************************************************************************/
package com.shinoow.abyssalcraft.integration.jei.transmutator;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.annotation.Nonnull;
import mezz.jei.api.IGuiHelper;
import mezz.jei.api.IJeiHelpers;
import mezz.jei.api.recipe.IStackHelper;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
import com.shinoow.abyssalcraft.common.blocks.tile.TileEntityTransmutator;
import com.shinoow.abyssalcraft.integration.jei.JEIUtils;
public class TransmutatorFuelRecipeMaker {
@Nonnull
public static List<TransmutatorFuelRecipe> getFuelRecipes(JEIUtils itemRegistry, IJeiHelpers helpers) {
IGuiHelper guiHelper = helpers.getGuiHelper();
IStackHelper stackHelper = helpers.getStackHelper();
List<ItemStack> fuelStacks = itemRegistry.getTransmutatorFuels();
Set<String> oreDictNames = new HashSet<>();
List<TransmutatorFuelRecipe> fuelRecipes = new ArrayList<>(fuelStacks.size());
for (ItemStack fuelStack : fuelStacks) {
if (fuelStack == null)
continue;
int[] oreIDs = OreDictionary.getOreIDs(fuelStack);
if (oreIDs.length > 0)
for (int oreID : oreIDs) {
String name = OreDictionary.getOreName(oreID);
if (oreDictNames.contains(name))
continue;
oreDictNames.add(name);
List<ItemStack> oreDictFuels = OreDictionary.getOres(name);
Collection<ItemStack> oreDictFuelsSet = stackHelper.getAllSubtypes(oreDictFuels);
removeNoBurnTime(oreDictFuelsSet);
if (oreDictFuels.isEmpty())
continue;
int burnTime = getBurnTime(oreDictFuels.get(0));
fuelRecipes.add(new TransmutatorFuelRecipe(guiHelper, oreDictFuelsSet, burnTime));
}
else {
List<ItemStack> fuels = stackHelper.getSubtypes(fuelStack);
removeNoBurnTime(fuels);
if (fuels.isEmpty())
continue;
int burnTime = getBurnTime(fuels.get(0));
fuelRecipes.add(new TransmutatorFuelRecipe(guiHelper, fuels, burnTime));
}
}
return fuelRecipes;
}
private static void removeNoBurnTime(Collection<ItemStack> itemStacks) {
Iterator<ItemStack> iterator = itemStacks.iterator();
while (iterator.hasNext()) {
ItemStack itemStack = iterator.next();
if (getBurnTime(itemStack) == 0)
iterator.remove();
}
}
private static int getBurnTime(ItemStack itemStack) {
return TileEntityTransmutator.getItemBurnTime(itemStack);
}
}