aboutsummaryrefslogtreecommitdiff
path: root/src/Java/gtPlusPlus/xmod/sc2/HANDLER_SC2.java
blob: b0c8d495d06865abd2540b5fddafc7cec6355686 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package gtPlusPlus.xmod.sc2;

import java.lang.reflect.Field;
import java.util.HashMap;

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;

	@SuppressWarnings("unchecked")
	public synchronized static void preInit(){
		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.moduleListCustom.values()) {
				if (!module.getIsLocked()) {
					Logger.REFLECTION("Mapping Custom SC2 Module. Using ID: "+module.getID());
					validModulesNew.put(module.getID(), true);
				}
			}
			for (final ModuleData module : ModuleDataLoader.moduleListCustom.values()) {
				final ItemStack submodule = new ItemStack((Item) modules, 1, (int) module.getID());
				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){

		}
	}


}