@@ -5,7 +5,10 @@ import me.arasple.mc.trchat.module.adventure.toAdventure
55import me.arasple.mc.trchat.module.internal.TrChatBukkit
66import me.arasple.mc.trchat.util.color.MessageColors
77import me.arasple.mc.trchat.util.parseSimple
8+ import me.arasple.mc.trchat.util.data
9+ import me.arasple.mc.trchat.util.session
810import org.bukkit.entity.HumanEntity
11+ import org.bukkit.entity.Player
912import org.bukkit.event.inventory.InventoryType
1013import org.bukkit.event.inventory.PrepareAnvilEvent
1114import org.bukkit.inventory.meta.ItemMeta
@@ -18,6 +21,8 @@ import taboolib.library.reflex.Reflex.Companion.invokeMethod
1821import taboolib.module.configuration.ConfigNode
1922import taboolib.platform.util.isAir
2023import taboolib.platform.util.modifyMeta
24+ import taboolib.platform.util.sendLang
25+ import me.arasple.mc.trchat.module.internal.data.PlayerData
2126
2227/* *
2328 * @author ItsFlicker
@@ -38,17 +43,34 @@ object ListenerAnvilChange {
3843 var simple = false
3944 private set
4045
46+ @ConfigNode(" Chat.Permission-Check.Anvil" , " settings.yml" )
47+ var anvilPermissionCheck = false
48+
4149 @Suppress(" Deprecation" )
4250 @SubscribeEvent(priority = EventPriority .HIGHEST , ignoreCancelled = true )
4351 fun onAnvilCraft (e : PrepareAnvilEvent ) {
4452 // e.view -> AnvilView
4553 // java.lang.IncompatibleClassChangeError: Found class org.bukkit.inventory.InventoryView, but interface was expected
46- val p = e.invokeMethod<Any >(" getView" )!! .invokeMethod<HumanEntity >(" getPlayer" )!!
54+ val p = e.invokeMethod<Any >(" getView" )!! .invokeMethod<HumanEntity >(" getPlayer" )!! as ? Player ? : return
4755 val result = e.result
4856
4957 if (e.inventory.type != InventoryType .ANVIL || result.isAir()) {
5058 return
5159 }
60+
61+ val left = e.inventory.getItem(0 ) // 左侧输入槽物品
62+ val right = e.inventory.getItem(1 ) // 右侧输入槽物品
63+ val resultName = result.itemMeta?.displayName
64+ val leftName = left?.itemMeta?.displayName
65+ val rightName = right?.itemMeta?.displayName
66+ val isRenaming = resultName != null && resultName != leftName && resultName != rightName
67+
68+ if (anvilPermissionCheck && isRenaming && ! canSpeak(p)) {
69+ e.result = null
70+ p.sendLang(" Anvil-Edit-No-Permission" )
71+ return
72+ }
73+
5274 result.modifyMeta<ItemMeta > {
5375 if (! hasDisplayName()) {
5476 return @modifyMeta
@@ -64,4 +86,11 @@ object ListenerAnvilChange {
6486 }
6587 e.result = result
6688 }
89+
90+ private fun canSpeak (player : Player ): Boolean {
91+ if (TrChatBukkit .isGlobalMuting && ! player.hasPermission(" trchat.bypass.globalmute" )) return false
92+ if (player.data.isMuted) return false
93+ val channel = player.session.getChannel()
94+ return channel == null || channel.canSpeak(player)
95+ }
6796}
0 commit comments