Skip to content

Commit 30b82c6

Browse files
authored
Merge pull request #251 from YsGqHY/stable/v3
优化命令注册逻辑 & 添加对十六进制颜色代码的支持
2 parents 36b1d9e + 69f744d commit 30b82c6

File tree

6 files changed

+31
-25
lines changed

6 files changed

+31
-25
lines changed

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ subprojects {
7272
disableOnSkippedVersion = false
7373
}
7474
version {
75-
taboolib = "6.2.4-8d51195"
75+
taboolib = "6.2.4-e6c8347"
7676
coroutines = null
7777
}
7878
}

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
group=me.arasple.mc.trmenu
2-
version=3.9.17
2+
version=3.9.19

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import taboolib.common.platform.function.submitAsync
66
import taboolib.common.platform.service.PlatformExecutor
77
import taboolib.common.util.replaceWithOrder
88
import taboolib.library.reflex.Reflex.Companion.getProperty
9-
import taboolib.module.chat.colored
109
import taboolib.module.lang.Language
1110
import taboolib.platform.compat.replacePlaceholder
1211
import trplugins.menu.api.event.MenuCloseEvent
@@ -15,8 +14,7 @@ import trplugins.menu.module.display.icon.Icon
1514
import trplugins.menu.module.display.icon.IconProperty
1615
import trplugins.menu.module.display.layout.Layout
1716
import trplugins.menu.module.internal.script.FunctionParser
18-
import trplugins.menu.util.parseGradients
19-
import trplugins.menu.util.parseRainbow
17+
import trplugins.menu.util.colorify
2018
import java.util.UUID
2119
import java.util.concurrent.ConcurrentHashMap
2220

@@ -144,10 +142,10 @@ class MenuSession(
144142
}
145143
}
146144
val content =
147-
(if (preColor) funced else funced.colored().parseRainbow().parseGradients()).replaceWithOrder(*arguments).replaceWithOrder(*implicitArguments)
145+
(if (preColor) funced else funced.colorify()).replaceWithOrder(*arguments).replaceWithOrder(*implicitArguments)
148146
val papi = content.replacePlaceholder(placeholderPlayer)
149147

150-
return if (preColor) papi else papi.colored().parseRainbow().parseGradients()
148+
return if (preColor) papi else papi.colorify()
151149
}
152150

153151
fun parse(string: List<String>): List<String> {
@@ -320,4 +318,4 @@ fun Player.session(): MenuSession {
320318
}
321319
fun ProxyPlayer.session(): MenuSession {
322320
return cast<Player>().session()
323-
}
321+
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ package trplugins.menu.module.display
33
import me.clip.placeholderapi.PlaceholderAPI
44
import org.bukkit.Bukkit
55
import taboolib.common.platform.function.pluginId
6-
import taboolib.module.chat.colored
76
import trplugins.menu.TrMenu
87
import trplugins.menu.api.reaction.Reactions
98
import trplugins.menu.api.receptacle.MenuTaskData
109
import trplugins.menu.module.internal.script.js.ScriptFunction
1110
import trplugins.menu.util.Cooldown
11+
import trplugins.menu.util.colorify
1212
import trplugins.menu.util.bukkit.ItemMatcher
1313
import trplugins.menu.util.collections.CycleList
1414

@@ -40,8 +40,8 @@ class MenuSettings(
4040
companion object {
4141

4242
val PRE_COLOR get() = TrMenu.SETTINGS.getBoolean("Menu.Icon.Item.Pre-Color")
43-
val DEFAULT_NAME_COLOR get() = (TrMenu.SETTINGS.getString("Menu.Icon.Item.Default-Name-Color") ?: "&7").colored()
44-
val DEFAULT_LORE_COLOR get() = (TrMenu.SETTINGS.getString("Menu.Icon.Item.Default-Lore-Color") ?: "&7").colored()
43+
val DEFAULT_NAME_COLOR get() = (TrMenu.SETTINGS.getString("Menu.Icon.Item.Default-Name-Color") ?: "&7").colorify()
44+
val DEFAULT_LORE_COLOR get() = (TrMenu.SETTINGS.getString("Menu.Icon.Item.Default-Lore-Color") ?: "&7").colorify()
4545

4646
}
4747

@@ -119,4 +119,4 @@ class MenuSettings(
119119
}
120120
}
121121

122-
}
122+
}

plugin/src/main/kotlin/trplugins/menu/module/internal/service/RegisterCommands.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,12 @@ object RegisterCommands {
2626
}
2727

2828
fun load() {
29-
submit {
30-
registered.removeIf {
31-
unregisterCommand(it)
32-
true
33-
}
34-
35-
}
29+
val unregisterList = registered.toList()
30+
unregisterList.forEach { unregisterCommand(it) }
31+
registered.clear()
3632

37-
TrMenu.SETTINGS.getConfigurationSection("RegisterCommands")?.let { it ->
33+
val section = TrMenu.SETTINGS.getConfigurationSection("RegisterCommands")
34+
section?.let { it ->
3835
for (main in it.getKeys(false)) {
3936
val section = it.getConfigurationSection(main) ?: continue
4037
val argument = section.getConfigurationSection("arguments")
@@ -81,9 +78,11 @@ object RegisterCommands {
8178
// 延迟同步命令到所有在线玩家,避免与 Paper 异步命令发送线程冲突
8279
// Paper 的 sendAsync 会在异步线程遍历命令树,直接调用 updateCommands 可能触发 ConcurrentModificationException
8380
submit(delay = 1) {
84-
try {
85-
Bukkit.getOnlinePlayers().forEach { it.updateCommands() }
86-
} catch (_: Throwable) {}
81+
val players = Bukkit.getOnlinePlayers()
82+
if (players.isEmpty()) {
83+
return@submit
84+
}
85+
players.forEach { it.updateCommands() }
8786
}
8887
}
89-
}
88+
}

plugin/src/main/kotlin/trplugins/menu/util/Hex.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ object Hex {
2020
Pattern.compile("<(?<type>rainbow|r)(#(?<speed>\\d+))?(:(?<saturation>\\d*\\.?\\d+))?(:(?<brightness>\\d*\\.?\\d+))?(:(?<loop>l|L|loop))?>")
2121
private val GRADIENT_PATTERN =
2222
Pattern.compile("<(?<type>gradient|g)(#(?<speed>\\d+))?(?<hex>(:#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})){2,})(:(?<loop>l|L|loop))?>")
23+
private val LEGACY_HEX_PATTERN =
24+
Pattern.compile("&\\{#([A-Fa-f0-9]){6}}") // &{#FFFFFF}
2325
private val HEX_PATTERNS = listOf(
2426
Pattern.compile("<#([A-Fa-f0-9]){6}>"), // <#FFFFFF>
2527
Pattern.compile("\\{#([A-Fa-f0-9]){6}}"), // {#FFFFFF}
@@ -70,8 +72,9 @@ object Hex {
7072
* @param message The message
7173
* @return A color-replaced message
7274
*/
73-
private fun colorify(message: String): String {
75+
internal fun colorify(message: String): String {
7476
var parsed = message
77+
parsed = normalizeLegacyHex(parsed)
7578
parsed = parseRainbow(parsed)
7679
parsed = parseGradients(parsed)
7780
parsed = parseHex(parsed)
@@ -222,6 +225,11 @@ object Hex {
222225
return ChatColor.translateAlternateColorCodes('&', message)
223226
}
224227

228+
private fun normalizeLegacyHex(message: String): String {
229+
val matcher = LEGACY_HEX_PATTERN.matcher(message)
230+
return if (matcher.find()) matcher.replaceAll("&#\$1") else message
231+
}
232+
225233
/**
226234
* Returns the index before the color changes
227235
*
@@ -422,5 +430,6 @@ object Hex {
422430
}
423431
}
424432

433+
fun String.colorify() = Hex.colorify(this)
425434
fun String.parseRainbow() = Hex.parseRainbow(this)
426435
fun String.parseGradients() = Hex.parseGradients(this)

0 commit comments

Comments
 (0)