package blusunrize.immersiveengineering.common.util.compat; import blusunrize.immersiveengineering.api.crafting.ArcFurnaceRecipe; import blusunrize.immersiveengineering.api.crafting.CrusherRecipe; import blusunrize.immersiveengineering.common.util.IELogger; import blusunrize.immersiveengineering.common.util.Utils; import net.minecraft.item.ItemStack; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.HashMap; public class DenseOresHelper extends IECompatModule { @Override public void preInit() { } @Override public void init() { } @Override public void postInit() { HashMap map = null; Field f_baseOreDictionary = null; try{ Class c_DenseOresRegistry = Class.forName("com.rwtema.denseores.DenseOresRegistry"); Class c_DenseOre = Class.forName("com.rwtema.denseores.DenseOre"); f_baseOreDictionary = c_DenseOre.getField("baseOreDictionaryEntry"); map = (HashMap)c_DenseOresRegistry.getField("ores").get(null); }catch(Exception e) {} if(map!=null && f_baseOreDictionary!=null) { ArrayList<CrusherRecipe> crushRecipes = new ArrayList<CrusherRecipe>(); ArrayList<ArcFurnaceRecipe> arcRecipes = new ArrayList<ArcFurnaceRecipe>(); for(Object o : map.values()) { try{ String baseOre = (String)f_baseOreDictionary.get(o); String denseOre = "dense"+baseOre; boolean c = false; for(CrusherRecipe recipe: CrusherRecipe.recipeList) if(recipe.oreInputString!=null && recipe.oreInputString.equals(baseOre)) { ItemStack out = Utils.copyStackWithAmount(recipe.output, recipe.output.stackSize*4); CrusherRecipe r = new CrusherRecipe(out, denseOre, (int)(recipe.getTotalProcessEnergy()/CrusherRecipe.energyModifier)*2); if(recipe.secondaryOutput!=null) { Object[] newSec = new Object[recipe.secondaryOutput.length*2]; for(int i=0; i<recipe.secondaryOutput.length; i++) { newSec[i*2] = Utils.copyStackWithAmount(recipe.secondaryOutput[i], recipe.secondaryOutput[i].stackSize*2); newSec[i*2+1] = recipe.secondaryChance[i]*2; } r.addToSecondaryOutput(newSec); } crushRecipes.add(r); c=true; } boolean a = false; for(ArcFurnaceRecipe recipe: ArcFurnaceRecipe.recipeList) if(recipe.oreInputString!=null && recipe.oreInputString.equals(baseOre)) { ItemStack out = Utils.copyStackWithAmount(recipe.output, recipe.output.stackSize*4); int time = (int)(recipe.getTotalProcessTime()/ArcFurnaceRecipe.timeModifier); int perTick = (int)(recipe.getTotalProcessEnergy()/recipe.getTotalProcessTime()/ArcFurnaceRecipe.energyModifier); ArcFurnaceRecipe r = new ArcFurnaceRecipe(out, denseOre, recipe.slag, time, perTick); arcRecipes.add(r); a=true; } IELogger.info("Supporting DenseOre: "+denseOre+"("+baseOre+"), Crushing:"+(c?"[X]":"[ ]")+", Arc Smelting:"+(a?"[X]":"[ ]")); }catch(Exception e) {e.printStackTrace();} } CrusherRecipe.recipeList.addAll(crushRecipes); ArcFurnaceRecipe.recipeList.addAll(arcRecipes); } } }