Skip to content

Commit 8086c99

Browse files
committed
fix(plugin): 修复卡服
- 更新版本号至 3.8.4 - 修复卡服 #201 - 使用 XItemFlag 替代 ItemFlag
1 parent 5dcfbc8 commit 8086c99

3 files changed

Lines changed: 33 additions & 5 deletions

File tree

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.8.2
2+
version=3.8.4

plugin/src/main/kotlin/trplugins/menu/module/conf/MenuSerializer.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package trplugins.menu.module.conf
22

33
import org.bukkit.event.inventory.InventoryType
44
import org.bukkit.inventory.InventoryView
5-
import org.bukkit.inventory.ItemFlag
65
import taboolib.common.platform.function.pluginId
76
import taboolib.common.platform.function.warning
87
import taboolib.common.util.asList
98
import taboolib.library.configuration.ConfigurationSection
9+
import taboolib.library.xseries.XItemFlag
1010
import taboolib.module.configuration.Configuration
1111
import taboolib.module.configuration.Type
1212
import taboolib.module.lang.Language
@@ -42,6 +42,7 @@ import trplugins.menu.util.collections.IndivList
4242
import trplugins.menu.util.conf.Property
4343
import trplugins.menu.util.parseIconId
4444
import java.io.File
45+
import kotlin.jvm.optionals.getOrNull
4546
import kotlin.math.max
4647

4748
/**
@@ -342,7 +343,8 @@ object MenuSerializer : ISerializer {
342343
val flags = if (inherit.contains(Property.ICON_DISPLAY_FLAGS)) {
343344
def!!.display.meta.flags
344345
} else Property.ICON_DISPLAY_FLAGS.ofStringList(display).mapNotNull { flag ->
345-
ItemFlag.entries.find { it.name.equals(flag, true) }
346+
// ItemFlag.entries.find { it.name.equals(flag, true) }
347+
XItemFlag.of(flag).getOrNull()?.get()
346348
}.toTypedArray()
347349
val nbt = if (inherit.contains(Property.ICON_DISPLAY_NBT)) {
348350
def!!.display.meta.nbt

plugin/src/main/kotlin/trplugins/menu/module/internal/listener/ListenerItemInteract.kt

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package trplugins.menu.module.internal.listener
22

3+
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftInventory
34
import org.bukkit.event.player.PlayerInteractEvent
45
import org.bukkit.inventory.EquipmentSlot
56
import org.bukkit.inventory.Inventory
67
import taboolib.common.platform.event.EventPriority
78
import taboolib.common.platform.event.SubscribeEvent
89
import taboolib.common5.Baffle
9-
import taboolib.module.nms.MinecraftVersion
10+
import taboolib.module.nms.MinecraftVersion.versionId
11+
import taboolib.module.nms.nmsProxy
12+
import taboolib.module.nms.obcClass
1013
import trplugins.menu.TrMenu
1114
import trplugins.menu.api.event.MenuOpenEvent
1215
import trplugins.menu.module.display.Menu
@@ -28,11 +31,15 @@ object ListenerItemInteract {
2831
fun onInteract(e: PlayerInteractEvent) {
2932
ListenerItemInteract::interactCooldown.get()
3033

31-
if (MinecraftVersion.majorLegacy >= 10900 && e.hand == EquipmentSlot.OFF_HAND) return
34+
if (versionId >= 10900 && e.hand == EquipmentSlot.OFF_HAND) return
3235
val player = e.player
3336
val item = e.item ?: return
3437
val session = MenuSession.getSession(player)
3538

39+
if (!InventoryNMS.instance.checkInventory(player.openInventory.topInventory)
40+
|| !InventoryNMS.instance.checkInventory(player.inventory)
41+
) return
42+
3643
if (player.openInventory.topInventory.holder != (player.inventory as Inventory).holder || session.menu != null) return
3744
if (interactCooldown.value.hasNext(player.name)) {
3845
val menu = Menu.menus.find { it -> it.settings.boundItems.any { it.itemMatches(item, true) } }
@@ -43,4 +50,23 @@ object ListenerItemInteract {
4350
}
4451
}
4552

53+
class InventoryNMSImpl : InventoryNMS() {
54+
55+
private val `clazz$CraftInventoryCustom$MinecraftInventory` =
56+
obcClass("org.bukkit.craftbukkit.inventory.CraftInventoryCustom\$MinecraftInventory")
57+
58+
override fun checkInventory(inventory: Inventory): Boolean {
59+
return `clazz$CraftInventoryCustom$MinecraftInventory`.isInstance((inventory as CraftInventory).inventory)
60+
}
61+
62+
}
63+
64+
abstract class InventoryNMS {
65+
abstract fun checkInventory(inventory: Inventory): Boolean
66+
67+
companion object {
68+
val instance by lazy { nmsProxy<InventoryNMS>() }
69+
}
70+
}
71+
4672
}

0 commit comments

Comments
 (0)