ActuallyAdditions/src/main/java/ellpeck/actuallyadditions/nei/NEIBookletRecipe.java
2015-11-27 16:48:01 +01:00

173 lines
6.4 KiB
Java

/*
* This file ("BookletInfoRecipeHandler.java") is part of the Actually Additions Mod for Minecraft.
* It is created and owned by Ellpeck and distributed
* under the Actually Additions License to be found at
* http://github.com/Ellpeck/ActuallyAdditions/blob/master/README.md
* View the source code at https://github.com/Ellpeck/ActuallyAdditions
*
* © 2015 Ellpeck
*/
package ellpeck.actuallyadditions.nei;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.PositionedStack;
import codechicken.nei.recipe.RecipeInfo;
import codechicken.nei.recipe.TemplateRecipeHandler;
import ellpeck.actuallyadditions.booklet.BookletUtils;
import ellpeck.actuallyadditions.booklet.InitBooklet;
import ellpeck.actuallyadditions.booklet.chapter.BookletChapter;
import ellpeck.actuallyadditions.booklet.page.BookletPage;
import ellpeck.actuallyadditions.booklet.page.PagePicture;
import ellpeck.actuallyadditions.util.ItemUtil;
import ellpeck.actuallyadditions.util.ModUtil;
import ellpeck.actuallyadditions.util.StringUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
public class NEIBookletRecipe extends TemplateRecipeHandler implements INEIRecipeHandler{
public static final String NAME = "actuallyadditions.booklet";
public NEIBookletRecipe(){
RecipeInfo.setGuiOffset(this.getGuiClass(), 0, 0);
}
@Override
public BookletPage getPageForInfo(int page){
return ((CachedInfoStack)this.arecipes.get(page)).thePage;
}
@Override
public void loadTransferRects(){
transferRects.add(new RecipeTransferRect(new Rectangle(0, 18, 165, Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT), NAME));
}
@SuppressWarnings("unchecked")
@Override
public void loadCraftingRecipes(String outputId, Object... results){
if(outputId.equals(NAME) && getClass() == NEIBookletRecipe.class){
for(BookletPage page : InitBooklet.pagesWithItemStackData){
ItemStack[] stacks = page.getItemStacksForPage();
//So that you don't see things like Mashed Food more than once
ArrayList<ItemStack> nonDoubleStacks = new ArrayList<ItemStack>();
for(ItemStack stack : stacks){
if(!ItemUtil.contains(nonDoubleStacks, stack, true)){
arecipes.add(new CachedInfoStack(stack, page));
nonDoubleStacks.add(stack);
}
}
}
}
else{
super.loadCraftingRecipes(outputId, results);
}
}
@SuppressWarnings("unchecked")
@Override
public void loadCraftingRecipes(ItemStack result){
ArrayList<BookletPage> allPages = BookletUtils.getPagesForStack(result);
for(BookletPage page : allPages){
CachedInfoStack theRecipe = new CachedInfoStack(result, page);
arecipes.add(theRecipe);
}
}
@SuppressWarnings("unchecked")
@Override
public void loadUsageRecipes(ItemStack ingredient){
ArrayList<BookletPage> allPages = BookletUtils.getPagesForStack(ingredient);
for(BookletPage page : allPages){
CachedInfoStack theRecipe = new CachedInfoStack(ingredient, page);
arecipes.add(theRecipe);
}
}
@Override
public String getGuiTexture(){
return ModUtil.MOD_ID_LOWER+":textures/gui/guiFurnaceDouble.png";
}
@Override
public String getOverlayIdentifier(){
return NAME;
}
@Override
public void drawExtras(int recipe){
CachedInfoStack stack = (CachedInfoStack)this.arecipes.get(recipe);
if(stack.theStack != null){
List header = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.header").replaceAll("<item>", EnumChatFormatting.BLUE+"").replaceAll("<r>", EnumChatFormatting.BLACK+""), 165);
for(int i = 0; i < header.size(); i++){
GuiDraw.drawString((String)header.get(i), 0, 18+i*(Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT+1), 0, false);
}
int maxLines = 5;
BookletChapter chapter = stack.thePage.getChapter();
String aText = (chapter.pages[0] instanceof PagePicture && chapter.pages.length > 1 ? chapter.pages[1] : chapter.pages[0]).getText();
List text = Minecraft.getMinecraft().fontRenderer.listFormattedStringToWidth(aText != null ? aText : EnumChatFormatting.DARK_RED+StringUtil.localize("container.nei."+ModUtil.MOD_ID_LOWER+".booklet.noText"), 165);
for(int i = 0; i < Math.min(maxLines, text.size()); i++){
GuiDraw.drawString(text.get(i)+(i == maxLines-1 && text.size() > maxLines ? EnumChatFormatting.RESET+""+EnumChatFormatting.BLACK+"..." : ""), 0, 18+25+i*(Minecraft.getMinecraft().fontRenderer.FONT_HEIGHT+1), 0, false);
}
GuiDraw.drawString(EnumChatFormatting.ITALIC+chapter.getLocalizedName(), 0, 97, 0, false);
GuiDraw.drawString(EnumChatFormatting.ITALIC+"Page "+stack.thePage.getID(), 0, 107, 0, false);
}
}
@Override
public Class<? extends GuiContainer> getGuiClass(){
return null;
}
@Override
public void drawBackground(int recipe){
}
@Override
public void drawForeground(int recipe){
GL11.glColor4f(1F, 1F, 1F, 1F);
GL11.glDisable(GL11.GL_LIGHTING);
this.drawExtras(recipe);
}
@Override
public int recipiesPerPage(){
return 1;
}
@Override
public String getRecipeName(){
return StringUtil.localize("container.nei."+NAME+".name");
}
public class CachedInfoStack extends CachedRecipe{
public ItemStack theStack;
public BookletPage thePage;
public CachedInfoStack(ItemStack theStack, BookletPage thePage){
this.theStack = theStack;
this.thePage = thePage;
}
@Override
public PositionedStack getResult(){
if(this.theStack != null){
ItemStack newStack = this.theStack.copy();
newStack.stackSize = 1;
return new PositionedStack(newStack, 0, 0);
}
return null;
}
}
}