001    package net.minecraft.network.packet;
002    
003    import java.io.DataInputStream;
004    import java.io.DataOutputStream;
005    import java.io.IOException;
006    import net.minecraft.entity.item.EntityItem;
007    import net.minecraft.item.ItemStack;
008    import net.minecraft.util.MathHelper;
009    
010    public class Packet21PickupSpawn extends Packet
011    {
012        /** Unique entity ID. */
013        public int entityId;
014    
015        /** The item X position. */
016        public int xPosition;
017    
018        /** The item Y position. */
019        public int yPosition;
020    
021        /** The item Z position. */
022        public int zPosition;
023    
024        /** The item rotation. */
025        public byte rotation;
026    
027        /** The item pitch. */
028        public byte pitch;
029    
030        /** The item roll. */
031        public byte roll;
032        public ItemStack itemID;
033    
034        public Packet21PickupSpawn() {}
035    
036        public Packet21PickupSpawn(EntityItem par1EntityItem)
037        {
038            this.entityId = par1EntityItem.entityId;
039            this.itemID = par1EntityItem.item.copy();
040            this.xPosition = MathHelper.floor_double(par1EntityItem.posX * 32.0D);
041            this.yPosition = MathHelper.floor_double(par1EntityItem.posY * 32.0D);
042            this.zPosition = MathHelper.floor_double(par1EntityItem.posZ * 32.0D);
043            this.rotation = (byte)((int)(par1EntityItem.motionX * 128.0D));
044            this.pitch = (byte)((int)(par1EntityItem.motionY * 128.0D));
045            this.roll = (byte)((int)(par1EntityItem.motionZ * 128.0D));
046        }
047    
048        /**
049         * Abstract. Reads the raw packet data from the data stream.
050         */
051        public void readPacketData(DataInputStream par1DataInputStream) throws IOException
052        {
053            this.entityId = par1DataInputStream.readInt();
054            this.itemID = readItemStack(par1DataInputStream);
055            this.xPosition = par1DataInputStream.readInt();
056            this.yPosition = par1DataInputStream.readInt();
057            this.zPosition = par1DataInputStream.readInt();
058            this.rotation = par1DataInputStream.readByte();
059            this.pitch = par1DataInputStream.readByte();
060            this.roll = par1DataInputStream.readByte();
061        }
062    
063        /**
064         * Abstract. Writes the raw packet data to the data stream.
065         */
066        public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
067        {
068            par1DataOutputStream.writeInt(this.entityId);
069            writeItemStack(this.itemID, par1DataOutputStream);
070            par1DataOutputStream.writeInt(this.xPosition);
071            par1DataOutputStream.writeInt(this.yPosition);
072            par1DataOutputStream.writeInt(this.zPosition);
073            par1DataOutputStream.writeByte(this.rotation);
074            par1DataOutputStream.writeByte(this.pitch);
075            par1DataOutputStream.writeByte(this.roll);
076        }
077    
078        /**
079         * Passes this Packet on to the NetHandler for processing.
080         */
081        public void processPacket(NetHandler par1NetHandler)
082        {
083            par1NetHandler.handlePickupSpawn(this);
084        }
085    
086        /**
087         * Abstract. Return the size of the packet (not counting the header).
088         */
089        public int getPacketSize()
090        {
091            return 24;
092        }
093    }