Skip to content

配置说明

主配置文件为 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: 4

attack-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-handtrue自动攻击时向客户端发送原版主手挥动动画
plugin-switch-nodamageticktrue自动攻击开启期间拦截玩家额外发出的普通攻击,并限制伤害事件的放行路径
force-attacktrue即使目标仍有受击冷却,也继续执行本次自动攻击
debug-show-target-entity-typefalse命中时向 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 实体类型名。列表中的实体不会成为自动攻击目标,类型名按服务端枚举名称填写,例如 COWPLAYER

插件还会固定排除以下目标:

  • 盔甲架 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-range3.5自动攻击索敌范围
default-speed5自动攻击任务间隔,单位为 tick
default-max1每次任务最多选取的目标数量
default-knockback0自动攻击开启后设置的抗击退值
default-modenear默认攻击模式,支持 nearall

范围限制

启用自动攻击时,最终范围会被限制在 064

  • 小于 0 时按 0 处理。
  • 大于 64 时按 64 处理。

目标搜索的垂直候选区域固定为玩家上下 3 格,并会继续按照玩家与目标之间的实际距离筛选。

攻击间隔

default-speed 和分组中的 speed 使用 tick:

配置值实际间隔
201 秒
100.5 秒
50.25 秒

经过属性加成计算后,最终攻击间隔最低为 1 tick。

最大目标数

default-max 和分组中的 max 应至少设置为 1。最终值为 0 或负数时,本次搜索不会取得攻击目标。

near 模式只会攻击最近的一个目标,且 %laa_max% 在该模式下固定显示 1all 模式的目标数量受 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 处理,并在控制台输出玩家名、变量和原始解析值。

范围加成计算完成后仍会限制在 064,攻击间隔计算完成后最低为 1 tick。

抗击退

yaml
strengthen-knockbak-mode: false
persistent-knockback: false
配置项默认值说明
strengthen-knockbak-modefalse开启增强抗击退,符合条件时直接取消玩家速度变化
persistent-knockbackfalse玩家加入服务器时立即按照匹配分组应用抗击退

键名中的 knockbak 是插件实际读取的拼写,不要改为 knockback

普通抗击退

关闭 strengthen-knockbak-mode 时,插件会修改玩家的原版击退抗性属性:

  • Minecraft 1.7.10 和 1.8 修改对应 NMS 击退属性。
  • Minecraft 1.12.2 修改 GENERIC_KNOCKBACK_RESISTANCE

关闭自动攻击时,如果 persistent-knockbackfalse,插件会将该属性恢复为 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-enablefalse是否在玩家跨世界后检查条件并自动开启
changeworld-auto-attack-delay80跨世界后的检查延迟,单位 tick
changeworld-auto-autoattack-condition配置列表自动开启所需条件

如果 changeworld-auto-autoattack-enablefalse,玩家跨世界时会直接关闭当前自动攻击。

加入服务器

默认配置文件中提供:

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-enablefalse是否在玩家加入服务器后检查条件并自动开启
join-auto-attack-delay20默认配置中提供的加入延迟键
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-enablefalse是否在玩家重生后检查条件并自动开启
respawn-auto-attack-delay20重生后的检查延迟,单位 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:{插件来源#槽位信息@物品显示名}

已在代码中实现的物品来源如下:

来源写法
DragonCoreDragonCore#槽位名
GermPluginGermPlugin#槽位名
LyInventoryReloadLyInventoryReload#背包ID#类型
YeeJewelryYeeJewelry#背包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空列表分组匹配条件,列表内条件全部通过才会命中
range1索敌范围
max1最大候选目标数
speed20攻击任务间隔,单位 tick
knockback0抗击退值
modenear攻击模式
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-width6.0光环虚线线宽
offset-y0.2光环相对玩家脚底的垂直偏移
alpha255透明度参数,发送时最低限制为 0
hit-hold-ms500命中颜色保持时间,单位毫秒
fade-back-ms500渐变回常态颜色的时间,单位毫秒

分组可以使用 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"

动作插件选择顺序如下:

  1. 安装 GermPlugin 时,向同世界玩家发送萌芽弯曲动作和模型动作。
  2. 未安装 GermPlugin、但安装 DragonCore 时,发送 DragonCore 玩家动画。
  3. 两者都未安装时,不发送动作。

当前动作序列执行逻辑位于 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