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 }