diff --git a/src/main/java/codechicken/nei/filter/RecipeFilter.java b/src/main/java/codechicken/nei/filter/RecipeFilter.java index 5e7af833..54f30bce 100644 --- a/src/main/java/codechicken/nei/filter/RecipeFilter.java +++ b/src/main/java/codechicken/nei/filter/RecipeFilter.java @@ -7,6 +7,7 @@ import net.minecraft.item.ItemStack; import codechicken.nei.PositionedStack; import codechicken.nei.api.IRecipeFilter; import codechicken.nei.api.ItemFilter; +import codechicken.nei.api.ItemInfo; import codechicken.nei.recipe.IRecipeHandler; public class RecipeFilter implements IRecipeFilter { @@ -78,7 +79,7 @@ public class RecipeFilter implements IRecipeFilter { if (pStack == null) return false; for (ItemStack stack : pStack.items) { - if (this.filter.matches(stack)) { + if (!ItemInfo.isHidden(stack) && this.filter.matches(stack)) { return true; } } diff --git a/src/main/java/codechicken/nei/recipe/SearchRecipeHandler.java b/src/main/java/codechicken/nei/recipe/SearchRecipeHandler.java index 34f7c929..92f73614 100644 --- a/src/main/java/codechicken/nei/recipe/SearchRecipeHandler.java +++ b/src/main/java/codechicken/nei/recipe/SearchRecipeHandler.java @@ -74,20 +74,18 @@ class SearchRecipeHandler { } List filtered = null; - final List recipes = IntStream.range(0, filteredRecipes.size()).boxed() - .collect(Collectors.toCollection(ArrayList::new)); + final List recipes = IntStream.range(0, filteredRecipes.size()).boxed().collect(Collectors.toList()); try { filtered = ItemList.forkJoinPool.submit( () -> recipes.parallelStream() .filter(recipe -> mathRecipe(this.original, filteredRecipes.get(recipe), filter)) - .collect(Collectors.toCollection(ArrayList::new))) + .collect(Collectors.toList())) .get(); filtered.sort((a, b) -> a - b); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); - } return filtered; diff --git a/src/main/java/codechicken/nei/recipe/StackInfo.java b/src/main/java/codechicken/nei/recipe/StackInfo.java index 983c73eb..32ac1e91 100644 --- a/src/main/java/codechicken/nei/recipe/StackInfo.java +++ b/src/main/java/codechicken/nei/recipe/StackInfo.java @@ -126,7 +126,15 @@ public class StackInfo { } public static boolean equalItemAndNBT(ItemStack stackA, ItemStack stackB, boolean useNBT) { - if (stackA == null || stackB == null || stackA.getItem() != stackB.getItem()) { + if (stackA == null || stackB == null) { + return false; + } + + if (isFluidDisplayItem(stackA)) { + return isFluidDisplayItem(stackB) && getFluid(stackA).isFluidEqual(getFluid(stackB)); + } + + if (stackA.getItem() != stackB.getItem()) { return false; } @@ -158,7 +166,8 @@ public class StackInfo { } public static boolean isFluidContainer(ItemStack stack) { - return stack.getItem() instanceof IFluidContainerItem || FluidContainerRegistry.isContainer(stack); + return stack.getItem() instanceof IFluidContainerItem && !isFluidDisplayItem(stack) + || FluidContainerRegistry.isContainer(stack); } public static String getItemStackGUID(ItemStack stack) { diff --git a/src/main/java/codechicken/nei/search/IdentifierFilter.java b/src/main/java/codechicken/nei/search/IdentifierFilter.java index 05ce0712..ebf1b63b 100644 --- a/src/main/java/codechicken/nei/search/IdentifierFilter.java +++ b/src/main/java/codechicken/nei/search/IdentifierFilter.java @@ -4,8 +4,11 @@ import java.util.regex.Pattern; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; import codechicken.nei.api.ItemFilter; +import codechicken.nei.recipe.StackInfo; import cpw.mods.fml.common.registry.GameData; public class IdentifierFilter implements ItemFilter { @@ -18,15 +21,33 @@ public class IdentifierFilter implements ItemFilter { @Override public boolean matches(ItemStack stack) { + final FluidStack fluidStack = StackInfo.isFluidDisplayItem(stack) ? StackInfo.getFluid(stack) : null; + + if (fluidStack != null) { + return this.pattern.matcher(getFluidStringIdentifier(fluidStack) + "\n" + getFluidIdentifier(fluidStack)) + .find(); + } + return this.pattern.matcher(getStringIdentifier(stack) + "\n" + getIdentifier(stack)).find(); } + protected String getFluidIdentifier(FluidStack fluidStack) { + return String.valueOf(FluidRegistry.getFluidID(fluidStack.getFluid())); + } + + protected String getFluidStringIdentifier(FluidStack fluidStack) { + final String name = FluidRegistry.getDefaultFluidName(fluidStack.getFluid()); + + return name == null || name.isEmpty() ? "Unknown:Unknown" : name; + } + protected String getIdentifier(ItemStack stack) { return Item.getIdFromItem(stack.getItem()) + ":" + stack.getItemDamage(); } protected String getStringIdentifier(ItemStack stack) { - String name = GameData.getItemRegistry().getNameForObject(stack.getItem()); + final String name = GameData.getItemRegistry().getNameForObject(stack.getItem()); + return name == null || name.isEmpty() ? "Unknown:Unknown" : name; } diff --git a/src/main/java/codechicken/nei/search/ModNameFilter.java b/src/main/java/codechicken/nei/search/ModNameFilter.java index cc5c9afd..d46078d8 100644 --- a/src/main/java/codechicken/nei/search/ModNameFilter.java +++ b/src/main/java/codechicken/nei/search/ModNameFilter.java @@ -7,11 +7,12 @@ import java.util.regex.Pattern; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; import codechicken.nei.NEIClientConfig; import codechicken.nei.api.ItemFilter; import codechicken.nei.api.ItemInfo; -import codechicken.nei.item.ItemFluidDisplay; +import codechicken.nei.recipe.StackInfo; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.registry.GameRegistry; @@ -41,9 +42,10 @@ public class ModNameFilter implements ItemFilter { } protected static String getModId(ItemStack itemStack) { + final FluidStack fluidStack = StackInfo.isFluidDisplayItem(itemStack) ? StackInfo.getFluid(itemStack) : null; - if (itemStack.getItem() instanceof ItemFluidDisplay fluidDisplay) { - return getFluidModId(fluidDisplay, itemStack); + if (fluidStack != null) { + return getFluidModId(fluidStack.getFluid()); } if (!ItemInfo.itemOwners.containsKey(itemStack.getItem())) { @@ -59,8 +61,7 @@ public class ModNameFilter implements ItemFilter { return ItemInfo.itemOwners.get(itemStack.getItem()); } - private static String getFluidModId(ItemFluidDisplay fluidDisplay, ItemStack itemStack) { - final Fluid fluid = FluidRegistry.getFluid(itemStack.getItemDamage()); + private static String getFluidModId(Fluid fluid) { final String fluidName = FluidRegistry.getDefaultFluidName(fluid); if (!fluidOwners.containsKey(fluidName)) {