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 net.minecraft.item.ItemStack;
009    
010    public class Packet15Place extends Packet
011    {
012        private int xPosition;
013        private int yPosition;
014        private int zPosition;
015    
016        /** The offset to use for block/item placement. */
017        private int direction;
018        private ItemStack itemStack;
019    
020        /** The offset from xPosition where the actual click took place */
021        private float xOffset;
022    
023        /** The offset from yPosition where the actual click took place */
024        private float yOffset;
025    
026        /** The offset from zPosition where the actual click took place */
027        private float zOffset;
028    
029        public Packet15Place() {}
030    
031        @SideOnly(Side.CLIENT)
032        public Packet15Place(int par1, int par2, int par3, int par4, ItemStack par5ItemStack, float par6, float par7, float par8)
033        {
034            this.xPosition = par1;
035            this.yPosition = par2;
036            this.zPosition = par3;
037            this.direction = par4;
038            this.itemStack = par5ItemStack;
039            this.xOffset = par6;
040            this.yOffset = par7;
041            this.zOffset = par8;
042        }
043    
044        /**
045         * Abstract. Reads the raw packet data from the data stream.
046         */
047        public void readPacketData(DataInputStream par1DataInputStream) throws IOException
048        {
049            this.xPosition = par1DataInputStream.readInt();
050            this.yPosition = par1DataInputStream.read();
051            this.zPosition = par1DataInputStream.readInt();
052            this.direction = par1DataInputStream.read();
053            this.itemStack = readItemStack(par1DataInputStream);
054            this.xOffset = (float)par1DataInputStream.read() / 16.0F;
055            this.yOffset = (float)par1DataInputStream.read() / 16.0F;
056            this.zOffset = (float)par1DataInputStream.read() / 16.0F;
057        }
058    
059        /**
060         * Abstract. Writes the raw packet data to the data stream.
061         */
062        public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
063        {
064            par1DataOutputStream.writeInt(this.xPosition);
065            par1DataOutputStream.write(this.yPosition);
066            par1DataOutputStream.writeInt(this.zPosition);
067            par1DataOutputStream.write(this.direction);
068            writeItemStack(this.itemStack, par1DataOutputStream);
069            par1DataOutputStream.write((int)(this.xOffset * 16.0F));
070            par1DataOutputStream.write((int)(this.yOffset * 16.0F));
071            par1DataOutputStream.write((int)(this.zOffset * 16.0F));
072        }
073    
074        /**
075         * Passes this Packet on to the NetHandler for processing.
076         */
077        public void processPacket(NetHandler par1NetHandler)
078        {
079            par1NetHandler.handlePlace(this);
080        }
081    
082        /**
083         * Abstract. Return the size of the packet (not counting the header).
084         */
085        public int getPacketSize()
086        {
087            return 19;
088        }
089    
090        public int getXPosition()
091        {
092            return this.xPosition;
093        }
094    
095        public int getYPosition()
096        {
097            return this.yPosition;
098        }
099    
100        public int getZPosition()
101        {
102            return this.zPosition;
103        }
104    
105        public int getDirection()
106        {
107            return this.direction;
108        }
109    
110        public ItemStack getItemStack()
111        {
112            return this.itemStack;
113        }
114    
115        /**
116         * Returns the offset from xPosition where the actual click took place
117         */
118        public float getXOffset()
119        {
120            return this.xOffset;
121        }
122    
123        /**
124         * Returns the offset from yPosition where the actual click took place
125         */
126        public float getYOffset()
127        {
128            return this.yOffset;
129        }
130    
131        /**
132         * Returns the offset from zPosition where the actual click took place
133         */
134        public float getZOffset()
135        {
136            return this.zOffset;
137        }
138    }