Skip to content

Commit db80bb1

Browse files
authored
Merge pull request #174 from YsGqHY/stable/v3
feat(Action): 优化菜单标题设置功能
2 parents b5d935e + fc2d03f commit db80bb1

File tree

8 files changed

+47
-16
lines changed

8 files changed

+47
-16
lines changed

api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/NMSImpl.kt

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ class NMSImpl : NMS() {
107107
PacketPlayOutOpenWindow::class.java.unsafeInstance(),
108108
"containerId" to windowId,
109109
"type" to Containers::class.java.getProperty(type.vanillaId, true),
110-
"title" to CraftChatMessage.fromStringOrNull(title)
110+
"title" to CraftChatMessage.fromJSONOrString(title)
111111
)
112112
}
113113
MinecraftVersion.isUniversal -> {
@@ -116,7 +116,7 @@ class NMSImpl : NMS() {
116116
PacketPlayOutOpenWindow::class.java.unsafeInstance(),
117117
"containerId" to windowId,
118118
"type" to type.serialId,
119-
"title" to CraftChatMessage.fromStringOrNull(title)
119+
"title" to CraftChatMessage.fromJSONOrString(title)
120120
)
121121
}
122122
version >= 11400 -> {
@@ -162,18 +162,20 @@ class NMSImpl : NMS() {
162162
"slot" to slot,
163163
"itemStack" to toNMSCopy(itemStack)
164164
)
165-
kotlin.runCatching {
166-
sendPacket(
167-
player,
168-
ClientboundSetCursorItemPacket::class.java.unsafeInstance(),
169-
"contents" to toNMSCopy(null)
170-
)
171-
}
172165
}
173166
else -> {
174167
player.sendPacket(PacketPlayOutSetSlot(windowId, slot, toNMSCopy(itemStack)))
175168
}
176169
}
170+
if (version >= 12104) {
171+
try {
172+
sendPacket(
173+
player,
174+
ClientboundSetCursorItemPacket::class.java.unsafeInstance(),
175+
"contents" to toNMSCopy(null)
176+
)
177+
} catch (_: Throwable) {}
178+
}
177179
}
178180

179181
override fun sendWindowsUpdateData(player: Player, windowId: Int, id: Int, value: Int) {

api/receptacle/src/main/kotlin/trplugins/menu/api/receptacle/vanilla/window/WindowReceptacle.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package trplugins.menu.api.receptacle.vanilla.window
33
import org.bukkit.entity.Player
44
import org.bukkit.inventory.ItemStack
55
import taboolib.common.platform.function.submit
6+
import taboolib.module.chat.component
67
import taboolib.module.nms.nmsProxy
78
import trplugins.menu.api.receptacle.Receptacle
89
import trplugins.menu.api.receptacle.ReceptacleInteractEvent

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.5.4
2+
version=3.6.1

plugin/src/main/kotlin/trplugins/menu/TrMenu.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import taboolib.module.lang.Language
1010
import taboolib.module.lang.sendLang
1111
import taboolib.platform.util.bukkitPlugin
1212
import trplugins.menu.api.action.ActionHandle
13+
import trplugins.menu.api.action.impl.menu.SetTitle
1314
import trplugins.menu.api.action.impl.send.Tell
1415
import trplugins.menu.api.receptacle.provider.PlatformProvider
1516
import trplugins.menu.api.receptacle.vanilla.window.NMS
@@ -91,6 +92,7 @@ object TrMenu : Plugin() {
9192
RegisterCommands.load()
9293
Bindings.load()
9394
Tell.useComponent = SETTINGS.getBoolean("Action.Using-Component", true)
95+
SetTitle.useComponent = SETTINGS.getBoolean("Action.Title-Using-Component", false)
9496
PlatformProvider.compute()
9597
NMS.javaStaticInventory = SETTINGS.getBoolean("Options.Static-Inventory.Java", false)
9698
NMS.bedrockStaticInventory = SETTINGS.getBoolean("Options.Static-Inventory.Bedrock", false)

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

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

33
import taboolib.common.platform.ProxyPlayer
4+
import taboolib.module.chat.component
45
import trplugins.menu.api.action.ActionHandle
56
import trplugins.menu.api.action.base.ActionBase
67
import trplugins.menu.api.action.base.ActionContents
8+
import trplugins.menu.api.action.impl.send.Tell
79
import trplugins.menu.module.display.session
810

911
/**
@@ -14,14 +16,20 @@ import trplugins.menu.module.display.session
1416
* @since 2022/02/14 12:21
1517
*/
1618
class SetTitle(handle: ActionHandle) : ActionBase(handle) {
19+
companion object {
20+
var useComponent = true
21+
}
1722

1823
override val regex = "set-?title".toRegex()
1924

2025
override fun onExecute(contents: ActionContents, player: ProxyPlayer, placeholderPlayer: ProxyPlayer) {
2126
val session = player.session()
2227
val receptacle = session.receptacle ?: return
23-
24-
receptacle.title(contents.stringContent().parseContent(placeholderPlayer))
28+
var title = contents.stringContent().parseContent(placeholderPlayer)
29+
if (useComponent) {
30+
title = title.component().build().toRawMessage()
31+
}
32+
receptacle.title(title)
2533
}
2634

2735
}

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

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ 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.component
910
import taboolib.module.configuration.Configuration
1011
import taboolib.module.lang.Type
1112
import taboolib.platform.util.cancelNextChat
1213
import trplugins.menu.TrMenu
14+
import trplugins.menu.api.action.impl.menu.SetTitle
15+
import trplugins.menu.api.action.impl.send.Tell
1316
import trplugins.menu.api.event.MenuOpenEvent
1417
import trplugins.menu.api.event.MenuPageChangeEvent
1518
import trplugins.menu.api.receptacle.provider.PlatformProvider
@@ -166,7 +169,10 @@ class Menu(
166169
loadTitle(session)
167170
}
168171
} else {
169-
session.receptacle?.title(title, update = false)
172+
val parseTitle = if (SetTitle.useComponent) {
173+
title.component().build().toRawMessage()
174+
} else title
175+
session.receptacle?.title(parseTitle, update = false)
170176
}
171177
if (BEDROCK_DELAY > 0 && PlatformProvider.isBedrockPlayer(viewer)) {
172178
submit(async = Bukkit.isPrimaryThread(), delay = BEDROCK_DELAY) {
@@ -183,10 +189,20 @@ class Menu(
183189
*/
184190
private fun loadTitle(session: MenuSession) {
185191
val title = settings.title(session)
186-
session.receptacle?.title(title.next(session.id)?.let { session.parse(it) } ?: pluginId, update = false)
187-
192+
session.receptacle?.title(title.next(session.id)?.let {
193+
val title = session.parse(it)
194+
if (SetTitle.useComponent) {
195+
title.component().build().toRawMessage()
196+
} else title
197+
} ?: pluginId, update = false)
198+
188199
val setTitle = {
189-
session.receptacle?.title(title.next(session.id)?.let { session.parse(it) } ?: pluginId)
200+
session.receptacle?.title(title.next(session.id)?.let {
201+
val title = session.parse(it)
202+
if (SetTitle.useComponent) {
203+
title.component().build().toRawMessage()
204+
} else title
205+
} ?: pluginId)
190206
}
191207

192208
if (settings.titleUpdate > 0 && title.cyclable()) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ class MenuSession(
145145
val content =
146146
(if (preColor) funced else funced.colored().parseRainbow().parseGradients()).replaceWithOrder(*arguments)
147147
val papi = content.replacePlaceholder(placeholderPlayer)
148+
148149
return if (preColor) papi else papi.colored().parseRainbow().parseGradients()
149150
}
150151

plugin/src/main/resources/settings.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ Menu:
8383

8484
Action:
8585
Using-Component: true
86+
Title-Using-Component: true
8687
Inputer:
8788
Cancel-Words:
8889
- 'cancel|quit|end'

0 commit comments

Comments
 (0)