diff --git a/src/main/java/vazkii/botania/client/integration/nei/IMCForNEI.java b/src/main/java/vazkii/botania/client/integration/nei/IMCForNEI.java new file mode 100644 index 000000000..ebdae9c33 --- /dev/null +++ b/src/main/java/vazkii/botania/client/integration/nei/IMCForNEI.java @@ -0,0 +1,20 @@ +package vazkii.botania.client.integration.nei; + +import cpw.mods.fml.common.event.FMLInterModComms; +import net.minecraft.nbt.NBTTagCompound; + +public class IMCForNEI { + public static void IMCSender() { + sendCatalyst("botania.brewery", "Botania:vial", -1); + sendCatalyst("botania.brewery", "Botania:vial:1", -1); + sendCatalyst("botania.brewery", "Botania:incenseStick", -1); + } + + private static void sendCatalyst(String handlerName, String stack, int priority) { + NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("handlerID", handlerName); + nbt.setString("itemName", stack); + nbt.setInteger("priority", priority); + FMLInterModComms.sendMessage("NotEnoughItems", "registerCatalystInfo", nbt); + } +} diff --git a/src/main/java/vazkii/botania/client/integration/nei/NEIHelper.java b/src/main/java/vazkii/botania/client/integration/nei/NEIHelper.java new file mode 100644 index 000000000..4432d9464 --- /dev/null +++ b/src/main/java/vazkii/botania/client/integration/nei/NEIHelper.java @@ -0,0 +1,18 @@ +package vazkii.botania.client.integration.nei; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.texture.TextureManager; +import net.minecraft.item.ItemStack; + +public class NEIHelper { + public static final RenderItem renderItem = new RenderItem(); + public static final Minecraft mc = Minecraft.getMinecraft(); + public static final TextureManager textureManager = mc.getTextureManager(); + public static final FontRenderer font = mc.fontRenderer; + + public static void renderItemIntoGUI(ItemStack flowerStack, int x, int y) { + renderItem.renderItemIntoGUI(font, textureManager, flowerStack, x, y); + } +} diff --git a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerBrewery.java b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerBrewery.java index 64e3bfe15..e94c32364 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerBrewery.java +++ b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerBrewery.java @@ -23,118 +23,127 @@ import codechicken.nei.recipe.TemplateRecipeHandler; public class RecipeHandlerBrewery extends TemplateRecipeHandler { - public class CachedBreweryRecipe extends CachedRecipe { + public class CachedBreweryRecipe extends CachedRecipe { - public List inputs = new ArrayList<>(); - public PositionedStack output; - public int mana; + public List inputs = new ArrayList<>(); + public PositionedStack output; + public int mana; - public CachedBreweryRecipe(RecipeBrew recipe, ItemStack vial) { - if(recipe == null) - return; + public CachedBreweryRecipe(RecipeBrew recipe, ItemStack vial) { + if (recipe == null) return; - setIngredients(recipe.getInputs()); - ItemStack toVial; - if (vial == null) - toVial = new ItemStack(ModItems.vial); - else - toVial = vial.copy(); - toVial.stackSize = 1; - inputs.add(new PositionedStack(toVial, 39, 42)); + setIngredients(recipe.getInputs()); + ItemStack toVial; + if (vial == null) { + toVial = new ItemStack(ModItems.vial); + } else { + toVial = vial.copy(); + } + toVial.stackSize = 1; + inputs.add(new PositionedStack(toVial, 39, 42)); - output = new PositionedStack(recipe.getOutput(toVial), 87, 42); - } + output = new PositionedStack(recipe.getOutput(toVial), 87, 42); + } - public CachedBreweryRecipe(RecipeBrew recipe) { - this(recipe, null); - } + public CachedBreweryRecipe(RecipeBrew recipe) { + this(recipe, null); + } - public void setIngredients(List inputs) { - int left = 96 - inputs.size() * 18 / 2; + public void setIngredients(List inputs) { + int left = 96 - inputs.size() * 18 / 2; - int i = 0; - for (Object o : inputs) { - if (o instanceof String) - this.inputs.add(new PositionedStack(OreDictionary.getOres((String) o), left + i * 18, 6)); - else - this.inputs.add(new PositionedStack(o, left + i * 18, 6)); + int i = 0; + for (Object o : inputs) { + if (o instanceof String) { + this.inputs.add(new PositionedStack(OreDictionary.getOres((String) o), left + i * 18, 6)); + } else { + this.inputs.add(new PositionedStack(o, left + i * 18, 6)); + } + i++; + } + } - i++; - } - } + @Override + public List getIngredients() { + return inputs; + } - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 20, inputs); - } + @Override + public PositionedStack getResult() { + return output; + } - @Override - public PositionedStack getResult() { - return output; - } + } - } + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.brewery"); + } - @Override - public String getRecipeName() { - return StatCollector.translateToLocal("botania.nei.brewery"); - } + @Override + public String getOverlayIdentifier() { + return "botania.brewery"; + } - @Override - public String getGuiTexture() { - return LibResources.GUI_NEI_BREWERY; - } + @Override + public String getGuiTexture() { + return LibResources.GUI_NEI_BREWERY; + } - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(87, 25, 15, 14), "botania.brewery")); - } + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(87, 25, 15, 14), getOverlayIdentifier())); + } - @Override - public void drawBackground(int recipe) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GuiDraw.changeTexture(getGuiTexture()); - GuiDraw.drawTexturedModalRect(0, 0, 0, 0, 166, 65); - } + @Override + public void drawBackground(int recipe) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiDraw.changeTexture(getGuiTexture()); + GuiDraw.drawTexturedModalRect(0, 0, 0, 0, 166, 65); + } - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if(outputId.equals("botania.brewery")) - for(RecipeBrew recipe : BotaniaAPI.brewRecipes) - arecipes.add(new CachedBreweryRecipe(recipe)); - else super.loadCraftingRecipes(outputId, results); - } + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOverlayIdentifier())) { + for (RecipeBrew recipe : BotaniaAPI.brewRecipes) { + arecipes.add(new CachedBreweryRecipe(recipe)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } - @Override - public void loadCraftingRecipes(ItemStack result) { - if(result.getItem() instanceof IBrewItem) - for(RecipeBrew recipe : BotaniaAPI.brewRecipes) { - if(recipe == null) - continue; + @Override + public void loadCraftingRecipes(ItemStack result) { + if (!(result.getItem() instanceof IBrewItem)) { + return; + } + for (RecipeBrew recipe : BotaniaAPI.brewRecipes) { + if (recipe != null && ((IBrewItem) result.getItem()).getBrew(result) == recipe.getBrew()) { + arecipes.add(new CachedBreweryRecipe(recipe)); + } + } + } - if(((IBrewItem) result.getItem()).getBrew(result) == recipe.getBrew()) - arecipes.add(new CachedBreweryRecipe(recipe)); - } - } + @Override + public void loadUsageRecipes(ItemStack ingredient) { + if (ingredient.getItem() instanceof IBrewContainer) { + for (RecipeBrew recipe : BotaniaAPI.brewRecipes) { + if (recipe != null && recipe.getOutput(ingredient) != null) { + arecipes.add(new CachedBreweryRecipe(recipe, ingredient)); + } + } + } else { + for (RecipeBrew recipe : BotaniaAPI.brewRecipes) { + if (recipe == null) + continue; - @Override - public void loadUsageRecipes(ItemStack ingredient) { - if(ingredient.getItem() instanceof IBrewContainer) { - for(RecipeBrew recipe : BotaniaAPI.brewRecipes) { - if(recipe == null) - continue; - - if(recipe.getOutput(ingredient) != null) - arecipes.add(new CachedBreweryRecipe(recipe, ingredient)); - } - } else for(RecipeBrew recipe : BotaniaAPI.brewRecipes) { - if(recipe == null) - continue; - - CachedBreweryRecipe crecipe = new CachedBreweryRecipe(recipe); - if(ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.inputs, ingredient)) - arecipes.add(crecipe); - } - } + CachedBreweryRecipe crecipe = new CachedBreweryRecipe(recipe); + if (ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.inputs, ingredient)) { + arecipes.add(crecipe); + } + } + } + } } diff --git a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerElvenTrade.java b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerElvenTrade.java index 81a744c5b..a44d07844 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerElvenTrade.java +++ b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerElvenTrade.java @@ -4,7 +4,6 @@ import java.awt.Rectangle; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.client.renderer.texture.TextureMap; @@ -26,144 +25,129 @@ import vazkii.botania.common.core.helper.ItemNBTHelper; public class RecipeHandlerElvenTrade extends TemplateRecipeHandler { - public class CachedElvenTradeRecipe extends CachedRecipe { + public class CachedElvenTradeRecipe extends CachedRecipe { - public List inputs = new ArrayList<>(); - public PositionedStack output; + public List inputs = new ArrayList<>(); + public PositionedStack output; - public CachedElvenTradeRecipe(RecipeElvenTrade recipe) { - if(recipe == null) - return; + public CachedElvenTradeRecipe(RecipeElvenTrade recipe) { + if (recipe == null) + return; - setIngredients(recipe.getInputs()); - output = new PositionedStack(recipe.getOutput(), 107, 46); - } + setIngredients(recipe.getInputs()); + output = new PositionedStack(recipe.getOutput(), 107, 46); + } - public void setIngredients(List inputs) { - int i = 0; - for(Object o : inputs) { - if(o instanceof String) - this.inputs.add(new PositionedStack(OreDictionary.getOres((String) o), 60 + i * 18, 6)); - else this.inputs.add(new PositionedStack(o, 60 + i * 18, 6)); + public void setIngredients(List inputs) { + int i = 0; + for (Object o : inputs) { + if (o instanceof String) { + this.inputs.add(new PositionedStack(OreDictionary.getOres((String) o), 60 + i * 18, 6)); + } else { + this.inputs.add(new PositionedStack(o, 60 + i * 18, 6)); + } - i++; - } - } + i++; + } + } - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 20, inputs); - } + @Override + public List getIngredients() { + return inputs; + } - @Override - public PositionedStack getResult() { - return output; - } + @Override + public PositionedStack getResult() { + return output; + } - } + } - @Override - public String getRecipeName() { - return StatCollector.translateToLocal("botania.nei.elvenTrade"); - } + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.elvenTrade"); + } - @Override - public String getGuiTexture() { - return LibResources.GUI_NEI_BLANK; - } + @Override + public String getOverlayIdentifier() { + return "botania.elvenTrade"; + } - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(35, 30, 48, 48), "botania.elvenTrade")); - } + @Override + public String getGuiTexture() { + return LibResources.GUI_NEI_BLANK; + } - @Override - public int recipiesPerPage() { - return 1; - } + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(35, 30, 48, 48), getOverlayIdentifier())); + } - @Override - public void drawBackground(int recipe) { - super.drawBackground(recipe); - GL11.glEnable(GL11.GL_BLEND); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.7F); - GuiDraw.changeTexture(LibResources.GUI_ELVEN_TRADE_OVERLAY); - GuiDraw.drawTexturedModalRect(30, 10, 17, 17, 100, 80); - GL11.glDisable(GL11.GL_BLEND); - GuiDraw.changeTexture(TextureMap.locationBlocksTexture); - RenderItem.getInstance().renderIcon(35, 29, BlockAlfPortal.portalTex, 48, 48); - } + @Override + public void drawBackground(int recipe) { + super.drawBackground(recipe); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.7F); + GuiDraw.changeTexture(LibResources.GUI_ELVEN_TRADE_OVERLAY); + GuiDraw.drawTexturedModalRect(30, 10, 17, 17, 100, 80); + GL11.glDisable(GL11.GL_BLEND); + GuiDraw.changeTexture(TextureMap.locationBlocksTexture); + RenderItem.getInstance().renderIcon(35, 29, BlockAlfPortal.portalTex, 48, 48); + } - private static boolean hasElvenKnowledge() { - /*EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if (player != null) { - for (ItemStack stack : player.inventory.mainInventory) { - if (stack != null && stack.getItem() instanceof ILexicon) { - ILexicon lexicon = (ILexicon) stack.getItem(); - if (lexicon.isKnowledgeUnlocked(stack, BotaniaAPI.elvenKnowledge)) { - return true; - } - } - } - } - return false;*/ - return true; - } + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOverlayIdentifier())) { + for (RecipeElvenTrade recipe : filteredElvenTradeRecipes()) { + arecipes.add(new CachedElvenTradeRecipe(recipe)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if(outputId.equals("botania.elvenTrade") && hasElvenKnowledge()) { - if(hasElvenKnowledge()) { - for(RecipeElvenTrade recipe : filteredElvenTradeRecipes()) { - arecipes.add(new CachedElvenTradeRecipe(recipe)); - } - } - } else super.loadCraftingRecipes(outputId, results); - } + @Override + public void loadCraftingRecipes(ItemStack result) { + for (RecipeElvenTrade recipe : filteredElvenTradeRecipes()) { + if (NEIServerUtils.areStacksSameTypeCrafting(recipe.getOutput(), result)) { + arecipes.add(new CachedElvenTradeRecipe(recipe)); + } + } + } - @Override - public void loadCraftingRecipes(ItemStack result) { - if(hasElvenKnowledge()) { - for(RecipeElvenTrade recipe : filteredElvenTradeRecipes()) { - if(NEIServerUtils.areStacksSameTypeCrafting(recipe.getOutput(), result)) - arecipes.add(new CachedElvenTradeRecipe(recipe)); - } - } - } + @Override + public void loadUsageRecipes(ItemStack ingredient) { + for (RecipeElvenTrade recipe : filteredElvenTradeRecipes()) { + CachedElvenTradeRecipe crecipe = new CachedElvenTradeRecipe(recipe); + if (crecipe.contains(crecipe.inputs, ingredient)) { + arecipes.add(crecipe); + } + } + } - @Override - public void loadUsageRecipes(ItemStack ingredient) { - if(hasElvenKnowledge()) { - for(RecipeElvenTrade recipe : filteredElvenTradeRecipes()) { - CachedElvenTradeRecipe crecipe = new CachedElvenTradeRecipe(recipe); - if(crecipe.contains(crecipe.inputs, ingredient)) - arecipes.add(crecipe); - } - } - } + private List filteredElvenTradeRecipes() { + List result = new ArrayList<>(); - // hide dummy recipes - private List filteredElvenTradeRecipes() { - return BotaniaAPI.elvenTradeRecipes - .stream() - .filter(recipe -> { - if (recipe == null) { - return false; - } - if (recipe.getInputs().size() == 1) { - return !stackSame(recipe.getOutput(), recipe.getInputs().get(0)); - } - return true; - }) - .collect(Collectors.toList()); - } + for (RecipeElvenTrade recipe : BotaniaAPI.elvenTradeRecipes) { + if (recipe == null) { + continue; + } - private boolean stackSame(ItemStack stack, Object obj) { - if (obj instanceof String) { - return OreDictionary.getOres((String) obj).stream().anyMatch(s -> ItemNBTHelper.areStacksSameTypeCraftingWithNBT(stack, s)); - } else { - return Arrays.stream(NEIServerUtils.extractRecipeItems(obj)).anyMatch(s -> ItemNBTHelper.areStacksSameTypeCraftingWithNBT(stack, s)); - } - } + // Don't show dummy recipes where input and output are the same + if (recipe.getInputs().size() != 1 || !stackSame(recipe.getOutput(), recipe.getInputs().get(0))) { + result.add(recipe); + } + } + + return result; + } + + private boolean stackSame(ItemStack stack, Object obj) { + if (obj instanceof String) { + return OreDictionary.getOres((String) obj).stream().anyMatch(s -> ItemNBTHelper.areStacksSameTypeCraftingWithNBT(stack, s)); + } else { + return Arrays.stream(NEIServerUtils.extractRecipeItems(obj)).anyMatch(s -> ItemNBTHelper.areStacksSameTypeCraftingWithNBT(stack, s)); + } + } } diff --git a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerFloatingFlowers.java b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerFloatingFlowers.java index 9801c436d..e3dd9daf1 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerFloatingFlowers.java +++ b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerFloatingFlowers.java @@ -17,65 +17,70 @@ import codechicken.nei.recipe.TemplateRecipeHandler; public class RecipeHandlerFloatingFlowers extends TemplateRecipeHandler { - public class CachedFloatingFlowerRecipe extends CachedRecipe { + public class CachedFloatingFlowerRecipe extends CachedRecipe { - public List inputs = new ArrayList<>(); - public PositionedStack output; + public List inputs = new ArrayList<>(); + public PositionedStack output; - public CachedFloatingFlowerRecipe(ItemStack floatingFlower, ItemStack specialFlower, ItemStack output) { - inputs.add(new PositionedStack(floatingFlower, 25, 6)); - inputs.add(new PositionedStack(specialFlower, 43, 6)); - this.output = new PositionedStack(output, 119, 24); - this.output.setMaxSize(1); - } + public CachedFloatingFlowerRecipe(ItemStack floatingFlower, ItemStack specialFlower, ItemStack output) { + inputs.add(new PositionedStack(floatingFlower, 25, 6)); + inputs.add(new PositionedStack(specialFlower, 43, 6)); + this.output = new PositionedStack(output, 119, 24); + this.output.setMaxSize(1); + } - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 20, inputs); - } + @Override + public List getIngredients() { + return inputs; + } - @Override - public PositionedStack getResult() { - return output; - } + @Override + public PositionedStack getResult() { + return output; + } - } + } + + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.floatingFlowers"); + } @Override - public String getRecipeName() { - return StatCollector.translateToLocal("botania.nei.floatingFlowers"); + public String getOverlayIdentifier() { + return "crafting2x2"; } - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(84, 23, 24, 18), "crafting")); - } + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(84, 23, 24, 18), "crafting")); + } - @Override - public String getGuiTexture() { - return "textures/gui/container/crafting_table.png"; - } + @Override + public String getGuiTexture() { + return "textures/gui/container/crafting_table.png"; + } - @Override - public void loadCraftingRecipes(ItemStack result) { - if(Block.getBlockFromItem(result.getItem()) instanceof BlockFloatingSpecialFlower) { - ItemStack floatingFlower = new ItemStack(ModBlocks.floatingFlower, 1, OreDictionary.WILDCARD_VALUE); - ItemStack specialFlower = new ItemStack(ModBlocks.specialFlower); - specialFlower.setTagCompound((NBTTagCompound) result.getTagCompound().copy()); + @Override + public void loadCraftingRecipes(ItemStack result) { + if (Block.getBlockFromItem(result.getItem()) instanceof BlockFloatingSpecialFlower) { + ItemStack floatingFlower = new ItemStack(ModBlocks.floatingFlower, 1, OreDictionary.WILDCARD_VALUE); + ItemStack specialFlower = new ItemStack(ModBlocks.specialFlower); + specialFlower.setTagCompound((NBTTagCompound) result.getTagCompound().copy()); - arecipes.add(new CachedFloatingFlowerRecipe(floatingFlower, specialFlower, result.copy())); - } - } + arecipes.add(new CachedFloatingFlowerRecipe(floatingFlower, specialFlower, result.copy())); + } + } - @Override - public void loadUsageRecipes(ItemStack ingredient) { - if(Block.getBlockFromItem(ingredient.getItem()) instanceof BlockSpecialFlower) { - ItemStack floatingFlower = new ItemStack(ModBlocks.floatingFlower, 1, OreDictionary.WILDCARD_VALUE); - ItemStack result = new ItemStack(ModBlocks.floatingSpecialFlower); - result.setTagCompound((NBTTagCompound) ingredient.getTagCompound().copy()); + @Override + public void loadUsageRecipes(ItemStack ingredient) { + if (Block.getBlockFromItem(ingredient.getItem()) instanceof BlockSpecialFlower) { + ItemStack floatingFlower = new ItemStack(ModBlocks.floatingFlower, 1, OreDictionary.WILDCARD_VALUE); + ItemStack result = new ItemStack(ModBlocks.floatingSpecialFlower); + result.setTagCompound((NBTTagCompound) ingredient.getTagCompound().copy()); - arecipes.add(new CachedFloatingFlowerRecipe(floatingFlower, ingredient.copy(), result)); - } - } + arecipes.add(new CachedFloatingFlowerRecipe(floatingFlower, ingredient.copy(), result)); + } + } } diff --git a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerLexicaBotania.java b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerLexicaBotania.java index fe5d660c3..6a16b1990 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerLexicaBotania.java +++ b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerLexicaBotania.java @@ -2,21 +2,19 @@ * This class was created by . It's distributed as * part of the Botania Mod. Get the Source Code in github: * https://github.com/Vazkii/Botania - * + *

* Botania is Open Source and distributed under the * Botania License: http://botaniamod.net/license.php - * + *

* File Created @ [12/12/2015, 23:25:47 (GMT)] */ package vazkii.botania.client.integration.nei.recipe; import java.awt.Rectangle; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; @@ -26,129 +24,146 @@ import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.lexicon.KnowledgeType; import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.lexicon.LexiconRecipeMappings; +import vazkii.botania.client.integration.nei.NEIHelper; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.item.ModItems; import vazkii.botania.common.lexicon.page.PageText; +import codechicken.lib.gui.GuiDraw; import codechicken.nei.PositionedStack; import codechicken.nei.recipe.TemplateRecipeHandler; public class RecipeHandlerLexicaBotania extends TemplateRecipeHandler { + private static final ItemStack lexicaStack = new ItemStack(ModItems.lexicon); - public class CachedLexicaBotaniaRecipe extends CachedRecipe { + public class CachedLexicaBotaniaRecipe extends CachedRecipe { - public LexiconEntry entry; - public PositionedStack item; - public List otherStacks = new ArrayList<>(); + public LexiconEntry entry; + public PositionedStack item; - public CachedLexicaBotaniaRecipe(ItemStack stack, LexiconEntry entry) { - otherStacks.add(new PositionedStack(new ItemStack(ModItems.lexicon), 51, 5)); - item = new PositionedStack(stack, 91, 5); - this.entry = entry; - } + public CachedLexicaBotaniaRecipe(ItemStack stack, LexiconEntry entry) { + item = new PositionedStack(stack, 91, 5); + this.entry = entry; + } - @Override - public List getIngredients() { - return otherStacks; - } + @Override + public PositionedStack getResult() { + return item; + } - @Override - public PositionedStack getResult() { - return item; - } + @Override + public boolean contains(Collection ingredients, ItemStack ingredient) { + return ingredient.getItem() == ModItems.lexicon; + } - @Override - public List getOtherStacks() { - return otherStacks; - } + } - @Override - public boolean contains(Collection ingredients, ItemStack ingredient) { - return ingredient.getItem() == ModItems.lexicon; - } + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.lexica"); + } - } + @Override + public String getOverlayIdentifier() { + return "botania.lexica"; + } - @Override - public String getRecipeName() { - return StatCollector.translateToLocal("botania.nei.lexica"); - } + @Override + public String getGuiTexture() { + return LibResources.GUI_NEI_BLANK; + } - @Override - public String getGuiTexture() { - return LibResources.GUI_NEI_BLANK; - } + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(50, 4, 18, 18), getOverlayIdentifier())); + } - @Override - public int recipiesPerPage() { - return 1; - } - - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(50, 4, 18, 18), "botania.lexica")); - } - - @Override - public void drawBackground(int recipe) { - super.drawBackground(recipe); - - FontRenderer font = Minecraft.getMinecraft().fontRenderer; - CachedLexicaBotaniaRecipe recipeObj = ((CachedLexicaBotaniaRecipe) arecipes.get(recipe)); + @Override + public void drawBackground(int recipe) { + super.drawBackground(recipe); - String s = EnumChatFormatting.UNDERLINE + StatCollector.translateToLocal(recipeObj.entry.getUnlocalizedName()); - font.drawString(s, 82 - font.getStringWidth(s) / 2, 30, 4210752); - - KnowledgeType type = recipeObj.entry.getKnowledgeType(); - s = type.color + StatCollector.translateToLocal(type.getUnlocalizedName()).replaceAll("\\&.", ""); - font.drawString(s, 82 - font.getStringWidth(s) / 2, 42, 4210752); - - s = "\"" + StatCollector.translateToLocal(recipeObj.entry.getTagline()) + "\""; - PageText.renderText(5, 42, 160, 200, s); - - String key = LexiconRecipeMappings.stackToString(recipeObj.item.item); - String quickInfo = "botania.nei.quickInfo:" + key; - String quickInfoLocal = StatCollector.translateToLocal(quickInfo); - - if(GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown() && Minecraft.getMinecraft().gameSettings.advancedItemTooltips) - s = "name: " + key; - else if(quickInfo.equals(quickInfoLocal)) - s = StatCollector.translateToLocal("botania.nei.lexicaNoInfo"); - else { - s = StatCollector.translateToLocal("botania.nei.lexicaSeparator"); - font.drawString(s, 82 - font.getStringWidth(s) / 2, 80, 4210752); - s = quickInfoLocal; - } - - PageText.renderText(5, 80, 160, 200, s); - } + CachedLexicaBotaniaRecipe recipeObj = ((CachedLexicaBotaniaRecipe) arecipes.get(recipe)); - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if(outputId.equals("botania.lexica")) { - for(LexiconEntry entry : BotaniaAPI.getAllEntries()) { - List stacks = entry.getDisplayedRecipes(); - for(ItemStack stack : stacks) - arecipes.add(new CachedLexicaBotaniaRecipe(stack, entry)); - } - } else super.loadCraftingRecipes(outputId, results); - } + NEIHelper.renderItemIntoGUI(lexicaStack, 51, 5); - @Override - public void loadCraftingRecipes(ItemStack result) { - for(LexiconEntry entry : BotaniaAPI.getAllEntries()) { - List stacks = entry.getDisplayedRecipes(); - for(ItemStack stack : stacks) { - String key1 = LexiconRecipeMappings.stackToString(stack); - String key2 = LexiconRecipeMappings.stackToString(result); - if(key1.equals(key2)) - arecipes.add(new CachedLexicaBotaniaRecipe(stack, entry)); - } - } - } + GuiDraw.drawStringC( + EnumChatFormatting.UNDERLINE + StatCollector.translateToLocal(recipeObj.entry.getUnlocalizedName()), + 82, + 30, + 0x404040, + false); - @Override - public void loadUsageRecipes(ItemStack ingredient) { - // NO-OP - } + KnowledgeType type = recipeObj.entry.getKnowledgeType(); + GuiDraw.drawStringC( + type.color + StatCollector.translateToLocal(type.getUnlocalizedName()).replaceAll("&.", ""), + 82, + 42, + 0x404040, + false); + + PageText.renderText( + 5, + 42, + 160, + 200, + "\"" + StatCollector.translateToLocal(recipeObj.entry.getTagline()) + "\""); + + String key = LexiconRecipeMappings.stackToString(recipeObj.item.item); + String quickInfo = "botania.nei.quickInfo:" + key; + String quickInfoLocal = StatCollector.translateToLocal(quickInfo); + + String s; + if (GuiScreen.isShiftKeyDown() && GuiScreen.isCtrlKeyDown() && Minecraft.getMinecraft().gameSettings.advancedItemTooltips) + s = "name: " + key; + else if (quickInfo.equals(quickInfoLocal)) + s = StatCollector.translateToLocal("botania.nei.lexicaNoInfo"); + else { + GuiDraw.drawStringC( + StatCollector.translateToLocal("botania.nei.lexicaSeparator"), + 82, + 80, + 0x404040, + false); + s = quickInfoLocal; + } + + PageText.renderText(5, 80, 160, 200, s); + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOverlayIdentifier())) { + for (LexiconEntry entry : BotaniaAPI.getAllEntries()) { + List stacks = entry.getDisplayedRecipes(); + for (ItemStack stack : stacks) + arecipes.add(new CachedLexicaBotaniaRecipe(stack, entry)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + for (LexiconEntry entry : BotaniaAPI.getAllEntries()) { + List stacks = entry.getDisplayedRecipes(); + for (ItemStack stack : stacks) { + String key1 = LexiconRecipeMappings.stackToString(stack); + String key2 = LexiconRecipeMappings.stackToString(result); + if (key1.equals(key2)) { + arecipes.add(new CachedLexicaBotaniaRecipe(stack, entry)); + } + } + } + } + + @Override + public void loadUsageRecipes(String outputId, Object... ingredients) { + loadCraftingRecipes(outputId, ingredients); + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + loadCraftingRecipes(ingredient); + } } diff --git a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerManaPool.java b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerManaPool.java index 6f5af8490..92b72c6d1 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerManaPool.java +++ b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerManaPool.java @@ -1,13 +1,9 @@ package vazkii.botania.client.integration.nei.recipe; import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.List; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.item.Item; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; import net.minecraftforge.oredict.OreDictionary; @@ -17,6 +13,7 @@ import org.lwjgl.opengl.GL11; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipeManaInfusion; import vazkii.botania.client.core.handler.HUDHandler; +import vazkii.botania.client.integration.nei.NEIHelper; import vazkii.botania.client.lib.LibResources; import vazkii.botania.client.render.tile.RenderTilePool; import vazkii.botania.common.block.ModBlocks; @@ -28,120 +25,135 @@ import vazkii.botania.common.core.helper.ItemNBTHelper; public class RecipeHandlerManaPool extends TemplateRecipeHandler { - public class CachedManaPoolRecipe extends CachedRecipe { + private static final ItemStack poolStack = new ItemStack(ModBlocks.pool); - public List inputs = new ArrayList<>(); - public PositionedStack output; - public List otherStacks = new ArrayList<>(); - public int mana; + public class CachedManaPoolRecipe extends CachedRecipe { - public CachedManaPoolRecipe(RecipeManaInfusion recipe) { - if(recipe == null) - return; - inputs.add(new PositionedStack(new ItemStack(ModBlocks.pool, 1, recipe.getOutput().getItem() == Item.getItemFromBlock(ModBlocks.pool) ? 2 : 0), 71, 37)); + public PositionedStack input; + public PositionedStack output; + public PositionedStack catalyst; + public int mana; - if(recipe.getInput() instanceof String) - inputs.add(new PositionedStack(OreDictionary.getOres((String) recipe.getInput()), 42, 37)); - else inputs.add(new PositionedStack(recipe.getInput(), 42, 37)); + public CachedManaPoolRecipe(RecipeManaInfusion recipe) { + if (recipe == null) return; - if(recipe.isAlchemy()) - otherStacks.add(new PositionedStack(new ItemStack(ModBlocks.alchemyCatalyst), 10, 37)); - else if (recipe.isConjuration()) - otherStacks.add(new PositionedStack(new ItemStack(ModBlocks.conjurationCatalyst), 10, 37)); + if (recipe.getInput() instanceof String) { + input = new PositionedStack(OreDictionary.getOres((String) recipe.getInput()), 42, 37); + } else { + input = new PositionedStack(recipe.getInput(), 42, 37); + } - output = new PositionedStack(recipe.getOutput(), 101, 37); - // This value is where the mana bar is stored initially - mana = recipe.getManaToConsume(); - } + if (recipe.isAlchemy()) { + catalyst = new PositionedStack(new ItemStack(ModBlocks.alchemyCatalyst), 10, 37); + } else if (recipe.isConjuration()) { + catalyst = new PositionedStack(new ItemStack(ModBlocks.conjurationCatalyst), 10, 37); + } - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 20, inputs); - } + output = new PositionedStack(recipe.getOutput(), 101, 37); + mana = recipe.getManaToConsume(); + } - @Override - public PositionedStack getResult() { - return output; - } + @Override + public PositionedStack getIngredient() { + return input; + } - @Override - public List getOtherStacks() { - return otherStacks; - } + @Override + public PositionedStack getResult() { + return output; + } - } + @Override + public PositionedStack getOtherStack() { + return catalyst; + } - @Override - public String getRecipeName() { - return StatCollector.translateToLocal("botania.nei.manaPool"); - } + } - @Override - public String getGuiTexture() { - return LibResources.GUI_NEI_BLANK; - } + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.manaPool"); + } - @Override - public int recipiesPerPage() { - return 1; - } + @Override + public String getOverlayIdentifier() { + return "botania.manaPool"; + } - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(70, 36, 18, 18), "botania.manaPool")); - } + @Override + public String getGuiTexture() { + return LibResources.GUI_NEI_BLANK; + } - @Override - public void drawBackground(int recipe) { - super.drawBackground(recipe); - GL11.glEnable(GL11.GL_BLEND); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); - // Mana infusion is the mana pool, super weird. - GuiDraw.changeTexture(LibResources.GUI_MANA_INFUSION_OVERLAY); - GuiDraw.drawTexturedModalRect(45, 20, 38, 35, 92, 50); - // Below is where the mana bar actually drawn. - int tempMana = ((CachedManaPoolRecipe) arecipes.get(recipe)).mana; - HUDHandler.renderManaBar(32, 80, 0x0000FF, 0.75F, GuiScreen.isShiftKeyDown() ? tempMana : tempMana * 10, TilePool.MAX_MANA / 10); - FontRenderer font = Minecraft.getMinecraft().fontRenderer; - String size = GuiScreen.isShiftKeyDown() ? "1x " : "10x "; - String localized = StatCollector.translateToLocal("botaniamisc.neiratio"); - font.drawString(size + localized, 84 - font.getStringWidth(size + localized) / 2, 71, 0x000000); - RenderTilePool.forceMana = true; - } + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(70, 36, 18, 18), getOverlayIdentifier())); + } - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if(outputId.equals("botania.manaPool")) { - for(RecipeManaInfusion recipe : BotaniaAPI.manaInfusionRecipes) { - if(recipe == null) - continue; + @Override + public void drawBackground(int recipe) { + super.drawBackground(recipe); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + // Arrows + GuiDraw.changeTexture(LibResources.GUI_MANA_INFUSION_OVERLAY); + GuiDraw.drawTexturedModalRect(45, 20, 38, 35, 92, 50); + // Mana bar + int tempMana = ((CachedManaPoolRecipe) arecipes.get(recipe)).mana; + HUDHandler.renderManaBar( + 32, + 80, + 0x0000FF, + 0.75F, + GuiScreen.isShiftKeyDown() ? tempMana : tempMana * 10, + TilePool.MAX_MANA / 10); + String size = GuiScreen.isShiftKeyDown() ? "1x " : "10x "; + String localized = StatCollector.translateToLocal("botaniamisc.neiratio"); + GuiDraw.drawStringC(size + localized, 84, 71, 0x000000, false); + GL11.glDisable(GL11.GL_BLEND); + // Mana pool item + RenderHelper.enableGUIStandardItemLighting(); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderTilePool.forceMana = true; + NEIHelper.renderItemIntoGUI(poolStack, 71, 37); + GL11.glDisable(GL11.GL_DEPTH_TEST); + RenderHelper.disableStandardItemLighting(); + } - arecipes.add(new CachedManaPoolRecipe(recipe)); - } - } else super.loadCraftingRecipes(outputId, results); - } + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOverlayIdentifier())) { + for (RecipeManaInfusion recipe : BotaniaAPI.manaInfusionRecipes) { + if (recipe == null) continue; - @Override - public void loadCraftingRecipes(ItemStack result) { - for(RecipeManaInfusion recipe : BotaniaAPI.manaInfusionRecipes) { - if(recipe == null) - continue; + arecipes.add(new CachedManaPoolRecipe(recipe)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } - if(ItemNBTHelper.areStacksSameTypeCraftingWithNBT(recipe.getOutput(), result)) - arecipes.add(new CachedManaPoolRecipe(recipe)); - } - } + @Override + public void loadCraftingRecipes(ItemStack result) { + for (RecipeManaInfusion recipe : BotaniaAPI.manaInfusionRecipes) { + if (recipe == null) continue; - @Override - public void loadUsageRecipes(ItemStack ingredient) { - for(RecipeManaInfusion recipe : BotaniaAPI.manaInfusionRecipes) { - if(recipe == null) - continue; + if (ItemNBTHelper.areStacksSameTypeCraftingWithNBT(recipe.getOutput(), result)) { + arecipes.add(new CachedManaPoolRecipe(recipe)); + } + } + } - CachedManaPoolRecipe crecipe = new CachedManaPoolRecipe(recipe); - if(ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.getIngredients(), ingredient) || ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.getOtherStacks(), ingredient)) - arecipes.add(crecipe); - } - } + @Override + public void loadUsageRecipes(ItemStack ingredient) { + for (RecipeManaInfusion recipe : BotaniaAPI.manaInfusionRecipes) { + if (recipe == null) continue; + + CachedManaPoolRecipe crecipe = new CachedManaPoolRecipe(recipe); + if (ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.getIngredients(), ingredient) || ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.getOtherStacks(), ingredient)) { + arecipes.add(crecipe); + } + } + } } diff --git a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerPetalApothecary.java b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerPetalApothecary.java index 80196b8a7..08559cd96 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerPetalApothecary.java +++ b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerPetalApothecary.java @@ -4,6 +4,7 @@ import java.awt.Rectangle; import java.util.ArrayList; import java.util.List; +import net.minecraft.client.renderer.RenderHelper; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.util.StatCollector; @@ -13,6 +14,7 @@ import org.lwjgl.opengl.GL11; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipePetals; +import vazkii.botania.client.integration.nei.NEIHelper; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.block.ModBlocks; import codechicken.lib.gui.GuiDraw; @@ -22,122 +24,143 @@ import codechicken.nei.recipe.TemplateRecipeHandler; import vazkii.botania.common.core.helper.ItemNBTHelper; public class RecipeHandlerPetalApothecary extends TemplateRecipeHandler { + private static final ItemStack altarStack = new ItemStack(ModBlocks.altar); - public class CachedPetalApothecaryRecipe extends CachedRecipe { + public class CachedPetalApothecaryRecipe extends CachedRecipe { + public List inputs = new ArrayList<>(); + public PositionedStack output; + public boolean renderItem; - public List inputs = new ArrayList<>(); - public PositionedStack output; + public CachedPetalApothecaryRecipe(RecipePetals recipe, boolean addCenterItem) { + setIngredients(recipe.getInputs()); + output = new PositionedStack(recipe.getOutput(), 111, 21); + renderItem = addCenterItem; + if (addCenterItem) { + ItemStack seedStack = new ItemStack(Items.wheat_seeds); + seedStack.setStackDisplayName(StatCollector.translateToLocal("botania.nei.anySeed")); + inputs.add(new PositionedStack(seedStack, 73, 39)); + } + } - public CachedPetalApothecaryRecipe(RecipePetals recipe, boolean addCenterItem) { - setIngredients(recipe.getInputs()); - output = new PositionedStack(recipe.getOutput(), 111, 21); - if(addCenterItem) - inputs.add(new PositionedStack(new ItemStack(ModBlocks.altar), 73, 55)); - } + public CachedPetalApothecaryRecipe(RecipePetals recipe) { + this(recipe, true); + } - public CachedPetalApothecaryRecipe(RecipePetals recipe) { - this(recipe, true); - } + public void setIngredients(List inputs) { + float degreePerInput = 360F / inputs.size(); + float currentDegree = -90F; - public void setIngredients(List inputs) { - float degreePerInput = 360F / inputs.size(); - float currentDegree = -90F; + for (Object o : inputs) { + int posX = (int) Math.round(73 + Math.cos(currentDegree * Math.PI / 180D) * 32); + int posY = (int) Math.round(55 + Math.sin(currentDegree * Math.PI / 180D) * 32); - for(Object o : inputs) { - int posX = (int) Math.round(73 + Math.cos(currentDegree * Math.PI / 180D) * 32); - int posY = (int) Math.round(55 + Math.sin(currentDegree * Math.PI / 180D) * 32); + if (o instanceof String) { + this.inputs.add(new PositionedStack(OreDictionary.getOres((String) o), posX, posY)); + } else { + this.inputs.add(new PositionedStack(o, posX, posY)); + } + currentDegree += degreePerInput; + } + } - if(o instanceof String) - this.inputs.add(new PositionedStack(OreDictionary.getOres((String) o), posX, posY)); - else this.inputs.add(new PositionedStack(o, posX, posY)); - currentDegree += degreePerInput; - } - } + @Override + public List getIngredients() { + return inputs; + } - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 20, inputs); - } + @Override + public PositionedStack getResult() { + return output; + } + } - @Override - public PositionedStack getResult() { - return output; - } + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.petalApothecary"); + } - } + @Override + public String getOverlayIdentifier() { + return getRecipeID(); + } - @Override - public String getRecipeName() { - return StatCollector.translateToLocal("botania.nei.petalApothecary"); - } + // Used by the Alfheim addon + @Deprecated + public String getRecipeID() { + return "botania.petalApothecary"; + } - public String getRecipeID() { - return "botania.petalApothecary"; - } + @Override + public String getGuiTexture() { + return LibResources.GUI_NEI_BLANK; + } - @Override - public String getGuiTexture() { - return LibResources.GUI_NEI_BLANK; - } + @Override + public void loadTransferRects() { + transferRects.add(new RecipeTransferRect(new Rectangle(73, 56, 16, 16), getOverlayIdentifier())); + } - @Override - public void loadTransferRects() { - transferRects.add(new RecipeTransferRect(new Rectangle(72, 54, 18, 18), getRecipeID())); - } + @Override + public void drawBackground(int recipe) { + super.drawBackground(recipe); + // Background circle graphic + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GuiDraw.changeTexture(LibResources.GUI_PETAL_OVERLAY); + GuiDraw.drawTexturedModalRect(45, 10, 38, 7, 92, 92); + // Item + if (!((CachedPetalApothecaryRecipe) arecipes.get(recipe)).renderItem) return; + RenderHelper.enableGUIStandardItemLighting(); + GL11.glEnable(GL11.GL_DEPTH_TEST); + NEIHelper.renderItemIntoGUI(getRenderItem(), 73, 55); + GL11.glDisable(GL11.GL_DEPTH_TEST); + RenderHelper.disableStandardItemLighting(); + } - @Override - public int recipiesPerPage() { - return 1; - } + protected ItemStack getRenderItem() { + return altarStack; + } - @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_PETAL_OVERLAY); - GuiDraw.drawTexturedModalRect(45, 10, 38, 7, 92, 92); - } + public List getRecipes() { + return BotaniaAPI.petalRecipes; + } - public List getRecipes() { - return BotaniaAPI.petalRecipes; - } + public CachedPetalApothecaryRecipe getCachedRecipe(RecipePetals recipe) { + return new CachedPetalApothecaryRecipe(recipe, true); + } - public CachedPetalApothecaryRecipe getCachedRecipe(RecipePetals recipe) { - return new CachedPetalApothecaryRecipe(recipe); - } + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOverlayIdentifier())) { + for (RecipePetals recipe : getRecipes()) + if (recipe.getOutput().getItem() != Items.skull) + arecipes.add(getCachedRecipe(recipe)); + } else { + super.loadCraftingRecipes(outputId, results); + } + } - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if(outputId.equals(getRecipeID())) { - for(RecipePetals recipe : getRecipes()) - if(recipe.getOutput().getItem() != Items.skull) - arecipes.add(getCachedRecipe(recipe)); - } else super.loadCraftingRecipes(outputId, results); - } + @Override + public void loadCraftingRecipes(ItemStack result) { + for (RecipePetals recipe : getRecipes()) { + if (recipe == null) continue; - @Override - public void loadCraftingRecipes(ItemStack result) { - for(RecipePetals recipe : getRecipes()){ - if(recipe == null) - continue; + if (recipe.getOutput().stackTagCompound != null && ItemNBTHelper.areStacksSameTypeWithNBT(recipe.getOutput(), result) || recipe.getOutput().stackTagCompound == null && NEIServerUtils.areStacksSameTypeCrafting(recipe.getOutput(), result) && recipe.getOutput().getItem() != Items.skull) { + arecipes.add(getCachedRecipe(recipe)); + } + } + } - if(recipe.getOutput().stackTagCompound != null && ItemNBTHelper.areStacksSameTypeWithNBT(recipe.getOutput(), result) || recipe.getOutput().stackTagCompound == null && NEIServerUtils.areStacksSameTypeCrafting(recipe.getOutput(), result) && recipe.getOutput().getItem() != Items.skull) - arecipes.add(getCachedRecipe(recipe)); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - for(RecipePetals recipe : getRecipes()) { - if(recipe == null) - continue; - - CachedPetalApothecaryRecipe crecipe = getCachedRecipe(recipe); - if(ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.inputs, ingredient) && recipe.getOutput().getItem() != Items.skull) - arecipes.add(crecipe); - } - } + @Override + public void loadUsageRecipes(ItemStack ingredient) { + for (RecipePetals recipe : getRecipes()) { + if (recipe == null) continue; + CachedPetalApothecaryRecipe crecipe = getCachedRecipe(recipe); + if (ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.inputs, ingredient) && recipe.getOutput().getItem() != Items.skull) { + arecipes.add(crecipe); + } + } + } } diff --git a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerPureDaisy.java b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerPureDaisy.java index f02d24a09..8b0fc8bf7 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerPureDaisy.java +++ b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerPureDaisy.java @@ -13,6 +13,7 @@ import org.lwjgl.opengl.GL11; import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.recipe.RecipePureDaisy; +import vazkii.botania.client.integration.nei.NEIHelper; import vazkii.botania.client.lib.LibResources; import vazkii.botania.common.core.helper.ItemNBTHelper; import vazkii.botania.common.item.block.ItemBlockSpecialFlower; @@ -23,103 +24,107 @@ import codechicken.nei.recipe.TemplateRecipeHandler; public class RecipeHandlerPureDaisy extends TemplateRecipeHandler { - public class CachedPureDaisyRecipe extends CachedRecipe { + private static final ItemStack flowerStack = ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_PUREDAISY); - public List inputs = new ArrayList<>(); - public PositionedStack output; - public List otherStacks = new ArrayList<>(); + public class CachedPureDaisyRecipe extends CachedRecipe { - public CachedPureDaisyRecipe(RecipePureDaisy recipe) { - if(recipe == null) - return; - inputs.add(new PositionedStack(ItemBlockSpecialFlower.ofType(LibBlockNames.SUBTILE_PUREDAISY), 71, 23)); + public List inputs = new ArrayList<>(); + public PositionedStack output; + public List otherStacks = new ArrayList<>(); - if(recipe.getInput() instanceof String) - inputs.add(new PositionedStack(OreDictionary.getOres((String) recipe.getInput()), 42, 23)); - else inputs.add(new PositionedStack(new ItemStack((Block) recipe.getInput()), 42, 23)); + public CachedPureDaisyRecipe(RecipePureDaisy recipe) { + if (recipe == null) return; - output = new PositionedStack(new ItemStack(recipe.getOutput()), 101, 23); - } + if (recipe.getInput() instanceof String) { + inputs.add(new PositionedStack(OreDictionary.getOres((String) recipe.getInput()), 42, 23)); + } else { + inputs.add(new PositionedStack(new ItemStack((Block) recipe.getInput()), 42, 23)); + } - @Override - public List getIngredients() { - return getCycledIngredients(cycleticks / 20, inputs); - } + output = new PositionedStack(new ItemStack(recipe.getOutput()), 101, 23); + } - @Override - public PositionedStack getResult() { - return output; - } + @Override + public List getIngredients() { + return inputs; + } - @Override - public List getOtherStacks() { - return otherStacks; - } + @Override + public PositionedStack getResult() { + return output; + } - } + @Override + public List getOtherStacks() { + return otherStacks; + } + + } + + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.pureDaisy"); + } @Override - public String getRecipeName() { - return StatCollector.translateToLocal("botania.nei.pureDaisy"); + public String getOverlayIdentifier() { + return "botania.pureDaisy"; } - @Override - public String getGuiTexture() { - return LibResources.GUI_NEI_BLANK; - } + @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), getOverlayIdentifier())); + } - @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); + // Arrows + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GuiDraw.changeTexture(LibResources.GUI_PURE_DAISY_OVERLAY); + GuiDraw.drawTexturedModalRect(48, 10, 0, 0, 65, 44); + // Flower item + NEIHelper.renderItemIntoGUI(flowerStack, 71, 23); + } - @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(getOverlayIdentifier())) { + for (RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) { + if (recipe != null) arecipes.add(new CachedPureDaisyRecipe(recipe)); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if(outputId.equals("botania.pureDaisy")) { - for(RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) { - if(recipe == null) - continue; + @Override + public void loadCraftingRecipes(ItemStack result) { + for (RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) { + if (recipe == null) continue; - arecipes.add(new CachedPureDaisyRecipe(recipe)); - } - } else super.loadCraftingRecipes(outputId, results); - } + if (ItemNBTHelper.areStacksSameTypeCraftingWithNBT(new ItemStack(recipe.getOutput()), result)) { + arecipes.add(new CachedPureDaisyRecipe(recipe)); + } + } + } - @Override - public void loadCraftingRecipes(ItemStack result) { - for(RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) { - if(recipe == null) - continue; + @Override + public void loadUsageRecipes(ItemStack ingredient) { + for (RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) { + if (recipe == null) continue; - if(ItemNBTHelper.areStacksSameTypeCraftingWithNBT(new ItemStack(recipe.getOutput()), result)) - arecipes.add(new CachedPureDaisyRecipe(recipe)); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - for(RecipePureDaisy recipe : BotaniaAPI.pureDaisyRecipes) { - if(recipe == null) - continue; - - CachedPureDaisyRecipe crecipe = new CachedPureDaisyRecipe(recipe); - if(ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.getIngredients(), ingredient) || ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.getOtherStacks(), ingredient)) - arecipes.add(crecipe); - } - } + CachedPureDaisyRecipe crecipe = new CachedPureDaisyRecipe(recipe); + if (ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.getIngredients(), ingredient) || ItemNBTHelper.cachedRecipeContainsWithNBT(crecipe.getOtherStacks(), ingredient)) { + arecipes.add(crecipe); + } + } + } } diff --git a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerRunicAltar.java b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerRunicAltar.java index 506ad540d..598029d24 100644 --- a/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerRunicAltar.java +++ b/src/main/java/vazkii/botania/client/integration/nei/recipe/RecipeHandlerRunicAltar.java @@ -14,44 +14,50 @@ import codechicken.nei.PositionedStack; public class RecipeHandlerRunicAltar extends RecipeHandlerPetalApothecary { - public class CachedRunicAltarRecipe extends CachedPetalApothecaryRecipe { + private static final ItemStack altarStack = new ItemStack(ModBlocks.runeAltar); - public int manaUsage; + public class CachedRunicAltarRecipe extends CachedPetalApothecaryRecipe { - public CachedRunicAltarRecipe(RecipeRuneAltar recipe) { - super(recipe, false); - if(recipe == null) - return; - manaUsage = recipe.getManaUsage(); - inputs.add(new PositionedStack(new ItemStack(ModBlocks.runeAltar), 73, 55)); - } + public int manaUsage; + private static final PositionedStack livingrock = new PositionedStack(new ItemStack(ModBlocks.livingrock), 73, 39); - } + public CachedRunicAltarRecipe(RecipeRuneAltar recipe) { + super(recipe, false); + inputs.add(livingrock); + manaUsage = recipe.getManaUsage(); + renderItem = true; + } + } + + @Override + public String getRecipeName() { + return StatCollector.translateToLocal("botania.nei.runicAltar"); + } + + @Override + public String getOverlayIdentifier() { + return "botania.runicAltar"; + } + + @Override + public void drawBackground(int recipe) { + super.drawBackground(recipe); + HUDHandler.renderManaBar(32, 113, 0x0000FF, 0.75F, ((CachedRunicAltarRecipe) arecipes.get(recipe)).manaUsage, TilePool.MAX_MANA / 10); + } + + @Override + public List getRecipes() { + return BotaniaAPI.runeAltarRecipes; + } + + @Override + public CachedPetalApothecaryRecipe getCachedRecipe(RecipePetals recipe) { + return new CachedRunicAltarRecipe((RecipeRuneAltar) recipe); + } @Override - public String getRecipeName() { - return StatCollector.translateToLocal("botania.nei.runicAltar"); - } - - @Override - public String getRecipeID() { - return "botania.runicAltar"; - } - - @Override - public void drawBackground(int recipe) { - super.drawBackground(recipe); - HUDHandler.renderManaBar(32, 113, 0x0000FF, 0.75F, ((CachedRunicAltarRecipe) arecipes.get(recipe)).manaUsage, TilePool.MAX_MANA / 10); - } - - @Override - public List getRecipes() { - return BotaniaAPI.runeAltarRecipes; - } - - @Override - public CachedPetalApothecaryRecipe getCachedRecipe(RecipePetals recipe) { - return new CachedRunicAltarRecipe((RecipeRuneAltar) recipe); - } + protected ItemStack getRenderItem() { + return altarStack; + } } diff --git a/src/main/java/vazkii/botania/common/Botania.java b/src/main/java/vazkii/botania/common/Botania.java index d6b8844dd..892abdeb7 100644 --- a/src/main/java/vazkii/botania/common/Botania.java +++ b/src/main/java/vazkii/botania/common/Botania.java @@ -43,6 +43,7 @@ public class Botania { public static boolean etFuturumLoaded = false; public static boolean storageDrawersLoaded = false; public static boolean structureLibLoaded = false; + public static boolean neiLoaded = false; public static ILightHelper lightHelper; @@ -63,6 +64,7 @@ public class Botania { etFuturumLoaded = Loader.isModLoaded("etfuturum"); storageDrawersLoaded = Loader.isModLoaded("StorageDrawers"); structureLibLoaded = Loader.isModLoaded("structurelib"); + neiLoaded = Loader.isModLoaded("NotEnoughItems"); lightHelper = coloredLightsLoaded ? new LightHelperColored() : new LightHelperVanilla(); proxy.preInit(event); diff --git a/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java b/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java index 24c14e5f4..c0bdab82f 100644 --- a/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java +++ b/src/main/java/vazkii/botania/common/core/proxy/CommonProxy.java @@ -33,6 +33,7 @@ import vazkii.botania.api.BotaniaAPI; import vazkii.botania.api.lexicon.ITwoNamedPage; import vazkii.botania.api.lexicon.LexiconEntry; import vazkii.botania.api.lexicon.LexiconPage; +import vazkii.botania.client.integration.nei.IMCForNEI; import vazkii.botania.common.Botania; import vazkii.botania.common.achievement.ModAchievements; import vazkii.botania.common.block.ModBlocks; @@ -84,6 +85,7 @@ import vazkii.botania.common.world.SkyblockWorldEvents; import vazkii.botania.common.world.WorldTypeSkyblock; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.FMLLog; +import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLInterModComms; import cpw.mods.fml.common.event.FMLPostInitializationEvent; @@ -152,6 +154,10 @@ public class CommonProxy { new StatementAPIPlugin(); LexiconData.init(); + + if (Botania.neiLoaded) { + IMCForNEI.IMCSender(); + } } public void postInit(FMLPostInitializationEvent event) { diff --git a/src/main/resources/assets/botania/lang/en_US.lang b/src/main/resources/assets/botania/lang/en_US.lang index f7d6279cc..a951b9d87 100644 --- a/src/main/resources/assets/botania/lang/en_US.lang +++ b/src/main/resources/assets/botania/lang/en_US.lang @@ -184,6 +184,8 @@ botania.nei.pureDaisy=Pure Daisy botania.nei.lexica=Lexica Botania nei.options.keys.gui.botania_corporea_request=Corporea Request +botania.nei.anySeed=Any Seed + botania.nei.lexicaSeparator=Extra Info: botania.nei.lexicaNoInfo=(there's no Extra Info for this entry, sorry!)