From 8086c994ef75794f6c1ee0a9e57812cb9dbd61c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=98=BF=E9=B9=B0?= Date: Fri, 5 Sep 2025 22:01:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(plugin):=20=E4=BF=AE=E5=A4=8D=E5=8D=A1?= =?UTF-8?q?=E6=9C=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新版本号至 3.8.4 - 修复卡服 https://github.com/CoderKuo/TrMenu/issues/201 - 使用 XItemFlag 替代 ItemFlag --- gradle.properties | 2 +- .../menu/module/conf/MenuSerializer.kt | 6 ++-- .../internal/listener/ListenerItemInteract.kt | 30 +++++++++++++++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/gradle.properties b/gradle.properties index 3d675f7d..037f7a19 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ group=me.arasple.mc.trmenu -version=3.8.2 \ No newline at end of file +version=3.8.4 \ No newline at end of file diff --git a/plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt b/plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt index c6347bc4..12628190 100644 --- a/plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt +++ b/plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt @@ -2,11 +2,11 @@ package trplugins.menu.module.conf import org.bukkit.event.inventory.InventoryType import org.bukkit.inventory.InventoryView -import org.bukkit.inventory.ItemFlag import taboolib.common.platform.function.pluginId import taboolib.common.platform.function.warning import taboolib.common.util.asList import taboolib.library.configuration.ConfigurationSection +import taboolib.library.xseries.XItemFlag import taboolib.module.configuration.Configuration import taboolib.module.configuration.Type import taboolib.module.lang.Language @@ -42,6 +42,7 @@ import trplugins.menu.util.collections.IndivList import trplugins.menu.util.conf.Property import trplugins.menu.util.parseIconId import java.io.File +import kotlin.jvm.optionals.getOrNull import kotlin.math.max /** @@ -342,7 +343,8 @@ object MenuSerializer : ISerializer { val flags = if (inherit.contains(Property.ICON_DISPLAY_FLAGS)) { def!!.display.meta.flags } else Property.ICON_DISPLAY_FLAGS.ofStringList(display).mapNotNull { flag -> - ItemFlag.entries.find { it.name.equals(flag, true) } +// ItemFlag.entries.find { it.name.equals(flag, true) } + XItemFlag.of(flag).getOrNull()?.get() }.toTypedArray() val nbt = if (inherit.contains(Property.ICON_DISPLAY_NBT)) { def!!.display.meta.nbt diff --git a/plugin/src/main/kotlin/trplugins/menu/module/internal/listener/ListenerItemInteract.kt b/plugin/src/main/kotlin/trplugins/menu/module/internal/listener/ListenerItemInteract.kt index 40c57796..4b879fb2 100644 --- a/plugin/src/main/kotlin/trplugins/menu/module/internal/listener/ListenerItemInteract.kt +++ b/plugin/src/main/kotlin/trplugins/menu/module/internal/listener/ListenerItemInteract.kt @@ -1,12 +1,15 @@ package trplugins.menu.module.internal.listener +import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventory import org.bukkit.event.player.PlayerInteractEvent import org.bukkit.inventory.EquipmentSlot import org.bukkit.inventory.Inventory import taboolib.common.platform.event.EventPriority import taboolib.common.platform.event.SubscribeEvent import taboolib.common5.Baffle -import taboolib.module.nms.MinecraftVersion +import taboolib.module.nms.MinecraftVersion.versionId +import taboolib.module.nms.nmsProxy +import taboolib.module.nms.obcClass import trplugins.menu.TrMenu import trplugins.menu.api.event.MenuOpenEvent import trplugins.menu.module.display.Menu @@ -28,11 +31,15 @@ object ListenerItemInteract { fun onInteract(e: PlayerInteractEvent) { ListenerItemInteract::interactCooldown.get() - if (MinecraftVersion.majorLegacy >= 10900 && e.hand == EquipmentSlot.OFF_HAND) return + if (versionId >= 10900 && e.hand == EquipmentSlot.OFF_HAND) return val player = e.player val item = e.item ?: return val session = MenuSession.getSession(player) + if (!InventoryNMS.instance.checkInventory(player.openInventory.topInventory) + || !InventoryNMS.instance.checkInventory(player.inventory) + ) return + if (player.openInventory.topInventory.holder != (player.inventory as Inventory).holder || session.menu != null) return if (interactCooldown.value.hasNext(player.name)) { val menu = Menu.menus.find { it -> it.settings.boundItems.any { it.itemMatches(item, true) } } @@ -43,4 +50,23 @@ object ListenerItemInteract { } } + class InventoryNMSImpl : InventoryNMS() { + + private val `clazz$CraftInventoryCustom$MinecraftInventory` = + obcClass("org.bukkit.craftbukkit.inventory.CraftInventoryCustom\$MinecraftInventory") + + override fun checkInventory(inventory: Inventory): Boolean { + return `clazz$CraftInventoryCustom$MinecraftInventory`.isInstance((inventory as CraftInventory).inventory) + } + + } + + abstract class InventoryNMS { + abstract fun checkInventory(inventory: Inventory): Boolean + + companion object { + val instance by lazy { nmsProxy() } + } + } + } \ No newline at end of file