From 9b4dcd69fc7409935612b4ec0fd1773b04a0eaa9 Mon Sep 17 00:00:00 2001
From: XiYang6666 <1782356858@qq.com>
Date: Sun, 9 Jun 2024 15:01:54 +0800
Subject: [PATCH] :bug: fix can not open interactive block
---
.../hashbook/listener/OpenBookListener.kt | 7 ++-
.../xyz/xasmc/hashbook/util/BlockUtil.kt | 49 +++++++++++++++++++
2 files changed, 54 insertions(+), 2 deletions(-)
create mode 100644 src/main/kotlin/xyz/xasmc/hashbook/util/BlockUtil.kt
diff --git a/src/main/kotlin/xyz/xasmc/hashbook/listener/OpenBookListener.kt b/src/main/kotlin/xyz/xasmc/hashbook/listener/OpenBookListener.kt
index 13351f3..5b1d1b9 100644
--- a/src/main/kotlin/xyz/xasmc/hashbook/listener/OpenBookListener.kt
+++ b/src/main/kotlin/xyz/xasmc/hashbook/listener/OpenBookListener.kt
@@ -9,6 +9,7 @@ import org.bukkit.inventory.meta.BookMeta
import xyz.xasmc.hashbook.HashBook
import xyz.xasmc.hashbook.service.ItemDataServices
import xyz.xasmc.hashbook.service.StorageServices
+import xyz.xasmc.hashbook.util.BlockUtil
import xyz.xasmc.hashbook.util.BookUtil
import xyz.xasmc.hashbook.util.MessageUtil.debugMiniMessage
import xyz.xasmc.hashbook.util.MessageUtil.sendMiniMessage
@@ -18,13 +19,15 @@ import xyz.xasmc.hashbook.util.MessageUtil.shortHashMessage
class OpenBookListener : Listener {
@EventHandler
fun onPlayerInteract(event: PlayerInteractEvent) {
- if (!(event.action == Action.RIGHT_CLICK_AIR || event.action == Action.RIGHT_CLICK_BLOCK)) return
+ if (event.action == Action.RIGHT_CLICK_BLOCK && !BlockUtil.checkInteractiveBlock(event.clickedBlock ?: return))
+ else if (event.action == Action.RIGHT_CLICK_AIR)
+ else return
val msgTitle = "[HashBook]"
val player = event.player
val hand = event.hand ?: run {
- player.sendMiniMessage("$msgTitle [warn] 无法获取装备槽")
+ player.debugMiniMessage("$msgTitle [debug] 无法获取装备槽")
return@onPlayerInteract
}
diff --git a/src/main/kotlin/xyz/xasmc/hashbook/util/BlockUtil.kt b/src/main/kotlin/xyz/xasmc/hashbook/util/BlockUtil.kt
new file mode 100644
index 0000000..a0f67ea
--- /dev/null
+++ b/src/main/kotlin/xyz/xasmc/hashbook/util/BlockUtil.kt
@@ -0,0 +1,49 @@
+package xyz.xasmc.hashbook.util
+
+import org.bukkit.Material
+import org.bukkit.Tag
+import org.bukkit.block.Block
+
+object BlockUtil {
+ fun checkInteractiveBlock(block: Block): Boolean {
+ val type = block.type
+ if (Tag.WOODEN_DOORS.isTagged(type)) return true
+ if (Tag.WOODEN_TRAPDOORS.isTagged(type)) return true
+ if (Tag.FENCE_GATES.isTagged(type)) return true
+ if (Tag.BUTTONS.isTagged(type)) return true
+ if (Tag.ANVIL.isTagged(type)) return true
+ if (Tag.ALL_SIGNS.isTagged(type)) return true
+ if (Tag.BEDS.isTagged(type)) return true
+ if (Tag.SHULKER_BOXES.isTagged(type)) return true
+
+ when (type) {
+ Material.CRAFTING_TABLE -> return true
+ Material.STONECUTTER -> return true
+ Material.CARTOGRAPHY_TABLE -> return true
+ Material.SMITHING_TABLE -> return true
+ Material.BLAST_FURNACE -> return true
+ Material.SMOKER -> return true
+ Material.FURNACE -> return true
+ Material.GRINDSTONE -> return true
+ Material.LOOM -> return true
+ Material.NOTE_BLOCK -> return true
+ Material.ENCHANTING_TABLE -> return true
+ Material.BREWING_STAND -> return true
+ Material.BELL -> return true
+ Material.BEACON -> return true
+ Material.LECTERN -> return true
+ Material.CHISELED_BOOKSHELF -> return true
+ Material.CHEST -> return true
+ Material.TRAPPED_CHEST -> return true
+ Material.BARREL -> return true
+ Material.ENDER_CHEST -> return true
+ Material.LEVER -> return true
+ Material.REPEATER -> return true
+ Material.COMPARATOR -> return true
+ Material.DISPENSER -> return true
+ Material.DROPPER -> return true
+ else -> {}
+ }
+ return false
+ }
+}
\ No newline at end of file