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;
008
009public class Packet62LevelSound extends Packet
010{
011    /** e.g. step.grass */
012    private String soundName;
013
014    /** Effect X multiplied by 8 */
015    private int effectX;
016
017    /** Effect Y multiplied by 8 */
018    private int effectY = Integer.MAX_VALUE;
019
020    /** Effect Z multiplied by 8 */
021    private int effectZ;
022
023    /** 1 is 100%. Can be more. */
024    private float volume;
025
026    /** 63 is 100%. Can be more. */
027    private int pitch;
028
029    public Packet62LevelSound() {}
030
031    public Packet62LevelSound(String par1Str, double par2, double par4, double par6, float par8, float par9)
032    {
033        this.soundName = par1Str;
034        this.effectX = (int)(par2 * 8.0D);
035        this.effectY = (int)(par4 * 8.0D);
036        this.effectZ = (int)(par6 * 8.0D);
037        this.volume = par8;
038        this.pitch = (int)(par9 * 63.0F);
039
040        if (this.pitch < 0)
041        {
042            this.pitch = 0;
043        }
044
045        if (this.pitch > 255)
046        {
047            this.pitch = 255;
048        }
049    }
050
051    /**
052     * Abstract. Reads the raw packet data from the data stream.
053     */
054    public void readPacketData(DataInputStream par1DataInputStream) throws IOException
055    {
056        this.soundName = readString(par1DataInputStream, 32);
057        this.effectX = par1DataInputStream.readInt();
058        this.effectY = par1DataInputStream.readInt();
059        this.effectZ = par1DataInputStream.readInt();
060        this.volume = par1DataInputStream.readFloat();
061        this.pitch = par1DataInputStream.readUnsignedByte();
062    }
063
064    /**
065     * Abstract. Writes the raw packet data to the data stream.
066     */
067    public void writePacketData(DataOutputStream par1DataOutputStream) throws IOException
068    {
069        writeString(this.soundName, par1DataOutputStream);
070        par1DataOutputStream.writeInt(this.effectX);
071        par1DataOutputStream.writeInt(this.effectY);
072        par1DataOutputStream.writeInt(this.effectZ);
073        par1DataOutputStream.writeFloat(this.volume);
074        par1DataOutputStream.writeByte(this.pitch);
075    }
076
077    /**
078     * Passes this Packet on to the NetHandler for processing.
079     */
080    public void processPacket(NetHandler par1NetHandler)
081    {
082        par1NetHandler.handleLevelSound(this);
083    }
084
085    /**
086     * Abstract. Return the size of the packet (not counting the header).
087     */
088    public int getPacketSize()
089    {
090        return 24;
091    }
092
093    @SideOnly(Side.CLIENT)
094    public String getSoundName()
095    {
096        return this.soundName;
097    }
098
099    @SideOnly(Side.CLIENT)
100    public double getEffectX()
101    {
102        return (double)((float)this.effectX / 8.0F);
103    }
104
105    @SideOnly(Side.CLIENT)
106    public double getEffectY()
107    {
108        return (double)((float)this.effectY / 8.0F);
109    }
110
111    @SideOnly(Side.CLIENT)
112    public double getEffectZ()
113    {
114        return (double)((float)this.effectZ / 8.0F);
115    }
116
117    @SideOnly(Side.CLIENT)
118    public float getVolume()
119    {
120        return this.volume;
121    }
122
123    @SideOnly(Side.CLIENT)
124
125    /**
126     * Gets the pitch divided by 63 (63 is 100%)
127     */
128    public float getPitch()
129    {
130        return (float)this.pitch / 63.0F;
131    }
132}