From 2fc215280928cee0e67f41ea6bd166236999de95 Mon Sep 17 00:00:00 2001 From: koolkrafter5 Date: Sat, 16 Aug 2025 10:11:27 -0400 Subject: [PATCH] Strict Item Identify Format (#697) --- .../nei/util/ItemStackFilterParser.java | 21 ++++++++++++++----- .../assets/nei/cfg/collapsibleitems.cfg | 9 ++++---- .../resources/assets/nei/cfg/hiddenitems.cfg | 6 +++--- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/main/java/codechicken/nei/util/ItemStackFilterParser.java b/src/main/java/codechicken/nei/util/ItemStackFilterParser.java index 235d90ed..cdb569ed 100644 --- a/src/main/java/codechicken/nei/util/ItemStackFilterParser.java +++ b/src/main/java/codechicken/nei/util/ItemStackFilterParser.java @@ -9,6 +9,7 @@ import java.util.regex.PatternSyntaxException; import java.util.stream.IntStream; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraftforge.oredict.OreDictionary; @@ -16,6 +17,7 @@ import net.minecraftforge.oredict.OreDictionary; import codechicken.nei.ItemList.AllMultiItemFilter; import codechicken.nei.ItemList.AnyMultiItemFilter; import codechicken.nei.ItemList.NegatedItemFilter; +import codechicken.nei.NEIServerUtils; import codechicken.nei.api.ItemFilter; import cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry; import cpw.mods.fml.common.registry.GameData; @@ -24,10 +26,11 @@ import cpw.mods.fml.common.registry.GameData; * @formatter:off * * parts: - * modname:itemid - identify - * $orename - ore dictionary - * tag.color=red - tag - * 0 or 0-12 - damage + * modname:itemid - identify: matches any part of the target, so minecraft:lava matches minecraft:lava_bucket + * - strict item identify, use meta 32767 for all subtypes + * $orename - ore dictionary: matches any part of the target, so $ingot matches ingotIron, ingotGold, etc. + * tag.color=red - tag + * 0 or 0-12 - damage * * modifiers: * ! - logical not. exclude items that match the following expression (!minecraft:portal) @@ -85,7 +88,7 @@ public class ItemStackFilterParser { for (String rule : token.split(",")) { boolean ignore = rule.startsWith("!"); - ItemFilter filter = null; + ItemFilter filter; if (ignore) { rule = rule.substring(1); @@ -97,6 +100,8 @@ public class ItemStackFilterParser { filter = getTagFilter(rule.substring(4)); } else if (Pattern.matches("^\\d+(-\\d+)?$", rule)) { filter = getDamageFilter(rule); + } else if (rule.startsWith("<") && rule.endsWith(">")){ + filter = getStrictIdentifierFilter(rule.substring(1, rule.length() - 1)); } else { filter = getStringIdentifierFilter(rule); } @@ -191,6 +196,12 @@ public class ItemStackFilterParser { return stack -> matcher.test(stack.getItemDamage()); } + private static ItemFilter getStrictIdentifierFilter(String rule) { + ItemStack item = NEIServerUtils.getModdedItem(rule, null); + + return stack -> OreDictionary.itemMatches(item, stack, false); + } + protected static ItemFilter getStringIdentifierFilter(String rule) { final FMLControlledNamespacedRegistry iItemRegistry = GameData.getItemRegistry(); final Predicate matcher = getMatcher(rule); diff --git a/src/main/resources/assets/nei/cfg/collapsibleitems.cfg b/src/main/resources/assets/nei/cfg/collapsibleitems.cfg index 7a3e0b04..f3c43cc1 100644 --- a/src/main/resources/assets/nei/cfg/collapsibleitems.cfg +++ b/src/main/resources/assets/nei/cfg/collapsibleitems.cfg @@ -5,10 +5,11 @@ # # # parts: -# modname:itemid - identify -# $orename - ore dictionary -# tag.color=red - tag -# 0 or 0-12 - damage +# modname:itemid - identify: matches any part of the target, so minecraft:lava matches minecraft:lava_bucket +# - strict item identify, use meta 32767 for all subtypes +# $orename - ore dictionary: matches any part of the target, so $ingot matches ingotIron, ingotGold, etc. +# tag.color=red - tag +# 0 or 0-12 - damage # # modifiers: # ! - logical not. exclude items that match the following expression (!minecraft:portal) diff --git a/src/main/resources/assets/nei/cfg/hiddenitems.cfg b/src/main/resources/assets/nei/cfg/hiddenitems.cfg index ce0cd6f8..e8353040 100644 --- a/src/main/resources/assets/nei/cfg/hiddenitems.cfg +++ b/src/main/resources/assets/nei/cfg/hiddenitems.cfg @@ -4,9 +4,9 @@ # minecraft:portal minecraft:end_portal -r/minecraft:fire$/ -r/minecraft:water$/ -r/minecraft:lava$/ + + + minecraft:mob_spawner minecraft:anvil !0 minecraft:flowing_water