diff --git a/src/main/kotlin/net/axay/kspigot/utils/KSpigotFirework.kt b/src/main/kotlin/net/axay/kspigot/utils/KSpigotFirework.kt new file mode 100644 index 00000000..a704eb1c --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/utils/KSpigotFirework.kt @@ -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() + + 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() + + } + +} \ No newline at end of file