配置说明
主配置文件为 plugins/LyAutoAttack/config.yml。修改配置后可由 OP 使用 /laa reload 重载。
重载会重新读取默认参数、分组、提示、命令、动作序列和光环效果。涉及前置插件状态、插件消息通道或服务端版本时,需要重启服务器。
状态文本
yaml
# 自动攻击状态文本
autoattack-enable-placeholer: "§a已启动"
autoattack-disable-placeholer: "§7未启动"| 配置项 | 默认值 | 说明 |
|---|---|---|
autoattack-enable-placeholer | §a已启动 | 自动攻击或坐标锁定处于开启状态时显示的文本 |
autoattack-disable-placeholer | §7未启动 | 自动攻击或坐标锁定处于关闭状态时显示的文本 |
这两个配置会影响 %laa_status% 和 %laa_lock% 的返回内容。配置中的 & 会转换为 Minecraft 颜色符号。
键名中的 placeholer 是插件实际读取的拼写,不要改为 placeholder。
伤害模式
yaml
attack-mode: 4attack-mode 默认值为 4。默认配置对四种模式的定义如下:
| 值 | 默认配置说明 |
|---|---|
1 | 兼容动作大师的伤害屏蔽 |
2 | 原版模拟伤害 |
3 | 原版 MM 造成伤害 |
4 | 兼容 SX 伤害 |
该配置用于 Minecraft 1.12.2 的自动攻击伤害路径。Minecraft 1.7.10 和 1.8 使用对应版本的原版实体攻击方法。
不同伤害、技能或属性插件对攻击事件的处理方式不同。如果自动攻击没有伤害、伤害计算不正确或重复触发伤害事件,可以依次测试不同模式。
攻击控制
yaml
# 发送原版挥手动作
send-swap-hand: true
# 自动攻击开启后接管攻击与伤害事件
plugin-switch-nodamagetick: true
# 无视目标受击冷却
force-attack: true
# 向 OP 显示命中目标的实体类型
debug-show-target-entity-type: false| 配置项 | 默认值 | 说明 |
|---|---|---|
send-swap-hand | true | 自动攻击时向客户端发送原版主手挥动动画 |
plugin-switch-nodamagetick | true | 自动攻击开启期间拦截玩家额外发出的普通攻击,并限制伤害事件的放行路径 |
force-attack | true | 即使目标仍有受击冷却,也继续执行本次自动攻击 |
debug-show-target-entity-type | false | 命中时向 OP 玩家显示目标的 Bukkit 实体类型名 |
原版挥手动作
send-swap-hand 不需要安装客户端模组,但发送动画数据包需要服务端安装并正常加载 ProtocolLib。
如果服务器中的动作、模型或战斗插件与原版挥手动画冲突,可以将该项关闭:
yaml
send-swap-hand: false受击冷却接管
开启 plugin-switch-nodamagetick 后,玩家处于自动攻击状态时,插件会拦截普通 USE_ENTITY 攻击包,并在伤害事件层限制额外伤害,只放行插件攻击上下文中的首条有效伤害。
插件还会处理 DragonCore 的交互攻击消息,包括 Bukkit 插件消息、ProtocolLib 自定义载荷和 Minecraft 1.12.2 Forge 数据包路径。
代码中为带有 doing-skill-damage metadata 的伤害来源保留了直接放行处理,用于兼容对应的技能伤害路径。
关闭该项后,玩家可以在自动攻击期间继续手动攻击,但可能出现自动攻击与手动攻击叠加、高频触发伤害或技能插件重复结算的问题。
强制攻击
force-attack 控制是否忽略目标的 noDamageTicks:
true:目标处于受击冷却时仍尝试攻击。false:只攻击当前没有受击冷却的目标。
实体过滤
yaml
filter-entities:
- "COW"
- "PLAYER"filter-entities 填写 Bukkit 实体类型名。列表中的实体不会成为自动攻击目标,类型名按服务端枚举名称填写,例如 COW、PLAYER。
插件还会固定排除以下目标:
- 盔甲架
ARMOR_STAND。 - NMS 类名以
EntityRidePig结尾的坐骑实体。 - NMS 类名以
EntityRideDragon结尾的坐骑实体。
不知道目标类型时,可以临时开启:
yaml
debug-show-target-entity-type: true由 OP 玩家触发一次有效自动攻击后,聊天栏会显示本次目标的实体类型。确认类型后,将其写入 filter-entities,再关闭调试开关。
默认攻击参数
没有匹配到自定义分组时,玩家使用 default-* 配置。
yaml
default-range: 3.5
default-speed: 5
default-max: 1
default-knockback: 0
default-mode: "near"| 配置项 | 默认值 | 说明 |
|---|---|---|
default-range | 3.5 | 自动攻击索敌范围 |
default-speed | 5 | 自动攻击任务间隔,单位为 tick |
default-max | 1 | 每次任务最多选取的目标数量 |
default-knockback | 0 | 自动攻击开启后设置的抗击退值 |
default-mode | near | 默认攻击模式,支持 near 和 all |
范围限制
启用自动攻击时,最终范围会被限制在 0 到 64:
- 小于
0时按0处理。 - 大于
64时按64处理。
目标搜索的垂直候选区域固定为玩家上下 3 格,并会继续按照玩家与目标之间的实际距离筛选。
攻击间隔
default-speed 和分组中的 speed 使用 tick:
| 配置值 | 实际间隔 |
|---|---|
20 | 1 秒 |
10 | 0.5 秒 |
5 | 0.25 秒 |
经过属性加成计算后,最终攻击间隔最低为 1 tick。
最大目标数
default-max 和分组中的 max 应至少设置为 1。最终值为 0 或负数时,本次搜索不会取得攻击目标。
near 模式只会攻击最近的一个目标,且 %laa_max% 在该模式下固定显示 1。all 模式的目标数量受 max 限制。
攻击模式
| 模式 | 效果 |
|---|---|
near | 每次任务攻击筛选结果中最近的一个目标 |
all | 每次任务按距离从近到远攻击多个目标,数量不超过 max |
目标会按照与玩家的距离从近到远排序。死亡实体、过滤列表中的实体以及固定排除的坐骑、盔甲架不会成为有效目标。
开关提示与命令
yaml
default-start-message:
- "你开始了官方杀戮"
default-start-commands:
- "[console]tell {player} 你开启了官方杀戮"
default-stop-message:
- "你停止了官方杀戮"
default-stop-commands:
- "[console]tell {player} 你停止了官方杀戮"| 配置项 | 触发时间 |
|---|---|
default-start-message | 自动攻击开启时向玩家发送 |
default-start-commands | 自动攻击开启时执行 |
default-stop-message | 自动攻击关闭时向玩家发送 |
default-stop-commands | 自动攻击关闭时执行 |
消息文本中的 & 会转换为 Minecraft 颜色符号。
命令支持以下执行前缀:
| 前缀 | 执行身份 |
|---|---|
[console] | 由服务端控制台执行 |
[op] | 临时授予玩家 OP 后,以玩家身份执行;完成后恢复原状态 |
[player] | 由玩家自身执行 |
未填写 [console] 或 [op] 的命令也会按玩家身份执行。建议始终明确填写前缀,避免配置含义不清。
命令中的 {player} 会替换为玩家名:
yaml
default-start-commands:
- "[console]say {player} 开启了自动攻击"
- "[player]me 开启了自动攻击"PlaceholderAPI 属性加成
yaml
attribute-addition:
enable: false
range: "%ap_attack:min%"
max: "%ap_attack:min%"
speed: "%ap_attack:min%"
knockback: "%ap_attack:min%"该功能需要 PlaceholderAPI 正常加载。启用后,插件会针对每名玩家解析配置中的变量,并将结果加入该玩家匹配到的基础参数。
| 配置项 | 计算方式 |
|---|---|
attribute-addition.enable | 是否启用属性加成 |
attribute-addition.range | 基础范围 + 基础范围 × 变量值 × 0.01 |
attribute-addition.max | 基础目标数 + 变量值的整数部分 |
attribute-addition.speed | 基础间隔 ÷ (1 + 变量值 × 0.01),结果转换为整数 tick |
attribute-addition.knockback | 基础抗击退 + 变量值的整数部分 |
例如基础间隔为 20 tick,速度变量返回 100 时:
text
20 ÷ (1 + 100 × 0.01) = 10 tick变量必须解析为可直接转换的纯数字。颜色符号、单位、百分号文本、空值或其他非数字内容都会解析失败。失败时该项按 0 处理,并在控制台输出玩家名、变量和原始解析值。
范围加成计算完成后仍会限制在 0 到 64,攻击间隔计算完成后最低为 1 tick。
抗击退
yaml
strengthen-knockbak-mode: false
persistent-knockback: false| 配置项 | 默认值 | 说明 |
|---|---|---|
strengthen-knockbak-mode | false | 开启增强抗击退,符合条件时直接取消玩家速度变化 |
persistent-knockback | false | 玩家加入服务器时立即按照匹配分组应用抗击退 |
键名中的 knockbak 是插件实际读取的拼写,不要改为 knockback。
普通抗击退
关闭 strengthen-knockbak-mode 时,插件会修改玩家的原版击退抗性属性:
- Minecraft 1.7.10 和 1.8 修改对应 NMS 击退属性。
- Minecraft 1.12.2 修改
GENERIC_KNOCKBACK_RESISTANCE。
关闭自动攻击时,如果 persistent-knockback 为 false,插件会将该属性恢复为 0。
增强抗击退
开启 strengthen-knockbak-mode 后,当玩家最终抗击退值大于 0 时,插件会取消 PlayerVelocityEvent 并将速度设为零。
这种模式会同时阻止部分技能插件通过速度实现的移动效果,例如击飞、翻滚、冲刺或位移。使用相关技能前应先测试兼容性。
持久抗击退
开启 persistent-knockback 后:
- 玩家加入服务器时按照当前匹配分组应用抗击退。
- 关闭自动攻击时不会自动清除抗击退。
- 增强抗击退模式不再要求玩家先开启自动攻击。
自动开启
插件可以在玩家跨世界、加入服务器和重生后延迟检查条件。条件全部通过时,自动开启攻击。
跨世界
yaml
changeworld-auto-autoattack-enable: false
changeworld-auto-attack-delay: 80
changeworld-auto-autoattack-condition:
- "papi:{%laa_status% == §a已启动}"
- "permission:{vip.1}"
- "nopermission:{vip.1}"| 配置项 | 默认值 | 说明 |
|---|---|---|
changeworld-auto-autoattack-enable | false | 是否在玩家跨世界后检查条件并自动开启 |
changeworld-auto-attack-delay | 80 | 跨世界后的检查延迟,单位 tick |
changeworld-auto-autoattack-condition | 配置列表 | 自动开启所需条件 |
如果 changeworld-auto-autoattack-enable 为 false,玩家跨世界时会直接关闭当前自动攻击。
加入服务器
默认配置文件中提供:
yaml
join-auto-autoattack-enable: false
join-auto-attack-delay: 20
join-auto-autoattack-condition:
- "papi:{%player_level% >= 0}"
- "permission:{vip.1}"
- "nopermission:{vip.1}"| 配置项 | 默认值 | 说明 |
|---|---|---|
join-auto-autoattack-enable | false | 是否在玩家加入服务器后检查条件并自动开启 |
join-auto-attack-delay | 20 | 默认配置中提供的加入延迟键 |
join-auto-autoattack-condition | 配置列表 | 自动开启所需条件 |
配置键不一致
当前代码实际读取的加入延迟键是 join-auto-autoattack-delay,而默认配置提供的是 join-auto-attack-delay。因此修改默认键 join-auto-attack-delay 不会改变实际延迟,未配置代码读取的键时会回退为 20 tick。
需要自定义加入延迟时,应额外添加:
yaml
join-auto-autoattack-delay: 40重生
yaml
respawn-auto-autoattack-enable: false
respawn-auto-attack-delay: 20
respawn-auto-autoattack-condition:
- "papi:{%laa_status% == §a已启动}"
- "permission:{vip.1}"
- "nopermission:{vip.1}"| 配置项 | 默认值 | 说明 |
|---|---|---|
respawn-auto-autoattack-enable | false | 是否在玩家重生后检查条件并自动开启 |
respawn-auto-attack-delay | 20 | 重生后的检查延迟,单位 tick |
respawn-auto-autoattack-condition | 配置列表 | 自动开启所需条件 |
玩家死亡时,插件会先关闭自动攻击。开启重生自动攻击后,玩家重生并通过条件检查时才会重新开启。
条件格式
自动开启和分组配置使用相同的基础条件格式。一个条件列表中的条件必须全部通过。
| 格式 | 说明 |
|---|---|
papi:{%player_level% >= 10} | 解析 PlaceholderAPI 变量后判断表达式 |
permission:{vip.1} | 玩家必须实际拥有指定权限 |
nopermission:{vip.1} | 玩家不能拥有指定权限 |
name:{Origin#MainHand@&a测试武器} | 指定槽位物品的显示名必须完全匹配 |
papi 表达式支持:
| 类型 | 支持内容 |
|---|---|
| 比较运算 | >、>=、<、<=、==、!= |
| 逻辑运算 | &&、|| |
| 数学运算 | +、-、*、/、括号 |
| 字符串比较 | 使用单引号或双引号包围字符串,并通过 == 或 != 比较 |
| 布尔值 | 没有比较运算符时,只有 true 会通过 |
使用 papi 条件时需要 PlaceholderAPI 正常加载。
权限条件
权限条件不会因为玩家是 OP 就直接通过。对于 OP 玩家,插件会遍历玩家的有效权限列表,只有找到完全相同且值为 true 的权限节点时,permission 条件才会通过。
物品名称条件
格式为:
text
name:{插件来源#槽位信息@物品显示名}已在代码中实现的物品来源如下:
| 来源 | 写法 |
|---|---|
| DragonCore | DragonCore#槽位名 |
| GermPlugin | GermPlugin#槽位名 |
| LyInventoryReload | LyInventoryReload#背包ID#类型 |
| YeeJewelry | YeeJewelry#背包ID#槽位ID |
| 原版背包 | Minecraft#槽位ID |
| 原版主手 | Origin#MainHand |
| 原版副手 | Origin#OffHand |
| 原版头盔 | Origin#Helmet |
| 原版胸甲 | Origin#ChestPlate |
| 原版护腿 | Origin#Legging |
| 原版靴子 | Origin#Boots |
示例:
yaml
condition:
- "name:{Origin#MainHand@&a测试武器}"
- "name:{Minecraft#0@&6背包物品}"
- "name:{LyInventoryReload#饰品#项链@&d稀有项链}"物品必须存在物品元数据和显示名,显示名需要完全一致。条件中的 & 会转换为颜色符号。
默认配置注释中还出现了 APInventory 和 PXRPG 写法,但当前提供的分组匹配代码没有对应处理分支,因此本页不将它们列为可用来源。
分组配置
group 用于为不同玩家设置范围、速度、目标数、模式、抗击退、提示、命令、动作序列和光环效果。
插件会按照配置文件中的顺序从上往下检查分组,使用第一个全部条件通过的分组。没有任何自定义分组通过时,使用 default-* 参数。
yaml
group:
"vip1":
condition:
- "permission:{vip.1}"
range: 5
max: 2
speed: 20
knockback: 0
mode: "all"
animation-sequence: []
start-message:
- "你开始了官方杀戮"
start-commands:
- "[console]tell {player} 你开启了官方杀戮"
stop-message:
- "你停止了官方杀戮"
stop-commands:
- "[console]tell {player} 你停止了官方杀戮"
arua-effect:
off-color: "#00BFFF"
on-color: "#FF4040"
line-width: 6.0
offset-y: 0.2
alpha: 255
hit-hold-ms: 500
fade-back-ms: 500| 分组配置项 | 缺省值 | 说明 |
|---|---|---|
condition | 空列表 | 分组匹配条件,列表内条件全部通过才会命中 |
range | 1 | 索敌范围 |
max | 1 | 最大候选目标数 |
speed | 20 | 攻击任务间隔,单位 tick |
knockback | 0 | 抗击退值 |
mode | near | 攻击模式 |
animation-sequence | 空列表 | 命中后的动作序列 |
start-message | 空列表 | 开启时发送的消息 |
start-commands | 空列表 | 开启时执行的命令 |
stop-message | 空列表 | 关闭时发送的消息 |
stop-commands | 空列表 | 关闭时执行的命令 |
arua-effect | 默认光环配置 | 当前分组的客户端光环参数 |
空条件列表会直接通过,因此不要把无条件分组放在需要继续匹配的分组前面。高级权限、特殊装备或更严格的条件应放在较前位置。
玩家开启自动攻击时会确定并记录当前分组。修改玩家权限或装备不会立即替换已经记录的分组,需要关闭后重新开启自动攻击,或通过其他流程重新调用开启操作。
光环效果
光环效果需要玩家客户端安装配套 LyAutoAttackMod。服务端会通过 lyautoattack 插件消息通道发送开启、关闭和命中状态。
yaml
default-arua-effect:
off-color: "#00BFFF"
on-color: "#FF4040"
line-width: 6.0
offset-y: 0.2
alpha: 255
hit-hold-ms: 500
fade-back-ms: 500| 配置项 | 默认值 | 说明 |
|---|---|---|
off-color | #00BFFF | 自动攻击开启后的常态颜色 |
on-color | #FF4040 | 有效命中后的高亮颜色 |
line-width | 6.0 | 光环虚线线宽 |
offset-y | 0.2 | 光环相对玩家脚底的垂直偏移 |
alpha | 255 | 透明度参数,发送时最低限制为 0 |
hit-hold-ms | 500 | 命中颜色保持时间,单位毫秒 |
fade-back-ms | 500 | 渐变回常态颜色的时间,单位毫秒 |
分组可以使用 arua-effect 覆盖默认值。分组中缺少的子项会回退到 default-arua-effect 对应值。
arua 是插件实际读取的键名,不要改为 aura。
客户端模组不是服务端自动攻击功能的必要条件。没有安装模组时,自动攻击仍可运行,但不会显示配套光环。
动作序列
yaml
default-animation-sequence:
- "动作1"
- "delay:2000"
- "动作2"分组中可通过 animation-sequence 设置独立序列:
yaml
group:
"vip1":
animation-sequence:
- "攻击动作A"
- "delay:500"
- "攻击动作B"动作序列会保存当前播放位置,并在产生有效自动攻击后依次读取。到达列表末尾后从第一项重新开始。
| 内容 | 说明 |
|---|---|
| 普通字符串 | 作为动作名称发送给已安装的动作插件 |
delay:毫秒 | 本次不播放动作,并设置下一次允许播放动作的时间 |
延迟指令不区分大小写,冒号两侧允许空格,但毫秒部分必须是非负整数。例如:
yaml
default-animation-sequence:
- "动作1"
- "delay: 2000"
- "动作2"动作插件选择顺序如下:
- 安装 GermPlugin 时,向同世界玩家发送萌芽弯曲动作和模型动作。
- 未安装 GermPlugin、但安装 DragonCore 时,发送 DragonCore 玩家动画。
- 两者都未安装时,不发送动作。
当前动作序列执行逻辑位于 Minecraft 1.12.2 攻击任务中。列表留空或删除时不播放动作。
完整默认配置结构
以下示例整理了当前默认文件中的主要配置结构,并补充了代码实际读取的加入延迟键:
yaml
autoattack-enable-placeholer: "§a已启动"
autoattack-disable-placeholer: "§7未启动"
attack-mode: 4
attribute-addition:
enable: false
range: "%ap_attack:min%"
max: "%ap_attack:min%"
speed: "%ap_attack:min%"
knockback: "%ap_attack:min%"
strengthen-knockbak-mode: false
persistent-knockback: false
send-swap-hand: true
plugin-switch-nodamagetick: true
force-attack: true
debug-show-target-entity-type: false
filter-entities:
- "COW"
- "PLAYER"
changeworld-auto-autoattack-enable: false
changeworld-auto-attack-delay: 80
changeworld-auto-autoattack-condition:
- "papi:{%laa_status% == §a已启动}"
join-auto-autoattack-enable: false
join-auto-attack-delay: 20
join-auto-autoattack-delay: 20
join-auto-autoattack-condition:
- "papi:{%player_level% >= 0}"
respawn-auto-autoattack-enable: false
respawn-auto-attack-delay: 20
respawn-auto-autoattack-condition:
- "papi:{%laa_status% == §a已启动}"
default-range: 3.5
default-speed: 5
default-max: 1
default-knockback: 0
default-mode: "near"
default-start-message:
- "你开始了官方杀戮"
default-start-commands:
- "[console]tell {player} 你开启了官方杀戮"
default-stop-message:
- "你停止了官方杀戮"
default-stop-commands:
- "[console]tell {player} 你停止了官方杀戮"
default-arua-effect:
off-color: "#00BFFF"
on-color: "#FF4040"
line-width: 6.0
offset-y: 0.2
alpha: 255
hit-hold-ms: 500
fade-back-ms: 500
default-animation-sequence: []
group:
"vip1":
condition:
- "permission:{vip.1}"
range: 5
max: 2
speed: 20
knockback: 0
mode: "all"
animation-sequence: []
start-message:
- "你开始了官方杀戮"
start-commands:
- "[console]tell {player} 你开启了官方杀戮"
stop-message:
- "你停止了官方杀戮"
stop-commands:
- "[console]tell {player} 你停止了官方杀戮"
arua-effect:
off-color: "#00BFFF"
on-color: "#FF4040"
line-width: 6.0
offset-y: 0.2
alpha: 255
hit-hold-ms: 500
fade-back-ms: 500