    001    package net.minecraft.src;
    002
    003    import cpw.mods.fml.common.Side;
    004    import cpw.mods.fml.common.asm.SideOnly;
    005    import java.io.DataInputStream;
    006    import java.io.DataOutputStream;
    007    import java.io.IOException;
    008
    009    public 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    }