OSDN Git Service

・mcmod.info修正
[chemicraft/chemicraft.git] / common / pcc / addon / crops / ChemicalCrops.java
1 package pcc.addon.crops;
2
3 import java.io.IOException;
4
5 import net.minecraft.block.Block;
6 import net.minecraft.block.material.Material;
7 import net.minecraft.server.MinecraftServer;
8 import net.minecraftforge.common.Configuration;
9 import net.minecraftforge.common.MinecraftForge;
10 import pcc.addon.crops.blocks.BlockChemicalCrops1;
11 import pcc.addon.crops.util.MultiBlockDataStream;
12 import pcc.addon.crops.util.WorldEventHandler;
13 import cpw.mods.fml.common.Mod;
14 import cpw.mods.fml.common.Mod.Init;
15 import cpw.mods.fml.common.Mod.Instance;
16 import cpw.mods.fml.common.Mod.PreInit;
17 import cpw.mods.fml.common.SidedProxy;
18 import cpw.mods.fml.common.event.FMLInitializationEvent;
19 import cpw.mods.fml.common.event.FMLPreInitializationEvent;
20 import cpw.mods.fml.common.network.NetworkMod;
21 import cpw.mods.fml.common.registry.GameRegistry;
22
23 @Mod(modid="ChemiCraftCrops", name="ChemicalCrops(ChemiCraft-Addon)", version="v1.0.0")
24 @NetworkMod(clientSideRequired = true, serverSideRequired = false)
25 public class ChemicalCrops {
26
27         @Instance("ChemiCraftCrops")
28         public static ChemicalCrops instance;
29
30         @SidedProxy(clientSide = "pcc.addon.crops.ClientProxy", serverSide = "pcc.addon.crops.CommonProxy")
31         public static CommonProxy proxy;
32
33         /**
34          * CropsのBlockID
35          */
36         public int crops1ID;
37
38         /**
39          * ChemicalCropsの変数。<br>
40          * ここに入るインスタンスはBlockChemicalCropsと保証されます。
41          */
42         private Block blockCrops1;
43
44         /**
45          * プラントデータ書き込み&読み込みのストリーム
46          */
47         private static MultiBlockDataStream dataStream;
48
49         /**
50          * Texture Domain.
51          */
52         public static final String TEXTURE = "ChemicalCrops:";
53
54         /**
55          * プラントデータ自動セーブ用のスレッド
56          */
57         private Thread thread;
58
59         /**
60          * Minecraftのディレクトリパス
61          */
62         private static String MINECRAFT_DIR;
63
64         public ChemicalCrops() {
65                 this.thread = new Thread() {
66                         @Override
67                         public void run() {
68                                 while (true) {
69                                         try {
70                                                 dataStream.createDataOutputStream();
71                                                 dataStream.write();
72                                         } catch (IOException e1) {
73                                                 e1.printStackTrace();
74                                         }
75                                         try {
76                                                 Thread.sleep(2000);
77                                         } catch (InterruptedException e) {
78                                                 e.printStackTrace();
79                                         }
80                                 }
81                         }
82                 };
83
84         }
85
86         @PreInit
87         public void preInit(FMLPreInitializationEvent event) {
88                 this.MINECRAFT_DIR = event.getModConfigurationDirectory().getAbsolutePath().substring(0, event.getModConfigurationDirectory().getAbsolutePath().length()-6) + "saves/";
89                 this.dataStream = new MultiBlockDataStream(MINECRAFT_DIR, "ChemicalCrops.dat");
90
91                 Configuration cfg = new Configuration(event.getSuggestedConfigurationFile());
92                 cfg.load();
93                 this.crops1ID = cfg.getBlock("CropsID", 2700).getInt();
94                 cfg.save();
95         }
96
97         @Init
98         public void init(FMLInitializationEvent event) {
99                 //イベント登録
100                 MinecraftForge.EVENT_BUS.register(new WorldEventHandler());
101
102                 //Blockのインスタンス作成
103                 this.blockCrops1 = new BlockChemicalCrops1(this.crops1ID, Material.plants).setUnlocalizedName("BlockCrops");
104
105                 //Minecraftに登録
106                 GameRegistry.registerBlock(this.blockCrops1, "BlockCrops");
107         }
108
109         /**
110          * データストリームを返します
111          * @return データストリーム
112          */
113         public static MultiBlockDataStream getDataStream() {
114                 return dataStream;
115         }
116
117         /**
118          * プラントデータ自動セーブを開始します。<br>
119          * すでに停止している場合はNullPointerExceptionをスローします。
120          */
121         public void startAutoSave() {
122                 try {
123                         this.thread.start();
124                 } catch (IllegalThreadStateException e) {
125                 }
126         }
127
128         /**
129          * プラントデータ自動セーブを停止します。<br>
130          * 開始していない、もしくはすでに停止している場合はNullPointerExceptionをスローします。
131          */
132         public void stopAutoSave() {
133                 this.thread.stop();
134         }
135
136 }