From cd9d0fe7ff31b16fbcdccca73e634fc4f4e0b76f Mon Sep 17 00:00:00 2001 From: xbaimiao <3104026189@qq.com> Date: Sun, 23 Jun 2024 15:00:36 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=90=E5=88=B6=E5=95=86=E5=BA=97=E8=B4=AD?= =?UTF-8?q?=E4=B9=B0=E7=82=B9=E5=87=BB=E9=A2=91=E7=8E=87=E4=B8=BA200ms?= =?UTF-8?q?=E4=B8=80=E6=AC=A1(=E9=98=B2=E6=AD=A2=E8=BF=9E=E7=82=B9?= =?UTF-8?q?=E5=99=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- gradle.properties | 2 +- .../xbaimiao/shoppro/core/shop/ShopImpl.kt | 24 +++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 1a190b1..f70d316 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -20,7 +20,7 @@ taboolib { name("xbaimiao") } val bukkitNodes = bukkitNodes as MutableMap - bukkitNodes["update-info"] = "添加API 可供其他插件添加物品解析" + bukkitNodes["update-info"] = "限制商店购买点击频率为200ms一次(防止连点器)" } env { install(NMS_UTIL, UI) diff --git a/gradle.properties b/gradle.properties index 3507b5c..1b4d7f4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,2 +1,2 @@ group=com.github.xbaimiao.shoppro -version=1.3.1-SNAPSHOT +version=1.3.2-SNAPSHOT diff --git a/src/main/kotlin/com/github/xbaimiao/shoppro/core/shop/ShopImpl.kt b/src/main/kotlin/com/github/xbaimiao/shoppro/core/shop/ShopImpl.kt index b99a54c..47225ea 100644 --- a/src/main/kotlin/com/github/xbaimiao/shoppro/core/shop/ShopImpl.kt +++ b/src/main/kotlin/com/github/xbaimiao/shoppro/core/shop/ShopImpl.kt @@ -23,11 +23,26 @@ import taboolib.platform.util.giveItem import taboolib.platform.util.hasItem import taboolib.platform.util.sendLang import taboolib.platform.util.takeItem +import java.util.* import java.util.concurrent.CopyOnWriteArrayList class ShopImpl(private val configuration: Configuration) : Shop() { private val slots = configuration.getStringList("slots").map { it.toCharArray().toList() } + private val clickCache = WeakHashMap() + + private fun canClick(player: Player): Boolean { + val lastClick = clickCache[player] + if (lastClick == null) { + clickCache[player] = System.currentTimeMillis() + return true + } + if (System.currentTimeMillis() - lastClick < 200) { + return false + } + clickCache[player] = System.currentTimeMillis() + return true + } private val items = ArrayList() @@ -104,6 +119,9 @@ class ShopImpl(private val configuration: Configuration) : Shop() { if (item is ShopItem) { if (getType() == ShopType.BUY) { onClick(item.key) { event -> + if (!canClick(player)) { + return@onClick + } if (event.clickType != ClickType.CLICK) { return@onClick } @@ -120,6 +138,9 @@ class ShopImpl(private val configuration: Configuration) : Shop() { } if (getType() == ShopType.SELL) { onClick(item.key) { event -> + if (!canClick(player)) { + return@onClick + } if (event.clickType != ClickType.CLICK) { return@onClick } @@ -144,6 +165,9 @@ class ShopImpl(private val configuration: Configuration) : Shop() { } } else { onClick(item.key) { + if (!canClick(player)) { + return@onClick + } item.exeCommands(player, 1) } }