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
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 }