Files
KSpigot/src/main/kotlin/net/axay/kspigot/utils/KSpigotFirework.kt
2020-07-06 17:11:07 +02:00

67 lines
1.6 KiB
Kotlin

@file:Suppress("MemberVisibilityCanBePrivate")
package net.axay.kspigot.utils
import org.bukkit.Color
import org.bukkit.FireworkEffect
import org.bukkit.inventory.meta.FireworkMeta
object KSpigotFirework {
inline fun buildFireworkMeta(fireworkMeta: FireworkMeta, builder: KSpigotFireworkBuilder.() -> Unit): FireworkMeta {
return KSpigotFireworkBuilder().apply(builder).applyTo(fireworkMeta)
}
fun FireworkMeta.build(builder: KSpigotFireworkBuilder.() -> Unit) = buildFireworkMeta(this, builder)
}
class KSpigotFireworkBuilder {
val effects = ArrayList<FireworkEffect>()
var power: Int? = null
inline fun effect(builder: FireworkEffectBuilder.() -> Unit) {
effects += FireworkEffectBuilder().apply(builder).fireworkEffect
}
fun applyTo(fireworkMeta: FireworkMeta): FireworkMeta {
fireworkMeta.addEffects(effects)
power?.let { fireworkMeta.power = it }
return fireworkMeta
}
}
class FireworkEffectBuilder {
private val fireworkBuilder = FireworkEffect.builder()
var type: FireworkEffect.Type? = null
var trail: Boolean? = null
var flicker: Boolean? = null
fun fade(vararg colors: Color) {
fireworkBuilder.withFade(*colors)
}
fun color(vararg colors: Color) {
fireworkBuilder.withColor(*colors)
}
val fireworkEffect: FireworkEffect
get() {
type?.let { fireworkBuilder.with(it) }
trail?.let { fireworkBuilder.trail(it) }
flicker?.let { fireworkBuilder.flicker(it) }
return fireworkBuilder.build()
}
}