OSDN Git Service

(*´ω`*)
[chemicraft/chemicraft.git] / common / pcc / chemicraft / base / ChemiCraftBase.java
1 package pcc.chemicraft.base;
2
3 import java.util.List;
4
5 import net.minecraft.block.Block;
6 import net.minecraft.creativetab.CreativeTabs;
7 import net.minecraft.item.Item;
8 import net.minecraft.item.ItemStack;
9 import net.minecraftforge.common.Configuration;
10 import net.minecraftforge.common.Property;
11 import net.minecraftforge.oredict.OreDictionary;
12 import pcc.chemicraft.ChemiCraft;
13 import pcc.chemicraft.ChemiCraftConfiguration;
14 import pcc.chemicraft.ChemiCraftRegister;
15 import pcc.chemicraft.base.creativetab.CreativeTabAtomOres;
16 import pcc.chemicraft.base.system.CommonProxy;
17 import pcc.chemicraft.base.system.PacketHandler;
18 import pcc.chemicraft.core.ChemiCraftAPI;
19 import cpw.mods.fml.common.Loader;
20 import cpw.mods.fml.common.LoaderState.ModState;
21 import cpw.mods.fml.common.Mod;
22 import cpw.mods.fml.common.Mod.Instance;
23 import cpw.mods.fml.common.Mod.PostInit;
24 import cpw.mods.fml.common.Mod.PreInit;
25 import cpw.mods.fml.common.ModContainer;
26 import cpw.mods.fml.common.SidedProxy;
27 import cpw.mods.fml.common.event.FMLPostInitializationEvent;
28 import cpw.mods.fml.common.event.FMLPreInitializationEvent;
29 import cpw.mods.fml.common.network.NetworkMod;
30
31 @Mod(modid = "ChemiCraftBase", name = "ChemiCraftBase", version = "beta")
32 @NetworkMod(clientSideRequired = true, serverSideRequired = true, versionBounds = "1.4.6", channels = "chemicraftbase", packetHandler = PacketHandler.class)
33 public class ChemiCraftBase extends ChemiCraft
34 {
35
36         /**
37          * this is ChemiCraft instance.
38          */
39         @Instance("ChemiCraftBase")
40         public static ChemiCraftBase instance;
41
42         /**
43          * proxy of ChemiCraft.
44          */
45         @SidedProxy(clientSide = "pcc.chemicraft.base.client.ClientProxy", serverSide = "pcc.chemicraft.base.system.CommonProxy")
46         public static CommonProxy proxy;
47
48         /**
49          * API Instance.
50          */
51         public ChemiCraftAPI api = ChemiCraftAPI.instance();
52         public ChemiCraftBaseAPI apiBase = ChemiCraftBaseAPI.instance();
53
54         /**
55          * CreativeTab of ChemiCraft.
56          */
57         public static final CreativeTabs creativeTabAtomsOre = new CreativeTabAtomOres("AtomsOre");
58
59         /**
60          * the ItemID.
61          */
62         public int atomGrenadeID;
63         public int blackSmokeID;
64         public int dustID;
65         public int radiationGunID;
66         public int radiationBalletID;
67
68         /**
69          * the BlockID.
70          */
71         public int[] atomOresID = new int[4];
72
73         /**
74          * Variables of Block type.
75          */
76         public Block[] blockAtomOres = new Block[atomOresID.length];
77
78         /**
79          * Variables of Item type.
80          */
81         public Item itemAtomGrenade;
82         public Item itemBlackSmoke;
83         public Item itemDust;
84         public Item itemRadiationGun;
85         public Item itemRadiationBallet;
86
87         /**
88          * the Register Instances.
89          */
90         public ChemiCraftRegister registerCompounds;
91         public ChemiCraftRegister registerCompoundsHandler;
92         public ChemiCraftRegister registerItem;
93         public ChemiCraftRegister registerChemicalRecipe;
94         public ChemiCraftRegister registerBlock;
95         public ChemiCraftRegister registerRecipe;
96         public ChemiCraftRegister registerEntitys;
97
98         public ChemiCraftBase()
99         {
100                 this.registerCompounds = new ChemiCraftRegisterCompounds(this);
101                 this.registerCompoundsHandler = new ChemiCraftRegisterCompoundsHandler(this);
102                 this.registerItem = new ChemiCraftRegisterItem(this);
103                 this.registerChemicalRecipe = new ChemiCraftRegisterChemicalRecipe(this);
104                 this.registerBlock = new ChemiCraftRegisterBlock(this);
105                 this.registerRecipe = new ChemiCraftRegisterBaseRecipe(this);
106                 this.registerEntitys = new ChemiCraftRegisterEntitys(this);
107         }
108
109         @PostInit
110         public void chemiPostLoadMethod(final FMLPostInitializationEvent event) {
111                 this.thread = new Thread(this);
112                 this.event = event;
113                 this.thread.start();
114
115                 try {
116                         this.thread.join();
117                 } catch (InterruptedException e) {
118                         e.printStackTrace();
119                 }
120
121                 proxy.registerRenderInformation();
122                 Thread.yield();
123         }
124
125         @Override
126         public void run()
127         {
128                 while (true) {
129                         if (proxy != null && instance != null) {
130                                 this.settingProcessing((FMLPostInitializationEvent) event);
131                                 this.apiProcessing((FMLPostInitializationEvent) event);
132                                 break;
133                         }
134                 }
135
136                 Thread loadCheckThread = new Thread() {
137                         @Override
138                         public void run() {
139                                 while (true) {
140                                         List<ModContainer> mod = Loader.instance().getModList();
141                                         ModContainer finalMod = mod.get(mod.size()-1);
142                                         ModState finalModState = Loader.instance().getModState(finalMod);
143                                         if (finalModState == ModState.AVAILABLE) {
144                                                 apiProcessing((FMLPostInitializationEvent) event);
145                                                 break;
146                                         }
147                                 }
148                         }
149                 };
150                 loadCheckThread.start();
151
152         }
153
154         /**
155          * PreInit:
156          * Configをロードします。
157          * @param event アノテーション呼び出しにより呼び出す必要なし
158          */
159         @PreInit
160         public void chemiPreLoadMethod(final FMLPreInitializationEvent event) {
161                 Configuration cfg = new Configuration(event.getSuggestedConfigurationFile());
162                 cfg.load();
163
164                 Property baseBlockID = cfg.get("BlockID", "Base of Block ID", 2500);
165                 Property baseItemID = cfg.get("ItemID", "Base of Item ID", 25500);
166
167                 ChemiCraftConfiguration ccfgBlock = new ChemiCraftConfiguration(baseBlockID.getInt());
168                 ChemiCraftConfiguration ccfgItem = new ChemiCraftConfiguration(baseItemID.getInt());
169
170                 for (int i = 0; i < atomOresID.length; i++) {
171                         this.atomOresID[i] = ccfgBlock.additionID();
172                 }
173
174                 this.atomGrenadeID = ccfgItem.additionID();
175                 this.dustID = ccfgItem.additionID();
176                 this.radiationGunID = ccfgItem.additionID();
177                 this.radiationBalletID = ccfgItem.additionID();
178                 this.blackSmokeID = ccfgItem.additionID();
179
180                 cfg.save();
181         }
182
183         protected void settingProcessing(FMLPostInitializationEvent event)
184         {
185                 this.registerCompounds.start();
186                 this.registerCompoundsHandler.start();
187                 this.registerItem.start();
188                 this.registerBlock.start();
189                 this.registerChemicalRecipe.start();
190                 this.registerRecipe.start();
191                 this.registerEntitys.start();
192         }
193
194         private void apiProcessing(final FMLPostInitializationEvent event) {
195                 // API用の処理
196                 for (int i = 0; i < apiBase.getAtomOresName().sizeKeysList(); i++)
197                 {
198                         for (int j = 0; j < apiBase.getAtomOresName().sizeElementsList(apiBase.getAtomOresName().getKeyList(i)); j++)
199                         {
200                                 this.nameAuxiliary.addName(new ItemStack(blockAtomOres[i / 16], 0, i - i / 16 * 16), apiBase.getAtomOresLanguage().get(apiBase.getAtomOresName().getKeyList(i), j), apiBase.getAtomOresName().get(apiBase.getAtomOresName().getKeyList(i), j));
201                                 OreDictionary.registerOre("ore" + apiBase.getAtomOresName().getKeyList(i), new ItemStack(blockAtomOres[i / 16], 1, i - i / 16 * 16));
202                         }
203                 }
204
205         }
206
207 }