diff --git a/common/mekanism/api/ItemInfo.java b/common/mekanism/api/ItemInfo.java new file mode 100644 index 00000000000..819c5390f17 --- /dev/null +++ b/common/mekanism/api/ItemInfo.java @@ -0,0 +1,37 @@ +package mekanism.api; + +import net.minecraft.item.ItemStack; + +public class ItemInfo +{ + public int id; + public int meta; + + public ItemInfo(int i, int j) + { + id = i; + meta = j; + } + + public static ItemInfo get(ItemStack stack) + { + return new ItemInfo(stack.itemID, stack.getItemDamage()); + } + + @Override + public boolean equals(Object obj) + { + return obj instanceof ItemInfo && + ((ItemInfo)obj).id == id && + ((ItemInfo)obj).meta == meta; + } + + @Override + public int hashCode() + { + int code = 1; + code = 31 * code + id; + code = 31 * code + meta; + return code; + } +} \ No newline at end of file diff --git a/common/mekanism/api/MekanismAPI.java b/common/mekanism/api/MekanismAPI.java index 0e749cad3a3..a53466ec9bb 100644 --- a/common/mekanism/api/MekanismAPI.java +++ b/common/mekanism/api/MekanismAPI.java @@ -9,11 +9,11 @@ public class MekanismAPI { //Add a BlockInfo value here if you don't want a certain block to be picked up by cardboard boxes - private static Set cardboardBoxIgnore = new HashSet(); + private static Set cardboardBoxIgnore = new HashSet(); public static boolean isBlockCompatible(int id, int meta) { - for(BlockInfo i : cardboardBoxIgnore) + for(ItemInfo i : cardboardBoxIgnore) { if(i.id == id && (i.meta == OreDictionary.WILDCARD_VALUE || i.meta == meta)) { @@ -26,47 +26,18 @@ public static boolean isBlockCompatible(int id, int meta) public static void addBoxBlacklist(int id, int meta) { - cardboardBoxIgnore.add(new BlockInfo(id, meta)); + cardboardBoxIgnore.add(new ItemInfo(id, meta)); } public static void removeBoxBlacklist(int id, int meta) { - cardboardBoxIgnore.remove(new BlockInfo(id, meta)); + cardboardBoxIgnore.remove(new ItemInfo(id, meta)); } - public static Set getBoxIgnore() + public static Set getBoxIgnore() { return cardboardBoxIgnore; } - public static class BlockInfo - { - public int id; - public int meta; - - public BlockInfo(int i, int j) - { - id = i; - meta = j; - } - - @Override - public boolean equals(Object obj) - { - return obj instanceof BlockInfo && - ((BlockInfo)obj).id == id && - ((BlockInfo)obj).meta == meta; - } - - @Override - public int hashCode() - { - int code = 1; - code = 31 * code + id; - code = 31 * code + meta; - return code; - } - } - public static class BoxBlacklistEvent extends Event {} } diff --git a/common/mekanism/common/OreDictCache.java b/common/mekanism/common/OreDictCache.java new file mode 100644 index 00000000000..2e898908602 --- /dev/null +++ b/common/mekanism/common/OreDictCache.java @@ -0,0 +1,54 @@ +package mekanism.common; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import mekanism.api.ItemInfo; +import mekanism.common.util.MekanismUtils; +import mekanism.common.util.StackUtils; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +public class OreDictCache +{ + public static HashMap> cachedKeys = new HashMap>(); + + public static List getOreDictName(ItemStack check) + { + ItemInfo info = ItemInfo.get(check); + + if(cachedKeys.get(info) != null) + { + return cachedKeys.get(info); + } + + List idsFound = new ArrayList(); + HashMap> oreStacks = (HashMap>)MekanismUtils.getPrivateValue(null, OreDictionary.class, new String[] {"oreStacks"}); + oreStacks = (HashMap>)oreStacks.clone(); + + for(Map.Entry> entry : oreStacks.entrySet()) + { + for(ItemStack stack : entry.getValue()) + { + if(StackUtils.equalsWildcard(stack, check)) + { + idsFound.add(entry.getKey()); + break; + } + } + } + + List ret = new ArrayList(); + + for(Integer id : idsFound) + { + ret.add(OreDictionary.getOreName(id)); + } + + cachedKeys.put(info, ret); + + return ret; + } +} diff --git a/common/mekanism/common/network/PacketBoxBlacklist.java b/common/mekanism/common/network/PacketBoxBlacklist.java index 42657eeae26..1a92ebf8573 100644 --- a/common/mekanism/common/network/PacketBoxBlacklist.java +++ b/common/mekanism/common/network/PacketBoxBlacklist.java @@ -2,10 +2,8 @@ import java.io.DataOutputStream; +import mekanism.api.ItemInfo; import mekanism.api.MekanismAPI; -import mekanism.api.MekanismAPI.BlockInfo; -import mekanism.common.IModule; -import mekanism.common.Mekanism; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; @@ -45,7 +43,7 @@ public void write(DataOutputStream dataStream) throws Exception { dataStream.writeInt(MekanismAPI.getBoxIgnore().size()); - for(BlockInfo info : MekanismAPI.getBoxIgnore()) + for(ItemInfo info : MekanismAPI.getBoxIgnore()) { dataStream.writeInt(info.id); dataStream.writeInt(info.meta); diff --git a/common/mekanism/common/util/MekanismUtils.java b/common/mekanism/common/util/MekanismUtils.java index 19e655ad09e..17659481c4c 100644 --- a/common/mekanism/common/util/MekanismUtils.java +++ b/common/mekanism/common/util/MekanismUtils.java @@ -26,6 +26,7 @@ import mekanism.common.IInvConfiguration; import mekanism.common.IModule; import mekanism.common.IRedstoneControl; +import mekanism.common.OreDictCache; import mekanism.common.IRedstoneControl.RedstoneControl; import mekanism.common.Mekanism; import mekanism.common.PacketHandler; @@ -485,30 +486,7 @@ public static boolean oreDictCheck(ItemStack check, String oreDict) */ public static List getOreDictName(ItemStack check) { - List idsFound = new ArrayList(); - HashMap> oreStacks = (HashMap>)MekanismUtils.getPrivateValue(null, OreDictionary.class, new String[] {"oreStacks"}); - oreStacks = (HashMap>)oreStacks.clone(); - - for(Map.Entry> entry : oreStacks.entrySet()) - { - for(ItemStack stack : entry.getValue()) - { - if(StackUtils.equalsWildcard(stack, check)) - { - idsFound.add(entry.getKey()); - break; - } - } - } - - List ret = new ArrayList(); - - for(Integer id : idsFound) - { - ret.add(OreDictionary.getOreName(id)); - } - - return ret; + return OreDictCache.getOreDictName(check); } /**