Added sound utils
This commit is contained in:
63
src/main/kotlin/net/axay/kspigot/sound/KSpigotSound.kt
Normal file
63
src/main/kotlin/net/axay/kspigot/sound/KSpigotSound.kt
Normal file
@@ -0,0 +1,63 @@
|
||||
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)
|
Reference in New Issue
Block a user