Sound¶
Adventure contains an API to play any built-in or resource pack-provided sound. Note that not all platforms implement playing sound.
Constructing a Sound¶
- Sounds are composed of:
A Key (also known as
Identifier
orResourceLocation
) that decides which sound to play. Any custom sounds from resource packs can be used. If a client does not know about sounds, it will ignore the sound (though a warning will be printed to the client log).A Sound source, used to tell the client what type of sound its hearing. The clients sound settings are also attributed to a source.
A number, determining the radius where the sound can be heard
A number from 0 to 2 determining the pitch the sound will be played at
Examples:
// Create a built-in sound using standard volume and pitch
Sound musicDisc = Sound.sound(Key.key("music_disc.13"), Sound.Source.MUSIC, 1f, 1f);
// Create a sound from our resource pack with a higher pitch
Sound myCustomSound = Sound.sound(Key.key("adventure", "rawr"), Sound.Source.AMBIENT, 1f, 1.1f);
Playing a Sound¶
Warning
The client can play multiple sounds at once, but as of version 1.16 is limited to 8 sounds playing at once.
In 1.15.2-1.16.5, due to MC-138832, the volume and pitch of sounds played with an emitter are ignored.
As documented in MC-146721, any stereo sounds will not play at a specific position or following an entity, therefore, the location or emitter parameters will be ignored.
Once you’ve created a sound, they can be played to an audience using multiple methods:
// Play a sound at the location of the audience
audience.playSound(sound);
// Play a sound at a specific location
audience.playSound(sound, 100, 0, 150);
// Play a sound that follows the audience member
audience.playSound(sound, Sound.Emitter.self());
// Play a sound that follows another emitter (usually an entity)
audience.playSound(sound, someEntity);
Stopping Sounds¶
A sound stop will stop the chosen sounds – ranging from every sound the client is playing, to specific named sounds.
public void stopMySound(final @NonNull Audience target) {
// Stop a sound for the target
target.stopSound(SoundStop.named(Key.key("music_disc.13"));
// Stop all weather sounds for the target
target.stopSound(SoundStop.source(Sound.Source.WEATHER));
// Stop all sounds for the target
target.stopSound(SoundStop.all());
}
Sound stops can be constructed using the methods in the example block above. Alternatively, they can be constructed directly from a sound.
// Get a sound stop that will stop a specific sound
mySound.asStop();
// Sounds can also be stopped directly using the stopSound method
audience.stopSound(mySound);
Creating a custom sound¶
Use the sounds.json
file to define sounds in a resource pack. Further reading about this limits can be done at the Minecraft Wiki