001 package net.minecraft.entity.item;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import net.minecraft.client.audio.SoundManager;
006 import net.minecraft.client.entity.EntityPlayerSP;
007 import net.minecraft.server.gui.IUpdatePlayerListBox;
008 import net.minecraft.util.MathHelper;
009
010 @SideOnly(Side.CLIENT)
011 public class SoundUpdaterMinecart implements IUpdatePlayerListBox
012 {
013 private final SoundManager theSoundManager;
014
015 /** Minecart which sound is being updated. */
016 private final EntityMinecart theMinecart;
017
018 /** The player that is getting the minecart sound updates. */
019 private final EntityPlayerSP thePlayer;
020 private boolean field_82473_d = false;
021 private boolean field_82474_e = false;
022 private boolean field_82471_f = false;
023 private boolean field_82472_g = false;
024 private float field_82480_h = 0.0F;
025 private float field_82481_i = 0.0F;
026 private float field_82478_j = 0.0F;
027 private double field_82479_k = 0.0D;
028
029 public SoundUpdaterMinecart(SoundManager par1SoundManager, EntityMinecart par2EntityMinecart, EntityPlayerSP par3EntityPlayerSP)
030 {
031 this.theSoundManager = par1SoundManager;
032 this.theMinecart = par2EntityMinecart;
033 this.thePlayer = par3EntityPlayerSP;
034 }
035
036 /**
037 * Updates the JList with a new model.
038 */
039 public void update()
040 {
041 boolean var1 = false;
042 boolean var2 = this.field_82473_d;
043 boolean var3 = this.field_82474_e;
044 boolean var4 = this.field_82471_f;
045 float var5 = this.field_82481_i;
046 float var6 = this.field_82480_h;
047 float var7 = this.field_82478_j;
048 double var8 = this.field_82479_k;
049 this.field_82473_d = this.thePlayer != null && this.theMinecart.riddenByEntity == this.thePlayer;
050 this.field_82474_e = this.theMinecart.isDead;
051 this.field_82479_k = (double)MathHelper.sqrt_double(this.theMinecart.motionX * this.theMinecart.motionX + this.theMinecart.motionZ * this.theMinecart.motionZ);
052 this.field_82471_f = this.field_82479_k >= 0.01D;
053
054 if (var2 && !this.field_82473_d)
055 {
056 this.theSoundManager.stopEntitySound(this.thePlayer);
057 }
058
059 if (this.field_82474_e || !this.field_82472_g && this.field_82481_i == 0.0F && this.field_82478_j == 0.0F)
060 {
061 if (!var3)
062 {
063 this.theSoundManager.stopEntitySound(this.theMinecart);
064
065 if (var2 || this.field_82473_d)
066 {
067 this.theSoundManager.stopEntitySound(this.thePlayer);
068 }
069 }
070
071 this.field_82472_g = true;
072
073 if (this.field_82474_e)
074 {
075 return;
076 }
077 }
078
079 if (!this.theSoundManager.isEntitySoundPlaying(this.theMinecart) && this.field_82481_i > 0.0F)
080 {
081 this.theSoundManager.playEntitySound("minecart.base", this.theMinecart, this.field_82481_i, this.field_82480_h, false);
082 this.field_82472_g = false;
083 var1 = true;
084 }
085
086 if (this.field_82473_d && !this.theSoundManager.isEntitySoundPlaying(this.thePlayer) && this.field_82478_j > 0.0F)
087 {
088 this.theSoundManager.playEntitySound("minecart.inside", this.thePlayer, this.field_82478_j, 1.0F, true);
089 this.field_82472_g = false;
090 var1 = true;
091 }
092
093 if (this.field_82471_f)
094 {
095 if (this.field_82480_h < 1.0F)
096 {
097 this.field_82480_h += 0.0025F;
098 }
099
100 if (this.field_82480_h > 1.0F)
101 {
102 this.field_82480_h = 1.0F;
103 }
104
105 float var10 = MathHelper.clamp_float((float)this.field_82479_k, 0.0F, 4.0F) / 4.0F;
106 this.field_82478_j = 0.0F + var10 * 0.75F;
107 var10 = MathHelper.clamp_float(var10 * 2.0F, 0.0F, 1.0F);
108 this.field_82481_i = 0.0F + var10 * 0.7F;
109 }
110 else if (var4)
111 {
112 this.field_82481_i = 0.0F;
113 this.field_82480_h = 0.0F;
114 this.field_82478_j = 0.0F;
115 }
116
117 if (!this.field_82472_g)
118 {
119 if (this.field_82480_h != var6)
120 {
121 this.theSoundManager.setEntitySoundPitch(this.theMinecart, this.field_82480_h);
122 }
123
124 if (this.field_82481_i != var5)
125 {
126 this.theSoundManager.setEntitySoundVolume(this.theMinecart, this.field_82481_i);
127 }
128
129 if (this.field_82478_j != var7)
130 {
131 this.theSoundManager.setEntitySoundVolume(this.thePlayer, this.field_82478_j);
132 }
133 }
134
135 if (!var1 && (this.field_82481_i > 0.0F || this.field_82478_j > 0.0F))
136 {
137 this.theSoundManager.updateSoundLocation(this.theMinecart);
138
139 if (this.field_82473_d)
140 {
141 this.theSoundManager.updateSoundLocation(this.thePlayer, this.theMinecart);
142 }
143 }
144 else
145 {
146 if (this.theSoundManager.isEntitySoundPlaying(this.theMinecart))
147 {
148 this.theSoundManager.stopEntitySound(this.theMinecart);
149 }
150
151 if (this.theSoundManager.isEntitySoundPlaying(this.thePlayer))
152 {
153 this.theSoundManager.stopEntitySound(this.thePlayer);
154 }
155 }
156 }
157 }