From bdcc8ff3ffaa3ec0ca06ec006ee781c2a34ccf6e Mon Sep 17 00:00:00 2001 From: Vasco Lavos Date: Sat, 8 Feb 2014 19:22:23 +0000 Subject: [PATCH] Added support for Petal and Rune recipes to the Lexicon. --- MODSRC/vazkii/botania/api/BotaniaAPI.java | 4 +- .../botania/api/recipe/RecipePetals.java | 4 ++ .../botania/client/lib/LibResources.java | 1 + .../botania/common/lexicon/LexiconData.java | 6 +- .../common/lexicon/page/PagePetalRecipe.java | 63 +++++++++++++----- .../common/lexicon/page/PageRecipe.java | 9 +-- .../common/lexicon/page/PageRuneRecipe.java | 42 +++++++++++- .../botania/textures/gui/petalOverlay.png | Bin 0 -> 5062 bytes resources/mcmod.info | 2 +- 9 files changed, 107 insertions(+), 24 deletions(-) create mode 100644 resources/assets/botania/textures/gui/petalOverlay.png diff --git a/MODSRC/vazkii/botania/api/BotaniaAPI.java b/MODSRC/vazkii/botania/api/BotaniaAPI.java index aecf6b8da..d28ea6f03 100644 --- a/MODSRC/vazkii/botania/api/BotaniaAPI.java +++ b/MODSRC/vazkii/botania/api/BotaniaAPI.java @@ -55,7 +55,7 @@ public final class BotaniaAPI { * Registers a Petal Recipe. * @param output The ItemStack to craft. * @param inputs The objects for crafting. Can be ItemStack, MappableStackWrapper - * or String (case for Ore Dictionary) + * or String (case for Ore Dictionary). The array can't be larger than 16. * @return The recipe created. */ public static RecipePetals registerPetalRecipe(ItemStack output, Object... inputs) { @@ -69,7 +69,7 @@ public final class BotaniaAPI { * @param output The ItemStack to craft. * @param mana The amount of mana required. Don't go over 100000! * @param inputs The objects for crafting. Can be ItemStack, MappableStackWrapper - * or String (case for Ore Dictionary) + * or String (case for Ore Dictionary). The array can't be larger than 16. * @return The recipe created. */ public static RecipeRuneAltar registerRuneAltarRecipe(ItemStack output, int mana, Object... inputs) { diff --git a/MODSRC/vazkii/botania/api/recipe/RecipePetals.java b/MODSRC/vazkii/botania/api/recipe/RecipePetals.java index 75dc3dde1..3b8788413 100644 --- a/MODSRC/vazkii/botania/api/recipe/RecipePetals.java +++ b/MODSRC/vazkii/botania/api/recipe/RecipePetals.java @@ -61,6 +61,10 @@ public class RecipePetals { return inputsMissing.isEmpty(); } + + public List getInputs() { + return new ArrayList(inputs); + } public ItemStack getOutput() { return output; diff --git a/MODSRC/vazkii/botania/client/lib/LibResources.java b/MODSRC/vazkii/botania/client/lib/LibResources.java index abc2fd1ae..540290ff8 100644 --- a/MODSRC/vazkii/botania/client/lib/LibResources.java +++ b/MODSRC/vazkii/botania/client/lib/LibResources.java @@ -28,6 +28,7 @@ public final class LibResources { public static final String GUI_LEXICON = PREFIX_GUI + "lexicon.png"; public static final String GUI_CRAFTING_OVERLAY = PREFIX_GUI + "craftingOverlay.png"; public static final String GUI_MANA_INFUSION_OVERLAY = PREFIX_GUI + "manaInfusionOverlay.png"; + public static final String GUI_PETAL_OVERLAY = PREFIX_GUI + "petalOverlay.png"; public static final String ENTRY_FLOWERS = PREFIX_ENTRIES + "flowers.png"; public static final String ENTRY_APOTHECARY = PREFIX_ENTRIES + "apothecary.png"; diff --git a/MODSRC/vazkii/botania/common/lexicon/LexiconData.java b/MODSRC/vazkii/botania/common/lexicon/LexiconData.java index b8529da5d..4dd004bcb 100644 --- a/MODSRC/vazkii/botania/common/lexicon/LexiconData.java +++ b/MODSRC/vazkii/botania/common/lexicon/LexiconData.java @@ -17,9 +17,13 @@ import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.crafting.ModCrafingRecipes; import vazkii.botania.common.crafting.ModManaInfusionRecipes; +import vazkii.botania.common.crafting.ModPetalRecipes; +import vazkii.botania.common.crafting.ModRuneRecipes; import vazkii.botania.common.lexicon.page.PageCraftingRecipe; import vazkii.botania.common.lexicon.page.PageImage; import vazkii.botania.common.lexicon.page.PageManaInfusionRecipe; +import vazkii.botania.common.lexicon.page.PagePetalRecipe; +import vazkii.botania.common.lexicon.page.PageRuneRecipe; import vazkii.botania.common.lexicon.page.PageText; import vazkii.botania.common.lib.LibLexicon; @@ -64,7 +68,7 @@ public final class LexiconData { // MANA ENTRIES pool = new BLexiconEntry(LibLexicon.MANA_POOL, categoryMana); - pool.setPriority().setLexiconPages(new PageText("0"), new PageManaInfusionRecipe("1", ModManaInfusionRecipes.manaPetalRecipes)); + pool.setPriority().setLexiconPages(new PageText("0"), new PageManaInfusionRecipe("1", ModManaInfusionRecipes.manaPetalRecipes), new PagePetalRecipe("2", ModPetalRecipes.testRecipe), new PageRuneRecipe("3", ModRuneRecipes.recipeDebug)); } } diff --git a/MODSRC/vazkii/botania/common/lexicon/page/PagePetalRecipe.java b/MODSRC/vazkii/botania/common/lexicon/page/PagePetalRecipe.java index 9a742422f..94830ea91 100644 --- a/MODSRC/vazkii/botania/common/lexicon/page/PagePetalRecipe.java +++ b/MODSRC/vazkii/botania/common/lexicon/page/PagePetalRecipe.java @@ -15,42 +15,75 @@ import java.util.Arrays; import java.util.List; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.renderer.texture.TextureManager; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.oredict.OreDictionary; + +import org.lwjgl.opengl.GL11; + import vazkii.botania.api.internal.IGuiLexiconEntry; import vazkii.botania.api.recipe.RecipePetals; +import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.block.ModBlocks; -public class PagePetalRecipe extends PageRecipe { +public class PagePetalRecipe extends PageRecipe { - List recipes; + private static final ResourceLocation petalOverlay = new ResourceLocation(LibResources.GUI_PETAL_OVERLAY); + + List recipes; int ticksElapsed = 0; int recipeAt = 0; - public PagePetalRecipe(String unlocalizedName, List recipes) { + public PagePetalRecipe(String unlocalizedName, List recipes) { super(unlocalizedName); this.recipes = recipes; } - public PagePetalRecipe(String unlocalizedName, RecipePetals recipe) { + public PagePetalRecipe(String unlocalizedName, T recipe) { this(unlocalizedName, Arrays.asList(recipe)); } @Override public void renderRecipe(IGuiLexiconEntry gui, int mx, int my) { - RecipePetals recipe = recipes.get(recipeAt); + T recipe = recipes.get(recipeAt); + TextureManager render = Minecraft.getMinecraft().renderEngine; - renderItemAtGridPos(gui, 2, 0, recipe.getOutput(), false); - renderItemAtGridPos(gui, 2, 1, new ItemStack(ModBlocks.altar), false); + renderItemAtGridPos(gui, 3, 0, recipe.getOutput(), false); + renderItemAtGridPos(gui, 2, 1, getMiddleStack(), false); -// GL11.glEnable(GL11.GL_BLEND); -// GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); -// String manaUsage = StatCollector.translateToLocal("botaniamisc.manaUsage"); -// font.drawString(manaUsage, gui.getLeft() + gui.getWidth() / 2 - font.getStringWidth(manaUsage) / 2, gui.getTop() + 105, 0x66000000); -// -// HUDHandler.renderManaBar(gui.getLeft() + gui.getWidth() / 2 - 50, gui.getTop() + 115, 0x0000FF, 0.75F, recipe.getManaToConsume(), TilePool.MAX_MANA / 10); -// GL11.glDisable(GL11.GL_BLEND); + List inputs = recipe.getInputs(); + int degreePerInput = (int) (360F / (float) inputs.size()); + int currentDegree = 0; + + for(Object obj : inputs) { + Object input = obj; + if(input instanceof String) + input = OreDictionary.getOres((String) input).get(0); + + renderItemAtAngle(gui, currentDegree, (ItemStack) input); + + currentDegree += degreePerInput; + } + + renderManaBar(gui, recipe, mx, my); + + render.bindTexture(petalOverlay); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1F, 1F, 1F, 1F); + ((GuiScreen) gui).drawTexturedModalRect(gui.getLeft(), gui.getTop(), 0, 0, gui.getWidth(), gui.getHeight()); + GL11.glDisable(GL11.GL_BLEND); + } + + ItemStack getMiddleStack() { + return new ItemStack(ModBlocks.altar); + } + + public void renderManaBar(IGuiLexiconEntry gui, T recipe, int mx, int my) { + // NO-OP } @Override diff --git a/MODSRC/vazkii/botania/common/lexicon/page/PageRecipe.java b/MODSRC/vazkii/botania/common/lexicon/page/PageRecipe.java index d2c4c4358..b799e7859 100644 --- a/MODSRC/vazkii/botania/common/lexicon/page/PageRecipe.java +++ b/MODSRC/vazkii/botania/common/lexicon/page/PageRecipe.java @@ -78,13 +78,14 @@ public class PageRecipe extends LexiconPage { stack.setItemDamage(0); angle -= 90; - int xPos = gui.getLeft() + (int) (Math.cos(angle) * 12) + gui.getWidth() / 2; - int yPos = gui.getTop() + (int) (Math.sin(angle) * 12) + 25; + int radius = 32; + double xPos = gui.getLeft() + Math.cos(angle * Math.PI / 180D) * radius + gui.getWidth() / 2 - 8; + double yPos = gui.getTop() + Math.sin(angle * Math.PI / 180D) * radius + 53; ItemStack stack1 = stack.copy(); if(stack1.getItemDamage() == -1) stack1.setItemDamage(0); - renderItem(gui, xPos, yPos, stack1, false); + renderItem(gui, (int) xPos, (int) yPos, stack1, false); } public void renderItemAtGridPos(IGuiLexiconEntry gui, int x, int y, ItemStack stack, boolean accountForContainer) { @@ -95,7 +96,7 @@ public class PageRecipe extends LexiconPage { if(stack.getItemDamage() == Short.MAX_VALUE) stack.setItemDamage(0); - int xPos = gui.getLeft() + x * 29 + 7; + int xPos = gui.getLeft() + x * 29 + 7 + (y == 0 && x == 3 ? 10 : 0); int yPos = gui.getTop() + y * 29 + 24 - (y == 0 ? 7 : 0); ItemStack stack1 = stack.copy(); if(stack1.getItemDamage() == -1) diff --git a/MODSRC/vazkii/botania/common/lexicon/page/PageRuneRecipe.java b/MODSRC/vazkii/botania/common/lexicon/page/PageRuneRecipe.java index be68ab907..01793d740 100644 --- a/MODSRC/vazkii/botania/common/lexicon/page/PageRuneRecipe.java +++ b/MODSRC/vazkii/botania/common/lexicon/page/PageRuneRecipe.java @@ -11,6 +11,46 @@ */ package vazkii.botania.common.lexicon.page; -public class PageRuneRecipe { +import java.util.List; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.api.internal.IGuiLexiconEntry; +import vazkii.botania.api.recipe.RecipeRuneAltar; +import vazkii.botania.client.core.handler.HUDHandler; +import vazkii.botania.common.block.ModBlocks; +import vazkii.botania.common.block.tile.TilePool; + +public class PageRuneRecipe extends PagePetalRecipe { + + public PageRuneRecipe(String unlocalizedName, List recipes) { + super(unlocalizedName, recipes); + } + + public PageRuneRecipe(String unlocalizedName, RecipeRuneAltar recipes) { + super(unlocalizedName, recipes); + } + + @Override + ItemStack getMiddleStack() { + return new ItemStack(ModBlocks.runeAltar); + } + + @Override + public void renderManaBar(IGuiLexiconEntry gui, RecipeRuneAltar recipe, int mx, int my) { + FontRenderer font = Minecraft.getMinecraft().fontRenderer; + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + String manaUsage = StatCollector.translateToLocal("botaniamisc.manaUsage"); + font.drawString(manaUsage, gui.getLeft() + gui.getWidth() / 2 - font.getStringWidth(manaUsage) / 2, gui.getTop() + 120, 0x66000000); + + HUDHandler.renderManaBar(gui.getLeft() + gui.getWidth() / 2 - 50, gui.getTop() + 130, 0x0000FF, 0.75F, recipe.getManaUsage(), TilePool.MAX_MANA / 10); + GL11.glDisable(GL11.GL_BLEND); + } + } diff --git a/resources/assets/botania/textures/gui/petalOverlay.png b/resources/assets/botania/textures/gui/petalOverlay.png new file mode 100644 index 0000000000000000000000000000000000000000..e9cba320051b4181ba5fbb5ea861d92eaca0636c GIT binary patch literal 5062 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 Fe*sqe7?uD4 literal 0 HcmV?d00001 diff --git a/resources/mcmod.info b/resources/mcmod.info index 05e6a3280..6011ac118 100644 --- a/resources/mcmod.info +++ b/resources/mcmod.info @@ -9,7 +9,7 @@ "url": "", "updateUrl": "", "authors": ["Vazkii"], - "credits": "Azanor, dylan4ever, MegaManki, mDiyo, Mikeemoo, ChickenBones", + "credits": "Azanor, dylan4ever, MegaManki, mDiyo, Mikeemoo, ChickenBones, cpw", "parent": "", "screenshots": [], "dependencies": []