Skip to main content

保护检查

QuickShop 会用到一个 Protection Checker 的机制阻止玩家在没有权限的地方(例如主城)创建商店。

工作原理?

玩家尝试创建商店时,QuickShop 会模拟一个 BlockBreakEvent,假装以玩家身份试图破坏方块。
如果任何插件拦截了这个事件,那么 QuickShop 不会让玩家创建商店。

副作用

部分不兼容 QuickShop 的插件可能会在玩家手持物品时意外触发,或频繁阻止商店创建。

解决插件冲突

当 QuickShop 在服务器管理员执行的操作过程中检测到可能的冲突时,管理员会收到如下消息:

detected

可以从这段文本中得知:

  • 插件名称(BreakTest
  • 插件监听类名(com.ghsotchu.test.breaktest.TestListener

要解决冲突,请将其添加至忽略列表:

shop:
# 检查保护时跳过的监听器
# 示例:
# - xx.xxx.xxx.xxxxx.BlockBreakListenerClass
# 这会跳过 xx.xxx.xxx.xxxxx.BlockBreakListenerClass 的监听器调用。
#
# - xx.xx.xxx.xxxxx
# 跳过以 xx.xx.xxx.xxxxx 开头的监听器类名。
#
# - @插件名称
# 跳过此插件的所有监听器。
#
# - 正则表达式
# 同样支持正则表达式。
protection-checking-listener-blacklist:
- ignored_listener

你也可以通过插件名称阻止对应插件收到我们的模拟事件:

shop:
protection-checking-listener-blacklist:
- "@BreakTest"

或者只阻止一个监听器,防止它收到我们的模拟事件:

shop:
protection-checking-listener-blacklist:
- "com.ghsotchu.test.breaktest.TestListener"

禁用保护检查

caution

非常不推荐禁用保护检查,有心玩家可能会利用 QuickShop 的机制锁上其他玩家在 Residence、Land、空岛、WorldGuard 区域、城镇、地皮甚至是主城中的容器!

直接关闭 config.yml 中的选项即可:

shop:
# 保护检查
# 发送虚拟的 BlockBreakEvent,检查你是否能破坏某个方块。
# 可能会与其他保护插件冲突!
# 兼容检查晚于该功能发送,若其与联动插件产生冲突,请禁用此设置
# 若不需要,请将其禁用,并使用下方的兼容设置。
protection-checking: true

或者只是明确地在某个世界禁用:

shop:
# 禁用保护检查的世界列表。
protection-checking-blacklist:
- disabled_world