OSDN Git Service

Merge branch 'master' of git.sourceforge.jp:/gitroot/chemicraft/chemicraft
[chemicraft/chemicraft.git] / common / chemicraft / system / PacketHandler.java
1 package chemicraft.system;\r
2 \r
3 import java.io.ByteArrayOutputStream;\r
4 import java.io.DataOutputStream;\r
5 import java.io.IOException;\r
6 \r
7 import net.minecraft.src.EntityPlayer;\r
8 import net.minecraft.src.NetworkManager;\r
9 import net.minecraft.src.Packet;\r
10 import net.minecraft.src.Packet250CustomPayload;\r
11 import net.minecraft.src.TileEntity;\r
12 import net.minecraft.src.World;\r
13 import chemicraft.ChemiCraft;\r
14 import chemicraft.tileentity.TileEntityChemicalCombinationTable;\r
15 import chemicraft.tileentity.TileEntityDecompositionTable;\r
16 import chemicraft.tileentity.TileEntityChemicalCraftingTable;\r
17 import chemicraft.tileentity.TileEntityToolAndWeaponCraftingTable;\r
18 \r
19 import com.google.common.io.ByteArrayDataInput;\r
20 import com.google.common.io.ByteStreams;\r
21 \r
22 import cpw.mods.fml.common.network.IPacketHandler;\r
23 import cpw.mods.fml.common.network.Player;\r
24 \r
25 /**\r
26  * サーバーとクライアントのデータの同期に必要なクラス\r
27  *\r
28  * @author Lilly\r
29  *\r
30  */\r
31 public class PacketHandler implements IPacketHandler {\r
32 \r
33         @Override\r
34         public void onPacketData(NetworkManager manager, Packet250CustomPayload packet, Player player) {\r
35                 if (packet.channel.equals("chemicraft")) {\r
36                         ByteArrayDataInput badi = ByteStreams.newDataInput(packet.data);\r
37 \r
38                         World worldClient;\r
39                         World worldServer;\r
40                         TileEntity var1;\r
41                         TileEntityDecompositionTable var2;\r
42 \r
43                         // TileEntityのx, y, z座標\r
44                         int x, y, z;\r
45 \r
46                         // 座標読み込み\r
47                         x = badi.readInt();\r
48                         y = badi.readInt();\r
49                         z = badi.readInt();\r
50 \r
51                         worldClient = ChemiCraft.instance.proxy.getClientWorld();\r
52                         worldServer = ((EntityPlayer)player).worldObj;\r
53                         if(worldClient != null && worldServer == null){\r
54                                 var1 = worldClient.getBlockTileEntity(x, y, z);\r
55                                 if (var1 instanceof TileEntityDecompositionTable) {\r
56                                         var2 = (TileEntityDecompositionTable) var1;\r
57                                         var2.readPacket(badi, (EntityPlayer)player);\r
58                                 }\r
59                                 return;\r
60                         }\r
61                         if(worldServer != null){\r
62                                 var1 = worldServer.getBlockTileEntity(x, y, z);\r
63                                 if (var1 instanceof TileEntityDecompositionTable) {\r
64                                         var2 = (TileEntityDecompositionTable) var1;\r
65                                         var2.readPacket(badi, (EntityPlayer)player);\r
66                                 }\r
67                                 return;\r
68                         }\r
69                 }\r
70         }\r
71 \r
72 \r
73         public static Packet getPacket(TileEntityDecompositionTable tileEntity) {\r
74                 ByteArrayOutputStream var1 = new ByteArrayOutputStream(128);\r
75                 DataOutputStream var2 = new DataOutputStream(var1);\r
76 \r
77                 // Blockのx, y, z座標\r
78                 int x, y, z;\r
79 \r
80                 // activeTab\r
81                 String activeTab;\r
82 \r
83                 // x, y, z座標を代入\r
84                 x = tileEntity.xCoord;\r
85                 y = tileEntity.yCoord;\r
86                 z = tileEntity.zCoord;\r
87 \r
88                 try {\r
89                         // 座標書き込み\r
90                         var2.writeInt(x);\r
91                         var2.writeInt(y);\r
92                         var2.writeInt(z);\r
93                         tileEntity.writePacket(var2);\r
94                 } catch (IOException e) {\r
95                         e.printStackTrace();\r
96                 }\r
97 \r
98                 // パケットの作成\r
99                 Packet250CustomPayload packet = new Packet250CustomPayload();\r
100                 packet.channel = "chemicraft";\r
101                 packet.data = var1.toByteArray();\r
102                 packet.length = var1.size();\r
103                 packet.isChunkDataPacket = true;\r
104                 return packet;\r
105         }\r
106 \r
107         public static Packet getPacket(TileEntityChemicalCombinationTable tileEntity) {\r
108                 ByteArrayOutputStream var1 = new ByteArrayOutputStream(128);\r
109                 DataOutputStream var2 = new DataOutputStream(var1);\r
110 \r
111                 // Blockのx, y, z座標\r
112                 int x, y, z;\r
113 \r
114                 // activeTab\r
115                 String activeTab;\r
116 \r
117                 // x, y, z座標を代入\r
118                 x = tileEntity.xCoord;\r
119                 y = tileEntity.yCoord;\r
120                 z = tileEntity.zCoord;\r
121 \r
122                 try {\r
123                         // 座標書き込み\r
124                         var2.writeInt(x);\r
125                         var2.writeInt(y);\r
126                         var2.writeInt(z);\r
127                         tileEntity.writePacket(var2);\r
128                 } catch (IOException e) {\r
129                         e.printStackTrace();\r
130                 }\r
131 \r
132                 // パケットの作成\r
133                 Packet250CustomPayload packet = new Packet250CustomPayload();\r
134                 packet.channel = "chemicraft";\r
135                 packet.data = var1.toByteArray();\r
136                 packet.length = var1.size();\r
137                 packet.isChunkDataPacket = true;\r
138                 return packet;\r
139         }\r
140 \r
141         public static Packet getPacket(TileEntityToolAndWeaponCraftingTable tileEntity) {\r
142                 ByteArrayOutputStream var1 = new ByteArrayOutputStream(128);\r
143                 DataOutputStream var2 = new DataOutputStream(var1);\r
144 \r
145                 // Blockのx, y, z座標\r
146                 int x, y, z;\r
147 \r
148                 // activeTab\r
149                 String activeTab;\r
150 \r
151                 // x, y, z座標を代入\r
152                 x = tileEntity.xCoord;\r
153                 y = tileEntity.yCoord;\r
154                 z = tileEntity.zCoord;\r
155 \r
156                 try {\r
157                         // 座標書き込み\r
158                         var2.writeInt(x);\r
159                         var2.writeInt(y);\r
160                         var2.writeInt(z);\r
161                         tileEntity.writePacket(var2);\r
162                 } catch (IOException e) {\r
163                         e.printStackTrace();\r
164                 }\r
165 \r
166                 // パケットの作成\r
167                 Packet250CustomPayload packet = new Packet250CustomPayload();\r
168                 packet.channel = "chemicraft";\r
169                 packet.data = var1.toByteArray();\r
170                 packet.length = var1.size();\r
171                 packet.isChunkDataPacket = true;\r
172                 return packet;\r
173         }\r
174 \r
175         public static Packet getPacket(TileEntityChemicalCraftingTable tileEntity) {\r
176                 ByteArrayOutputStream var1 = new ByteArrayOutputStream(128);\r
177                 DataOutputStream var2 = new DataOutputStream(var1);\r
178 \r
179                 // Blockのx, y, z座標\r
180                 int x, y, z;\r
181 \r
182                 // activeTab\r
183                 String activeTab;\r
184 \r
185                 // x, y, z座標を代入\r
186                 x = tileEntity.xCoord;\r
187                 y = tileEntity.yCoord;\r
188                 z = tileEntity.zCoord;\r
189 \r
190                 try {\r
191                         // 座標書き込み\r
192                         var2.writeInt(x);\r
193                         var2.writeInt(y);\r
194                         var2.writeInt(z);\r
195                         tileEntity.writePacket(var2);\r
196                 } catch (IOException e) {\r
197                         e.printStackTrace();\r
198                 }\r
199 \r
200                 // パケットの作成\r
201                 Packet250CustomPayload packet = new Packet250CustomPayload();\r
202                 packet.channel = "chemicraft";\r
203                 packet.data = var1.toByteArray();\r
204                 packet.length = var1.size();\r
205                 packet.isChunkDataPacket = true;\r
206                 return packet;\r
207         }\r
208 \r
209 }\r