From f639532225e3c7c9cafca03acc05a739ff4144bc Mon Sep 17 00:00:00 2001 From: asiekierka Date: Sun, 26 Apr 2015 13:56:53 +0200 Subject: [PATCH] add FML remap event support to mapping registry, should help backwards compatibility --- .../api/blueprints/MappingRegistry.java | 66 ++++++++++++++++++- 1 file changed, 63 insertions(+), 3 deletions(-) diff --git a/api/buildcraft/api/blueprints/MappingRegistry.java b/api/buildcraft/api/blueprints/MappingRegistry.java index c9f11f5f..6ecca2fd 100755 --- a/api/buildcraft/api/blueprints/MappingRegistry.java +++ b/api/buildcraft/api/blueprints/MappingRegistry.java @@ -8,10 +8,21 @@ */ package buildcraft.api.blueprints; +import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; +import com.google.common.collect.Multimap; +import com.google.common.collect.MultimapBuilder; +import com.google.common.collect.Multiset; +import com.google.common.eventbus.EventBus; import org.apache.logging.log4j.Level; import net.minecraft.block.Block; @@ -22,6 +33,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.nbt.NBTTagShort; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.FMLModContainer; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.event.FMLMissingMappingsEvent; import net.minecraftforge.common.util.Constants; import buildcraft.api.core.BCLog; @@ -290,6 +306,36 @@ public class MappingRegistry { } } + private final Object getMissingMappingFromFML(boolean isBlock, String name, int i) { + String modName = name.split(":")[0]; + if (Loader.isModLoaded(modName)) { + try { + FMLMissingMappingsEvent.MissingMapping mapping = new FMLMissingMappingsEvent.MissingMapping( + (isBlock ? '\u0001' : '\u0020') + name, i + ); + ListMultimap missingMapping + = ArrayListMultimap.create(); + missingMapping.put(modName, mapping); + FMLMissingMappingsEvent event = new FMLMissingMappingsEvent(missingMapping); + for (ModContainer container : Loader.instance().getModList()) { + if (container instanceof FMLModContainer) { + event.applyModContainer(container); + ((FMLModContainer) container).handleModStateEvent(event); + if (mapping.getAction() != FMLMissingMappingsEvent.Action.DEFAULT) { + break; + } + } + } + if (mapping.getAction() == FMLMissingMappingsEvent.Action.REMAP) { + return mapping.getTarget(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + return null; + } + public void read (NBTTagCompound nbt) { NBTTagList blocksMapping = nbt.getTagList("blocksMapping", Constants.NBT.TAG_COMPOUND); @@ -304,8 +350,15 @@ public class MappingRegistry { } String name = sub.getString("name"); Block b = null; + + if (!Block.blockRegistry.containsKey(name) && name.contains(":")) { + b = (Block) getMissingMappingFromFML(true, name, i); + if (b != null) { + BCLog.logger.info("Remapped " + name + " to " + Block.blockRegistry.getNameForObject(b)); + } + } - if (Block.blockRegistry.containsKey(name)) { + if (b == null && Block.blockRegistry.containsKey(name)) { b = (Block) Block.blockRegistry.getObject(name); } @@ -332,8 +385,15 @@ public class MappingRegistry { String name = sub.getString("name"); Item item = null; - - if (Item.itemRegistry.containsKey(name)) { + + if (!Item.itemRegistry.containsKey(name) && name.contains(":")) { + item = (Item) getMissingMappingFromFML(false, name, i); + if (item != null) { + BCLog.logger.info("Remapped " + name + " to " + Item.itemRegistry.getNameForObject(item)); + } + } + + if (item == null && Item.itemRegistry.containsKey(name)) { item = (Item) Item.itemRegistry.getObject(name); }