package gregtech.api.util; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.semiFluidFuels; import java.util.HashMap; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; import gregtech.api.recipe.RecipeMaps; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.core.util.minecraft.FluidUtils; 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 GT_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."); semiFluidFuels.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 : RecipeMaps.denseLiquidFuels.getAllRecipes()) { 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."); semiFluidFuels.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 GT_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."); semiFluidFuels.add(aRecipe); } } else { Logger.INFO("Boosted Fuel value for " + p.getKey().getLocalizedName() + " exceeds 512k, ignoring."); } } } return !semiFluidFuels.getAllRecipes().isEmpty(); } }