Try and make sure active substitutions are immediately available in the block to item map.

This commit is contained in:
cpw 2015-12-23 16:41:53 -05:00
parent 95825e5de0
commit a54b939ea3
2 changed files with 19 additions and 5 deletions

View File

@ -565,7 +565,7 @@ public class FMLControlledNamespacedRegistry<I> extends RegistryNamespacedDefaul
}
}
void activateSubstitution(ResourceLocation nameToReplace)
I activateSubstitution(ResourceLocation nameToReplace)
{
if (getPersistentSubstitutions().containsKey(nameToReplace))
{
@ -573,7 +573,9 @@ public class FMLControlledNamespacedRegistry<I> 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

View File

@ -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, Item> BLOCK_TO_ITEM = Maps.newHashMap();
private static BiMap<Block, Item> 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);
}
}
}