X-Git-Url: http://git.sourceforge.jp/view?p=chemicraft%2Fchemicraft.git;a=blobdiff_plain;f=common%2Fchemicraft%2FPacketHandler.java;h=0fc00bf36c2fb60aca19053a5d62617a512ad6b5;hp=52e1535758fea02316084cf1b90d3fe9511e7735;hb=e9b218e8292b231ce674ec71f8620eb2f0e4b779;hpb=07af95483c0d2e0ca06bdb8f0b0fc0039d656abe;ds=sidebyside diff --git a/common/chemicraft/PacketHandler.java b/common/chemicraft/PacketHandler.java index 52e1535..0fc00bf 100644 --- a/common/chemicraft/PacketHandler.java +++ b/common/chemicraft/PacketHandler.java @@ -1,18 +1,107 @@ package chemicraft; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; + +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.EntityPlayerMP; import net.minecraft.src.NetworkManager; +import net.minecraft.src.Packet; import net.minecraft.src.Packet250CustomPayload; +import net.minecraft.src.TileEntity; +import net.minecraft.src.World; import cpw.mods.fml.common.network.IPacketHandler; import cpw.mods.fml.common.network.Player; /** * サーバーとクライアントのデータの同期に必要なクラス + * * @author Lilly - * + * */ public class PacketHandler implements IPacketHandler { - @Override - public void onPacketData(NetworkManager manager, Packet250CustomPayload packet, Player player){} + @Override + public void onPacketData(NetworkManager manager, Packet250CustomPayload packet, Player player) { + if (packet.channel.equals("chemicraft")) { + ByteArrayDataInput var1 = ByteStreams.newDataInput(packet.data); + + World world; + TileEntity tileEntity; + TileEntityScienceCraftingTable var2; + + // TileEntityのx, y, z座標 + int x, y, z; + + // activeTab + String activeTab; + + // 座標読み込み + x = var1.readInt(); + y = var1.readInt(); + z = var1.readInt(); + // activeTab読み込み + activeTab = var1.readUTF(); + + // TileEntityを取得し読み込んだデータを送る + // from Server to Client + world = ChemiCraft.proxy.getClientWorld(); + tileEntity = world.getBlockTileEntity(x, y, z); + if (tileEntity instanceof TileEntityScienceCraftingTable) { + var2 = (TileEntityScienceCraftingTable) tileEntity; + + } + // from Client to Server + world = ((EntityPlayer) player).worldObj; + tileEntity = world.getBlockTileEntity(x, y, z); + if (tileEntity instanceof TileEntityScienceCraftingTable) { + var2 = (TileEntityScienceCraftingTable) tileEntity; + var2.handlePacket(new Object[] { activeTab }); + } + } + } + + + public static Packet getPacket(TileEntityScienceCraftingTable tileEntity) { + ByteArrayOutputStream var1 = new ByteArrayOutputStream(128); + DataOutputStream var2 = new DataOutputStream(var1); + + // Blockのx, y, z座標 + int x, y, z; + + // activeTab + String activeTab; + + // x, y, z座標を代入 + x = tileEntity.xCoord; + y = tileEntity.yCoord; + z = tileEntity.zCoord; + + // activeTabに代入 + activeTab = tileEntity.getActiveTab(); + + try { + // 座標書き込み + var2.writeInt(x); + var2.writeInt(y); + var2.writeInt(z); + // activeTab書き込み + var2.writeUTF(activeTab); + } catch (IOException e) { + e.printStackTrace(); + } + // パケットの作成 + Packet250CustomPayload packet = new Packet250CustomPayload(); + packet.channel = "chemicraft"; + packet.data = var1.toByteArray(); + packet.length = var1.size(); + packet.isChunkDataPacket = true; + return packet; + } }