64 lines
1.7 KiB
Kotlin
64 lines
1.7 KiB
Kotlin
package net.axay.kspigot.sound
|
|
|
|
import net.axay.kspigot.extensions.geometry.worldOrException
|
|
import org.bukkit.Location
|
|
import org.bukkit.Sound
|
|
import org.bukkit.SoundCategory
|
|
import org.bukkit.entity.Player
|
|
|
|
data class KSpigotSound(
|
|
val sound: Sound,
|
|
var volume: Float = 1f,
|
|
var pitch: Float = 1f,
|
|
var category: SoundCategory? = null
|
|
) {
|
|
|
|
/**
|
|
* Plays the sound at the location. It
|
|
* will be audible for everyone near it.
|
|
*/
|
|
fun playAt(loc: Location) {
|
|
val curCategory = category
|
|
if (curCategory != null)
|
|
loc.worldOrException.playSound(loc, sound, curCategory, volume, pitch)
|
|
else
|
|
loc.worldOrException.playSound(loc, sound, volume, pitch)
|
|
}
|
|
|
|
/**
|
|
* Plays the sound at the location of the
|
|
* player. It will be only audible for the player.
|
|
*/
|
|
fun playFor(player: Player) {
|
|
val curCategory = category
|
|
if (curCategory != null)
|
|
player.playSound(player.location, sound, curCategory, volume, pitch)
|
|
else
|
|
player.playSound(player.location, sound, volume, pitch)
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Accesses the sound builder.
|
|
* @see KSpigotSound
|
|
*/
|
|
fun sound(sound: Sound, builder: KSpigotSound.() -> Unit)
|
|
= KSpigotSound(sound).apply(builder)
|
|
|
|
/**
|
|
* Accesses the sound builder and then immediately
|
|
* plays the sound at the given location.
|
|
* @see KSpigotSound
|
|
*/
|
|
fun Location.sound(sound: Sound, builder: KSpigotSound.() -> Unit)
|
|
= KSpigotSound(sound).apply(builder).playAt(this)
|
|
|
|
/**
|
|
* Accesses the sound builder and then immediately
|
|
* plays the sound for the player.
|
|
* @see KSpigotSound
|
|
*/
|
|
fun Player.sound(sound: Sound, builder: KSpigotSound.() -> Unit)
|
|
= KSpigotSound(sound).apply(builder).playFor(this)
|