Finished crafting page.

This commit is contained in:
Ellpeck 2016-11-11 16:37:45 +01:00
parent 12abe6f6f6
commit 24e2a9e88d
10 changed files with 91 additions and 34 deletions

View file

@ -75,20 +75,20 @@ public final class InitBooklet{
if(!ActuallyAdditionsAPI.ALL_CHAPTERS.contains(chapter)){ if(!ActuallyAdditionsAPI.ALL_CHAPTERS.contains(chapter)){
ActuallyAdditionsAPI.ALL_CHAPTERS.add(chapter); ActuallyAdditionsAPI.ALL_CHAPTERS.add(chapter);
chapCount++; chapCount++;
}
for(IBookletPage page : chapter.getAllPages()){ for(IBookletPage page : chapter.getAllPages()){
List<ItemStack> items = page.getItemStacksForPage(); pageCount++;
List<FluidStack> fluids = page.getFluidStacksForPage();
if((items != null && !items.isEmpty()) || (fluids != null && !items.isEmpty())){ List<ItemStack> items = page.getItemStacksForPage();
if(!ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA.contains(page)){ List<FluidStack> fluids = page.getFluidStacksForPage();
ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA.add(page);
infoCount++; if((items != null && !items.isEmpty()) || (fluids != null && !items.isEmpty())){
if(!ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA.contains(page)){
ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA.add(page);
infoCount++;
}
} }
} }
pageCount++;
} }
} }
} }

View file

@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.mod.util.AssetUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@ -56,6 +57,7 @@ public abstract class GuiBooklet extends GuiBookletBase{
@Override @Override
public void drawScreen(int mouseX, int mouseY, float partialTicks){ public void drawScreen(int mouseX, int mouseY, float partialTicks){
GlStateManager.color(1F, 1F, 1F);
this.mc.getTextureManager().bindTexture(RES_LOC_GUI); this.mc.getTextureManager().bindTexture(RES_LOC_GUI);
drawModalRectWithCustomSizedTexture(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, 512, 512); drawModalRectWithCustomSizedTexture(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize, 512, 512);

View file

@ -12,13 +12,17 @@ package de.ellpeck.actuallyadditions.mod.booklet.gui;
import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter;
import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry;
import de.ellpeck.actuallyadditions.api.booklet.IBookletPage;
import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase; import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase;
import de.ellpeck.actuallyadditions.mod.booklet.button.EntryButton; import de.ellpeck.actuallyadditions.mod.booklet.button.EntryButton;
import de.ellpeck.actuallyadditions.mod.booklet.misc.BookletUtils;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
import java.io.IOException;
import java.util.List; import java.util.List;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@ -27,11 +31,13 @@ public class GuiEntry extends GuiBooklet{
//The page in the entry. Say you have 2 more chapters than fit on one double page, then those 2 would be displayed on entryPage 1 instead. //The page in the entry. Say you have 2 more chapters than fit on one double page, then those 2 would be displayed on entryPage 1 instead.
private final int entryPage; private final int entryPage;
private final IBookletEntry entry; private final IBookletEntry entry;
private final List<IBookletChapter> chapters;
public GuiEntry(GuiScreen previousScreen, GuiBookletBase parentPage, IBookletEntry entry, int entryPage){ public GuiEntry(GuiScreen previousScreen, GuiBookletBase parentPage, IBookletEntry entry, int entryPage){
super(previousScreen, parentPage); super(previousScreen, parentPage);
this.entryPage = entryPage; this.entryPage = entryPage;
this.entry = entry; this.entry = entry;
this.chapters = entry.getChaptersForGuiDisplaying(this, null /*TODO Insert search bar text here*/);
} }
public GuiEntry(GuiScreen previousScreen, GuiBookletBase parentPage, IBookletEntry entry, IBookletChapter chapterForPageCalc){ public GuiEntry(GuiScreen previousScreen, GuiBookletBase parentPage, IBookletEntry entry, IBookletChapter chapterForPageCalc){
@ -48,12 +54,11 @@ public class GuiEntry extends GuiBooklet{
super.initGui(); super.initGui();
int idOffset = this.entryPage*(BUTTONS_PER_PAGE*2); int idOffset = this.entryPage*(BUTTONS_PER_PAGE*2);
List<IBookletChapter> chapters = this.entry.getChaptersForGuiDisplaying(this, null /*TODO Insert search bar text here*/);
for(int x = 0; x < 2; x++){ for(int x = 0; x < 2; x++){
for(int y = 0; y < BUTTONS_PER_PAGE; y++){ for(int y = 0; y < BUTTONS_PER_PAGE; y++){
int id = y+x*BUTTONS_PER_PAGE; int id = y+x*BUTTONS_PER_PAGE;
if(chapters.size() > id+idOffset){ if(this.chapters.size() > id+idOffset){
IBookletChapter chapter = chapters.get(id+idOffset); IBookletChapter chapter = this.chapters.get(id+idOffset);
this.buttonList.add(new EntryButton(id, this.guiLeft+14+x*142, this.guiTop+11+y*13, 115, 10, chapter.getLocalizedNameWithFormatting(), chapter.getDisplayItemStack())); this.buttonList.add(new EntryButton(id, this.guiLeft+14+x*142, this.guiTop+11+y*13, 115, 10, chapter.getLocalizedNameWithFormatting(), chapter.getDisplayItemStack()));
} }
else{ else{
@ -63,6 +68,26 @@ public class GuiEntry extends GuiBooklet{
} }
} }
@Override
protected void actionPerformed(GuiButton button) throws IOException{
if(button instanceof EntryButton){
int actualId = button.id+this.entryPage*(BUTTONS_PER_PAGE*2);
if(this.chapters.size() > actualId){
IBookletChapter chapter = this.chapters.get(actualId);
if(chapter != null){
IBookletPage[] pages = chapter.getAllPages();
if(pages != null && pages.length > 0){
this.mc.displayGuiScreen(BookletUtils.createPageGui(this.previousScreen, this, pages[0]));
}
}
}
}
else{
super.actionPerformed(button);
}
}
@Override @Override
public void addItemRenderer(ItemStack renderedStack, int x, int y, float scale, boolean shouldTryTransfer){ public void addItemRenderer(ItemStack renderedStack, int x, int y, float scale, boolean shouldTryTransfer){

View file

@ -52,7 +52,7 @@ public class GuiMainPage extends GuiBooklet{
if(ActuallyAdditionsAPI.BOOKLET_ENTRIES.size() > button.id){ if(ActuallyAdditionsAPI.BOOKLET_ENTRIES.size() > button.id){
IBookletEntry entry = ActuallyAdditionsAPI.BOOKLET_ENTRIES.get(button.id); IBookletEntry entry = ActuallyAdditionsAPI.BOOKLET_ENTRIES.get(button.id);
if(entry != null){ if(entry != null){
this.mc.displayGuiScreen(new GuiEntry(null, this, entry, 0)); this.mc.displayGuiScreen(new GuiEntry(this.previousScreen, this, entry, 0));
} }
} }
} }

View file

@ -15,6 +15,7 @@ import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase;
import de.ellpeck.actuallyadditions.mod.booklet.page.ItemDisplay; import de.ellpeck.actuallyadditions.mod.booklet.page.ItemDisplay;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@ -111,6 +112,15 @@ public class GuiPage extends GuiBooklet{
@Override @Override
public void drawScreen(int mouseX, int mouseY, float partialTicks){ public void drawScreen(int mouseX, int mouseY, float partialTicks){
super.drawScreen(mouseX, mouseY, partialTicks);
for(int i = 0; i < this.pages.length; i++){
IBookletPage page = this.pages[i];
if(page != null){
GlStateManager.color(1F, 1F, 1F);
page.drawScreenPre(this, this.guiLeft+6+i*142, this.guiTop+7, mouseX, mouseY, partialTicks);
}
}
for(ItemDisplay display : this.itemDisplays){ for(ItemDisplay display : this.itemDisplays){
display.drawPre(); display.drawPre();
} }
@ -118,22 +128,13 @@ public class GuiPage extends GuiBooklet{
for(int i = 0; i < this.pages.length; i++){ for(int i = 0; i < this.pages.length; i++){
IBookletPage page = this.pages[i]; IBookletPage page = this.pages[i];
if(page != null){ if(page != null){
page.drawScreenPre(this, this.guiLeft+6+i*142, this.guiTop+7, mouseX, mouseY, partialTicks); GlStateManager.color(1F, 1F, 1F);
}
}
super.drawScreen(mouseX, mouseY, partialTicks);
for(ItemDisplay display : this.itemDisplays){
display.drawPost(mouseX, mouseY);
}
for(int i = 0; i < this.pages.length; i++){
IBookletPage page = this.pages[i];
if(page != null){
page.drawScreenPost(this, this.guiLeft+6+i*142, this.guiTop+7, mouseX, mouseY, partialTicks); page.drawScreenPost(this, this.guiLeft+6+i*142, this.guiTop+7, mouseX, mouseY, partialTicks);
} }
} }
for(ItemDisplay display : this.itemDisplays){
display.drawPost(mouseX, mouseY);
}
} }
@Override @Override

View file

@ -19,6 +19,7 @@ import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.init.SoundEvents; import net.minecraft.init.SoundEvents;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.text.TextFormatting; import net.minecraft.util.text.TextFormatting;

View file

@ -11,13 +11,19 @@
package de.ellpeck.actuallyadditions.mod.booklet.page; package de.ellpeck.actuallyadditions.mod.booklet.page;
import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase; import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase;
import de.ellpeck.actuallyadditions.mod.booklet.gui.GuiBooklet;
import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.ModUtil;
import de.ellpeck.actuallyadditions.mod.util.StringUtil;
import de.ellpeck.actuallyadditions.mod.util.Util; import de.ellpeck.actuallyadditions.mod.util.Util;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe; import net.minecraft.item.crafting.IRecipe;
import net.minecraft.item.crafting.ShapedRecipes; import net.minecraft.item.crafting.ShapedRecipes;
import net.minecraft.item.crafting.ShapelessRecipes; import net.minecraft.item.crafting.ShapelessRecipes;
import net.minecraftforge.fml.client.config.GuiUtils;
import net.minecraftforge.fml.relauncher.ReflectionHelper; import net.minecraftforge.fml.relauncher.ReflectionHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.oredict.ShapedOreRecipe; import net.minecraftforge.oredict.ShapedOreRecipe;
import net.minecraftforge.oredict.ShapelessOreRecipe; import net.minecraftforge.oredict.ShapelessOreRecipe;
@ -26,6 +32,7 @@ import java.util.List;
public class PageCrafting extends BookletPage{ public class PageCrafting extends BookletPage{
private String recipeTypeLocKey;
private boolean isWildcard; private boolean isWildcard;
private final List<IRecipe> recipes; private final List<IRecipe> recipes;
@ -43,6 +50,19 @@ public class PageCrafting extends BookletPage{
return this; return this;
} }
@Override
@SideOnly(Side.CLIENT)
public void drawScreenPre(GuiBookletBase gui, int startX, int startY, int mouseX, int mouseY, float partialTicks){
super.drawScreenPre(gui, startX, startY, mouseX, mouseY, partialTicks);
gui.mc.getTextureManager().bindTexture(GuiBooklet.RES_LOC_GADGETS);
GuiUtils.drawTexturedModalRect(startX+5, startY+6, 20, 0, 116, 54, 0);
gui.renderScaledAsciiString("("+StringUtil.localize(this.recipeTypeLocKey)+")", startX+6, startY+65, 0, false, 0.65F);
PageTextOnly.renderTextToPage(gui, this, startX+6, startY+80);
}
@Override @Override
public void initGui(GuiBookletBase gui, int startX, int startY){ public void initGui(GuiBookletBase gui, int startX, int startY){
super.initGui(gui, startX, startY); super.initGui(gui, startX, startY);
@ -87,12 +107,14 @@ public class PageCrafting extends BookletPage{
width = shaped.recipeWidth; width = shaped.recipeWidth;
height = shaped.recipeHeight; height = shaped.recipeHeight;
stacks = shaped.recipeItems; stacks = shaped.recipeItems;
this.recipeTypeLocKey = "booklet."+ModUtil.MOD_ID+".shapedRecipe";
} }
else if(recipe instanceof ShapelessRecipes){ else if(recipe instanceof ShapelessRecipes){
ShapelessRecipes shapeless = (ShapelessRecipes)recipe; ShapelessRecipes shapeless = (ShapelessRecipes)recipe;
for(int i = 0; i < shapeless.recipeItems.size(); i++){ for(int i = 0; i < shapeless.recipeItems.size(); i++){
stacks[i] = shapeless.recipeItems.get(i); stacks[i] = shapeless.recipeItems.get(i);
} }
this.recipeTypeLocKey = "booklet."+ModUtil.MOD_ID+".shapelessRecipe";
} }
else if(recipe instanceof ShapedOreRecipe){ else if(recipe instanceof ShapedOreRecipe){
ShapedOreRecipe shaped = (ShapedOreRecipe)recipe; ShapedOreRecipe shaped = (ShapedOreRecipe)recipe;
@ -109,6 +131,7 @@ public class PageCrafting extends BookletPage{
stacks[i] = input instanceof ItemStack ? (ItemStack)input : (((List<ItemStack>)input).isEmpty() ? null : ((List<ItemStack>)input).get(0)); stacks[i] = input instanceof ItemStack ? (ItemStack)input : (((List<ItemStack>)input).isEmpty() ? null : ((List<ItemStack>)input).get(0));
} }
} }
this.recipeTypeLocKey = "booklet."+ModUtil.MOD_ID+".shapedOreRecipe";
} }
else if(recipe instanceof ShapelessOreRecipe){ else if(recipe instanceof ShapelessOreRecipe){
ShapelessOreRecipe shapeless = (ShapelessOreRecipe)recipe; ShapelessOreRecipe shapeless = (ShapelessOreRecipe)recipe;
@ -116,6 +139,7 @@ public class PageCrafting extends BookletPage{
Object input = shapeless.getInput().get(i); Object input = shapeless.getInput().get(i);
stacks[i] = input instanceof ItemStack ? (ItemStack)input : (((List<ItemStack>)input).isEmpty() ? null : ((List<ItemStack>)input).get(0)); stacks[i] = input instanceof ItemStack ? (ItemStack)input : (((List<ItemStack>)input).isEmpty() ? null : ((List<ItemStack>)input).get(0));
} }
this.recipeTypeLocKey = "booklet."+ModUtil.MOD_ID+".shapelessOreRecipe";
} }
for(int x = 0; x < width; x++){ for(int x = 0; x < width; x++){
@ -128,11 +152,11 @@ public class PageCrafting extends BookletPage{
copy.setItemDamage(0); copy.setItemDamage(0);
} }
gui.addItemRenderer(stack, startX+10+x*18, startY+10+y*18, 1F, true); gui.addItemRenderer(copy, startX+6+x*18, startY+7+y*18, 1F, true);
} }
} }
} }
gui.addItemRenderer(recipe.getRecipeOutput(), startX+50, startY+50, 1F, false); gui.addItemRenderer(recipe.getRecipeOutput(), startX+100, startY+25, 1F, false);
} }
} }

View file

@ -11,6 +11,7 @@
package de.ellpeck.actuallyadditions.mod.booklet.page; package de.ellpeck.actuallyadditions.mod.booklet.page;
import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase; import de.ellpeck.actuallyadditions.api.booklet.internal.GuiBookletBase;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@ -22,12 +23,16 @@ public class PageTextOnly extends BookletPage{
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void drawScreenPost(GuiBookletBase gui, int startX, int startY, int mouseX, int mouseY, float partialTicks){ public void drawScreenPre(GuiBookletBase gui, int startX, int startY, int mouseX, int mouseY, float partialTicks){
super.drawScreenPost(gui, startX, startY, mouseX, mouseY, partialTicks); super.drawScreenPre(gui, startX, startY, mouseX, mouseY, partialTicks);
renderTextToPage(gui, this, startX+6, startY+5);
}
String text = this.getInfoText(); @SideOnly(Side.CLIENT)
public static void renderTextToPage(GuiBookletBase gui, BookletPage page, int x, int y){
String text = page.getInfoText();
if(text != null && !text.isEmpty()){ if(text != null && !text.isEmpty()){
gui.renderSplitScaledAsciiString(text, startX+6, startY+5, 0, false, 0.75F, 120); gui.renderSplitScaledAsciiString(text, x, y, 0, false, 0.75F, 120);
} }
} }
} }

View file

@ -53,7 +53,6 @@ public final class StringUtil{
return ""; return "";
} }
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public static void renderScaledAsciiString(FontRenderer font, String text, int x, int y, int color, boolean shadow, float scale){ public static void renderScaledAsciiString(FontRenderer font, String text, int x, int y, int color, boolean shadow, float scale){
GlStateManager.pushMatrix(); GlStateManager.pushMatrix();

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB