/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.util.network; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import net.minecraft.block.Block; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import mods.railcraft.common.blocks.RailcraftBlocks; import mods.railcraft.common.blocks.RailcraftTileEntity; import mods.railcraft.common.blocks.tracks.TrackFactory; import mods.railcraft.common.util.misc.Game; public class PacketTileEntity extends RailcraftPacket { private RailcraftTileEntity tile; public PacketTileEntity() { super(); } public PacketTileEntity(RailcraftTileEntity tile) { this.tile = tile; // System.out.println("Created Tile Packet: " + tile.getClass().getSimpleName()); } // @Override // public FMLProxyPacket getPacket() { // Packet pkt = super.getPacket(); // pkt.isChunkDataPacket = true; // return pkt; // } @Override public void writeData(DataOutputStream data) throws IOException { data.writeInt(tile.xCoord); data.writeInt(tile.yCoord); data.writeInt(tile.zCoord); data.writeShort(tile.getId()); tile.writePacketData(data); } @Override @SideOnly(Side.CLIENT) public void readData(DataInputStream data) throws IOException { World world = Game.getWorld(); if (world == null) { // Game.logDebug("Receive Tile Packet: World Null"); return; } int x = data.readInt(); int y = data.readInt(); int z = data.readInt(); short id = data.readShort(); if (id < 0 || y < 0 || !world.blockExists(x, y, z)) { // Game.logDebug("Receive Tile Packet: Block not found"); return; } TileEntity te = world.getTileEntity(x, y, z); if (te instanceof RailcraftTileEntity) { tile = (RailcraftTileEntity) te; if (tile.getId() != id) tile = null; } else tile = null; if (tile == null) { Block block = world.getBlock(x, y, z); Block blockTrack = RailcraftBlocks.getBlockTrack(); if (blockTrack != null && blockTrack == block) { tile = TrackFactory.makeTrackTile(id); world.setTileEntity(x, y, z, tile); } else { world.removeTileEntity(x, y, z); te = world.getTileEntity(x, y, z); if (te instanceof RailcraftTileEntity) tile = (RailcraftTileEntity) te; } } if (tile == null) return; // Game.logDebug("Receive Tile Packet: {0}", tile.getClass().toString()); try { tile.readPacketData(data); } catch (IOException ex) { throw ex; } catch (RuntimeException ex) { if (Game.IS_DEBUG) throw ex; else Game.logThrowable("Exception in PacketTileEntity.readData:", ex); } } @Override public int getID() { return PacketType.TILE_ENTITY.ordinal(); } }