From a54b939ea31e94a39c504c1d350278bbe1f391a2 Mon Sep 17 00:00:00 2001 From: cpw Date: Wed, 23 Dec 2015 16:41:53 -0500 Subject: [PATCH] Try and make sure active substitutions are immediately available in the block to item map. --- .../FMLControlledNamespacedRegistry.java | 4 +++- .../fml/common/registry/GameData.java | 20 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/minecraftforge/fml/common/registry/FMLControlledNamespacedRegistry.java b/src/main/java/net/minecraftforge/fml/common/registry/FMLControlledNamespacedRegistry.java index 607ac29a0..f096a2947 100644 --- a/src/main/java/net/minecraftforge/fml/common/registry/FMLControlledNamespacedRegistry.java +++ b/src/main/java/net/minecraftforge/fml/common/registry/FMLControlledNamespacedRegistry.java @@ -565,7 +565,7 @@ public class FMLControlledNamespacedRegistry extends RegistryNamespacedDefaul } } - void activateSubstitution(ResourceLocation nameToReplace) + I activateSubstitution(ResourceLocation nameToReplace) { if (getPersistentSubstitutions().containsKey(nameToReplace)) { @@ -573,7 +573,9 @@ public class FMLControlledNamespacedRegistry extends RegistryNamespacedDefaul I sub = getPersistentSubstitutions().get(nameToReplace); getExistingDelegate(original).changeReference(sub); activeSubstitutions.put(nameToReplace, sub); + return original; } + return null; } void addSubstitutionAlias(String modId, ResourceLocation nameToReplace, I replacement) throws ExistingSubstitutionException diff --git a/src/main/java/net/minecraftforge/fml/common/registry/GameData.java b/src/main/java/net/minecraftforge/fml/common/registry/GameData.java index aa8c08205..71e854602 100644 --- a/src/main/java/net/minecraftforge/fml/common/registry/GameData.java +++ b/src/main/java/net/minecraftforge/fml/common/registry/GameData.java @@ -14,6 +14,8 @@ package net.minecraftforge.fml.common.registry; import java.util.Map; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import com.google.common.collect.Maps; import net.minecraft.block.Block; @@ -190,16 +192,26 @@ public class GameData if (type == GameRegistry.Type.BLOCK) { iBlockRegistry.addSubstitutionAlias(Loader.instance().activeModContainer().getModId(), nameToSubstitute, (Block)toReplace); - iBlockRegistry.activateSubstitution(nameToSubstitute); + Block orig = iBlockRegistry.activateSubstitution(nameToSubstitute); + if (BLOCK_TO_ITEM.containsKey(orig)) + { + Item i = BLOCK_TO_ITEM.get(orig); + BLOCK_TO_ITEM.forcePut((Block)toReplace,i); + } } else if (type == GameRegistry.Type.ITEM) { iItemRegistry.addSubstitutionAlias(Loader.instance().activeModContainer().getModId(), nameToSubstitute, (Item)toReplace); - iItemRegistry.activateSubstitution(nameToSubstitute); + Item orig = iItemRegistry.activateSubstitution(nameToSubstitute); + if (BLOCK_TO_ITEM.containsValue(orig)) + { + Block b = BLOCK_TO_ITEM.inverse().get(orig); + BLOCK_TO_ITEM.forcePut(b, (Item)toReplace); + } } } - private static Map BLOCK_TO_ITEM = Maps.newHashMap(); + private static BiMap BLOCK_TO_ITEM = HashBiMap.create(); //Internal: DO NOT USE, will change without warning. public static Map getBlockItemMap() @@ -254,7 +266,7 @@ public class GameData if (item instanceof ItemBlock) { ItemBlock itemBlock = (ItemBlock)item; - BLOCK_TO_ITEM.put(itemBlock.getBlock().delegate.get(), item); + BLOCK_TO_ITEM.forcePut(itemBlock.getBlock().delegate.get(), item); } } }