主题
作用
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 - 能把伤害来源识别为玩家
- 不是玩家自己打自己
- 攻击者没有绕过权限
就会直接取消这次伤害。
当前脚本能识别的玩家来源包括:
PlayerProjectile的shooterTameable的ownerTNTPrimed的source
启用与重载
修改这个脚本的配置文件后,通常执行:
text
/hncore reload scripts如果你改的是 config.yml 中的脚本目录名、脚本系统总开关等核心配置,则应执行:
text
/hncore reload联动说明
- 想同时限制拆放与交互:搭配 WorldProtect
- 想连爆炸破坏也一起压住:搭配 ExplosionProtect
- 想看全部脚本索引:看 GroovyScripts 总览
注意事项
- 当前脚本的 TNT 识别依赖
TNTPrimed的来源信息;如果来源丢失或无法识别,就不会强行归属给某位玩家 - 它的目标是关闭玩家互伤,不会顺带处理方块保护、爆炸破坏或环境伤害
- 如果你只想保护主城、大厅、等待区,建议用
worlds精确控制,而不是全服统一关闭 PvP
