diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java index 02472d697..1f5b46ba7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/ActuallyAdditionsAPI.java @@ -30,7 +30,7 @@ public final class ActuallyAdditionsAPI{ public static final String MOD_ID = "actuallyadditions"; public static final String API_ID = MOD_ID+"api"; - public static final String API_VERSION = "24"; + public static final String API_VERSION = "25"; public static final List CRUSHER_RECIPES = new ArrayList(); public static final List BALL_OF_FUR_RETURN_ITEMS = new ArrayList(); @@ -42,7 +42,7 @@ public final class ActuallyAdditionsAPI{ public static final List COMPOST_RECIPES = new ArrayList(); public static final Map OIL_GENERATOR_RECIPES = new HashMap(); public static final List BOOKLET_ENTRIES = new ArrayList(); - public static final List BOOKLET_PAGES_WITH_ITEM_DATA = new ArrayList(); + public static final List BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA = new ArrayList(); /** * Use this to handle things that aren't based in the API itself @@ -289,7 +289,8 @@ public final class ActuallyAdditionsAPI{ * * @param page The page to add */ + @Deprecated //Search will now be done on all pages that are in the book public static void addPageWithItemStackData(BookletPage page){ - BOOKLET_PAGES_WITH_ITEM_DATA.add(page); + BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA.add(page); } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java index ba566d3c8..521644355 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java +++ b/src/main/java/de/ellpeck/actuallyadditions/api/booklet/BookletPage.java @@ -13,6 +13,7 @@ package de.ellpeck.actuallyadditions.api.booklet; import de.ellpeck.actuallyadditions.api.internal.IBookletGui; import net.minecraft.client.gui.GuiButton; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @@ -67,9 +68,18 @@ public abstract class BookletPage{ public abstract void updateScreen(int ticksElapsed); /** - * Gets the ItemStacks that are part of or displayed on this page (for NEI Handler, right-click function etc.) + * Gets the ItemStacks that are part of or displayed on this page (for JEI Handler and search) */ - public abstract ItemStack[] getItemStacksForPage(); + public ItemStack[] getItemStacksForPage(){ + return new ItemStack[0]; + } + + /** + * Gets the FluidStacks that are part of or displayed on this page (for JEI Handler and search) + */ + public FluidStack[] getFluidStacksForPage(){ + return new FluidStack[0]; + } /** * Gets the text that is displayed when an Item is hovered over that can be clicked on to go to its page diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java index 0b1f0451e..4c91c3783 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/BookletUtils.java @@ -32,6 +32,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.apache.commons.lang3.ArrayUtils; @@ -39,6 +40,7 @@ import org.apache.commons.lang3.ArrayUtils; import java.awt.*; import java.net.URI; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.Locale; @@ -134,8 +136,9 @@ public final class BookletUtils{ List achievements = null; for(BookletPage page : booklet.currentEntrySet.getCurrentChapter().getPages()){ - if(page != null && page.getItemStacksForPage() != null){ - for(ItemStack stack : page.getItemStacksForPage()){ + ItemStack[] stacks = page.getItemStacksForPage(); + if(page != null && stacks != null){ + for(ItemStack stack : stacks){ if(stack != null){ for(TheAchievements achievement : TheAchievements.values()){ if(ItemUtil.contains(achievement.itemsToBeGotten, stack, true)){ @@ -257,17 +260,34 @@ public final class BookletUtils{ if(pageStacks != null){ for(ItemStack stack : pageStacks){ if(stack != null && stack.getItem() != null){ - List list = stack.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips); - for(String s : list){ - if(s != null && !s.isEmpty()){ - if(s.toLowerCase(Locale.ROOT).contains(text)){ - return true; - } - } + if(doesTooltipContainString(stack.getTooltip(mc.thePlayer, mc.gameSettings.advancedItemTooltips), text)){ + return true; } } } } + FluidStack[] pageFluids = page.getFluidStacksForPage(); + if(pageFluids != null){ + for(FluidStack stack : pageFluids){ + if(stack != null && stack.getFluid() != null){ + if(doesTooltipContainString(Collections.singletonList(stack.getLocalizedName()), text)){ + return true; + } + } + } + } + } + return false; + } + + @SideOnly(Side.CLIENT) + private static boolean doesTooltipContainString(List tooltip, String text){ + for(String s : tooltip){ + if(s != null && !s.isEmpty()){ + if(s.toLowerCase(Locale.ROOT).contains(text)){ + return true; + } + } } return false; } @@ -489,9 +509,14 @@ public final class BookletUtils{ return pages.isEmpty() ? null : pages.get(0); } + public static BookletPage getFirstPageForStack(FluidStack stack){ + ArrayList pages = getPagesForStack(stack); + return pages.isEmpty() ? null : pages.get(0); + } + public static ArrayList getPagesForStack(ItemStack stack){ ArrayList possiblePages = new ArrayList(); - for(BookletPage page : ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_DATA){ + for(BookletPage page : ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA){ if(ItemUtil.contains(page.getItemStacksForPage(), stack, page.arePageStacksWildcard)){ possiblePages.add(page); } @@ -499,6 +524,19 @@ public final class BookletUtils{ return possiblePages; } + public static ArrayList getPagesForStack(FluidStack stack){ + ArrayList possiblePages = new ArrayList(); + for(BookletPage page : ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA){ + for(FluidStack pageStack : page.getFluidStacksForPage()){ + if(pageStack != null && pageStack.isFluidEqual(stack)){ + possiblePages.add(page); + break; + } + } + } + return possiblePages; + } + @SideOnly(Side.CLIENT) public static void saveBookPage(GuiBooklet gui, NBTTagCompound compound){ //Save Entry etc. diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java index 8a0d96d68..32db34a94 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/InitBooklet.java @@ -12,6 +12,9 @@ package de.ellpeck.actuallyadditions.mod.booklet; import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; +import de.ellpeck.actuallyadditions.api.booklet.IBookletChapter; +import de.ellpeck.actuallyadditions.api.booklet.IBookletEntry; +import de.ellpeck.actuallyadditions.mod.ActuallyAdditions; import de.ellpeck.actuallyadditions.mod.blocks.InitBlocks; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheColoredLampColors; import de.ellpeck.actuallyadditions.mod.blocks.metalists.TheMiscBlocks; @@ -22,6 +25,7 @@ import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntry; import de.ellpeck.actuallyadditions.mod.booklet.entry.BookletEntryAllSearch; import de.ellpeck.actuallyadditions.mod.booklet.page.*; import de.ellpeck.actuallyadditions.mod.crafting.*; +import de.ellpeck.actuallyadditions.mod.fluids.InitFluids; import de.ellpeck.actuallyadditions.mod.gen.OreGen; import de.ellpeck.actuallyadditions.mod.items.InitItems; import de.ellpeck.actuallyadditions.mod.items.lens.LensDisenchanting; @@ -30,11 +34,13 @@ import de.ellpeck.actuallyadditions.mod.items.metalists.TheFoods; import de.ellpeck.actuallyadditions.mod.items.metalists.TheMiscItems; import de.ellpeck.actuallyadditions.mod.recipe.EmpowererHandler; import de.ellpeck.actuallyadditions.mod.tile.*; +import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.Util; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fluids.FluidStack; import java.util.ArrayList; import java.util.Arrays; @@ -57,6 +63,25 @@ public final class InitBooklet{ public static void postInit(){ initChapters(); + + int count = 0; + for(IBookletEntry entry : ActuallyAdditionsAPI.BOOKLET_ENTRIES){ + for(IBookletChapter chapter : entry.getChapters()){ + for(BookletPage page : chapter.getPages()){ + ItemStack[] items = page.getItemStacksForPage(); + FluidStack[] fluids = page.getFluidStacksForPage(); + + if((items != null && items.length > 0) || (fluids != null && fluids.length > 0)){ + if(!ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA.contains(page)){ + ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA.add(page); + count++; + } + } + } + } + } + + ModUtil.LOGGER.info("Registered "+count+" booklet pages as containing information about items or fluids!"); } private static void initChapters(){ @@ -153,9 +178,10 @@ public final class InitBooklet{ //RF Generating Blocks new BookletChapter("solarPanel", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockFurnaceSolar), new PageTextOnly(1).addTextReplacement("", TileEntityFurnaceSolar.PRODUCE), new PageCrafting(2, BlockCrafting.recipeSolar).setNoText()); new BookletChapter("heatCollector", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockHeatCollector), new PageTextOnly(1).addTextReplacement("", TileEntityHeatCollector.ENERGY_PRODUCE).addTextReplacement("", TileEntityHeatCollector.BLOCKS_NEEDED), new PageCrafting(2, BlockCrafting.recipeHeatCollector).setNoText()); - new BookletChapter("canola", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockFermentingBarrel), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CANOLA.ordinal()), new ItemStack(InitItems.itemCanolaSeed)), new PageTextOnly(2), new PageCrafting(3, BlockCrafting.recipeCanolaPress).setNoText(), new PageCrafting(4, BlockCrafting.recipeFermentingBarrel).setNoText(), new PageCrafting(5, BlockCrafting.recipeOilGen), new PageReconstructor(6, LensRecipeHandler.recipeCrystallizedCanolaSeed).setNoText(), new PageEmpowerer(7, EmpowererHandler.recipeEmpoweredCanolaSeed).setNoText()); + new BookletChapter("canola", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockFermentingBarrel), new PageTextOnly(1).setStacks(new ItemStack(InitItems.itemMisc, 1, TheMiscItems.CANOLA.ordinal()), new ItemStack(InitItems.itemCanolaSeed)).addFluidToPage(InitFluids.fluidCanolaOil), new PageTextOnly(2).addFluidToPage(InitFluids.fluidOil).addFluidToPage(InitFluids.fluidCrystalOil).addFluidToPage(InitFluids.fluidEmpoweredOil), new PageCrafting(3, BlockCrafting.recipeCanolaPress).setNoText(), new PageCrafting(4, BlockCrafting.recipeFermentingBarrel).setNoText(), new PageCrafting(5, BlockCrafting.recipeOilGen), new PageReconstructor(6, LensRecipeHandler.recipeCrystallizedCanolaSeed).setNoText(), new PageEmpowerer(7, EmpowererHandler.recipeEmpoweredCanolaSeed).setNoText()); new BookletChapter("leafGen", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockLeafGenerator), new PageTextOnly(1).addTextReplacement("", TileEntityLeafGenerator.ENERGY_PRODUCED).addTextReplacement("", TileEntityLeafGenerator.RANGE), new PageCrafting(2, BlockCrafting.recipeLeafGen)).setImportant(); - new BookletChapter("bioReactor", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockBioReactor), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeBioReactor).setNoText()).setSpecial();; + new BookletChapter("bioReactor", ActuallyAdditionsAPI.entryGeneratingRF, new ItemStack(InitBlocks.blockBioReactor), new PageTextOnly(1), new PageCrafting(2, BlockCrafting.recipeBioReactor).setNoText()).setSpecial(); + ; //No RF Using Items new BookletChapter("bags", ActuallyAdditionsAPI.entryItemsNonRF, new ItemStack(InitItems.itemBag), new PageTextOnly(1), new PageCrafting(2, ItemCrafting.recipeBag), new PageCrafting(3, ItemCrafting.recipeVoidBag).setNoText()).setImportant(); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java index ab4d7a181..c1a3c071c 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/BookletPageAA.java @@ -10,18 +10,22 @@ package de.ellpeck.actuallyadditions.mod.booklet.page; -import de.ellpeck.actuallyadditions.api.ActuallyAdditionsAPI; import de.ellpeck.actuallyadditions.api.booklet.BookletPage; import de.ellpeck.actuallyadditions.api.internal.IBookletGui; import de.ellpeck.actuallyadditions.mod.util.ModUtil; import de.ellpeck.actuallyadditions.mod.util.StringUtil; import net.minecraft.item.ItemStack; import net.minecraft.util.text.TextFormatting; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class BookletPageAA extends BookletPage{ + protected List fluidsForPage = new ArrayList(); protected final int localizationKey; public BookletPageAA(int localizationKey){ @@ -69,27 +73,17 @@ public class BookletPageAA extends BookletPage{ } @Override - public ItemStack[] getItemStacksForPage(){ - return null; + public FluidStack[] getFluidStacksForPage(){ + return this.fluidsForPage.toArray(new FluidStack[this.fluidsForPage.size()]); + } + + public BookletPageAA addFluidToPage(Fluid fluid){ + this.fluidsForPage.add(new FluidStack(fluid, 1)); + return this; } @Override public String getClickToSeeRecipeString(){ return TextFormatting.GOLD+StringUtil.localize("booklet."+ModUtil.MOD_ID+".clickToSeeRecipe"); } - - public void addToPagesWithItemStackData(){ - if(!ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_DATA.contains(this)){ - ItemStack[] stacks = this.getItemStacksForPage(); - if(stacks != null && stacks.length > 0){ - //Ensure that there is at least one ItemStack - for(ItemStack stack : stacks){ - if(stack != null){ - ActuallyAdditionsAPI.addPageWithItemStackData(this); - break; - } - } - } - } - } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java index 4102fbc3f..8f9d5163a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrafting.java @@ -44,7 +44,6 @@ public class PageCrafting extends BookletPageAA{ public PageCrafting(int id, IRecipe... recipes){ super(id); this.recipes = recipes; - this.addToPagesWithItemStackData(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java index 0e153f6ba..5093d81c5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageCrusherRecipe.java @@ -30,7 +30,6 @@ public class PageCrusherRecipe extends BookletPageAA{ public PageCrusherRecipe(int id, CrusherRecipe recipe){ super(id); this.recipe = recipe; - this.addToPagesWithItemStackData(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageEmpowerer.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageEmpowerer.java index 8c49e66b2..8740a432a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageEmpowerer.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageEmpowerer.java @@ -37,7 +37,6 @@ public class PageEmpowerer extends BookletPageAA{ public PageEmpowerer(int id, EmpowererRecipe... recipes){ super(id); this.recipes = recipes; - this.addToPagesWithItemStackData(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java index 92d51efe7..72ee91c1a 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageFurnace.java @@ -38,7 +38,6 @@ public class PageFurnace extends BookletPageAA{ super(id); this.result = result; this.input = input; - this.addToPagesWithItemStackData(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java index 790cb8d99..76714a89e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageReconstructor.java @@ -35,7 +35,6 @@ public class PageReconstructor extends BookletPageAA{ public PageReconstructor(int id, LensConversionRecipe... recipes){ super(id); this.recipes = recipes; - this.addToPagesWithItemStackData(); } @Override diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java index 05133f9f6..61d7944e6 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/booklet/page/PageTextOnly.java @@ -27,7 +27,6 @@ public class PageTextOnly extends BookletPageAA{ public PageTextOnly setStacks(ItemStack... stacks){ this.stacks = stacks; - this.addToPagesWithItemStackData(); return this; } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java index b3adf3e88..4792cc29e 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/JEIActuallyAdditionsPlugin.java @@ -68,7 +68,7 @@ public class JEIActuallyAdditionsPlugin implements IModPlugin{ new BookletRecipeHandler() ); - registry.addRecipes(ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_DATA); + registry.addRecipes(ActuallyAdditionsAPI.BOOKLET_PAGES_WITH_ITEM_OR_FLUID_DATA); registry.addRecipes(ActuallyAdditionsAPI.COFFEE_MACHINE_INGREDIENTS); registry.addRecipes(ActuallyAdditionsAPI.CRUSHER_RECIPES); registry.addRecipes(ActuallyAdditionsAPI.RECONSTRUCTOR_LENS_CONVERSION_RECIPES); diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java index 4b7e00760..ad120d7f8 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/jei/booklet/BookletRecipeWrapper.java @@ -51,12 +51,12 @@ public class BookletRecipeWrapper extends RecipeWrapperWithButton implements IRe @Override public List getFluidInputs(){ - return new ArrayList(); + return Arrays.asList(this.thePage.getFluidStacksForPage()); } @Override public List getFluidOutputs(){ - return new ArrayList(); + return Arrays.asList(this.thePage.getFluidStacksForPage()); } @Override