OSDN Git Service

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