minecraft-src/net/minecraft/client/resources/sounds/Sound.java
2025-07-04 01:41:11 +03:00

120 lines
2.7 KiB
Java

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<Sound> {
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.
* <p>
* @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;
}
}
}