    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}