LyAutoAttack
LyAutoAttack 是一款自动攻击类 Bukkit 插件。玩家开启杀戮后,插件会按当前分组的索敌范围、攻击间隔、目标上限和攻击模式扫描附近实体,并以玩家身份触发攻击。
插件适用于挂机刷怪、副本清场、职业属性联动和权限分档等玩法。不同玩家可以通过权限、PlaceholderAPI 表达式和指定槽位物品匹配不同分组,获得独立的攻击参数、抗击退效果、提示消息、命令、动作序列和客户端光环样式。
插件信息
| 项目 | 内容 |
|---|---|
| 插件名 | LyAutoAttack |
| 版本 | 1.2.2 |
| 作者 | Liyuan |
| 主命令 | /laa |
| Java 版本 | Java 8 |
| 声明的软依赖 | PlaceholderAPI、ProtocolLib |
| 支持版本 | 1.7.10、1.8.x、1.12.2 |
服务端版本限制
插件会在启动阶段读取服务端版本。当前代码仅处理 Minecraft 1.7、1.8 和 1.12,其他版本会提示不受支持并停止启用。
依赖与兼容插件
| 插件或客户端 | 用途 | 说明 |
|---|---|---|
ProtocolLib | 攻击包拦截、摆臂动作 | plugin.yml 中声明为软依赖,但攻击接管逻辑会直接使用其 API,建议作为运行前置安装 |
PlaceholderAPI | 插件变量、条件表达式、属性加成 | plugin.yml 中声明为软依赖;缺少后无法完整使用分组条件、自动开启条件和属性加成 |
DragonCore | 槽位物品条件、玩家动作 | 安装后可匹配龙核槽位,并自动播放动作序列中的动作 |
GermPlugin | 槽位物品条件、玩家动作 | 安装后可匹配萌芽槽位;播放动作时优先使用萌芽动作接口 |
LyInventoryReload | 自定义背包物品条件 | 用于读取指定背包和类型中的物品 |
YeeJewelry | 饰品槽位物品条件 | 用于读取指定饰品背包槽位中的物品 |
LyAutoAttackMod | 客户端范围光环 | 接收开启、关闭和命中消息,显示范围、颜色与命中渐变效果 |
PlaceholderAPI
插件即使在未检测到 PlaceholderAPI 时仍会继续启动,但配置中的 papi:{...} 条件、属性加成和 %laa_*% 变量依赖 PlaceholderAPI。需要使用这些功能时必须安装并正常加载 PlaceholderAPI。
核心功能
| 功能 | 说明 |
|---|---|
| 自动索敌 | 按配置间隔扫描玩家附近的生物实体,并优先处理距离最近的目标 |
| 水平范围限制 | 使用配置范围搜索 X、Z 方向目标,并将垂直搜索高度限制为 3 格 |
| 两种攻击模式 | near 每次攻击最近目标;all 按距离攻击多个目标 |
| 分组匹配 | 开启杀戮时从上到下检查分组,使用第一个满足全部条件的分组 |
| 默认分组 | 没有自定义分组符合时,自动使用 default-* 配置组成的默认分组 |
| 条件表达式 | 支持 PlaceholderAPI 比较、权限、反向权限和指定槽位物品名称条件 |
| 属性加成 | 可读取数字变量,对攻击范围、目标数量、攻击间隔和抗击退数值进行增幅 |
| 受击冷却控制 | 可无视目标受击冷却强制攻击,也可在杀戮期间屏蔽玩家额外手动伤害 |
| 普攻路径拦截 | 开启伤害接管后,拦截原版攻击包、DragonCore 交互攻击和对应伤害事件 |
| 抗击退 | 支持杀戮期间抗击退、进服持续抗击退和增强抗击退模式 |
| 实体过滤 | 可按 Bukkit 实体类型排除目标;盔甲架与插件识别的坐骑实体会被内置过滤 |
| 自动开启 | 支持玩家进服、重生和跨世界后延迟检查条件并自动开启杀戮 |
| 状态清理 | 玩家死亡、退出时关闭杀戮;未启用跨世界自动开启时,跨世界会关闭杀戮 |
| 坐标锁定 | OP 可锁定在线玩家的 X、Y、Z 坐标,玩家仍可改变视角 |
| 动作序列 | 攻击命中后按顺序轮播 DragonCore 或 GermPlugin 动作,支持毫秒延迟项 |
| 客户端光环 | 向配套客户端发送攻击范围、颜色、线宽、高度、透明度和命中渐变参数 |
| 调试提示 | 可在攻击命中时向 OP 显示本次目标的 Bukkit 实体类型 |
| Java API | 提供开启、关闭、状态查询以及单独启用或关闭抗击退的方法 |
| 指令补全 | 根据发送者身份补全可用子命令,并为管理指令补全在线玩家名 |
攻击机制
玩家开启杀戮时,插件会匹配分组并计算本次运行使用的参数。参数会保存到玩家运行数据中,直到杀戮关闭后清除。
目标按与玩家的距离从近到远排序。配置范围最大会被限制为 64,小于 0 时会修正为 0;最终攻击间隔不能低于 1 tick。
| 模式 | 行为 |
|---|---|
near | 每轮选择距离最近的一个目标,目标数量固定表现为 1 |
all | 每轮按距离攻击多个有效目标,数量受当前 max 限制 |
攻击目标必须是存活的 LivingEntity,并通过实体过滤规则。默认配置额外过滤 COW 和 PLAYER,服务器可以在 filter-entities 中修改列表。
伤害模式
attack-mode 用于选择 Minecraft 1.12.2 下的攻击实现。
| 值 | 配置注释中的用途 | 实际行为 |
|---|---|---|
1 | 兼容动作大师伤害屏蔽 | 清除目标受击冷却,并以 NMS 伤害源造成 1 点伤害 |
2 | 原版模拟伤害 | 清除目标受击冷却,并通过 Bukkit API 造成 0.01 点伤害 |
3 | 原版 MM 造成伤害 | 通过 Bukkit API 造成 1 点伤害,不主动清除受击冷却 |
4 | 兼容 SX 伤害 | 清除目标受击冷却,并调用玩家原版 NMS 攻击 |
Minecraft 1.7.10 和 1.8.x 使用对应版本的原版 NMS 玩家攻击方法,不读取上述四种分支。
伤害接管
开启 plugin-switch-nodamagetick 后,玩家处于杀戮状态时,插件会拦截普通攻击数据包和额外伤害事件,只放行本插件当前攻击上下文中的首条真实伤害。
该机制还处理以下攻击路径:
- 原版
USE_ENTITY攻击包。 - DragonCore 的
dragoncore:main交互消息。 - Minecraft 1.12.2 Forge 连接中的 DragonCore 攻击消息。
- 玩家发射的弹射物伤害事件。
- 带有
doing-skill-damagemetadata 的伤害会直接放行。
force-attack 开启后,即使目标仍有受击冷却,自动攻击也会继续触发。关闭后,仅攻击受击冷却为 0 的目标。
分组与条件
自定义分组位于 config.yml 的 group 节点。插件按配置顺序从上到下匹配,首个满足全部条件的分组立即生效,不再检查后续分组。
| 条件格式 | 用途 |
|---|---|
papi:{表达式} | 解析 PlaceholderAPI 变量并判断表达式结果 |
permission:{权限节点} | 玩家必须实际拥有指定权限 |
nopermission:{权限节点} | 玩家必须没有指定权限 |
name:{来源#槽位@物品名} | 指定槽位中的物品显示名必须完全一致 |
papi 表达式支持 >、<、>=、<=、==、!=,并可使用 && 和 || 组合条件。数值部分支持 +、-、*、/ 和括号;字符串相等比较可以使用单引号或双引号包裹。
权限条件不会因为玩家是 OP 而自动通过。OP 玩家必须在有效权限列表中实际拥有对应节点。
物品名称条件为完整名称匹配,配置中的 & 会转换为 Minecraft 颜色符号。
可匹配的物品来源
| 来源 | 格式 |
|---|---|
| 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 |
配置文件注释还列出了 APInventory 和 PXRPG 格式,但当前提供的分组匹配代码中没有对应处理分支,不能确认其在此版本可用。
属性加成
启用 attribute-addition.enable 后,插件会在玩家开启杀戮时解析四个 PlaceholderAPI 数字变量。变量解析失败时会在控制台输出玩家名、变量和原始解析值,并按 0 处理。
| 属性 | 计算方式 |
|---|---|
| 范围 | 基础范围 + 基础范围 × 变量值 × 0.01 |
| 数量 | 基础数量 + 变量整数部分 |
| 攻击间隔 | 基础间隔 ÷ (1 + 变量值 × 0.01) |
| 抗击退 | 基础抗击退 + 变量整数部分 |
配置中的属性变量必须返回纯数字。范围最终限制在 0 至 64,攻击间隔最终最低为 1 tick。near 模式的变量显示和实际单轮目标数量仍为 1。
自动开启规则
插件可以在以下事件发生后,延迟检查条件并开启杀戮:
| 事件 | 开关 | 延迟配置 | 条件列表 |
|---|---|---|---|
| 玩家进服 | join-auto-autoattack-enable | join-auto-autoattack-delay | join-auto-autoattack-condition |
| 玩家重生 | respawn-auto-autoattack-enable | respawn-auto-attack-delay | respawn-auto-autoattack-condition |
| 玩家跨世界 | changeworld-auto-autoattack-enable | changeworld-auto-attack-delay | changeworld-auto-autoattack-condition |
延迟单位为 tick,20 tick 约为 1 秒。条件列表支持 papi、permission 和 nopermission,所有条件都满足后才会开启。
如果关闭跨世界自动开启,玩家跨世界时会直接停止当前杀戮。玩家死亡和退出服务器时也会停止杀戮。Minecraft 1.12.2 玩家切换到旁观模式时会立即停止,并且旁观模式下无法开启杀戮。
抗击退
| 配置 | 说明 |
|---|---|
default-knockback / group.*.knockback | 当前分组的抗击退数值 |
strengthen-knockbak-mode | 通过取消玩家速度事件实现增强抗击退 |
persistent-knockback | 玩家进服时启用抗击退,关闭杀戮后不清除 |
普通模式会修改玩家的原版击退抗性属性。增强模式开启且当前抗击退值大于 0 时,会取消玩家速度变化并将速度设为零,因此可能同时影响技能位移、翻滚或其他插件施加的速度效果。
动作与客户端光环
动作序列
default-animation-sequence 和 group.*.animation-sequence 用于设置命中动作。动作按列表顺序循环播放,列表为空时不执行。
延迟项格式为 delay:毫秒。读取到延迟项后,插件会等待指定毫秒数,再处理序列中的下一项。
Minecraft 1.12.2 下,动作播放顺序为:
- 已安装
GermPlugin时,向同世界玩家发送萌芽弯曲动作和模型动作。 - 未安装
GermPlugin、但已安装DragonCore时,发送龙核玩家动画。 - 两者都未安装时,不播放动作。
当前攻击任务仅在 Minecraft 1.12.2 分支中处理动作序列。
光环效果
安装配套 LyAutoAttackMod 后,服务端会在杀戮开启时发送当前范围和光环参数,在真实攻击命中时发送变色消息,在杀戮关闭时发送停止消息。
| 参数 | 说明 |
|---|---|
off-color | 未命中时的颜色 |
on-color | 命中后的高亮颜色 |
line-width | 光环虚线宽度 |
offset-y | 光环距离玩家脚底的高度 |
alpha | 透明度参数 |
hit-hold-ms | 命中颜色保持时间,单位毫秒 |
fade-back-ms | 渐变回普通颜色的时间,单位毫秒 |
每个分组可以使用 group.*.arua-effect 覆盖默认效果。缺少的字段会回退到 default-arua-effect。配置键中的 arua 是插件当前实际使用的拼写,不能改为 aura。
指令
插件没有在 plugin.yml 中声明固定权限节点。管理指令直接检查发送者是否为 OP,玩家开关指令不需要固定权限。
| 指令 | 使用者 | 说明 |
|---|---|---|
/laa | OP | 显示插件指令帮助 |
/laa check | 玩家 | 根据当前状态开启或关闭自己的杀戮 |
/laa reload | OP | 重载 config.yml 并重新读取全部分组 |
/laa enable 玩家名 | OP | 为在线玩家强制开启杀戮;已开启时不重复执行 |
/laa disable 玩家名 | OP | 为在线玩家强制关闭杀戮;未开启时不重复执行 |
/laa lock 玩家名 | OP | 锁定或解锁在线玩家坐标,目标必须站在地面上 |
enable、disable 和 lock 支持在线玩家名补全。普通玩家仅会补全 check,OP 会补全全部管理子命令。
PlaceholderAPI 变量
变量标识符为 laa。
| 变量 | 返回内容 | 可用条件 |
|---|---|---|
%laa_status% | 已启动或未启动文本 | 始终可用 |
%laa_lock% | 坐标已锁定或未锁定文本 | 始终可用 |
%laa_mode% | 最近目标 或 范围目标 | 杀戮已开启 |
%laa_max% | 当前目标上限;near 模式固定返回 1 | 杀戮已开启 |
%laa_knockback% | 当前抗击退值,例如 1格 | 杀戮已开启 |
%laa_range% | 当前索敌范围,例如 5.0x | 杀戮已开启 |
%laa_speed% | 每秒攻击次数,例如 每秒攻击4.0次 | 杀戮已开启 |
状态文本由以下配置控制:
autoattack-enable-placeholerautoattack-disable-placeholer
配置键中的 placeholer 是插件当前实际使用的拼写。请求不存在的变量,或者在杀戮未开启时请求运行参数变量,会返回红色的“错误”文本。
Java API
插件主类通过 getAPI() 提供 LyAutoAttackAPI 实例。
| 方法 | 用途 |
|---|---|
enableAttack(Player player) | 为玩家匹配分组、计算属性并开启自动攻击 |
disableAttack(Player player) | 停止任务并清理玩家运行数据 |
isEnable(Player player) | 查询玩家是否存在正在运行的自动攻击任务 |
enableKnockback(Player player) | 按当前分组和属性加成单独启用抗击退 |
disableKnockback(Player player) | 将玩家原版击退抗性重置为 0 |
外部插件调用开启方法时,如果玩家已经开启,插件会先关闭旧任务,再重新匹配分组和计算参数。
页面导航
| 页面 | 内容 |
|---|---|
| 配置说明 | config.yml 配置键、分组条件、属性加成、动作和光环参数 |
| 指令用法 | 玩家指令、管理指令、执行条件和补全行为 |
| 插件变量 | PlaceholderAPI 变量、返回值和可用状态 |
| 常见问题 | 版本、依赖、攻击伤害、条件、动作和客户端效果排查 |
| 更新日志 | 文档整理记录 |