ChatComponent api overhaul

This commit is contained in:
bluefireoly
2020-08-28 00:23:14 +02:00
parent b56e33e79e
commit 26a8b9ba29

View File

@@ -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.Item
import net.md_5.bungee.api.chat.hover.content.Text import net.md_5.bungee.api.chat.hover.content.Text
object KSpigotChat { inline fun chatComponent(builder: KSpigotComponentBuilder.() -> Unit): Array<out BaseComponent> {
inline fun buildComponent(builder: KSpigotComponentBuilder.() -> Unit): Array<out BaseComponent> {
return KSpigotComponentBuilder().apply(builder).create() return KSpigotComponentBuilder().apply(builder).create()
} }
}
class KSpigotComponentBuilder { class KSpigotComponentBuilder {
val components = ArrayList<BaseComponent>() private val components = ArrayList<BaseComponent>()
inline fun text(builder: TextComponentBuilder.() -> Unit) { inline fun text(text: String, builder: TextComponent.() -> Unit = { }) {
val textComponent = TextComponentBuilder().apply(builder).textComponent append(TextComponent(text).apply(builder))
if (textComponent != null)
append(textComponent)
} }
inline fun keybind(builder: KeybindComponentBuilder.() -> Unit) { inline fun keybind(keybind: String, builder: KeybindComponent.() -> Unit = { }) {
val keybindComponent = KeybindComponentBuilder().apply(builder).keybindComponent append(KeybindComponent(keybind).apply(builder))
if (keybindComponent != null)
append(keybindComponent)
} }
inline fun score(builder: ScoreComponentBuilder.() -> Unit) { inline fun score(name: String, objective: String, value: String?, builder: ScoreComponent.() -> Unit = { }) {
val scoreComponent = ScoreComponentBuilder().apply(builder).scoreComponent if (value != null)
if (scoreComponent != null) append(ScoreComponent(name, objective, value).apply(builder))
append(scoreComponent) else
append(ScoreComponent(name, objective).apply(builder))
} }
inline fun selector(builder: SelectorComponentBuilder.() -> Unit) { inline fun selector(selector: String, builder: SelectorComponent.() -> Unit = { }) {
val selectorComponent = SelectorComponentBuilder().apply(builder).selectorComponent append(SelectorComponent(selector).apply(builder))
if (selectorComponent != null)
append(selectorComponent)
} }
inline fun translatable(builder: TranslatableComponentBuilder.() -> Unit) { inline fun translatable(translatable: String, with: Array<BaseComponent>, builder: TranslatableComponent.() -> Unit = { }) {
val translatableComponent = TranslatableComponentBuilder().apply(builder).translatableComponent append(TranslatableComponent(translatable, with).apply(builder))
if (translatableComponent != null)
append(translatableComponent)
} }
fun append(baseComponent: BaseComponent) { components += baseComponent } fun append(baseComponent: BaseComponent) { components += baseComponent }
@@ -55,133 +44,30 @@ class KSpigotComponentBuilder {
} }
open class BaseComponentBuilder { /**
* BASE COMPONENT
*/
// style // extensions
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 inline fun BaseComponent.hoverEventText(builder: KSpigotComponentBuilder.() -> Unit) {
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())) hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT, Text(KSpigotComponentBuilder().apply(builder).create()))
} }
fun hoverEventItem(id: String, count: Int, tag: ItemTag) { fun BaseComponent.hoverEventItem(id: String, count: Int, tag: ItemTag) {
hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ITEM, Item(id, count, tag)) hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ITEM, Item(id, count, tag))
} }
fun hoverEventEntity(type: String, id: String, baseComponent: BaseComponent) { fun BaseComponent.hoverEventEntity(type: String, id: String, baseComponent: BaseComponent) {
hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ENTITY, Entity(type, id, baseComponent)) hoverEvent = HoverEvent(HoverEvent.Action.SHOW_ENTITY, Entity(type, id, baseComponent))
} }
protected fun applyTo(baseComponent: BaseComponent) { fun BaseComponent.clickEvent(action: ClickEvent.Action, value: String) {
clickEvent = ClickEvent(action, value)
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 }
} }
} /**
* GLOBAL SHORTCUTS
*/
class TextComponentBuilder : BaseComponentBuilder() { fun c(hex: String): ChatColor = ChatColor.of(hex)
var text: String? = null
val textComponent: TextComponent?
get() {
text?.let { curText ->
val toReturn = TextComponent(curText)
super.applyTo(toReturn)
return toReturn
}
return null
}
}
class KeybindComponentBuilder : BaseComponentBuilder() {
var keybind: String? = null
val keybindComponent: KeybindComponent?
get() {
val toReturn = KeybindComponent(keybind ?: return null)
super.applyTo(toReturn)
return toReturn
}
}
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
}
}
class SelectorComponentBuilder : BaseComponentBuilder() {
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<BaseComponent>? = null
val translatableComponent: TranslatableComponent?
get() {
translatable?.let { curTranslatable -> with?.let { curWith ->
val toReturn = TranslatableComponent(curTranslatable, *curWith.toTypedArray())
super.applyTo(toReturn)
return toReturn
} }
return null
}
}