package gregtech.api.util; import static gregtech.api.util.GTPP_Recipe.GTPP_Recipe_Map.sSemiFluidLiquidFuels; import java.util.HashMap; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.core.util.minecraft.FluidUtils; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; public class SemiFluidFuelHandler { public static boolean addSemiFluidFuel(ItemStack aFuelItem, int aFuelValue) { FluidStack p = FluidContainerRegistry.getFluidForFilledItem(aFuelItem); if (p != null && aFuelValue > 0) { return addSemiFluidFuel(p, aFuelValue); } else { Logger.INFO("Fuel value for " + aFuelItem.getDisplayName() + " is <= 0, ignoring."); } return false; } public static boolean addSemiFluidFuel(FluidStack aFuel, int aFuelValue) { FluidStack p = aFuel; if (p != null && aFuelValue > 0) { GT_Recipe aRecipe = new GTPP_Recipe(true, new ItemStack[] {}, new ItemStack[] {}, null, new int[] {}, new FluidStack[] { p }, null, 0, 0, aFuelValue); if (aRecipe.mSpecialValue > 0) { Logger.INFO("Added " + aRecipe.mFluidInputs[0].getLocalizedName() + " to the Semi-Fluid Generator fuel map. Fuel Produces "+(aRecipe.mSpecialValue*1000)+"EU per 1000L."); sSemiFluidLiquidFuels.add(aRecipe); return true; } } else { Logger.INFO("Fuel value for " + p != null ? p.getLocalizedName() : "NULL Fluid" + " is <= 0, ignoring."); } return false; } public static boolean generateFuels() { final FluidStack aCreosote = FluidUtils.getFluidStack("creosote", 1000); final FluidStack aHeavyFuel = FluidUtils.getFluidStack("liquid_heavy_fuel", 1000); final FluidStack aHeavyOil = FluidUtils.getFluidStack("liquid_heavy_oil", 1000); final HashMap> aFoundFluidsFromItems = new HashMap>(); // Find Fluids From items for (final GT_Recipe r : gregtech.api.util.GT_Recipe.GT_Recipe_Map.sDenseLiquidFuels.mRecipeList) { GT_Recipe g = r.copy(); if (g != null && g.mEnabled && g.mInputs.length > 0 && g.mInputs[0] != null) { for (ItemStack i : g.mInputs) { FluidStack f = FluidContainerRegistry.getFluidForFilledItem(i); if (f != null) { Pair aData = new Pair(f, g.mSpecialValue); aFoundFluidsFromItems.put(aData.hashCode(), aData); } } } else if (g != null && g.mEnabled && g.mFluidInputs.length > 0 && g.mFluidInputs[0] != null) { boolean aContainsCreosote = false; for (FluidStack f : g.mFluidInputs) { if (f.isFluidEqual(aCreosote)) { aContainsCreosote = true; } } g.mSpecialValue *= aContainsCreosote ? 6 : 3; Logger.INFO("Added " + g.mFluidInputs[0].getLocalizedName() + " to the Semi-Fluid Generator fuel map. Fuel Produces "+g.mSpecialValue+"EU per 1000L."); sSemiFluidLiquidFuels.add(g); } } for (Pair p : aFoundFluidsFromItems.values()) { if (p != null) { int aFuelValue = p.getValue(); if (p.getKey().isFluidEqual(aCreosote)) { aFuelValue *= 6; } else if (p.getKey().isFluidEqual(aHeavyFuel) || p.getKey().isFluidEqual(aHeavyOil)){ aFuelValue *= 1.5; } else { aFuelValue *= 2; } if (aFuelValue <= (128*3)) { GT_Recipe aRecipe = new GTPP_Recipe(true, new ItemStack[] {}, new ItemStack[] {}, null, new int[] {}, new FluidStack[] { p.getKey() }, null, 0, 0, aFuelValue); if (aRecipe.mSpecialValue > 0) { Logger.INFO("Added " + aRecipe.mFluidInputs[0].getLocalizedName() + " to the Semi-Fluid Generator fuel map. Fuel Produces "+(aRecipe.mSpecialValue*1000)+"EU per 1000L."); sSemiFluidLiquidFuels.add(aRecipe); } } else { Logger.INFO("Boosted Fuel value for " + p.getKey().getLocalizedName() + " exceeds 512k, ignoring."); } } } return sSemiFluidLiquidFuels.mRecipeList.size() > 0; } }