Added a FireworkBuilder
This commit is contained in:
66
src/main/kotlin/net/axay/kspigot/utils/KSpigotFirework.kt
Normal file
66
src/main/kotlin/net/axay/kspigot/utils/KSpigotFirework.kt
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
@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: KSpigotFireworkEffectBuilder.() -> Unit) {
|
||||||
|
effects += KSpigotFireworkEffectBuilder().apply(builder).build()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun applyTo(fireworkMeta: FireworkMeta): FireworkMeta {
|
||||||
|
|
||||||
|
fireworkMeta.addEffects(effects)
|
||||||
|
|
||||||
|
power?.let { fireworkMeta.power = it }
|
||||||
|
|
||||||
|
return fireworkMeta
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class KSpigotFireworkEffectBuilder {
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun build(): FireworkEffect {
|
||||||
|
|
||||||
|
type?.let { fireworkBuilder.with(it) }
|
||||||
|
trail?.let { fireworkBuilder.trail(it) }
|
||||||
|
flicker?.let { fireworkBuilder.flicker(it) }
|
||||||
|
|
||||||
|
return fireworkBuilder.build()
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user