diff options
Diffstat (limited to 'src/Java/gtPlusPlus')
-rw-r--r-- | src/Java/gtPlusPlus/xmod/sc2/HANDLER_SC2.java | 67 |
1 files changed, 57 insertions, 10 deletions
diff --git a/src/Java/gtPlusPlus/xmod/sc2/HANDLER_SC2.java b/src/Java/gtPlusPlus/xmod/sc2/HANDLER_SC2.java index 05e87a5990..b0c8d495d0 100644 --- a/src/Java/gtPlusPlus/xmod/sc2/HANDLER_SC2.java +++ b/src/Java/gtPlusPlus/xmod/sc2/HANDLER_SC2.java @@ -1,5 +1,6 @@ package gtPlusPlus.xmod.sc2; +import java.lang.reflect.Field; import java.util.HashMap; import cpw.mods.fml.common.registry.GameRegistry; @@ -7,43 +8,89 @@ import cpw.mods.fml.common.registry.GameRegistry; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.lib.LoadedMods; +import gtPlusPlus.core.util.reflect.ReflectionUtils; import gtPlusPlus.xmod.sc2.items.ItemCartModuleEx; import vswe.stevescarts.Items.ItemCartModule; +import vswe.stevescarts.Items.ModItems; import vswe.stevescarts.ModuleData.ModuleData; import vswe.stevescarts.ModuleData.ModuleDataLoader; public class HANDLER_SC2 { + private static final String MODITEMS = "vswe.stevescarts.Items.ModItems.class"; + private static Class MODITEMSCLASS; public static ItemCartModule modules; - public static HashMap<Byte, Boolean> validModules; - + + @SuppressWarnings("unchecked") public synchronized static void preInit(){ - if (LoadedMods.StevesCarts){ + if (LoadedMods.StevesCarts){ + + HashMap<Byte, Boolean> validModulesOld = null; + HashMap<Byte, Boolean> validModulesNew = new HashMap<Byte, Boolean>(); + try { + MODITEMSCLASS = Class.forName(MODITEMS); + if (MODITEMSCLASS == null) { + return; + } + Field validModulesField = ReflectionUtils.getField(MODITEMSCLASS, "validModules"); + if (validModulesField != null) { + validModulesOld = (HashMap<Byte, Boolean>) validModulesField.get(null); + } + } + catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException | ClassNotFoundException e) { + e.printStackTrace(); + return; + } + + if (validModulesOld == null) { + return; + } + else { + validModulesNew.putAll(validModulesOld); + } + + if (validModulesNew == null || validModulesNew.isEmpty()) { + return; + } + modules = new ItemCartModuleEx(); GameRegistry.registerItem((Item) modules, "CartModule++"); ModuleDataLoader.load(); - for (final ModuleData module : ModuleDataLoader.getList().values()) { + for (final ModuleData module : ModuleDataLoader.moduleListCustom.values()) { if (!module.getIsLocked()) { - validModules.put(module.getID(), true); + Logger.REFLECTION("Mapping Custom SC2 Module. Using ID: "+module.getID()); + validModulesNew.put(module.getID(), true); } } - for (final ModuleData module : ModuleDataLoader.getList().values()) { + for (final ModuleData module : ModuleDataLoader.moduleListCustom.values()) { final ItemStack submodule = new ItemStack((Item) modules, 1, (int) module.getID()); - GameRegistry.registerCustomItemStack(submodule.getUnlocalizedName(), submodule); - } + if (submodule != null) { + Logger.REFLECTION("Registering Custom SC2 Module. Using ID: "+module.getID()); + GameRegistry.registerCustomItemStack(submodule.getUnlocalizedName(), submodule); + } + } + + try { + Logger.REFLECTION("Setting 'validModules' field in "+MODITEMS+". Old Map was "+validModulesOld.size()+" objects, New map is "+validModulesNew.size()+" objects."); + ReflectionUtils.setFieldValue(MODITEMSCLASS, "validModules", validModulesNew); + } + catch (Exception e) { + e.printStackTrace(); + } } } public static void init(){ if (LoadedMods.StevesCarts){ - + ModuleDataLoader.load2(); } } public static void postInit(){ if (LoadedMods.StevesCarts){ - + } } |