125 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.resources.sounds;
 | |
| 
 | |
| import net.fabricmc.api.EnvType;
 | |
| import net.fabricmc.api.Environment;
 | |
| import net.minecraft.client.sounds.SoundManager;
 | |
| import net.minecraft.client.sounds.WeighedSoundEvents;
 | |
| import net.minecraft.resources.ResourceLocation;
 | |
| import net.minecraft.sounds.SoundEvent;
 | |
| import net.minecraft.sounds.SoundSource;
 | |
| import net.minecraft.util.RandomSource;
 | |
| import org.jetbrains.annotations.Nullable;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public abstract class AbstractSoundInstance implements SoundInstance {
 | |
| 	@Nullable
 | |
| 	protected Sound sound;
 | |
| 	protected final SoundSource source;
 | |
| 	protected final ResourceLocation location;
 | |
| 	protected float volume = 1.0F;
 | |
| 	protected float pitch = 1.0F;
 | |
| 	protected double x;
 | |
| 	protected double y;
 | |
| 	protected double z;
 | |
| 	protected boolean looping;
 | |
| 	/**
 | |
| 	 * The number of ticks between repeating the sound
 | |
| 	 */
 | |
| 	protected int delay;
 | |
| 	protected SoundInstance.Attenuation attenuation = SoundInstance.Attenuation.LINEAR;
 | |
| 	protected boolean relative;
 | |
| 	protected RandomSource random;
 | |
| 
 | |
| 	protected AbstractSoundInstance(SoundEvent soundEvent, SoundSource source, RandomSource random) {
 | |
| 		this(soundEvent.location(), source, random);
 | |
| 	}
 | |
| 
 | |
| 	protected AbstractSoundInstance(ResourceLocation location, SoundSource source, RandomSource random) {
 | |
| 		this.location = location;
 | |
| 		this.source = source;
 | |
| 		this.random = random;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public ResourceLocation getLocation() {
 | |
| 		return this.location;
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	@Override
 | |
| 	public WeighedSoundEvents resolve(SoundManager manager) {
 | |
| 		if (this.location.equals(SoundManager.INTENTIONALLY_EMPTY_SOUND_LOCATION)) {
 | |
| 			this.sound = SoundManager.INTENTIONALLY_EMPTY_SOUND;
 | |
| 			return SoundManager.INTENTIONALLY_EMPTY_SOUND_EVENT;
 | |
| 		} else {
 | |
| 			WeighedSoundEvents weighedSoundEvents = manager.getSoundEvent(this.location);
 | |
| 			if (weighedSoundEvents == null) {
 | |
| 				this.sound = SoundManager.EMPTY_SOUND;
 | |
| 			} else {
 | |
| 				this.sound = weighedSoundEvents.getSound(this.random);
 | |
| 			}
 | |
| 
 | |
| 			return weighedSoundEvents;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	@Nullable
 | |
| 	@Override
 | |
| 	public Sound getSound() {
 | |
| 		return this.sound;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public SoundSource getSource() {
 | |
| 		return this.source;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public boolean isLooping() {
 | |
| 		return this.looping;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public int getDelay() {
 | |
| 		return this.delay;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public float getVolume() {
 | |
| 		return this.volume * this.sound.getVolume().sample(this.random);
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public float getPitch() {
 | |
| 		return this.pitch * this.sound.getPitch().sample(this.random);
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public double getX() {
 | |
| 		return this.x;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public double getY() {
 | |
| 		return this.y;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public double getZ() {
 | |
| 		return this.z;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public SoundInstance.Attenuation getAttenuation() {
 | |
| 		return this.attenuation;
 | |
| 	}
 | |
| 
 | |
| 	@Override
 | |
| 	public boolean isRelative() {
 | |
| 		return this.relative;
 | |
| 	}
 | |
| 
 | |
| 	public String toString() {
 | |
| 		return "SoundInstance[" + this.location + "]";
 | |
| 	}
 | |
| }
 |