From 86943ce1754a01b98ebae2164e3588e6e0ee550b Mon Sep 17 00:00:00 2001 From: mezz Date: Wed, 2 Dec 2015 00:55:14 -0800 Subject: [PATCH] Add a configurable NBT key blacklist --- src/main/java/mezz/jei/config/Config.java | 12 ++++++++ src/main/java/mezz/jei/util/StackUtil.java | 28 ++++++++++++++++++- src/main/resources/assets/jei/lang/en_US.lang | 2 ++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/main/java/mezz/jei/config/Config.java b/src/main/java/mezz/jei/config/Config.java index 8b70dc87f..0e31104af 100644 --- a/src/main/java/mezz/jei/config/Config.java +++ b/src/main/java/mezz/jei/config/Config.java @@ -2,6 +2,12 @@ import javax.annotation.Nonnull; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + import net.minecraft.util.StatCollector; import net.minecraftforge.common.config.Configuration; @@ -13,6 +19,7 @@ public class Config { public static boolean cheatItemsEnabled = false; public static boolean tooltipModNameEnabled = true; + public static Set nbtKeyBlacklist = new HashSet<>(); public static void preInit(@Nonnull FMLPreInitializationEvent event) { configFile = new Configuration(event.getSuggestedConfigurationFile()); @@ -33,6 +40,11 @@ private static void syncConfig() { String tooltipModNameEnabledDescription = StatCollector.translateToLocal("config.jei.tooltipModName.description"); tooltipModNameEnabled = configFile.getBoolean("config.jei.tooltipModName", Configuration.CATEGORY_GENERAL, tooltipModNameEnabled, tooltipModNameEnabledDescription); + String[] defaultNbtKeyBlacklist = new String[]{"BlockEntityTag", "CanPlaceOn"}; + String nbtKeyBlacklistDescription = StatCollector.translateToLocal("config.jei.nbtKeyBlacklist.description"); + String[] nbtKeyBlacklistArray = configFile.getStringList("config.jei.nbtKeyBlacklist", Configuration.CATEGORY_GENERAL, defaultNbtKeyBlacklist, nbtKeyBlacklistDescription); + Collections.addAll(nbtKeyBlacklist, nbtKeyBlacklistArray); + if (configFile.hasChanged()) { configFile.save(); } diff --git a/src/main/java/mezz/jei/util/StackUtil.java b/src/main/java/mezz/jei/util/StackUtil.java index 44b30b71e..c5f15b4d7 100644 --- a/src/main/java/mezz/jei/util/StackUtil.java +++ b/src/main/java/mezz/jei/util/StackUtil.java @@ -1,21 +1,28 @@ package mezz.jei.util; +import com.google.common.collect.Sets; + import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Set; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fml.common.registry.GameData; import net.minecraftforge.oredict.OreDictionary; +import mezz.jei.config.Config; + public class StackUtil { @Nonnull @@ -280,12 +287,31 @@ public static String uniqueIdentifierForStack(@Nonnull ItemStack stack, boolean StringBuilder itemKey = new StringBuilder(itemNameString).append(':').append(metadata); if (stack.hasTagCompound()) { - itemKey.append(':').append(stack.getTagCompound()); + NBTTagCompound nbtTagCompound = stack.getTagCompound(); + nbtTagCompound = cleanNbt(nbtTagCompound); + if (!nbtTagCompound.hasNoTags()) { + itemKey.append(':').append(nbtTagCompound); + } } return itemKey.toString(); } + private static NBTTagCompound cleanNbt(NBTTagCompound nbtTagCompound) { + Set keys = nbtTagCompound.getKeySet(); + + Set ignoredKeys = Sets.intersection(keys, Config.nbtKeyBlacklist); + if (ignoredKeys.size() == 0) { + return nbtTagCompound; + } + + nbtTagCompound = (NBTTagCompound) nbtTagCompound.copy(); + for (String ignoredKey : ignoredKeys) { + nbtTagCompound.removeTag(ignoredKey); + } + return nbtTagCompound; + } + public static int addStack(Container container, Collection slotIndexes, ItemStack stack, boolean doAdd) { int added = 0; // Add to existing stacks first diff --git a/src/main/resources/assets/jei/lang/en_US.lang b/src/main/resources/assets/jei/lang/en_US.lang index a62ee7321..7e2621498 100644 --- a/src/main/resources/assets/jei/lang/en_US.lang +++ b/src/main/resources/assets/jei/lang/en_US.lang @@ -12,6 +12,8 @@ config.jei.cheatItemsEnabled=Enable Item Cheating config.jei.cheatItemsEnabled.description=/give items instead of showing the recipe config.jei.tooltipModName=Tooltip Mod Name config.jei.tooltipModName.description=Adds the name of the item's mod to its tooltip. +config.jei.nbtKeyBlacklist=NBT Key Blacklist +config.jei.nbtKeyBlacklist.description=List of NBT Keys that should be ignored when retrieving recipes. # Recipes gui.jei.craftingTableRecipes=Crafting Table Recipes