001    package net.minecraft.src;
002    
003    import java.io.DataInputStream;
004    import java.io.DataOutputStream;
005    import java.io.IOException;
006    
007    public class Packet23VehicleSpawn extends Packet
008    {
009        /** Entity ID of the object. */
010        public int entityId;
011    
012        /** The X position of the object. */
013        public int xPosition;
014    
015        /** The Y position of the object. */
016        public int yPosition;
017    
018        /** The Z position of the object. */
019        public int zPosition;
020    
021        /**
022         * Not sent if the thrower entity ID is 0. The speed of this fireball along the X axis.
023         */
024        public int speedX;
025    
026        /**
027         * Not sent if the thrower entity ID is 0. The speed of this fireball along the Y axis.
028         */
029        public int speedY;
030    
031        /**
032         * Not sent if the thrower entity ID is 0. The speed of this fireball along the Z axis.
033         */
034        public int speedZ;
035    
036        /** The type of object. */
037        public int type;
038    
039        /** 0 if not a fireball. Otherwise, this is the Entity ID of the thrower. */
040        public int throwerEntityId;
041    
042        public Packet23VehicleSpawn() {}
043    
044        public Packet23VehicleSpawn(Entity par1Entity, int par2)
045        {
046            this(par1Entity, par2, 0);
047        }
048    
049        public Packet23VehicleSpawn(Entity par1Entity, int par2, int par3)
050        {
051            this.entityId = par1Entity.entityId;
052            this.xPosition = MathHelper.floor_double(par1Entity.posX * 32.0D);
053            this.yPosition = MathHelper.floor_double(par1Entity.posY * 32.0D);
054            this.zPosition = MathHelper.floor_double(par1Entity.posZ * 32.0D);
055            this.type = par2;
056            this.throwerEntityId = par3;
057    
058            if (par3 > 0)
059            {
060                double var4 = par1Entity.motionX;
061                double var6 = par1Entity.motionY;
062                double var8 = par1Entity.motionZ;
063                double var10 = 3.9D;
064    
065                if (var4 < -var10)
066                {
067                    var4 = -var10;
068                }
069    
070                if (var6 < -var10)
071                {
072                    var6 = -var10;
073                }
074    
075                if (var8 < -var10)
076                {
077                    var8 = -var10;
078                }
079    
080                if (var4 > var10)
081                {
082                    var4 = var10;
083                }
084    
085                if (var6 > var10)
086                {
087                    var6 = var10;
088                }
089    
090                if (var8 > var10)
091                {
092                    var8 = var10;
093                }
094    
095                this.speedX = (int)(var4 * 8000.0D);
096                this.speedY = (int)(var6 * 8000.0D);
097                this.speedZ = (int)(var8 * 8000.0D);
098            }
099        }
100    
101        /**
102         * Abstract. Reads the raw packet data from the data stream.
103         */
104        public void readPacketData(DataInputStream par1DataInputStream) throws IOException
105        {
106            this.entityId = par1DataInputStream.readInt();
107            this.type = par1DataInputStream.readByte();
108            this.xPosition = par1DataInputStream.readInt();
109            this.yPosition = par1DataInputStream.readInt();
110            this.zPosition = par1DataInputStream.readInt();
111            this.throwerEntityId = par1DataInputStream.readInt();
112    
113            if (this.throwerEntityId > 0)
114            {
115                this.speedX = par1DataInputStream.readShort();
116                this.speedY = par1DataInputStream.readShort();
117                this.speedZ = par1DataInputStream.readShort();
118            }
119        }
120    
121        /**
122         * Abstract. Writes the raw packet data to the data stream.
123         */
124        public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
125        {
126            par1DataOutputStream.writeInt(this.entityId);
127            par1DataOutputStream.writeByte(this.type);
128            par1DataOutputStream.writeInt(this.xPosition);
129            par1DataOutputStream.writeInt(this.yPosition);
130            par1DataOutputStream.writeInt(this.zPosition);
131            par1DataOutputStream.writeInt(this.throwerEntityId);
132    
133            if (this.throwerEntityId > 0)
134            {
135                par1DataOutputStream.writeShort(this.speedX);
136                par1DataOutputStream.writeShort(this.speedY);
137                par1DataOutputStream.writeShort(this.speedZ);
138            }
139        }
140    
141        /**
142         * Passes this Packet on to the NetHandler for processing.
143         */
144        public void processPacket(NetHandler par1NetHandler)
145        {
146            par1NetHandler.handleVehicleSpawn(this);
147        }
148    
149        /**
150         * Abstract. Return the size of the packet (not counting the header).
151         */
152        public int getPacketSize()
153        {
154            return 21 + this.throwerEntityId > 0 ? 6 : 0;
155        }
156    }