Skip to content

Commit e4f8f7c

Browse files
committed
fix(title): 修复 Hex 颜色与 TabooLib component 格式冲突导致标题染色变黑
title 处理流程中 colorify() 产生的 BungeeCord §x 格式会损坏 SimpleComponent 属性值,改用 parseTitle() + colored() 兼容 TabooLib 的 HexColor 处理管线。
1 parent 0c8f86b commit e4f8f7c

3 files changed

Lines changed: 30 additions & 15 deletions

File tree

plugin/src/main/kotlin/trplugins/menu/api/action/impl/menu/SetTitle.kt

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package trplugins.menu.api.action.impl.menu
22

33
import taboolib.common.platform.ProxyPlayer
4+
import taboolib.module.chat.colored
45
import taboolib.module.chat.component
56
import trplugins.menu.api.action.ActionHandle
67
import trplugins.menu.api.action.base.ActionBase
78
import trplugins.menu.api.action.base.ActionContents
89
import trplugins.menu.module.display.session
910
import trplugins.menu.util.colorify
10-
import trplugins.menu.util.parseJson
1111

1212
/**
1313
* TrMenu
@@ -27,14 +27,11 @@ class SetTitle(handle: ActionHandle) : ActionBase(handle) {
2727
val session = player.session()
2828
val receptacle = session.receptacle ?: return
2929
var title = contents.stringContent().parseContent(placeholderPlayer)
30-
title = if (useComponent && runCatching { title.parseJson() }.isSuccess) {
31-
title
30+
title = if (useComponent) {
31+
title.colored().component().build().toRawMessage()
3232
} else {
3333
title.colorify()
3434
}
35-
if (useComponent) {
36-
title = title.component().build().toRawMessage()
37-
}
3835
receptacle.title(title)
3936
}
4037

plugin/src/main/kotlin/trplugins/menu/module/display/Menu.kt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import taboolib.common.platform.function.adaptPlayer
66
import taboolib.common.platform.function.console
77
import taboolib.common.platform.function.pluginId
88
import taboolib.common.platform.function.submit
9+
import taboolib.module.chat.colored
910
import taboolib.module.chat.component
1011
import taboolib.module.configuration.Configuration
1112
import taboolib.module.lang.Type
@@ -24,7 +25,6 @@ import trplugins.menu.module.internal.data.Metadata
2425
import trplugins.menu.module.internal.script.evalAction
2526
import trplugins.menu.module.internal.script.evalScript
2627
import trplugins.menu.util.colorify
27-
import trplugins.menu.util.parseJson
2828
import java.util.function.Consumer
2929

3030
/**
@@ -221,12 +221,12 @@ class Menu(
221221
private fun loadTitle(session: MenuSession) {
222222
val title = settings.title(session)
223223
session.receptacle?.title(title.next(session.id)?.let {
224-
formatTitle(session.parse(it))
224+
formatTitle(session.parseTitle(it))
225225
} ?: pluginId, update = false)
226226

227227
val setTitle = {
228228
session.receptacle?.title(title.next(session.id)?.let {
229-
formatTitle(session.parse(it))
229+
formatTitle(session.parseTitle(it))
230230
} ?: pluginId)
231231
}
232232

@@ -238,12 +238,7 @@ class Menu(
238238
}
239239

240240
private fun formatTitle(title: String): String {
241-
val colored = if (SetTitle.useComponent && runCatching { title.parseJson() }.isSuccess) {
242-
title
243-
} else {
244-
title.colorify()
245-
}
246-
return if (SetTitle.useComponent) colored.component().build().toRawMessage() else colored
241+
return if (SetTitle.useComponent) title.colored().component().build().toRawMessage() else title.colorify()
247242
}
248243

249244
private fun loadIcon(session: MenuSession) {

plugin/src/main/kotlin/trplugins/menu/module/display/MenuSession.kt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,29 @@ class MenuSession(
153153
return if (preColor) papi else papi.colorify()
154154
}
155155

156+
/**
157+
* 处理标题字符串,仅替换函数变量与占位符,不进行颜色处理
158+
* 颜色处理交由下游的 TabooLib component() 管道完成,避免
159+
* BungeeCord §x 格式与 SimpleComponent parseToHexColor 的兼容问题
160+
*/
161+
fun parseTitle(string: String): String {
162+
val funced = FunctionParser.parse(placeholderPlayer, string) { type, value ->
163+
when (type) {
164+
"node", "nodes", "n" -> parseNode(value) { key ->
165+
getNodeValue(key)
166+
}
167+
"lang" -> parseNode(value) { key ->
168+
menu?.getLocaleValue(locale, key)
169+
}
170+
else -> null
171+
}
172+
}
173+
return funced
174+
.replaceWithOrder(*arguments)
175+
.replaceWithOrder(*implicitArguments)
176+
.replacePlaceholder(placeholderPlayer)
177+
}
178+
156179
fun parse(string: List<String>): List<String> {
157180
return string.map { parse(it) }
158181
}

0 commit comments

Comments
 (0)