Skip to content

作用

PvpControl 用于按世界阻止玩家之间互相造成伤害。

它不只拦截玩家近战,也会尽量识别常见玩家来源伤害,包括:

  • 玩家直接攻击
  • 玩家发射的投射物
  • 玩家驯服生物造成的伤害
  • 玩家来源 TNT 造成的伤害

默认配置:GroovyConfig/PvpControl.yml

如果你在 config.yml -> feature-scripts.config-directory 中改过脚本配置目录,请以实际目录为准。

配置示例

yml
# 是否启用该脚本
enabled: true

# 生效世界列表
# 留空 [] 表示所有世界都生效
# 示例:
# worlds:
#   - world
#   - world_nether
worlds: []

# 拥有该权限的玩家可绕过保护
# 留空 '' 表示无人可绕过(OP 也不会自动绕过,需脚本内另外处理)
bypass-permission: hncore.scripts.pvpcontrol.bypass

# 攻击被拦截时发送给攻击者的提示消息
# 留空 '' 表示不发送
# 支持颜色符号,如 &a &c
message: '&c当前世界已禁止 PvP!'

关键项说明

worlds

限定脚本生效的世界。

  • []:所有世界生效
  • 填世界名列表:只在这些世界生效

bypass-permission

设置绕过 PvP 限制的权限节点。

当前实现里,只要攻击者:

  • 拥有这个权限,或
  • 是 OP

就不会被脚本拦截。

message

攻击被拦截时发送给攻击者的提示消息。

当前实现默认只给攻击者发消息,不会反复给被攻击者刷提示。

实际行为

当前实现监听的是 EntityDamageByEntityEvent

只要满足:

  • 受害者是玩家
  • 脚本已启用
  • 受害者所在世界命中 worlds
  • 能把伤害来源识别为玩家
  • 不是玩家自己打自己
  • 攻击者没有绕过权限

就会直接取消这次伤害。

当前脚本能识别的玩家来源包括:

  • Player
  • Projectileshooter
  • Tameableowner
  • TNTPrimedsource

启用与重载

修改这个脚本的配置文件后,通常执行:

text
/hncore reload scripts

如果你改的是 config.yml 中的脚本目录名、脚本系统总开关等核心配置,则应执行:

text
/hncore reload

联动说明

注意事项

  • 当前脚本的 TNT 识别依赖 TNTPrimed 的来源信息;如果来源丢失或无法识别,就不会强行归属给某位玩家
  • 它的目标是关闭玩家互伤,不会顺带处理方块保护、爆炸破坏或环境伤害
  • 如果你只想保护主城、大厅、等待区,建议用 worlds 精确控制,而不是全服统一关闭 PvP

HN 系列插件文档