diff --git a/src/main/java/wanion/unidict/MetaItem.java b/src/main/java/wanion/unidict/MetaItem.java index 366f5c3..677bb84 100644 --- a/src/main/java/wanion/unidict/MetaItem.java +++ b/src/main/java/wanion/unidict/MetaItem.java @@ -18,9 +18,11 @@ import gnu.trove.set.hash.TIntHashSet; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; import wanion.unidict.resource.Resource; import wanion.unidict.resource.ResourceHandler; +import javax.annotation.Nonnull; import java.util.Collection; import java.util.List; @@ -37,7 +39,7 @@ public static int get(final ItemStack itemStack) if (itemStack == null || (item = itemStack.getItem()) == null) return 0; final int id = itemRegistry.getId(item); - return (id > 0) ? id | item.getDamage(itemStack) + 1 << 16 : 0; + return id > 0 ? item.getDamage(itemStack) == OreDictionary.WILDCARD_VALUE ? id : id | item.getDamage(itemStack) + 1 << 16 : 0; } public static int get(final Item item) @@ -45,12 +47,12 @@ public static int get(final Item item) if (item == null) return 0; final int id = itemRegistry.getIDForObject(item); - return (id > 0) ? id | 65536 : 0; + return id > 0 ? id | 65536 : 0; } public static ItemStack toItemStack(final int metaItemKey) { - return metaItemKey > 0 ? new ItemStack(itemRegistry.getRaw(metaItemKey ^ (metaItemKey & 65536)), 0, metaItemKey >> 16) : null; + return metaItemKey > 0 ? new ItemStack(itemRegistry.getRaw(metaItemKey ^ (metaItemKey & 65536)), 0, metaItemKey >> 16) : null; } public static int getCumulative(final Object[] objects, final ResourceHandler resourceHandler) @@ -87,6 +89,20 @@ public static TIntList getList(final Collection itemStackCollection) return keys; } + public static TIntList getList(@Nonnull final Object[] objects, @Nonnull final ResourceHandler resourceHandler) + { + final TIntList keys = new TIntArrayList(); + int bufKey; + for (final Object object : objects) + if (object instanceof ItemStack) { + if ((bufKey = get(resourceHandler.getMainItemStack((ItemStack) object))) > 0) + keys.add(bufKey); + } else if (object instanceof List && !((List) object).isEmpty()) + if ((bufKey = get(((ItemStack) ((List) object).get(0)))) > 0) + keys.add(bufKey); + return keys; + } + public static TIntSet getSet(final Collection resourceCollection, final long kind) { final TIntSet keys = new TIntHashSet(); diff --git a/src/main/java/wanion/unidict/recipe/ForgeRecipeResearcher.java b/src/main/java/wanion/unidict/recipe/ForgeRecipeResearcher.java index 9d6cfda..e59df11 100644 --- a/src/main/java/wanion/unidict/recipe/ForgeRecipeResearcher.java +++ b/src/main/java/wanion/unidict/recipe/ForgeRecipeResearcher.java @@ -9,6 +9,8 @@ */ import cpw.mods.fml.common.Loader; +import gnu.trove.iterator.TIntIterator; +import gnu.trove.list.TIntList; import net.minecraft.item.ItemStack; import net.minecraft.item.crafting.IRecipe; import net.minecraftforge.oredict.ShapedOreRecipe; @@ -30,13 +32,23 @@ public final class ForgeRecipeResearcher implements IRecipeResearcher