Correctly filtering neifluids (#1027)

This commit is contained in:
slprime authored and GitHub committed 2026-09-10 22:52:37 +03:00
1 parent 2bf5a1cf9f
commit af6dba1269
5 files changed
+43 -13

No files matched your search

@@ -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;
}
}
@@ -74,20 +74,18 @@ class SearchRecipeHandler<H extends IRecipeHandler> {
}
List<Integer> filtered = null;
final List<Integer> recipes = IntStream.range(0, filteredRecipes.size()).boxed()
.collect(Collectors.toCollection(ArrayList::new));
final List<Integer> 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;
@@ -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) {
@@ -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;
}
@@ -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)) {