package zmaster587.advancedRocketry.network; import java.io.IOException; import cpw.mods.fml.relauncher.ReflectionHelper; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.PacketBuffer; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import zmaster587.advancedRocketry.api.EntityRocketBase; import zmaster587.advancedRocketry.entity.EntityRocket; import zmaster587.advancedRocketry.util.StorageChunk; import zmaster587.libVulpes.interfaces.INetworkEntity; import zmaster587.libVulpes.network.BasePacket; public class PacketStorageTileUpdate extends BasePacket { EntityRocket entity; StorageChunk chunk; int x,y,z; TileEntity tile; NBTTagCompound nbt; public PacketStorageTileUpdate() { } public PacketStorageTileUpdate(Entity entity, StorageChunk chunk, TileEntity tile) { this.entity = (EntityRocket)entity; this.chunk = chunk; this.tile = tile; x = tile.xCoord; y = tile.yCoord; z = tile.zCoord; } @Override public void write(ByteBuf out) { NBTTagCompound nbt = (NBTTagCompound)ReflectionHelper.getPrivateValue(S35PacketUpdateTileEntity.class, (S35PacketUpdateTileEntity)tile.getDescriptionPacket(), "field_148860_e"); out.writeInt(((Entity)entity).worldObj.provider.dimensionId); out.writeInt(((Entity)entity).getEntityId()); out.writeInt(x); out.writeInt(y); out.writeInt(z); PacketBuffer packetBuffer = new PacketBuffer(out); try { packetBuffer.writeNBTTagCompoundToBuffer(nbt); } catch (IOException e) { e.printStackTrace(); } } @Override @SideOnly(Side.CLIENT) public void readClient(ByteBuf in) { //DEBUG: World world; //world = DimensionManager.getWorld(in.readInt()); in.readInt(); world = Minecraft.getMinecraft().theWorld; int entityId = in.readInt(); x = in.readInt(); y = in.readInt(); z = in.readInt(); Entity ent = world.getEntityByID(entityId); NBTTagCompound nbt = null; try { nbt = new PacketBuffer(in).readNBTTagCompoundFromBuffer(); } catch (IOException e) { e.printStackTrace(); } this.nbt = nbt; if(ent != null && ent instanceof INetworkEntity) { entity = (EntityRocket)ent; this.chunk = entity.storage; } else { //Error } } @Override public void read(ByteBuf in) { } @SideOnly(Side.CLIENT) @Override public void executeClient(EntityPlayer thePlayer) { //Make sure the chunk is initialized before using it //sanity check if(this.chunk != null) { TileEntity tile = this.chunk.getTileEntity(x, y, z); tile.onDataPacket(Minecraft.getMinecraft().getNetHandler().getNetworkManager(), new S35PacketUpdateTileEntity(x, y, z, 0, nbt)); } } @Override public void executeServer(EntityPlayerMP player) { } }