From 38ee016c37840d1460152df80e9824da765f13a5 Mon Sep 17 00:00:00 2001 From: Alex_hawks Date: Tue, 11 Mar 2014 23:26:25 +0800 Subject: [PATCH] Untested fluid support for RecipeHandlers... --- .../core/nei/RITemplateRecipeHandler.java | 115 +++++++++++++++--- 1 file changed, 101 insertions(+), 14 deletions(-) diff --git a/src/main/java/resonantinduction/core/nei/RITemplateRecipeHandler.java b/src/main/java/resonantinduction/core/nei/RITemplateRecipeHandler.java index 576decb1..21f3c404 100644 --- a/src/main/java/resonantinduction/core/nei/RITemplateRecipeHandler.java +++ b/src/main/java/resonantinduction/core/nei/RITemplateRecipeHandler.java @@ -1,12 +1,18 @@ package resonantinduction.core.nei; +import java.awt.Point; import java.awt.Rectangle; import java.util.ArrayList; import java.util.List; import java.util.Map; +import calclavia.lib.utility.LanguageUtility; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; import resonantinduction.api.recipe.MachineRecipes; import resonantinduction.api.recipe.RecipeResource; @@ -14,7 +20,9 @@ import resonantinduction.api.recipe.RecipeResource.FluidStackResource; import resonantinduction.api.recipe.RecipeResource.ItemStackResource; import resonantinduction.api.recipe.RecipeResource.OreDictResource; import resonantinduction.core.Reference; +import codechicken.core.gui.GuiDraw; import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.GuiRecipe; import codechicken.nei.recipe.TemplateRecipeHandler; public abstract class RITemplateRecipeHandler extends TemplateRecipeHandler @@ -68,12 +76,92 @@ public abstract class RITemplateRecipeHandler extends TemplateRecipeHandler this.arecipes.add(recipe); } } - else - { - super.loadCraftingRecipes(outputId, results); - } + else + { + super.loadCraftingRecipes(outputId, results); + } } + @Override + public void drawExtras(int recipeID) + { + GuiScreen gui = Minecraft.getMinecraft().currentScreen; + + CachedRecipe cachedRecipe = this.arecipes.get(recipeID); + + if (cachedRecipe instanceof CachedRIRecipe) + { + CachedRIRecipe recipe = (CachedRIRecipe) cachedRecipe; + for (int i = 0; i < recipe.inputFluids.length; i++) + { + FluidStack fluid = recipe.inputFluids[i]; + if (fluid == null) + break; + + gui.drawTexturedModelRectFromIcon(inputSlots[i][0], inputSlots[i][1], fluid.getFluid().getIcon(), 16, 16); + } + + for (int i = 0; i < recipe.outputFluids.length; i++) + { + FluidStack fluid = recipe.outputFluids[i]; + if (fluid == null) + break; + + gui.drawTexturedModelRectFromIcon(outputSlots[i][0], outputSlots[i][1], fluid.getFluid().getIcon(), 16, 16); + } + } + } + + @Override + public List handleTooltip(GuiRecipe gui, List currenttip, int recipeID) + { + if(currenttip.size() == 0) + { + Point offset = gui.getRecipePosition(recipeID); + Point mouse = GuiDraw.getMousePosition(); + + CachedRecipe cachedRecipe = this.arecipes.get(recipeID); + + if (cachedRecipe instanceof CachedRIRecipe) + { + CachedRIRecipe recipe = (CachedRIRecipe) cachedRecipe; + FluidStack fluid; + Rectangle rect; + + for (int i = 0; i < recipe.inputFluids.length; i++) + { + fluid = recipe.inputFluids[i]; + if (fluid == null) + break; + + rect = new Rectangle(offset.x + inputSlots[i][0] - 1, offset.y + inputSlots[i][1] - 1, 18, 18); + if (rect.contains(mouse)) + { + currenttip.add(fluid.getFluid().getLocalizedName()); + currenttip.add(LanguageUtility.getLocal("tooltip.ri.amount").replace("%s", fluid.amount + "")); + return currenttip; + } + } + + for (int i = 0; i < recipe.outputFluids.length; i++) + { + fluid = recipe.outputFluids[i]; + if (fluid == null) + break; + + rect = new Rectangle(offset.x + outputSlots[i][0] - 1, offset.y + outputSlots[i][1] - 1, 18, 18); + if (rect.contains(mouse)) + { + currenttip.add(fluid.getFluid().getLocalizedName()); + currenttip.add(LanguageUtility.getLocal("tooltip.ri.amount").replace("%s", fluid.amount + "")); + return currenttip; + } + } + } + } + return currenttip; + } + @Override public void loadCraftingRecipes(ItemStack result) { @@ -98,10 +186,10 @@ public abstract class RITemplateRecipeHandler extends TemplateRecipeHandler this.arecipes.add(recipe); } } - else - { - super.loadUsageRecipes(inputId, ingredients); - } + else + { + super.loadUsageRecipes(inputId, ingredients); + } } @Override @@ -127,6 +215,9 @@ public abstract class RITemplateRecipeHandler extends TemplateRecipeHandler private List inputs = new ArrayList(); private List outputs = new ArrayList(); + final FluidStack[] inputFluids = new FluidStack[inputSlots.length]; + final FluidStack[] outputFluids = new FluidStack[outputSlots.length]; + @Override public List getOtherStacks() { @@ -147,9 +238,7 @@ public abstract class RITemplateRecipeHandler extends TemplateRecipeHandler } else if (output instanceof FluidStackResource) { - // this.inputs.add(new PositionedStack(((FluidStackResource) output), - // outputSlots[i][0], outputSlots[i++][1])); - // TODO fluidstack compatibility + this.outputFluids[i++] = ((FluidStackResource) output).fluidStack; } this.outputs.get(this.outputs.size() - 1).generatePermutations(); } @@ -176,9 +265,7 @@ public abstract class RITemplateRecipeHandler extends TemplateRecipeHandler } else if (input instanceof FluidStackResource) { - // this.inputs.add(new PositionedStack(((FluidStackResource) input), - // inputSlots[i][0], inputSlots[i++][1])); - // TODO fluidstack compatibility + this.inputFluids[i++] = ((FluidStackResource) input).fluidStack; } if (this.inputs.size() > 0)