From 9ef18dda86250bba832a7d114b6c38cf8d8105fb Mon Sep 17 00:00:00 2001 From: Damian Date: Sat, 16 Nov 2024 19:25:40 +0100 Subject: [PATCH] Add kotlin extension (#1) --- .../src/dev/shiza/honey/title.kt | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 honey-kt-extension/src/dev/shiza/honey/title.kt diff --git a/honey-kt-extension/src/dev/shiza/honey/title.kt b/honey-kt-extension/src/dev/shiza/honey/title.kt new file mode 100644 index 0000000..ecd0db9 --- /dev/null +++ b/honey-kt-extension/src/dev/shiza/honey/title.kt @@ -0,0 +1,73 @@ +import dev.shiza.honey.dispatcher.TitleMessageDispatcher +import dev.shiza.honey.dispatcher.MessageDispatcher +import dev.shiza.honey.message.Message +import net.kyori.adventure.audience.Audience +import net.kyori.adventure.text.Component + +typealias TitleConfigurer = TitleMessageDispatcher.() -> Unit +typealias MessageConfigurer = MessageDispatcher.() -> Unit + +fun times(fadeIn: Int, stay: Int, fadeOut: Int): Triple = + Triple(fadeIn, stay, fadeOut) + + +fun TitleMessageDispatcher.createTitle( + recipient: Audience, + titleConfig: MessageConfigurer, + subtitleConfig: MessageConfigurer, + fadeIn: Int, + stay: Int, + fadeOut: Int +): MessageDispatcher = + createTitle() + .recipient(recipient) + .title { base -> base.apply(titleConfig) } + .subtitle { base -> base.apply(subtitleConfig) } + .times(fadeIn, stay, fadeOut) + +fun Audience.createTitle( + titleConfig: MessageConfigurer, + subtitleConfig: MessageConfigurer, + fadeIn: Int, + stay: Int, + fadeOut: Int +): TitleMessageDispatcher = + createTitle() + .recipient(this) + .title { base -> base.apply(titleConfig) } + .subtitle { base -> base.apply(subtitleConfig) } + .times(fadeIn, stay, fadeOut) + +fun Player.createTitle( + titleConfig: MessageConfigurer, + subtitleConfig: MessageConfigurer, + fadeIn: Int, + stay: Int, + fadeOut: Int +): TitleMessageDispatcher = + createTitle() + .recipient(this) + .title { base -> base.apply(titleConfig) } + .subtitle { base -> base.apply(subtitleConfig) } + .times(fadeIn, stay, fadeOut) + + +fun TitleConfigurer.withFormattedTitle(messageFormatter: MessageFormatter): TitleMessageDispatcher = + this.title { base -> + base.apply { messageFormatter.format(this) } + } + +fun Audience.createTitle( + messageFormatter: MessageFormatter, + titleConfig: MessageConfigurer, + subtitleConfig: MessageConfigurer, + fadeIn: Int, + stay: Int, + fadeOut: Int +): TitleMessageDispatcher = + createTitle() + .recipient(this) + .withFormattedTitle(messageFormatter) + .title { base -> base.apply(titleConfig) } + .subtitle { base -> base.apply(subtitleConfig) } + .times(fadeIn, stay, fadeOut)