From c5402285d8f6df0855f0b971ab5bb8ec61fd3a0b Mon Sep 17 00:00:00 2001 From: Electroblob <35599699+Electroblob77@users.noreply.github.com> Date: Tue, 6 Mar 2018 23:36:16 +0000 Subject: [PATCH] Fix crash when viewing recipe pages of wizard's handbook --- .../electroblob/wizardry/CommonProxy.java | 6 +- .../java/electroblob/wizardry/Wizardry.java | 2 +- .../wizardry/client/ClientProxy.java | 3 +- .../wizardry/client/GuiWizardHandbook.java | 559 +++++++----------- 4 files changed, 216 insertions(+), 354 deletions(-) diff --git a/src/main/java/electroblob/wizardry/CommonProxy.java b/src/main/java/electroblob/wizardry/CommonProxy.java index a5ae25a3..b4e216b4 100644 --- a/src/main/java/electroblob/wizardry/CommonProxy.java +++ b/src/main/java/electroblob/wizardry/CommonProxy.java @@ -45,15 +45,13 @@ public class CommonProxy { public void registerKeyBindings(){ } - public void registerSpellHUD(){ - } + public void registerSpellHUD(){} public net.minecraft.client.model.ModelBiped getWizardArmourModel(){ return null; } - public void initMixedFontRenderer(){ - } + public void initGuiBits(){} // SECTION Particles // =============================================================================================================== diff --git a/src/main/java/electroblob/wizardry/Wizardry.java b/src/main/java/electroblob/wizardry/Wizardry.java index 898a940f..93c6760f 100644 --- a/src/main/java/electroblob/wizardry/Wizardry.java +++ b/src/main/java/electroblob/wizardry/Wizardry.java @@ -169,7 +169,7 @@ public class Wizardry { // Recipes WizardryRegistry.registerRecipes(); - proxy.initMixedFontRenderer(); + proxy.initGuiBits(); } @EventHandler diff --git a/src/main/java/electroblob/wizardry/client/ClientProxy.java b/src/main/java/electroblob/wizardry/client/ClientProxy.java index 2d3b287c..90824ec8 100644 --- a/src/main/java/electroblob/wizardry/client/ClientProxy.java +++ b/src/main/java/electroblob/wizardry/client/ClientProxy.java @@ -181,9 +181,10 @@ public class ClientProxy extends CommonProxy { } @Override - public void initMixedFontRenderer(){ + public void initGuiBits(){ mixedFontRenderer = new MixedFontRenderer(Minecraft.getMinecraft().gameSettings, new ResourceLocation("textures/font/ascii.png"), Minecraft.getMinecraft().renderEngine, false); + GuiWizardHandbook.initDisplayRecipes(); } // SECTION Misc diff --git a/src/main/java/electroblob/wizardry/client/GuiWizardHandbook.java b/src/main/java/electroblob/wizardry/client/GuiWizardHandbook.java index 99ba5d45..ec16bd6e 100644 --- a/src/main/java/electroblob/wizardry/client/GuiWizardHandbook.java +++ b/src/main/java/electroblob/wizardry/client/GuiWizardHandbook.java @@ -7,6 +7,8 @@ import java.util.ArrayList; import java.util.List; import org.apache.commons.io.Charsets; +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; @@ -28,6 +30,7 @@ import net.minecraft.client.renderer.vertex.DefaultVertexFormats; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; +import net.minecraft.util.NonNullList; import net.minecraft.util.ResourceLocation; public class GuiWizardHandbook extends GuiScreen { @@ -53,8 +56,10 @@ public class GuiWizardHandbook extends GuiScreen { public static final ResourceLocation craftingGrids = new ResourceLocation(Wizardry.MODID, "textures/gui/handbook_recipes.png"); - private ArrayList> text; - private ArrayList
sections; + private List> text; + private List
sections; + + private static final List>>> RECIPES = new ArrayList<>(); private int guiPage, imagePage; @@ -63,7 +68,7 @@ public class GuiWizardHandbook extends GuiScreen { xSize = 288; ySize = 180; } - + @Override public void drawScreen(int mouseX, int mouseY, float par3){ @@ -152,344 +157,29 @@ public class GuiWizardHandbook extends GuiScreen { } } - ItemStack[][] craftingGrid; - ItemStack craftingResult; - - // Tooltips are rendered after recipes to prevent tooltips on the left appearing behind items on the right. - if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2){ - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.GOLD_NUGGET); - craftingGrid[1][0] = new ItemStack(Blocks.CARPET, 1, 10); - craftingGrid[2][0] = new ItemStack(Items.GOLD_NUGGET); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][1] = new ItemStack(Blocks.LAPIS_BLOCK); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[0][2] = new ItemStack(Blocks.STONE); - craftingGrid[1][2] = new ItemStack(Blocks.STONE); - craftingGrid[2][2] = new ItemStack(Blocks.STONE); - craftingResult = new ItemStack(WizardryBlocks.arcane_workbench); - this.renderCraftingRecipe(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][1] = new ItemStack(Items.STICK); - craftingGrid[0][2] = new ItemStack(Items.GOLD_NUGGET); - craftingResult = new ItemStack(WizardryItems.magic_wand); - this.renderCraftingRecipe(xPos + 23, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][1] = new ItemStack(Items.BOOK); - craftingGrid[1][2] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_crystal); - craftingResult = new ItemStack(WizardryItems.spell_book, 1, 1); - this.renderCraftingRecipe(xPos + 156, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.BOOK); - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_crystal); - craftingResult = new ItemStack(WizardryItems.wizard_handbook); - this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 1){ - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryBlocks.crystal_flower); - craftingResult = new ItemStack(WizardryItems.magic_crystal, 2); - this.renderCraftingRecipe(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][1] = new ItemStack(Items.GLASS_BOTTLE); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[0][2] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][2] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[2][2] = new ItemStack(WizardryItems.magic_crystal); - craftingResult = new ItemStack(WizardryItems.mana_flask); - this.renderCraftingRecipe(xPos + 23, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[1][0] = new ItemStack(Blocks.STONE); - craftingGrid[0][1] = new ItemStack(Blocks.STONE); - craftingGrid[1][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][2] = new ItemStack(Blocks.STONE); - craftingGrid[2][1] = new ItemStack(Blocks.STONE); - craftingResult = new ItemStack(WizardryBlocks.transportation_stone, 2); - this.renderCraftingRecipe(xPos + 156, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[1][0] = new ItemStack(Items.STRING); - craftingGrid[0][1] = new ItemStack(Items.STRING); - craftingGrid[1][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][2] = new ItemStack(Items.STRING); - craftingGrid[2][1] = new ItemStack(Items.STRING); - craftingResult = new ItemStack(WizardryItems.magic_silk, 2); - this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 2){ - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_silk); - craftingResult = new ItemStack(WizardryItems.wizard_hat); - this.renderCraftingRecipe(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[1][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][2] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[1][2] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][2] = new ItemStack(WizardryItems.magic_silk); - craftingResult = new ItemStack(WizardryItems.wizard_robe); - this.renderCraftingRecipe(xPos + 23, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][2] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][2] = new ItemStack(WizardryItems.magic_silk); - craftingResult = new ItemStack(WizardryItems.wizard_leggings); - this.renderCraftingRecipe(xPos + 156, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_silk); - craftingResult = new ItemStack(WizardryItems.wizard_boots); - this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 3){ - - if(Wizardry.settings.useAlternateScrollRecipe){ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.PAPER); - craftingGrid[1][0] = new ItemStack(Items.STRING); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_crystal); - craftingResult = new ItemStack(WizardryItems.blank_scroll); - this.renderCraftingRecipe(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - }else{ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.PAPER); - craftingGrid[1][0] = new ItemStack(Items.STRING); - craftingResult = new ItemStack(WizardryItems.blank_scroll); - this.renderCraftingRecipe(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - } - - if(Wizardry.settings.firebombIsCraftable){ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.BLAZE_POWDER); - craftingGrid[1][0] = new ItemStack(Items.BLAZE_POWDER); - craftingGrid[0][1] = new ItemStack(Items.GLASS_BOTTLE); - craftingGrid[1][1] = new ItemStack(Items.GUNPOWDER); - craftingResult = new ItemStack(WizardryItems.firebomb, 3); - this.renderCraftingRecipe(xPos + 23, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - } - - if(Wizardry.settings.poisonBombIsCraftable){ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.SPIDER_EYE); - craftingGrid[1][0] = new ItemStack(Items.SPIDER_EYE); - craftingGrid[0][1] = new ItemStack(Items.GLASS_BOTTLE); - craftingGrid[1][1] = new ItemStack(Items.GUNPOWDER); - craftingResult = new ItemStack(WizardryItems.poison_bomb, 3); - this.renderCraftingRecipe(xPos + 156, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - } - - if(Wizardry.settings.smokeBombIsCraftable){ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.COAL); - craftingGrid[1][0] = new ItemStack(Items.COAL); - craftingGrid[0][1] = new ItemStack(Items.GLASS_BOTTLE); - craftingGrid[1][1] = new ItemStack(Items.GUNPOWDER); - craftingResult = new ItemStack(WizardryItems.smoke_bomb, 3); - this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - } + // Which page of the recipes this is + int recipePage = pageNumber - (sections.get(sections.size() - 1).pageNumber - 1) / 2; + + if(recipePage >= 0 && recipePage < 4){ + // 4 recipes per page, hence the recipePage*4 + this.renderCraftingRecipe(xPos + 23, yPos + 39, mouseX, mouseY, RECIPES.get(recipePage*4).getRight(), RECIPES.get(recipePage*4).getLeft()); + this.renderCraftingRecipe(xPos + 23, yPos + 98, mouseX, mouseY, RECIPES.get(recipePage*4+1).getRight(), RECIPES.get(recipePage*4+1).getLeft()); + this.renderCraftingRecipe(xPos + 156, yPos + 39, mouseX, mouseY, RECIPES.get(recipePage*4+2).getRight(), RECIPES.get(recipePage*4+2).getLeft()); + this.renderCraftingRecipe(xPos + 156, yPos + 98, mouseX, mouseY, RECIPES.get(recipePage*4+3).getRight(), RECIPES.get(recipePage*4+3).getLeft()); + // Tooltips are rendered after recipes to prevent tooltips on the left appearing behind items on the right. + this.renderCraftingTooltips(xPos + 23, yPos + 39, mouseX, mouseY, RECIPES.get(recipePage*4).getRight(), RECIPES.get(recipePage*4).getLeft()); + this.renderCraftingTooltips(xPos + 23, yPos + 98, mouseX, mouseY, RECIPES.get(recipePage*4+1).getRight(), RECIPES.get(recipePage*4+1).getLeft()); + this.renderCraftingTooltips(xPos + 156, yPos + 39, mouseX, mouseY, RECIPES.get(recipePage*4+2).getRight(), RECIPES.get(recipePage*4+2).getLeft()); + this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, RECIPES.get(recipePage*4+3).getRight(), RECIPES.get(recipePage*4+3).getLeft()); } - if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2){ - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.GOLD_NUGGET); - craftingGrid[1][0] = new ItemStack(Blocks.CARPET, 1, 10); - craftingGrid[2][0] = new ItemStack(Items.GOLD_NUGGET); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][1] = new ItemStack(Blocks.LAPIS_BLOCK); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[0][2] = new ItemStack(Blocks.STONE); - craftingGrid[1][2] = new ItemStack(Blocks.STONE); - craftingGrid[2][2] = new ItemStack(Blocks.STONE); - craftingResult = new ItemStack(WizardryBlocks.arcane_workbench); - this.renderCraftingTooltips(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][1] = new ItemStack(Items.STICK); - craftingGrid[0][2] = new ItemStack(Items.GOLD_NUGGET); - craftingResult = new ItemStack(WizardryItems.magic_wand); - this.renderCraftingTooltips(xPos + 23, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][1] = new ItemStack(Items.BOOK); - craftingGrid[1][2] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_crystal); - craftingResult = new ItemStack(WizardryItems.spell_book, 1, 1); - this.renderCraftingTooltips(xPos + 156, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.BOOK); - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_crystal); - craftingResult = new ItemStack(WizardryItems.wizard_handbook); - this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 1){ - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryBlocks.crystal_flower); - craftingResult = new ItemStack(WizardryItems.magic_crystal, 2); - this.renderCraftingTooltips(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][1] = new ItemStack(Items.GLASS_BOTTLE); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[0][2] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][2] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[2][2] = new ItemStack(WizardryItems.magic_crystal); - craftingResult = new ItemStack(WizardryItems.mana_flask); - this.renderCraftingTooltips(xPos + 23, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[1][0] = new ItemStack(Blocks.STONE); - craftingGrid[0][1] = new ItemStack(Blocks.STONE); - craftingGrid[1][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][2] = new ItemStack(Blocks.STONE); - craftingGrid[2][1] = new ItemStack(Blocks.STONE); - craftingResult = new ItemStack(WizardryBlocks.transportation_stone, 2); - this.renderCraftingTooltips(xPos + 156, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[1][0] = new ItemStack(Items.STRING); - craftingGrid[0][1] = new ItemStack(Items.STRING); - craftingGrid[1][1] = new ItemStack(WizardryItems.magic_crystal); - craftingGrid[1][2] = new ItemStack(Items.STRING); - craftingGrid[2][1] = new ItemStack(Items.STRING); - craftingResult = new ItemStack(WizardryItems.magic_silk, 2); - this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 2){ - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_silk); - craftingResult = new ItemStack(WizardryItems.wizard_hat); - this.renderCraftingTooltips(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[1][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][2] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[1][2] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][2] = new ItemStack(WizardryItems.magic_silk); - craftingResult = new ItemStack(WizardryItems.wizard_robe); - this.renderCraftingTooltips(xPos + 23, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[1][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][2] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][2] = new ItemStack(WizardryItems.magic_silk); - craftingResult = new ItemStack(WizardryItems.wizard_leggings); - this.renderCraftingTooltips(xPos + 156, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[0][1] = new ItemStack(WizardryItems.magic_silk); - craftingGrid[2][1] = new ItemStack(WizardryItems.magic_silk); - craftingResult = new ItemStack(WizardryItems.wizard_boots); - this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - - }else if(pageNumber == (sections.get(sections.size() - 1).pageNumber - 1) / 2 + 3){ - - if(Wizardry.settings.useAlternateScrollRecipe){ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.PAPER); - craftingGrid[1][0] = new ItemStack(Items.STRING); - craftingGrid[2][0] = new ItemStack(WizardryItems.magic_crystal); - craftingResult = new ItemStack(WizardryItems.blank_scroll); - this.renderCraftingTooltips(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - }else{ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.PAPER); - craftingGrid[1][0] = new ItemStack(Items.STRING); - craftingResult = new ItemStack(WizardryItems.blank_scroll); - this.renderCraftingTooltips(xPos + 23, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - } - - if(Wizardry.settings.firebombIsCraftable){ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.BLAZE_POWDER); - craftingGrid[1][0] = new ItemStack(Items.BLAZE_POWDER); - craftingGrid[0][1] = new ItemStack(Items.GLASS_BOTTLE); - craftingGrid[1][1] = new ItemStack(Items.GUNPOWDER); - craftingResult = new ItemStack(WizardryItems.firebomb, 3); - this.renderCraftingTooltips(xPos + 23, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - } - - if(Wizardry.settings.poisonBombIsCraftable){ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.SPIDER_EYE); - craftingGrid[1][0] = new ItemStack(Items.SPIDER_EYE); - craftingGrid[0][1] = new ItemStack(Items.GLASS_BOTTLE); - craftingGrid[1][1] = new ItemStack(Items.GUNPOWDER); - craftingResult = new ItemStack(WizardryItems.poison_bomb, 3); - this.renderCraftingTooltips(xPos + 156, yPos + 39, mouseX, mouseY, craftingGrid, craftingResult); - } - - if(Wizardry.settings.smokeBombIsCraftable){ - craftingGrid = new ItemStack[3][3]; - craftingGrid[0][0] = new ItemStack(Items.COAL); - craftingGrid[1][0] = new ItemStack(Items.COAL); - craftingGrid[0][1] = new ItemStack(Items.GLASS_BOTTLE); - craftingGrid[1][1] = new ItemStack(Items.GUNPOWDER); - craftingResult = new ItemStack(WizardryItems.smoke_bomb, 3); - this.renderCraftingTooltips(xPos + 156, yPos + 98, mouseX, mouseY, craftingGrid, craftingResult); - } - - } } + + // TODO: In 1.12, this all needs redoing nicely. With the crafting system halfway through changing in 1.11.2, this + // isn't worth doing until then. - private void renderCraftingRecipe(int xPos, int yPos, int mouseX, int mouseY, ItemStack[][] craftingGrid, + private void renderCraftingRecipe(int xPos, int yPos, int mouseX, int mouseY, NonNullList> craftingGrid, ItemStack craftingResult){ GlStateManager.pushMatrix(); @@ -500,11 +190,12 @@ public class GuiWizardHandbook extends GuiScreen { GlStateManager.enableLighting(); itemRender.zLevel = 100.0F; - for(int i = 0; i < craftingGrid.length; i++){ - for(int j = 0; j < craftingGrid[i].length; j++){ - if(!craftingGrid[i][j].isEmpty()){ - itemRender.renderItemAndEffectIntoGUI(craftingGrid[i][j], xPos + 18 * i, yPos + 18 * j); - itemRender.renderItemOverlays(this.fontRenderer, craftingGrid[i][j], xPos + 18 * i, + for(int i = 0; i < craftingGrid.size(); i++){ + for(int j = 0; j < craftingGrid.get(i).size(); j++){ + ItemStack stack = craftingGrid.get(i).get(j); + if(!stack.isEmpty()){ + itemRender.renderItemAndEffectIntoGUI(stack, xPos + 18 * i, yPos + 18 * j); + itemRender.renderItemOverlays(this.fontRenderer, stack, xPos + 18 * i, yPos + 18 * j); } } @@ -522,7 +213,7 @@ public class GuiWizardHandbook extends GuiScreen { } - private void renderCraftingTooltips(int xPos, int yPos, int mouseX, int mouseY, ItemStack[][] craftingGrid, + private void renderCraftingTooltips(int xPos, int yPos, int mouseX, int mouseY, NonNullList> craftingGrid, ItemStack craftingResult){ int guiLeft = this.width / 2 - xSize / 2; @@ -536,11 +227,12 @@ public class GuiWizardHandbook extends GuiScreen { itemRender.zLevel = 0.0F; GlStateManager.disableLighting(); - for(int i = 0; i < craftingGrid.length; i++){ - for(int j = 0; j < craftingGrid[i].length; j++){ - if(!craftingGrid[i][j].isEmpty() + for(int i = 0; i < craftingGrid.size(); i++){ + for(int j = 0; j < craftingGrid.get(i).size(); j++){ + ItemStack stack = craftingGrid.get(i).get(j); + if(!stack.isEmpty() && isPointInRegion(xPos + 18 * i, yPos + 18 * j, 16, 16, mouseX + guiLeft, mouseY + guiTop)){ - this.renderToolTip(craftingGrid[i][j], mouseX, mouseY); + this.renderToolTip(stack, mouseX, mouseY); } } } @@ -591,13 +283,13 @@ public class GuiWizardHandbook extends GuiScreen { textFilepath = "wizardry:texts/handbook_en_US.txt"; - try{ + try { bufferedreader = new BufferedReader(new InputStreamReader( this.mc.getResourceManager().getResource(new ResourceLocation(textFilepath)).getInputStream(), Charsets.UTF_8)); - }catch (IOException x){ + } catch (IOException x){ Wizardry.logger.error("Couldn't find file: wizardry:assets/texts/handbook_en_US.txt. The file may be" + "missing; please try re-downloading and reinstalling Wizardry.", x); } @@ -846,5 +538,176 @@ public class GuiWizardHandbook extends GuiScreen { buffer.pos((x), (y), 0).tex(u, v).endVertex(); tessellator.draw(); } + + private static NonNullList> createGrid(){ + NonNullList> grid = NonNullList.withSize(3, NonNullList.create()); + for(int i=0; i<3; i++){ + grid.set(i, NonNullList.withSize(3, ItemStack.EMPTY)); + } + return grid; + } + + /** Called from init() in the main mod class to initialise the recipes for display in the handbook. */ + public static void initDisplayRecipes(){ + + NonNullList> craftingGrid; + ItemStack craftingResult; + + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(Items.GOLD_NUGGET)); + craftingGrid.get(1).set(0, new ItemStack(Blocks.CARPET, 1, 10)); + craftingGrid.get(2).set(0, new ItemStack(Items.GOLD_NUGGET)); + craftingGrid.get(0).set(1, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(1).set(1, new ItemStack(Blocks.LAPIS_BLOCK)); + craftingGrid.get(2).set(1, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(0).set(2, new ItemStack(Blocks.STONE)); + craftingGrid.get(1).set(2, new ItemStack(Blocks.STONE)); + craftingGrid.get(2).set(2, new ItemStack(Blocks.STONE)); + craftingResult = new ItemStack(WizardryBlocks.arcane_workbench); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(2).set(0, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(1).set(1, new ItemStack(Items.STICK)); + craftingGrid.get(0).set(2, new ItemStack(Items.GOLD_NUGGET)); + craftingResult = new ItemStack(WizardryItems.magic_wand); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(1).set(0, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(0).set(1, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(1).set(1, new ItemStack(Items.BOOK)); + craftingGrid.get(1).set(2, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(2).set(1, new ItemStack(WizardryItems.magic_crystal)); + craftingResult = new ItemStack(WizardryItems.spell_book, 1, 1); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(Items.BOOK)); + craftingGrid.get(1).set(0, new ItemStack(WizardryItems.magic_crystal)); + craftingResult = new ItemStack(WizardryItems.wizard_handbook); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(WizardryBlocks.crystal_flower)); + craftingResult = new ItemStack(WizardryItems.magic_crystal, 2); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(1).set(0, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(2).set(0, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(0).set(1, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(1).set(1, new ItemStack(Items.GLASS_BOTTLE)); + craftingGrid.get(2).set(1, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(0).set(2, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(1).set(2, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(2).set(2, new ItemStack(WizardryItems.magic_crystal)); + craftingResult = new ItemStack(WizardryItems.mana_flask); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(1).set(0, new ItemStack(Blocks.STONE)); + craftingGrid.get(0).set(1, new ItemStack(Blocks.STONE)); + craftingGrid.get(1).set(1, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(1).set(2, new ItemStack(Blocks.STONE)); + craftingGrid.get(2).set(1, new ItemStack(Blocks.STONE)); + craftingResult = new ItemStack(WizardryBlocks.transportation_stone, 2); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(1).set(0, new ItemStack(Items.STRING)); + craftingGrid.get(0).set(1, new ItemStack(Items.STRING)); + craftingGrid.get(1).set(1, new ItemStack(WizardryItems.magic_crystal)); + craftingGrid.get(1).set(2, new ItemStack(Items.STRING)); + craftingGrid.get(2).set(1, new ItemStack(Items.STRING)); + craftingResult = new ItemStack(WizardryItems.magic_silk, 2); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(1).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(0).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingResult = new ItemStack(WizardryItems.wizard_hat); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(0).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(1).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(0).set(2, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(1).set(2, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(2, new ItemStack(WizardryItems.magic_silk)); + craftingResult = new ItemStack(WizardryItems.wizard_robe); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(1).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(0).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(0).set(2, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(2, new ItemStack(WizardryItems.magic_silk)); + craftingResult = new ItemStack(WizardryItems.wizard_leggings); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(0, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(0).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingGrid.get(2).set(1, new ItemStack(WizardryItems.magic_silk)); + craftingResult = new ItemStack(WizardryItems.wizard_boots); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + + if(Wizardry.settings.useAlternateScrollRecipe){ + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(Items.PAPER)); + craftingGrid.get(1).set(0, new ItemStack(Items.STRING)); + craftingGrid.get(2).set(0, new ItemStack(WizardryItems.magic_crystal)); + craftingResult = new ItemStack(WizardryItems.blank_scroll); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + }else{ + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(Items.PAPER)); + craftingGrid.get(1).set(0, new ItemStack(Items.STRING)); + craftingResult = new ItemStack(WizardryItems.blank_scroll); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + } + + if(Wizardry.settings.firebombIsCraftable){ + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(Items.BLAZE_POWDER)); + craftingGrid.get(1).set(0, new ItemStack(Items.BLAZE_POWDER)); + craftingGrid.get(0).set(1, new ItemStack(Items.GLASS_BOTTLE)); + craftingGrid.get(1).set(1, new ItemStack(Items.GUNPOWDER)); + craftingResult = new ItemStack(WizardryItems.firebomb, 3); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + } + + if(Wizardry.settings.poisonBombIsCraftable){ + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(Items.SPIDER_EYE)); + craftingGrid.get(1).set(0, new ItemStack(Items.SPIDER_EYE)); + craftingGrid.get(0).set(1, new ItemStack(Items.GLASS_BOTTLE)); + craftingGrid.get(1).set(1, new ItemStack(Items.GUNPOWDER)); + craftingResult = new ItemStack(WizardryItems.poison_bomb, 3); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + } + + if(Wizardry.settings.smokeBombIsCraftable){ + craftingGrid = createGrid(); + craftingGrid.get(0).set(0, new ItemStack(Items.COAL)); + craftingGrid.get(1).set(0, new ItemStack(Items.COAL)); + craftingGrid.get(0).set(1, new ItemStack(Items.GLASS_BOTTLE)); + craftingGrid.get(1).set(1, new ItemStack(Items.GUNPOWDER)); + craftingResult = new ItemStack(WizardryItems.smoke_bomb, 3); + RECIPES.add(ImmutablePair.of(craftingResult, craftingGrid)); + } + } } \ No newline at end of file