diff --git a/fml/common/cpw/mods/fml/common/registry/GameData.java b/fml/common/cpw/mods/fml/common/registry/GameData.java index 7222216a94..2e452b00d1 100644 --- a/fml/common/cpw/mods/fml/common/registry/GameData.java +++ b/fml/common/cpw/mods/fml/common/registry/GameData.java @@ -52,6 +52,7 @@ import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.LoaderState; import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; public class GameData { private static Map idMap = Maps.newHashMap(); @@ -362,4 +363,28 @@ public class GameData { } } } + + static UniqueIdentifier getUniqueName(Block block) + { + if (block == null) return null; + ItemData itemData = idMap.get(block.field_71990_ca); + if (itemData == null || !itemData.isOveridden() || customItemStacks.contains(itemData.getModId(), itemData.getItemType())) + { + return null; + } + + return new UniqueIdentifier(itemData.getModId(), itemData.getItemType()); + } + + static UniqueIdentifier getUniqueName(Item item) + { + if (item == null) return null; + ItemData itemData = idMap.get(item.field_77779_bT); + if (itemData == null || !itemData.isOveridden() || customItemStacks.contains(itemData.getModId(), itemData.getItemType())) + { + return null; + } + + return new UniqueIdentifier(itemData.getModId(), itemData.getItemType()); + } } diff --git a/fml/common/cpw/mods/fml/common/registry/GameRegistry.java b/fml/common/cpw/mods/fml/common/registry/GameRegistry.java index ea019b80c3..9d8cd4922e 100644 --- a/fml/common/cpw/mods/fml/common/registry/GameRegistry.java +++ b/fml/common/cpw/mods/fml/common/registry/GameRegistry.java @@ -430,4 +430,46 @@ public class GameRegistry } return null; } + + public static class UniqueIdentifier + { + public final String modId; + public final String name; + UniqueIdentifier(String modId, String name) + { + this.modId = modId; + this.name = name; + } + } + + /** + * Look up the mod identifier data for a block. + * Returns null if there is no mod specified mod identifier data, or it is part of a + * custom itemstack definition {@link #registerCustomItemStack} + * + * Note: uniqueness and persistence is only guaranteed by mods using the game registry + * correctly. + * + * @param block to lookup + * @return a {@link UniqueIdentifier} for the block or null + */ + public static UniqueIdentifier findUniqueIdentifierFor(net.minecraft.block.Block block) + { + return GameData.getUniqueName(block); + } + /** + * Look up the mod identifier data for an item. + * Returns null if there is no mod specified mod identifier data, or it is part of a + * custom itemstack definition {@link #registerCustomItemStack} + * + * Note: uniqueness and persistence is only guaranteed by mods using the game registry + * correctly. + * + * @param item to lookup + * @return a {@link UniqueIdentifier} for the item or null + */ + public static UniqueIdentifier findUniqueIdentifierFor(net.minecraft.item.Item item) + { + return GameData.getUniqueName(item); + } }