diff --git a/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt b/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt index a199f3cd..ec82f96c 100644 --- a/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt +++ b/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt @@ -107,7 +107,7 @@ class NMSImpl : NMS() { PacketPlayOutOpenWindow::class.java.unsafeInstance(), "containerId" to windowId, "type" to Containers::class.java.getProperty(type.vanillaId, true), - "title" to CraftChatMessage.fromStringOrNull(title) + "title" to CraftChatMessage.fromJSONOrString(title) ) } MinecraftVersion.isUniversal -> { @@ -116,7 +116,7 @@ class NMSImpl : NMS() { PacketPlayOutOpenWindow::class.java.unsafeInstance(), "containerId" to windowId, "type" to type.serialId, - "title" to CraftChatMessage.fromStringOrNull(title) + "title" to CraftChatMessage.fromJSONOrString(title) ) } version >= 11400 -> { @@ -162,18 +162,20 @@ class NMSImpl : NMS() { "slot" to slot, "itemStack" to toNMSCopy(itemStack) ) - kotlin.runCatching { - sendPacket( - player, - ClientboundSetCursorItemPacket::class.java.unsafeInstance(), - "contents" to toNMSCopy(null) - ) - } } else -> { player.sendPacket(PacketPlayOutSetSlot(windowId, slot, toNMSCopy(itemStack))) } } + if (version >= 12104) { + try { + sendPacket( + player, + ClientboundSetCursorItemPacket::class.java.unsafeInstance(), + "contents" to toNMSCopy(null) + ) + } catch (_: Throwable) {} + } } override fun sendWindowsUpdateData(player: Player, windowId: Int, id: Int, value: Int) { diff --git a/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/WindowReceptacle.kt b/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/WindowReceptacle.kt index b98b10cd..c315a973 100644 --- a/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/WindowReceptacle.kt +++ b/api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/WindowReceptacle.kt @@ -3,6 +3,7 @@ package trplugins.menu.api.receptacle.vanilla.window import org.bukkit.entity.Player import org.bukkit.inventory.ItemStack import taboolib.common.platform.function.submit +import taboolib.module.chat.component import taboolib.module.nms.nmsProxy import trplugins.menu.api.receptacle.Receptacle import trplugins.menu.api.receptacle.ReceptacleInteractEvent diff --git a/gradle.properties b/gradle.properties index 9bf486ae..fb85671b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ group=me.arasple.mc.trmenu -version=3.5.4 +version=3.6.1 diff --git a/plugin/src/main/kotlin/trplugins/menu/TrMenu.kt b/plugin/src/main/kotlin/trplugins/menu/TrMenu.kt index 6182323c..a94bdcad 100644 --- a/plugin/src/main/kotlin/trplugins/menu/TrMenu.kt +++ b/plugin/src/main/kotlin/trplugins/menu/TrMenu.kt @@ -10,6 +10,7 @@ import taboolib.module.lang.Language import taboolib.module.lang.sendLang import taboolib.platform.util.bukkitPlugin import trplugins.menu.api.action.ActionHandle +import trplugins.menu.api.action.impl.menu.SetTitle import trplugins.menu.api.action.impl.send.Tell import trplugins.menu.api.receptacle.provider.PlatformProvider import trplugins.menu.api.receptacle.vanilla.window.NMS @@ -91,6 +92,7 @@ object TrMenu : Plugin() { RegisterCommands.load() Bindings.load() Tell.useComponent = SETTINGS.getBoolean("Action.Using-Component", true) + SetTitle.useComponent = SETTINGS.getBoolean("Action.Title-Using-Component", false) PlatformProvider.compute() NMS.javaStaticInventory = SETTINGS.getBoolean("Options.Static-Inventory.Java", false) NMS.bedrockStaticInventory = SETTINGS.getBoolean("Options.Static-Inventory.Bedrock", false) diff --git a/plugin/src/main/kotlin/trplugins/menu/api/action/impl/menu/SetTitle.kt b/plugin/src/main/kotlin/trplugins/menu/api/action/impl/menu/SetTitle.kt index acdb52c8..1c6e848c 100644 --- a/plugin/src/main/kotlin/trplugins/menu/api/action/impl/menu/SetTitle.kt +++ b/plugin/src/main/kotlin/trplugins/menu/api/action/impl/menu/SetTitle.kt @@ -1,9 +1,11 @@ package trplugins.menu.api.action.impl.menu import taboolib.common.platform.ProxyPlayer +import taboolib.module.chat.component import trplugins.menu.api.action.ActionHandle import trplugins.menu.api.action.base.ActionBase import trplugins.menu.api.action.base.ActionContents +import trplugins.menu.api.action.impl.send.Tell import trplugins.menu.module.display.session /** @@ -14,14 +16,20 @@ import trplugins.menu.module.display.session * @since 2022/02/14 12:21 */ class SetTitle(handle: ActionHandle) : ActionBase(handle) { + companion object { + var useComponent = true + } override val regex = "set-?title".toRegex() override fun onExecute(contents: ActionContents, player: ProxyPlayer, placeholderPlayer: ProxyPlayer) { val session = player.session() val receptacle = session.receptacle ?: return - - receptacle.title(contents.stringContent().parseContent(placeholderPlayer)) + var title = contents.stringContent().parseContent(placeholderPlayer) + if (useComponent) { + title = title.component().build().toRawMessage() + } + receptacle.title(title) } } \ No newline at end of file diff --git a/plugin/src/main/kotlin/trplugins/menu/module/display/Menu.kt b/plugin/src/main/kotlin/trplugins/menu/module/display/Menu.kt index d789d909..0e9ee459 100644 --- a/plugin/src/main/kotlin/trplugins/menu/module/display/Menu.kt +++ b/plugin/src/main/kotlin/trplugins/menu/module/display/Menu.kt @@ -6,10 +6,13 @@ import taboolib.common.platform.function.adaptPlayer import taboolib.common.platform.function.console import taboolib.common.platform.function.pluginId import taboolib.common.platform.function.submit +import taboolib.module.chat.component import taboolib.module.configuration.Configuration import taboolib.module.lang.Type import taboolib.platform.util.cancelNextChat import trplugins.menu.TrMenu +import trplugins.menu.api.action.impl.menu.SetTitle +import trplugins.menu.api.action.impl.send.Tell import trplugins.menu.api.event.MenuOpenEvent import trplugins.menu.api.event.MenuPageChangeEvent import trplugins.menu.api.receptacle.provider.PlatformProvider @@ -166,7 +169,10 @@ class Menu( loadTitle(session) } } else { - session.receptacle?.title(title, update = false) + val parseTitle = if (SetTitle.useComponent) { + title.component().build().toRawMessage() + } else title + session.receptacle?.title(parseTitle, update = false) } if (BEDROCK_DELAY > 0 && PlatformProvider.isBedrockPlayer(viewer)) { submit(async = Bukkit.isPrimaryThread(), delay = BEDROCK_DELAY) { @@ -183,10 +189,20 @@ class Menu( */ private fun loadTitle(session: MenuSession) { val title = settings.title(session) - session.receptacle?.title(title.next(session.id)?.let { session.parse(it) } ?: pluginId, update = false) - + session.receptacle?.title(title.next(session.id)?.let { + val title = session.parse(it) + if (SetTitle.useComponent) { + title.component().build().toRawMessage() + } else title + } ?: pluginId, update = false) + val setTitle = { - session.receptacle?.title(title.next(session.id)?.let { session.parse(it) } ?: pluginId) + session.receptacle?.title(title.next(session.id)?.let { + val title = session.parse(it) + if (SetTitle.useComponent) { + title.component().build().toRawMessage() + } else title + } ?: pluginId) } if (settings.titleUpdate > 0 && title.cyclable()) { diff --git a/plugin/src/main/kotlin/trplugins/menu/module/display/MenuSession.kt b/plugin/src/main/kotlin/trplugins/menu/module/display/MenuSession.kt index 2b2a401b..a83c9e6f 100644 --- a/plugin/src/main/kotlin/trplugins/menu/module/display/MenuSession.kt +++ b/plugin/src/main/kotlin/trplugins/menu/module/display/MenuSession.kt @@ -145,6 +145,7 @@ class MenuSession( val content = (if (preColor) funced else funced.colored().parseRainbow().parseGradients()).replaceWithOrder(*arguments) val papi = content.replacePlaceholder(placeholderPlayer) + return if (preColor) papi else papi.colored().parseRainbow().parseGradients() } diff --git a/plugin/src/main/resources/settings.yml b/plugin/src/main/resources/settings.yml index a4f9012d..27535615 100644 --- a/plugin/src/main/resources/settings.yml +++ b/plugin/src/main/resources/settings.yml @@ -83,6 +83,7 @@ Menu: Action: Using-Component: true + Title-Using-Component: true Inputer: Cancel-Words: - 'cancel|quit|end'