package codechicken.nei.recipe;
import codechicken.nei.PositionedStack;
import codechicken.nei.api.IOverlayHandler;
import codechicken.nei.api.IRecipeOverlayRenderer;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;
import org.lwjgl.input.Keyboard;
import java.util.List;
/**
* Do not implement this. Implement one of it's subinterfaces, either {@link ICraftingHandler} or {@link IUsageHandler}
*/
public interface IRecipeHandler
{
/**
*
* @return The name of this inventory.
* To be displayed at the top of the viewing container.
*/
public String getRecipeName();
/**
*
* @return The number of recipes that this handler contains.
*/
public int numRecipes();
/**
* Draw the background of this recipe handler (basically the slot layout image).
* @param gui A GuiManager for drawing functions.
* @param recipe The recipe index to draw at this position.
*/
public void drawBackground(int recipe);
/**
* Draw the foreground of this recipe handler (for things like progress bars).
* @param gui A GuiManager for drawing functions.
* @param recipe The recipe index to draw at this position.
*/
public void drawForeground(int recipe);
/**
*
* @param recipe The recipe index to get items for.
* @return A list of the ingredient {@link PositionedStack}s in this recipe relative to the top left corner of your recipe drawing space.
*/
public List<PositionedStack> getIngredientStacks(int recipe);
/**
*
* @param recipe The recipe index to get items for.
* @return A list of the other {@link PositionedStack}s in this recipe relative to the top left corner of your recipe drawing space. For example fuel in furnaces.
*/
public List<PositionedStack> getOtherStacks(int recipetype);
/**
*
* @param recipe The recipe index to get the result for.
* @return The recipe result {@link PositionedStack} relative to the top left corner of your recipe drawing space.
*/
public PositionedStack getResultStack(int recipe);
/**
* A tick function called for updating progress bars and cycling damage items.
*/
public void onUpdate();
/**
*
* @param recipe The recipe index to check for.
* @param gui The GUI to overlay.
* @param container The container of the GUI.
* @return true if this recipe can render an overlay for the specified type of inventory GUI.
*/
public boolean hasOverlay(GuiContainer gui, Container container, int recipe);
/**
*
* @param recipe The recipe index to get the overlay renderer for.
* @return An instance of {@link IRecipeOverlayRenderer} to be used for rendering the overlay of this specific recipe.
*/
public IRecipeOverlayRenderer getOverlayRenderer(GuiContainer gui, int recipe);
/**
*
* @param recipe The recipe index to get the overlay renderer for.
* @return An instance of {@link IOverlayHandler} to be used for rendering the overlay of this specific recipe.
*/
public IOverlayHandler getOverlayHandler(GuiContainer gui, int recipe);
/**
*
* @return The number of recipes that can fit on a page in the viewer (1 or 2)
*/
public int recipiesPerPage();
/**
*
* @param gui An instance of the currentscreen
* @param currenttip The current tooltip, will contain item name and info
* @param recipe The recipe index being handled
* @return The modified tooltip. DO NOT return null
*/
public List<String> handleTooltip(GuiRecipe gui, List<String> currenttip, int recipe);
/**
*
* @param gui An instance of the currentscreen
* @param The itemstack currently under the mouse
* @param The current tooltip, will contain item name and info
* @param recipe The recipe index being handled
* @return The modified tooltip. DO NOT return null
*/
public List<String> handleItemTooltip(GuiRecipe gui, ItemStack stack, List<String> currenttip, int recipe);
/**
*
* @param gui An instance of the currentscreen
* @param keyChar The character representing the keyPress
* @param keyCode The KeyCode as defined in {@link Keyboard}
* @return true to terminate further processing of this event.
*/
public boolean keyTyped(GuiRecipe gui, char keyChar, int keyCode, int recipe);
/**
*
* @param gui An instance of the currentscreen
* @param button The button index being pressed, {0 = Left Click, 1 = Right Click, 2 = Middle Click}
* @return true to terminate further processing of this event.
*/
public boolean mouseClicked(GuiRecipe gui, int button, int recipe);
}