| package mekanism.client.sound; |
| |
| import mekanism.api.Pos3D; |
| import mekanism.client.HolidayManager; |
| import mekanism.common.IActiveState; |
| import net.minecraft.tileentity.TileEntity; |
| import net.minecraft.world.World; |
| import cpw.mods.fml.relauncher.Side; |
| import cpw.mods.fml.relauncher.SideOnly; |
| |
| /** |
| * Sound -- an object that is created in SoundHandler. A 'Sound' object runs off of |
| * PaulsCode's SoundSystem. It has several methods; play(), for looping the clip, |
| * stop(), for stopping the loop, remove(), for removing the sound from PaulsCode, |
| * and updateVolume() for updating the volume based on where the player is. |
| * @author AidanBrady |
| * |
| */ |
| @SideOnly(Side.CLIENT) |
| public class TileSound extends Sound |
| { |
| /** The TileEntity this sound is associated with. */ |
| public TileEntity tileEntity; |
| |
| /** |
| * A sound that runs off of the PaulsCode sound system. |
| * @param id - unique identifier |
| * @param sound - bundled path to the sound |
| * @param tileentity - the tile this sound is playing from. |
| */ |
| public TileSound(String id, String sound, TileEntity tileentity) |
| { |
| super(id, sound, tileentity, new Pos3D(tileentity)); |
| |
| tileEntity = tileentity; |
| } |
| |
| @Override |
| public float getMultiplier() |
| { |
| return super.getMultiplier()*((IHasSound)tileEntity).getVolumeMultiplier(); |
| } |
| |
| @Override |
| public Pos3D getLocation() |
| { |
| return new Pos3D(tileEntity); |
| } |
| |
| @Override |
| public boolean update(World world) |
| { |
| if(!(tileEntity instanceof IHasSound)) |
| { |
| return false; |
| } |
| else if(world.getTileEntity(tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord) != tileEntity) |
| { |
| return false; |
| } |
| else if(!HolidayManager.filterSound(((IHasSound)tileEntity).getSoundPath()).equals(soundPath)) |
| { |
| return false; |
| } |
| else if(tileEntity instanceof IActiveState) |
| { |
| if(((IActiveState)tileEntity).getActive() != isPlaying) |
| { |
| if(((IActiveState)tileEntity).getActive()) |
| { |
| play(); |
| } |
| else { |
| stopLoop(); |
| } |
| } |
| } |
| |
| if(isPlaying) |
| { |
| ticksSincePlay++; |
| } |
| |
| return true; |
| } |
| } |