From 8cf7d29dad76b8dd6f0fe035e01d091aad44bed0 Mon Sep 17 00:00:00 2001 From: Lizbeth Rika Date: Fri, 17 Apr 2015 18:01:16 +0100 Subject: [PATCH] Added pure daisy NEI handler and some small tweaks to its recipe API. --- .../java/vazkii/botania/api/BotaniaAPI.java | 9 +- .../botania/api/recipe/RecipePureDaisy.java | 5 +- .../integration/nei/NEIBotaniaConfig.java | 3 + .../nei/RecipeHandlerPureDaisy.java | 129 ++++++++++++++++++ .../botania/client/lib/LibResources.java | 1 + .../resources/assets/botania/lang/en_US.lang | 3 +- .../botania/textures/gui/pureDaisyOverlay.png | Bin 0 -> 18165 bytes 7 files changed, 147 insertions(+), 3 deletions(-) create mode 100644 src/main/java/vazkii/botania/client/integration/nei/RecipeHandlerPureDaisy.java create mode 100644 src/main/resources/assets/botania/textures/gui/pureDaisyOverlay.png diff --git a/src/main/java/vazkii/botania/api/BotaniaAPI.java b/src/main/java/vazkii/botania/api/BotaniaAPI.java index 5d4807b76..64238f894 100644 --- a/src/main/java/vazkii/botania/api/BotaniaAPI.java +++ b/src/main/java/vazkii/botania/api/BotaniaAPI.java @@ -240,6 +240,13 @@ public final class BotaniaAPI { return recipe; } + /** + * Registers a Pure Daisy Recipe. + * @param input The block that works as an input for the recipe. Can be a Block or an oredict String. + * @param output The block to be placed upon recipe completion. + * @param outputMeta The metadata to be placed upon recipe completion. + * @return The recipe created. + */ public static RecipePureDaisy registerPureDaisyRecipe(Object input, Block output, int outputMeta) { RecipePureDaisy recipe = new RecipePureDaisy(input, output, outputMeta); pureDaisyRecipes.add(recipe); @@ -247,7 +254,7 @@ public final class BotaniaAPI { } /** - * Registers a Rune Altar + * Registers a Rune Altar Recipe. * @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 diff --git a/src/main/java/vazkii/botania/api/recipe/RecipePureDaisy.java b/src/main/java/vazkii/botania/api/recipe/RecipePureDaisy.java index 26c6c5b55..60f0c0c2f 100644 --- a/src/main/java/vazkii/botania/api/recipe/RecipePureDaisy.java +++ b/src/main/java/vazkii/botania/api/recipe/RecipePureDaisy.java @@ -31,6 +31,9 @@ public class RecipePureDaisy { throw new IllegalArgumentException("input must be an oredict String or a Block."); } + /** + * This gets called every tick, please be careful with your checks. + */ public boolean matches(World world, int x, int y, int z, SubTileEntity pureDaisy) { Block block = world.getBlock(x, y, z); int meta = world.getBlockMetadata(x, y, z); @@ -42,7 +45,7 @@ public class RecipePureDaisy { return isOreDict(stack, oredict); } - private boolean isOreDict(ItemStack stack, String entry) { + public boolean isOreDict(ItemStack stack, String entry) { for(ItemStack ostack : OreDictionary.getOres(entry)) { ItemStack cstack = ostack.copy(); if(cstack.getItemDamage() == Short.MAX_VALUE) diff --git a/src/main/java/vazkii/botania/client/integration/nei/NEIBotaniaConfig.java b/src/main/java/vazkii/botania/client/integration/nei/NEIBotaniaConfig.java index e34407c96..c2788044e 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/NEIBotaniaConfig.java +++ b/src/main/java/vazkii/botania/client/integration/nei/NEIBotaniaConfig.java @@ -35,6 +35,9 @@ public class NEIBotaniaConfig implements IConfigureNEI { API.registerRecipeHandler(new RecipeHandlerBrewery()); API.registerUsageHandler(new RecipeHandlerBrewery()); + + API.registerRecipeHandler(new RecipeHandlerPureDaisy()); + API.registerUsageHandler(new RecipeHandlerPureDaisy()); } } diff --git a/src/main/java/vazkii/botania/client/integration/nei/RecipeHandlerPureDaisy.java b/src/main/java/vazkii/botania/client/integration/nei/RecipeHandlerPureDaisy.java new file mode 100644 index 000000000..0594b01e9 --- /dev/null +++ b/src/main/java/vazkii/botania/client/integration/nei/RecipeHandlerPureDaisy.java @@ -0,0 +1,129 @@ +package vazkii.botania.client.integration.nei; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraftforge.oredict.OreDictionary; + +import org.lwjgl.opengl.GL11; + +import vazkii.botania.api.BotaniaAPI; +import vazkii.botania.api.recipe.RecipePureDaisy; +import vazkii.botania.client.core.handler.HUDHandler; +import vazkii.botania.client.integration.nei.RecipeHandlerManaPool.CachedManaPoolRecipe; +import vazkii.botania.client.lib.LibResources; +import vazkii.botania.client.render.tile.RenderTilePool; +import vazkii.botania.common.block.tile.mana.TilePool; +import vazkii.botania.common.item.block.ItemBlockSpecialFlower; +import vazkii.botania.common.lib.LibBlockNames; +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.NEIServerUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.TemplateRecipeHandler; + +public class RecipeHandlerPureDaisy extends TemplateRecipeHandler { + + public class CachedPureDaisyRecipe extends CachedRecipe { + + public List inputs = new ArrayList(); + public PositionedStack output; + public List otherStacks = new ArrayList(); + + public CachedPureDaisyRecipe(RecipePureDaisy recipe) { + inputs.add(new PositionedStack(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_PUREDAISY), 71, 23)); + + if(recipe.getInput() instanceof String) + inputs.add(new PositionedStack(OreDictionary.getOres((String) recipe.getInput()), 42, 23)); + else inputs.add(new PositionedStack(recipe.getInput(), 42, 23)); + + output = new PositionedStack(new ItemStack(recipe.getOutput()), 101, 23); + } + + @Override + public List getIngredients() { + return getCycledIngredients(cycleticks / 20, inputs); + } + + @Override + public PositionedStack getResult() { + return output; + } + + @Override + public List getOtherStacks() { + return otherStacks; + } + + @Override + public boolean contains(Collection ingredients, ItemStack ingredient) { + if(ingredients == inputs) { + boolean skippedPool = false; + + for(PositionedStack stack : ingredients) + if(stack.contains(ingredient)) + return true; + } + + return super.contains(ingredients, ingredient); + } + + } + + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.pureDaisy"); + } + + @Override + public String getGuiTexture() { + return LibResources.GUI_NEI_BLANK; + } + + @Override + public int recipiesPerPage() { + return 2; + } + + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(70, 22, 18, 18), "botania.pureDaisy")); + } + + @Override + public void drawBackground(int recipe) { + super.drawBackground(recipe); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GuiDraw.changeTexture(LibResources.GUI_PURE_DAISY_OVERLAY); + GuiDraw.drawTexturedModalRect(45, 10, 0, 0, 65, 44); + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if(outputId.equals("botania.pureDaisy")) { + for(RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) + arecipes.add(new CachedPureDaisyRecipe(recipe)); + } else super.loadCraftingRecipes(outputId, results); + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + for(RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) + if(NEIServerUtils.areStacksSameTypeCrafting(new ItemStack(recipe.getOutput()), result)) + arecipes.add(new CachedPureDaisyRecipe(recipe)); + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + for(RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) { + CachedPureDaisyRecipe crecipe = new CachedPureDaisyRecipe(recipe); + if(crecipe.contains(crecipe.getIngredients(), ingredient) || crecipe.contains(crecipe.getOtherStacks(), ingredient)) + arecipes.add(crecipe); + } + } + +} diff --git a/src/main/java/vazkii/botania/client/lib/LibResources.java b/src/main/java/vazkii/botania/client/lib/LibResources.java index e347f8067..748baa415 100644 --- a/src/main/java/vazkii/botania/client/lib/LibResources.java +++ b/src/main/java/vazkii/botania/client/lib/LibResources.java @@ -31,6 +31,7 @@ public final class LibResources { public static final String GUI_PAPER = PREFIX_GUI + "paper.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_PURE_DAISY_OVERLAY = PREFIX_GUI + "pureDaisyOverlay.png"; public static final String GUI_PETAL_OVERLAY = PREFIX_GUI + "petalOverlay.png"; public static final String GUI_TERRASTEEL_OVERLAY = PREFIX_GUI + "terrasteelOverlay.png"; public static final String GUI_ELVEN_TRADE_OVERLAY = PREFIX_GUI + "elvenTradeOverlay.png"; diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index ef69ebfac..0499134df 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -114,10 +114,11 @@ botaniamisc.achievements=Botania Achievements # NEI INTEGRATION botania.nei.brewery=Botanical Brewery botania.nei.elvenTrade=Elven Trade -botania.nei.floatingFlowers=Floating Flower Crafting +botania.nei.floatingFlowers=Floating Flowers botania.nei.manaPool=Mana Infusion botania.nei.petalApothecary=Petal Apothecary botania.nei.runicAltar=Runic Altar +botania.nei.pureDaisy=Pure Daisy # BUILDCRAFT INTEGRATION botania.triggers.manaDetector=Mana Burst diff --git a/src/main/resources/assets/botania/textures/gui/pureDaisyOverlay.png b/src/main/resources/assets/botania/textures/gui/pureDaisyOverlay.png new file mode 100644 index 0000000000000000000000000000000000000000..1d7130a30dc523ab4bcf056d14cb15db4dd0f306 GIT binary patch literal 18165 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 literal 0 HcmV?d00001