package com.agilemods.materiamuto.common.emc.recipe.compat.thaumcraft;
import com.agilemods.materiamuto.api.IEMCRegistry;
import com.agilemods.materiamuto.api.IRecipeScanner;
import com.agilemods.materiamuto.api.wrapper.VanillaStackWrapper;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import net.minecraft.item.ItemStack;
import thaumcraft.api.ThaumcraftApi;
import thaumcraft.api.crafting.CrucibleRecipe;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ThaumcraftCrucibleScanner implements IRecipeScanner {
private Map<VanillaStackWrapper, Set<VanillaStackWrapper>> components = Maps.newHashMap();
private void addCatalyst(VanillaStackWrapper result, ItemStack ... catalyst) {
Set<VanillaStackWrapper> set = components.get(result);
if (set == null) {
set = Sets.newHashSet();
}
for (ItemStack c : catalyst) {
set.add(new VanillaStackWrapper(c));
}
components.put(result, set);
}
@Override
public void scan() {
for (Object r : ThaumcraftApi.getCraftingRecipes()) {
if (r instanceof CrucibleRecipe) {
CrucibleRecipe crucibleRecipe = (CrucibleRecipe) r;
ItemStack result = crucibleRecipe.getRecipeOutput();
Object input = crucibleRecipe.catalyst;
if (input instanceof ItemStack) {
addCatalyst(new VanillaStackWrapper(result), (ItemStack)input);
} else if (input instanceof List<?>) {
addCatalyst(new VanillaStackWrapper(result), (ItemStack[]) ((List) input).toArray(new ItemStack[((List) input).size()]));
}
}
}
}
@Override
public double getEMC(IEMCRegistry emcRegistry, VanillaStackWrapper vanillaStackWrapper) {
double emc = Double.MAX_VALUE;
Set<VanillaStackWrapper> set = components.get(vanillaStackWrapper);
if (set != null) {
for (VanillaStackWrapper stackWrapper : components.get(vanillaStackWrapper)) {
double subEmc = stackWrapper.getEMC();
if (subEmc > 0 && subEmc < emc) {
emc = subEmc;
}
}
} else {
return 0;
}
return emc;
}
}