001package net.minecraft.network.packet;
002
003import cpw.mods.fml.relauncher.Side;
004import cpw.mods.fml.relauncher.SideOnly;
005import java.io.DataInputStream;
006import java.io.DataOutputStream;
007import java.io.IOException;
008import net.minecraft.item.ItemStack;
009
010public 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}