package net.minecraft.client.resources.sounds; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.sounds.SoundEngine; import net.minecraft.client.sounds.Weighted; import net.minecraft.resources.FileToIdConverter; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.RandomSource; import net.minecraft.util.valueproviders.SampledFloat; import org.jetbrains.annotations.Nullable; @Environment(EnvType.CLIENT) public class Sound implements Weighted { public static final FileToIdConverter SOUND_LISTER = new FileToIdConverter("sounds", ".ogg"); private final ResourceLocation location; private final SampledFloat volume; private final SampledFloat pitch; private final int weight; private final Sound.Type type; private final boolean stream; private final boolean preload; private final int attenuationDistance; public Sound( ResourceLocation location, SampledFloat volume, SampledFloat pitch, int weight, Sound.Type type, boolean stream, boolean preload, int attenuationDistance ) { this.location = location; this.volume = volume; this.pitch = pitch; this.weight = weight; this.type = type; this.stream = stream; this.preload = preload; this.attenuationDistance = attenuationDistance; } public ResourceLocation getLocation() { return this.location; } public ResourceLocation getPath() { return SOUND_LISTER.idToFile(this.location); } public SampledFloat getVolume() { return this.volume; } public SampledFloat getPitch() { return this.pitch; } @Override public int getWeight() { return this.weight; } /** * Retrieves the sound associated with the element. * The sound is obtained using the provided random source. *

* @return The sound associated with the element * * @param randomSource the random source used for sound selection */ public Sound getSound(RandomSource randomSource) { return this; } @Override public void preloadIfRequired(SoundEngine engine) { if (this.preload) { engine.requestPreload(this); } } public Sound.Type getType() { return this.type; } public boolean shouldStream() { return this.stream; } public boolean shouldPreload() { return this.preload; } public int getAttenuationDistance() { return this.attenuationDistance; } public String toString() { return "Sound[" + this.location + "]"; } @Environment(EnvType.CLIENT) public static enum Type { FILE("file"), SOUND_EVENT("event"); private final String name; private Type(final String name) { this.name = name; } @Nullable public static Sound.Type getByName(String name) { for (Sound.Type type : values()) { if (type.name.equals(name)) { return type; } } return null; } } }