package openmods.utils; import com.google.common.collect.Maps; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.ModContainer; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; import java.util.Map; import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; public class ModIdentifier { public static final ModIdentifier INSTANCE = new ModIdentifier(); private final Map<Item, ModContainer> itemCache = Maps.newHashMap(); private final Map<Block, ModContainer> blockCache = Maps.newHashMap(); public ModContainer getModItemStack(ItemStack stack) { if (stack == null) return null; Item item = stack.getItem(); if (item == null) return null; return getModForItem(item); } public ModContainer getModForItem(Item item) { if (itemCache.containsKey(item)) return itemCache.get(item); ModContainer result = identifyItem(item); itemCache.put(item, result); return result; } public ModContainer getModForBlock(Block block) { if (blockCache.containsKey(block)) return blockCache.get(block); ModContainer result = identifyBlock(block); blockCache.put(block, result); return result; } private static ModContainer identifyBlock(Block block) { return findModContainer(GameRegistry.findUniqueIdentifierFor(block)); } private ModContainer identifyItem(Item item) { if (item instanceof ItemBlock) return getModForBlock(((ItemBlock)item).field_150939_a); return findModContainer(GameRegistry.findUniqueIdentifierFor(item)); } private static ModContainer findModContainer(UniqueIdentifier id) { if (id == null) return null; String modId = id.modId; return Loader.instance().getIndexedModList().get(modId); } }