package buildcraftAdditions.utils.fluids; import buildcraft.api.recipes.BuildcraftRecipeRegistry; import buildcraft.api.recipes.CraftingResult; import buildcraft.api.recipes.IFlexibleRecipe; import buildcraftAdditions.BuildcraftAdditions; import buildcraftAdditions.api.recipe.BCARecipeManager; import buildcraftAdditions.blocks.FluidBlockBase; import buildcraftAdditions.core.BucketHandler; import buildcraftAdditions.core.Logger; import buildcraftAdditions.items.ItemBucketBCA; import buildcraftAdditions.items.itemBlocks.ItemBlockFluid; import buildcraftAdditions.utils.DummyFlexibleCrafter; import buildcraftAdditions.utils.Utils; import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import java.util.Collection; /** * Copyright (c) 2014-2015, AEnterprise * http://buildcraftadditions.wordpress.com/ * Buildcraft Additions is distributed under the terms of GNU GPL v3.0 * Please check the contents of the license located in * http://buildcraftadditions.wordpress.com/wiki/licensing-stuff/ */ public class RefineryRecipeConverter { public static FluidStack[] inputs, outputs, gasses; public static void doYourThing() { int teller = 0; int fluids = FluidRegistry.getRegisteredFluids().size(); CraftingResult<FluidStack>[] results = new CraftingResult[fluids]; inputs = new FluidStack[fluids]; outputs = new FluidStack[fluids]; gasses = new FluidStack[fluids]; Collection<IFlexibleRecipe<FluidStack>> recipes = BuildcraftRecipeRegistry.refinery.getRecipes(); for (IFlexibleRecipe<FluidStack> recipe : recipes) { DummyFlexibleCrafter dummy = new DummyFlexibleCrafter(); for (Fluid fluid : FluidRegistry.getRegisteredFluids().values()) { if (fluid != null) { dummy.input.setFluid(new FluidStack(fluid, 1000)); dummy.output.setFluid(null); CraftingResult<FluidStack> currentResult = recipe.craft(dummy, false); if (currentResult != null) { results[teller] = currentResult; dummy.output.fill(currentResult.crafted.copy(), true); outputs[teller] = dummy.output.getFluid(); inputs[teller] = new FluidStack(dummy.input.getFluid(), 1000 - dummy.input.getFluidAmount()); teller++; Logger.info("Buildcraft refinery recipe detected, input: " + dummy.input.getFluid().getLocalizedName() + ", output: " + dummy.output.getFluid().getLocalizedName()); } } } } for (int t = 0; t < teller; t++) { BCAGasFluid fluid = new BCAGasFluid(results[t].crafted.getFluid().getName() + "Gas", results[t].crafted.getFluid()); fluid.setDensity(-50); fluid.setGaseous(true); fluid.setIcons(results[t].crafted.getFluid().getStillIcon(), results[t].crafted.getFluid().getFlowingIcon()); fluid.setTemperature(results[t].energyCost); fluid.setUnlocalizedName(results[t].crafted.getFluid().getUnlocalizedName().replaceFirst("fluid\\.", "") + ".gas"); fluid.setViscosity(5); FluidRegistry.registerFluid(fluid); gasses[t] = new FluidStack(fluid, outputs[t].amount); Block fluidBlock = new FluidBlockBase(fluid); GameRegistry.registerBlock(fluidBlock, ItemBlockFluid.class, fluid.getName() + "Block"); fluid.setBlock(fluidBlock); Item bucket = new ItemBucketBCA(fluid); BucketHandler.registerBucket(fluid, new ItemStack(bucket)); if (inputs[t].getFluid().getBlock() == null) { fluidBlock = new FluidBlockBase(inputs[t].getFluid()); GameRegistry.registerBlock(fluidBlock, inputs[t].getFluid().getName() + "Block"); } BCARecipeManager.cooling.addRecipe(new FluidStack(fluid, 1), new FluidStack(outputs[t], 1), ((float) results[t].energyCost) / 2000); BCARecipeManager.refinery.addRecipe(inputs[t], new FluidStack(fluid, outputs[t].amount), results[t].energyCost); } BuildcraftAdditions.proxy.registerBucketRenderer(); } public static class BCAGasFluid extends Fluid { private final FluidStack fluid; public BCAGasFluid(String fluidName, Fluid fluid) { super(fluidName); this.fluid = new FluidStack(fluid, FluidContainerRegistry.BUCKET_VOLUME); } @Override public int getColor() { return 0xb0b3b6; } @Override public String getLocalizedName(FluidStack stack) { return Utils.localizeFormatted("fluid.gas.name", fluid.getLocalizedName()); } } }