From 26a8b9ba29524f1d3dabe48be63cd1b313470664 Mon Sep 17 00:00:00 2001 From: bluefireoly Date: Fri, 28 Aug 2020 00:23:14 +0200 Subject: [PATCH] ChatComponent api overhaul --- .../net/axay/kspigot/chat/KSpigotChat.kt | 178 ++++-------------- 1 file changed, 32 insertions(+), 146 deletions(-) diff --git a/src/main/kotlin/net/axay/kspigot/chat/KSpigotChat.kt b/src/main/kotlin/net/axay/kspigot/chat/KSpigotChat.kt index 57cff802..063bfcbc 100644 --- a/src/main/kotlin/net/axay/kspigot/chat/KSpigotChat.kt +++ b/src/main/kotlin/net/axay/kspigot/chat/KSpigotChat.kt @@ -8,46 +8,35 @@ import net.md_5.bungee.api.chat.hover.content.Entity import net.md_5.bungee.api.chat.hover.content.Item import net.md_5.bungee.api.chat.hover.content.Text -object KSpigotChat { - - inline fun buildComponent(builder: KSpigotComponentBuilder.() -> Unit): Array { - return KSpigotComponentBuilder().apply(builder).create() - } - +inline fun chatComponent(builder: KSpigotComponentBuilder.() -> Unit): Array { + return KSpigotComponentBuilder().apply(builder).create() } class KSpigotComponentBuilder { - val components = ArrayList() + private val components = ArrayList() - inline fun text(builder: TextComponentBuilder.() -> Unit) { - val textComponent = TextComponentBuilder().apply(builder).textComponent - if (textComponent != null) - append(textComponent) + inline fun text(text: String, builder: TextComponent.() -> Unit = { }) { + append(TextComponent(text).apply(builder)) } - inline fun keybind(builder: KeybindComponentBuilder.() -> Unit) { - val keybindComponent = KeybindComponentBuilder().apply(builder).keybindComponent - if (keybindComponent != null) - append(keybindComponent) + inline fun keybind(keybind: String, builder: KeybindComponent.() -> Unit = { }) { + append(KeybindComponent(keybind).apply(builder)) } - inline fun score(builder: ScoreComponentBuilder.() -> Unit) { - val scoreComponent = ScoreComponentBuilder().apply(builder).scoreComponent - if (scoreComponent != null) - append(scoreComponent) + inline fun score(name: String, objective: String, value: String?, builder: ScoreComponent.() -> Unit = { }) { + if (value != null) + append(ScoreComponent(name, objective, value).apply(builder)) + else + append(ScoreComponent(name, objective).apply(builder)) } - inline fun selector(builder: SelectorComponentBuilder.() -> Unit) { - val selectorComponent = SelectorComponentBuilder().apply(builder).selectorComponent - if (selectorComponent != null) - append(selectorComponent) + inline fun selector(selector: String, builder: SelectorComponent.() -> Unit = { }) { + append(SelectorComponent(selector).apply(builder)) } - inline fun translatable(builder: TranslatableComponentBuilder.() -> Unit) { - val translatableComponent = TranslatableComponentBuilder().apply(builder).translatableComponent - if (translatableComponent != null) - append(translatableComponent) + inline fun translatable(translatable: String, with: Array, builder: TranslatableComponent.() -> Unit = { }) { + append(TranslatableComponent(translatable, with).apply(builder)) } fun append(baseComponent: BaseComponent) { components += baseComponent } @@ -55,133 +44,30 @@ class KSpigotComponentBuilder { } -open class BaseComponentBuilder { +/** + * BASE COMPONENT + */ - // style - var color: ChatColor? = null - var font: String? = null - var bold: Boolean? = null - var italic: Boolean? = null - var underlined: Boolean? = null - var strikethrough: Boolean? = null - var obfuscated: Boolean? = null - - // behaviour - var insertion: String? = null - - // events - var hoverEvent: HoverEvent? = null - var clickEvent: ClickEvent? = null - - inline fun hoverEventText(builder: KSpigotComponentBuilder.() -> Unit) { - hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, Text(KSpigotComponentBuilder().apply(builder).create())) - } - - fun hoverEventItem(id: String, count: Int, tag: ItemTag) { - hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ITEM, Item(id, count, tag)) - } - - fun hoverEventEntity(type: String, id: String, baseComponent: BaseComponent) { - hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ENTITY, Entity(type, id, baseComponent)) - } - - protected fun applyTo(baseComponent: BaseComponent) { - - color?.let { baseComponent.color = it } - font?.let { baseComponent.font = it } - bold?.let { baseComponent.isBold = it } - italic?.let { baseComponent.isItalic = it } - underlined?.let { baseComponent.isUnderlined = it } - strikethrough?.let { baseComponent.isStrikethrough = it } - obfuscated?.let { baseComponent.isObfuscated = it } - - insertion?.let { baseComponent.insertion = it } - - hoverEvent?.let { baseComponent.hoverEvent = it } - clickEvent?.let { baseComponent.clickEvent = it } - - } +// extensions +inline fun BaseComponent.hoverEventText(builder: KSpigotComponentBuilder.() -> Unit) { + hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, Text(KSpigotComponentBuilder().apply(builder).create())) } -class TextComponentBuilder : BaseComponentBuilder() { - - var text: String? = null - - val textComponent: TextComponent? - get() { - text?.let { curText -> - val toReturn = TextComponent(curText) - super.applyTo(toReturn) - return toReturn - } - return null - } - +fun BaseComponent.hoverEventItem(id: String, count: Int, tag: ItemTag) { + hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ITEM, Item(id, count, tag)) } -class KeybindComponentBuilder : BaseComponentBuilder() { - - var keybind: String? = null - - val keybindComponent: KeybindComponent? - get() { - val toReturn = KeybindComponent(keybind ?: return null) - super.applyTo(toReturn) - return toReturn - } - +fun BaseComponent.hoverEventEntity(type: String, id: String, baseComponent: BaseComponent) { + hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ENTITY, Entity(type, id, baseComponent)) } -class ScoreComponentBuilder : BaseComponentBuilder() { - - var name: String? = null - var objective: String? = null - var value: String? = null - - val scoreComponent: ScoreComponent? - get() { - name?.let { curName -> objective?.let { curObjective -> - value?.let { curValue -> - val toReturn = ScoreComponent(curName, curObjective, curValue) - super.applyTo(toReturn) - return toReturn - } - val toReturn = ScoreComponent(curName, curObjective) - super.applyTo(toReturn) - toReturn - } } - return null - } - +fun BaseComponent.clickEvent(action: ClickEvent.Action, value: String) { + clickEvent = ClickEvent(action, value) } -class SelectorComponentBuilder : BaseComponentBuilder() { +/** + * GLOBAL SHORTCUTS + */ - var selector: String? = null - - val selectorComponent: SelectorComponent? - get() { - val toReturn = SelectorComponent(selector ?: return null) - super.applyTo(toReturn) - return toReturn - } - -} - -class TranslatableComponentBuilder : BaseComponentBuilder() { - - var translatable: String? = null - var with: MutableList? = null - - val translatableComponent: TranslatableComponent? - get() { - translatable?.let { curTranslatable -> with?.let { curWith -> - val toReturn = TranslatableComponent(curTranslatable, *curWith.toTypedArray()) - super.applyTo(toReturn) - return toReturn - } } - return null - } - -} \ No newline at end of file +fun c(hex: String): ChatColor = ChatColor.of(hex) \ No newline at end of file