OSDN Git Service

・mcmod.info基礎作成
[chemicraft/chemicraft.git] / common / pcc / chemicraft / base / ChemiCraftBase.java
1 package pcc.chemicraft.base;
2
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
6
7 import net.minecraft.block.Block;
8 import net.minecraft.block.BlockDispenser;
9 import net.minecraft.creativetab.CreativeTabs;
10 import net.minecraft.item.Item;
11 import net.minecraft.item.ItemStack;
12 import net.minecraftforge.common.Configuration;
13 import net.minecraftforge.common.Property;
14 import net.minecraftforge.oredict.OreDictionary;
15 import pcc.chemicraft.ChemiCraft;
16 import pcc.chemicraft.ChemiCraftConfiguration;
17 import pcc.chemicraft.ChemiCraftRegister;
18 import pcc.chemicraft.EnumLoggingType;
19 import pcc.chemicraft.base.creativetab.CreativeTabAtomOres;
20 import pcc.chemicraft.base.dispenser.DispenserBehaviorAtomsGrenade;
21 import pcc.chemicraft.base.system.CommonProxy;
22 import pcc.chemicraft.base.system.PacketHandler;
23 import pcc.chemicraft.core.ChemiCraftCore;
24 import cpw.mods.fml.common.Loader;
25 import cpw.mods.fml.common.LoaderState.ModState;
26 import cpw.mods.fml.common.Mod;
27 import cpw.mods.fml.common.Mod.Instance;
28 import cpw.mods.fml.common.Mod.PostInit;
29 import cpw.mods.fml.common.Mod.PreInit;
30 import cpw.mods.fml.common.ModContainer;
31 import cpw.mods.fml.common.SidedProxy;
32 import cpw.mods.fml.common.event.FMLPostInitializationEvent;
33 import cpw.mods.fml.common.event.FMLPreInitializationEvent;
34 import cpw.mods.fml.common.network.NetworkMod;
35 import cpw.mods.fml.common.registry.GameRegistry;
36 import cpw.mods.fml.common.registry.LanguageRegistry;
37
38 @Mod(modid = "ChemiCraft|Base", name = "ChemiCraftBase", version = "Beta1")
39 @NetworkMod(clientSideRequired = true, serverSideRequired = true, versionBounds = "1.5", channels = "chemicraftbase", packetHandler = PacketHandler.class)
40 public class ChemiCraftBase extends ChemiCraft {
41
42         /**
43          * this is ChemiCraft instance.
44          */
45         @Instance("ChemiCraft|Base")
46         public static ChemiCraftBase instance;
47
48         /**
49          * proxy of ChemiCraft.
50          */
51         @SidedProxy(clientSide = "pcc.chemicraft.base.client.ClientProxy", serverSide = "pcc.chemicraft.base.system.CommonProxy")
52         public static CommonProxy proxy;
53
54         /**
55          * API Instance.
56          */
57         public ChemiCraftBaseAPI apiBase = ChemiCraftBaseAPI.instance();
58
59         /**
60          * CreativeTab of ChemiCraft.
61          */
62         public static final CreativeTabs creativeTabAtomOres = new CreativeTabAtomOres("AtomOres");
63
64         /**
65          * the ItemID.
66          */
67         public int atomIngotsID;
68         public int atomGrenadeID;
69         public int blackSmokeID;
70         public int oreSerarcherID;
71         public int dustID;
72         public int radiationGunID;
73         public int radiationBalletID;
74         public int raditionGunDataChipID;
75
76         /**
77          * the BlockID.
78          */
79         public int[] atomOresID = new int[4];
80
81         /**
82          * Variables of Block type.
83          */
84         public Block[] blockAtomOres = new Block[atomOresID.length];
85
86         /**
87          * Variables of Item type.
88          */
89         public Item itemAtomIngots;
90         public Item itemAtomGrenade;
91         public Item itemBlackSmoke;
92         public Item itemDust;
93         public Item itemRadiationGun;
94         public Item itemRadiationBallet;
95         public Item itemOreSearcher;
96         public Item itemRaditionGunDataChip;
97
98         /**
99          * the Register Instances.
100          */
101         public ChemiCraftRegister registerCompounds;
102         public ChemiCraftRegister registerCompoundsHandler;
103         public ChemiCraftRegister registerItem;
104         public ChemiCraftRegister registerChemicalRecipe;
105         public ChemiCraftRegister registerBlock;
106         public ChemiCraftRegister registerRecipe;
107         public ChemiCraftRegister registerEntitys;
108
109         /**
110          * the Textures.
111          */
112         public static final String INGOT = ChemiCraft.TEXTURE + "atom_ingots_";
113         public static final String ORE = ChemiCraft.TEXTURE + "atom_ores_";
114
115         public ChemiCraftBase() {
116                 this.registerCompounds = new ChemiCraftRegisterCompounds(this);
117                 this.registerCompoundsHandler = new ChemiCraftRegisterCompoundsHandler(this);
118                 this.registerItem = new ChemiCraftRegisterItem(this);
119                 this.registerChemicalRecipe = new ChemiCraftRegisterChemicalRecipe(this);
120                 this.registerBlock = new ChemiCraftRegisterBlock(this);
121                 this.registerRecipe = new ChemiCraftRegisterBaseRecipe(this);
122                 this.registerEntitys = new ChemiCraftRegisterEntitys(this);
123         }
124
125         @PostInit
126         public void chemiPostLoadMethod(final FMLPostInitializationEvent event) {
127                 this.thread = new Thread(this);
128                 this.event = event;
129                 this.thread.start();
130
131                 try {
132                         this.thread.join();
133                 } catch (InterruptedException e) {
134                         e.printStackTrace();
135                 }
136
137                 proxy.registerRenderInformation();
138                 Thread.yield();
139         }
140
141         @Override
142         public void run() {
143                 while (true) {
144                         if (proxy != null && instance != null) {
145                                 this.settingProcessing((FMLPostInitializationEvent) event);
146                                 break;
147                         }
148                 }
149
150                 Thread loadCheckThread = new Thread() {
151                         @Override
152                         public void run() {
153                                 while (true) {
154                                         List<ModContainer> mod = Loader.instance().getModList();
155                                         ModContainer finalMod = mod.get(mod.size()-1);
156                                         ModState finalModState = Loader.instance().getModState(finalMod);
157                                         if (finalModState == ModState.POSTINITIALIZED) {
158                                                 ChemiCraftCore.logger.write("ChemiCraftBase>APIProcessing", EnumLoggingType.INFO);
159                                                 apiProcessing((FMLPostInitializationEvent) event);
160                                                 break;
161                                         }
162                                 }
163                         }
164                 };
165                 loadCheckThread.start();
166
167         }
168
169         /**
170          * PreInit:<br>
171          * Configをロードします。
172          * @param event アノテーション呼び出しにより呼び出す必要なし
173          */
174         @PreInit
175         public void chemiPreLoadMethod(final FMLPreInitializationEvent event) {
176                 Configuration cfg = new Configuration(event.getSuggestedConfigurationFile());
177                 cfg.load();
178
179                 Property baseBlockID = cfg.get("BlockID", "Base of Block ID", 2500);
180                 Property baseItemID = cfg.get("ItemID", "Base of Item ID", 25500);
181
182                 ChemiCraftConfiguration ccfgBlock = new ChemiCraftConfiguration(baseBlockID.getInt());
183                 ChemiCraftConfiguration ccfgItem = new ChemiCraftConfiguration(baseItemID.getInt());
184
185                 for (int i = 0; i < atomOresID.length; i++) {
186                         this.atomOresID[i] = ccfgBlock.additionID();
187                 }
188
189                 this.atomIngotsID = ccfgItem.additionID();
190                 this.atomGrenadeID = ccfgItem.additionID();
191                 this.dustID = ccfgItem.additionID();
192                 this.radiationGunID = ccfgItem.additionID();
193                 this.radiationBalletID = ccfgItem.additionID();
194                 this.blackSmokeID = ccfgItem.additionID();
195                 this.oreSerarcherID = ccfgItem.additionID();
196
197                 cfg.save();
198         }
199
200         protected void settingProcessing(FMLPostInitializationEvent event) {
201                 this.registerCompounds.start();
202                 this.registerCompoundsHandler.start();
203                 this.registerItem.start();
204                 this.registerBlock.start();
205                 this.registerChemicalRecipe.start();
206                 this.registerRecipe.start();
207                 this.registerEntitys.start();
208
209                 BlockDispenser.dispenseBehaviorRegistry.putObject(this.itemAtomGrenade, new DispenserBehaviorAtomsGrenade());
210
211         }
212
213         private void apiProcessing(final FMLPostInitializationEvent event) {
214                 // API用の処理
215                 for (int i = 0; i < this.apiBase.getAtomOres().size(); i++) {
216                         OreDictionary.registerOre("ore" + this.apiBase.getAtomOresAtomName().get(i), new ItemStack(this.blockAtomOres[i / 16], 1, i % 16));
217                         OreDictionary.registerOre("ingot" + this.apiBase.getAtomOresAtomName().get(i), new ItemStack(this.itemAtomIngots, 1, i ));
218                         GameRegistry.registerWorldGenerator(this.apiBase.getAtomOres().get(i));
219                 }
220
221                 Iterator<String> langoresItr = this.apiBase.getAtomOresName().iterator();
222                 while (langoresItr.hasNext()){
223                         String lang = langoresItr.next();
224                         ArrayList<String> oresName = this.apiBase.getAtomOresName().get(lang);
225                         ArrayList<String> ingotsName = this.apiBase.getAtomIngotsName().get(lang);
226                         for (int i = 0; i < oresName.size(); i++) {
227                                 ChemiCraftCore.logger.write("AtomOresAddName:" + "IngotName-" + ingotsName.get(i) + "OreName-" + oresName.get(i) + "ID-" + (i / 16)+ "/Damage-" + (i - i / 16 * 16) + "/Lang-" + lang,
228                                                 EnumLoggingType.INFO);
229
230                                 LanguageRegistry.instance().addNameForObject(
231                                                 new ItemStack(this.atomOresID[i / 16], 1, i % 16),
232                                                 lang,
233                                                 oresName.get(i)
234                                                 );
235
236                                 /*
237                                 LanguageRegistry.instance().addNameForObject(
238                                                 new ItemStack(this.atomIngotsID, 1, i),
239                                                 lang,
240                                                 ingotsName.get(i)
241                                                 );
242                                                 */
243
244                         }
245                 }
246
247         }
248
249 }