001    package net.minecraft.network.packet;
002    
003    import cpw.mods.fml.relauncher.Side;
004    import cpw.mods.fml.relauncher.SideOnly;
005    import java.io.DataInputStream;
006    import java.io.DataOutputStream;
007    import java.io.IOException;
008    import java.util.ArrayList;
009    import java.util.Iterator;
010    import java.util.List;
011    import net.minecraft.util.Vec3;
012    import net.minecraft.world.ChunkPosition;
013    
014    public class Packet60Explosion extends Packet
015    {
016        public double explosionX;
017        public double explosionY;
018        public double explosionZ;
019        public float explosionSize;
020        public List chunkPositionRecords;
021        private float field_73610_f;
022        private float field_73611_g;
023        private float field_73617_h;
024    
025        public Packet60Explosion() {}
026    
027        public Packet60Explosion(double par1, double par3, double par5, float par7, List par8List, Vec3 par9Vec3)
028        {
029            this.explosionX = par1;
030            this.explosionY = par3;
031            this.explosionZ = par5;
032            this.explosionSize = par7;
033            this.chunkPositionRecords = new ArrayList(par8List);
034    
035            if (par9Vec3 != null)
036            {
037                this.field_73610_f = (float)par9Vec3.xCoord;
038                this.field_73611_g = (float)par9Vec3.yCoord;
039                this.field_73617_h = (float)par9Vec3.zCoord;
040            }
041        }
042    
043        /**
044         * Abstract. Reads the raw packet data from the data stream.
045         */
046        public void readPacketData(DataInputStream par1DataInputStream) throws IOException
047        {
048            this.explosionX = par1DataInputStream.readDouble();
049            this.explosionY = par1DataInputStream.readDouble();
050            this.explosionZ = par1DataInputStream.readDouble();
051            this.explosionSize = par1DataInputStream.readFloat();
052            int var2 = par1DataInputStream.readInt();
053            this.chunkPositionRecords = new ArrayList(var2);
054            int var3 = (int)this.explosionX;
055            int var4 = (int)this.explosionY;
056            int var5 = (int)this.explosionZ;
057    
058            for (int var6 = 0; var6 < var2; ++var6)
059            {
060                int var7 = par1DataInputStream.readByte() + var3;
061                int var8 = par1DataInputStream.readByte() + var4;
062                int var9 = par1DataInputStream.readByte() + var5;
063                this.chunkPositionRecords.add(new ChunkPosition(var7, var8, var9));
064            }
065    
066            this.field_73610_f = par1DataInputStream.readFloat();
067            this.field_73611_g = par1DataInputStream.readFloat();
068            this.field_73617_h = par1DataInputStream.readFloat();
069        }
070    
071        /**
072         * Abstract. Writes the raw packet data to the data stream.
073         */
074        public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
075        {
076            par1DataOutputStream.writeDouble(this.explosionX);
077            par1DataOutputStream.writeDouble(this.explosionY);
078            par1DataOutputStream.writeDouble(this.explosionZ);
079            par1DataOutputStream.writeFloat(this.explosionSize);
080            par1DataOutputStream.writeInt(this.chunkPositionRecords.size());
081            int var2 = (int)this.explosionX;
082            int var3 = (int)this.explosionY;
083            int var4 = (int)this.explosionZ;
084            Iterator var5 = this.chunkPositionRecords.iterator();
085    
086            while (var5.hasNext())
087            {
088                ChunkPosition var6 = (ChunkPosition)var5.next();
089                int var7 = var6.x - var2;
090                int var8 = var6.y - var3;
091                int var9 = var6.z - var4;
092                par1DataOutputStream.writeByte(var7);
093                par1DataOutputStream.writeByte(var8);
094                par1DataOutputStream.writeByte(var9);
095            }
096    
097            par1DataOutputStream.writeFloat(this.field_73610_f);
098            par1DataOutputStream.writeFloat(this.field_73611_g);
099            par1DataOutputStream.writeFloat(this.field_73617_h);
100        }
101    
102        /**
103         * Passes this Packet on to the NetHandler for processing.
104         */
105        public void processPacket(NetHandler par1NetHandler)
106        {
107            par1NetHandler.handleExplosion(this);
108        }
109    
110        /**
111         * Abstract. Return the size of the packet (not counting the header).
112         */
113        public int getPacketSize()
114        {
115            return 32 + this.chunkPositionRecords.size() * 3 + 3;
116        }
117    
118        @SideOnly(Side.CLIENT)
119        public float func_73607_d()
120        {
121            return this.field_73610_f;
122        }
123    
124        @SideOnly(Side.CLIENT)
125        public float func_73609_f()
126        {
127            return this.field_73611_g;
128        }
129    
130        @SideOnly(Side.CLIENT)
131        public float func_73608_g()
132        {
133            return this.field_73617_h;
134        }
135    }