package tonius.neiintegration.mods.bigreactors; import java.awt.Point; import java.awt.Rectangle; import java.util.Map; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; import tonius.neiintegration.PositionedFluidTank; import tonius.neiintegration.RecipeHandlerBase; import tonius.neiintegration.Utils; import codechicken.lib.gui.GuiDraw; import codechicken.nei.PositionedStack; import codechicken.nei.api.API; import cpw.mods.fml.relauncher.ReflectionHelper; import erogenousbeef.bigreactors.api.data.OreDictToReactantMapping; import erogenousbeef.bigreactors.api.data.ReactantData; import erogenousbeef.bigreactors.api.registry.Reactants; import erogenousbeef.bigreactors.client.gui.GuiCyaniteReprocessor; public class RecipeHandlerCyaniteReprocessor extends RecipeHandlerBase { private static Map<String, OreDictToReactantMapping> solidToReactant; @Override public void prepare() { solidToReactant = ReflectionHelper.getPrivateValue(Reactants.class, null, "_solidToReactant"); API.setGuiOffset(GuiCyaniteReprocessor.class, 8, 17); } public class CachedCyaniteReprocessorRecipe extends CachedBaseRecipe { public PositionedStack input; public PositionedStack output; public PositionedFluidTank water; public CachedCyaniteReprocessorRecipe(ItemStack input, ItemStack output) { input = input.copy(); input.stackSize = 2; this.input = new PositionedStack(input, 36, 25); this.output = new PositionedStack(output, 108, 25); this.water = new PositionedFluidTank(new FluidStack(FluidRegistry.WATER, 1000), 5000, new Rectangle(1, 1, 16, 62), "neiintegration:textures/overlays.png", new Point(18, 97)); } @Override public PositionedStack getIngredient() { return this.input; } @Override public PositionedStack getResult() { return this.output; } @Override public PositionedFluidTank getFluidTank() { return this.water; } } @Override public String getRecipeName() { return Utils.translate("tile.blockBRDevice.0.name", false); } @Override public String getRecipeID() { return "bigreactors.cyaniteReprocessor"; } @Override public String getGuiTexture() { return "bigreactors:textures/gui/CyaniteReprocessor.png"; } @Override public void loadTransferRects() { this.addTransferRect(68, 25, 27, 18); } @Override public Class<? extends GuiContainer> getGuiClass() { return GuiCyaniteReprocessor.class; } @Override public void drawBackground(int recipe) { this.changeToGuiTexture(); GuiDraw.drawTexturedModalRect(0, 0, 8, 16, 160, 65); this.changeToOverlayTexture(); GuiDraw.drawTexturedModalRect(0, 0, 0, 96, 18, 64); } @Override public void drawExtras(int recipe) { this.drawProgressBar(68, 24, 0, 177, 27, 18, 100, 0); GuiDraw.drawStringC("2000 RF", 81, 48, 0x808080, false); } @Override public void loadAllRecipes() { for (OreDictToReactantMapping o : solidToReactant.values()) { ReactantData data = Reactants.getReactant(o.getProduct()); if (data.isWaste()) { for (ItemStack ore : OreDictionary.getOres(o.getSource())) { this.arecipes.add(new CachedCyaniteReprocessorRecipe(ore, OreDictionary.getOres("ingotBlutonium").get(0))); } } } } @Override public void loadCraftingRecipes(ItemStack result) { if (Utils.areStacksSameTypeCraftingSafe(OreDictionary.getOres("ingotBlutonium").get(0), result)) { this.loadAllRecipes(); } } @Override public void loadUsageRecipes(ItemStack ingred) { super.loadUsageRecipes(ingred); for (OreDictToReactantMapping o : solidToReactant.values()) { ReactantData data = Reactants.getReactant(o.getProduct()); if (data.isWaste()) { for (ItemStack ore : OreDictionary.getOres(o.getSource())) { if (Utils.areStacksSameTypeCraftingSafe(ore, ingred)) { this.arecipes.add(new CachedCyaniteReprocessorRecipe(ore, OreDictionary.getOres("ingotBlutonium").get(0))); } } } } } @Override public void loadUsageRecipes(FluidStack ingredient) { if (ingredient.getFluid() == FluidRegistry.WATER) { this.loadAllRecipes(); } } }