Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import taboolib.common.platform.command.command
import taboolib.common.platform.function.adaptPlayer
import taboolib.common.platform.function.submit
import taboolib.common.platform.function.unregisterCommand
import taboolib.platform.util.onlinePlayers
import trplugins.menu.TrMenu
import trplugins.menu.TrMenu.actionHandle
import trplugins.menu.api.reaction.Reactions
Expand All @@ -21,6 +20,7 @@ import trplugins.menu.util.conf.Property
object RegisterCommands {

private val registered = mutableSetOf<String>()
private var loadedConfiguration: Map<String, Any?>? = null

private fun ofReaction(any: Any?): Reactions {
return Reactions.ofReaction(actionHandle, Property.asAnyList(any))
Expand All @@ -33,11 +33,17 @@ object RegisterCommands {
}
return
}

val section = TrMenu.SETTINGS.getConfigurationSection("RegisterCommands")
val configuration = section?.getValues(true)?.toMap() ?: emptyMap()
if (configuration == loadedConfiguration) {
return
}

val unregisterList = registered.toList()
unregisterList.forEach { unregisterCommand(it) }
registered.clear()

val section = TrMenu.SETTINGS.getConfigurationSection("RegisterCommands")
section?.let { it ->
for (main in it.getKeys(false)) {
val section = it.getConfigurationSection(main) ?: continue
Expand Down Expand Up @@ -81,15 +87,6 @@ object RegisterCommands {
}
}
}

// 延迟同步命令到所有在线玩家,避免与 Paper 异步命令发送线程冲突
// Paper 的 sendAsync 会在异步线程遍历命令树,直接调用 updateCommands 可能触发 ConcurrentModificationException
submit(delay = 1) {
val players = onlinePlayers
if (players.isEmpty()) {
return@submit
}
players.forEach { it.updateCommands() }
}
loadedConfiguration = configuration
}
}