Skip to content

常见问题 ​

插件加载后技能、条件和选择器没有生效怎么办? ​

按以下顺序检查:

  1. 确认 MythicMobs 已经正常启用。插件只有检测到 MythicMobs 后,才会注册扩展技能、条件和选择器。
  2. 确认配置中的 load-mythic-function 为 true。设为 false 会停止注册全部 MythicMobs 扩展。
  3. 查看控制台中的前置检测信息,确认没有出现 MythicMobs 未启动。
  4. 修改配置后先执行 /lamm reload,再执行 /mm reload,让 MythicMobs 重新解析技能配置。

插件正常接入 MythicMobs 后,会自动从控制台执行一次 mm reload。

/lamm 指令没有反应怎么办? ​

/lamm 只处理 OP 执行者,没有单独定义权限节点。

指令执行要求说明
/lammOP查看插件内置指令提示
/lamm reloadOP重载本插件的 config.yml
/lamm use 技能IDOP 玩家让执行者释放指定 MythicMobs 技能,不能由控制台使用
/lamm cast 技能ID 玩家名OP 或控制台强制指定在线玩家释放技能

使用 /lamm cast 时,如果玩家不在线或玩家名无法匹配,指令会直接结束。技能 ID 不存在时,目标玩家会收到技能不存在的提示。

修改配置后为什么效果没有变化? ​

/lamm reload 只重新读取本插件的 config.yml,不会让 MythicMobs 重新解析已经加载的技能文件。

修改内容需要执行
attack-mode、debug、no-clear-attribute/lamm reload
load-mythic-function/lamm reload 后执行 /mm reload
replace-mythic-summon/lamm reload 后执行 /mm reload
MythicMobs 技能、条件或选择器配置/mm reload

如果关闭 load-mythic-function,已有 MythicMobs 技能可能仍保留之前解析的对象。修改后应同时重载 MythicMobs。

修改 replace-mythic-summon 后为什么 summon 没变化? ​

replace-mythic-summon 决定 MythicMobs 解析 summon 时,是否使用插件提供的召唤实现。MythicMobs 已经加载过的技能不会因为 /lamm reload 自动重新解析。

修改后依次执行:

text
/lamm reload
/mm reload

也可以直接在技能中使用 ly-summon,不依赖原生 summon 的替换开关。

召唤物释放属性技能时找不到原始玩家怎么办? ​

damage-ap、attr-ap、damage-sx、attr-sx 和 heal-papi 会尝试沿召唤链查找最上级召唤者,最多向上查找 8 层。

只有通过以下机制创建的 MythicMob 会记录本插件使用的召唤关系:

  • ly-summon
  • 被 replace-mythic-summon: true 替换后的 summon
  • attribute-summon

如果技能链中混用了没有被替换的原生 summon,召唤关系可能在中途断开。请将对应位置改为 ly-summon,或者开启替换后执行 /mm reload。

召唤关系保存在运行时内存中。服务器重启后,重启前已经存在的实体不会重新写入这份关系记录。

damage-ap 没有造成伤害怎么办? ​

按以下项目检查:

  1. 确认 AttributePlus 已经安装并正常启用。
  2. 确认目标是存活且有效的生物实体。
  3. 确认属性键与 AttributePlus 实际注册的属性名称完全一致。无法识别的属性键会被忽略。
  4. 如果由召唤物释放,确认召唤链由 ly-summon、替换后的 summon 或 attribute-summon 建立。
  5. 检查 attack-mode。模式 1 使用基于 v1_12_R1 的原版近战攻击实现,并且最上级攻击者必须是玩家类型;配置文件建议使用模式 2 至 4。
  6. 开启 debug: true,查看伤害源解析和本次提交的 AttributePlus 属性。

damage-ap 只会向 AttributePlus 提交已经注册的属性。配置了错误的属性名称时,不会自动创建该属性。

damage-ap 的 清除属性 有什么作用? ​

清除属性 或 clear 默认为 true。启用时,插件会在攻击前临时抵消攻击者当前的大部分 AttributePlus 属性,再加入本次技能配置的伤害属性,攻击完成后移除这些临时来源。

不希望被抵消的属性需要写入 no-clear-attribute:

yaml
no-clear-attribute:
  - '生命力'
  - '移速加成'

虽然默认配置注释称该列表可以忽略,但当前代码仍会读取并使用它。涉及生命、防御、移动速度等不应临时清除的属性时,应保留对应名称。

damage-ap 的伤害事件被其他插件取消后会怎样? ​

插件会为本次 damage-ap 攻击临时写入专用标记,并在高优先级伤害监听器中解除已经取消的伤害事件。攻击结束后会立即移除标记。

如果仍然没有伤害,需要继续检查:

  • 是否存在更晚执行的监听器再次取消事件。
  • attack-mode 是否适合当前服务端环境。
  • AttributePlus 是否成功计算本次临时属性。
  • 目标是否处于无效、死亡或不可受伤状态。

attr-ap 没有添加属性怎么办? ​

确认以下条件:

  • 目标必须是存活且有效的生物实体。
  • 必须能够解析到最上级召唤者或当前生物施法者。
  • AttributePlus 必须正常启用。
  • 属性名称必须与 AttributePlus 的属性名一致。
  • time 使用 Tick,最小值会被限制为 1。

开启 debug: true 后,控制台会输出最上级召唤者和本次生成的属性列表。

如果填写 唯一 参数,属性来源 ID 会固定为 lamm_attr_参数值;不填写时,每次释放都会生成独立来源 ID。

属性公式为什么没有被计算? ​

不同技能使用的公式格式并不完全相同。

使用位置支持格式说明
attribute-summon 的生命和附加属性{math:表达式}先解析玩家 PAPI 变量,再计算公式
damage-ap、attr-ap数值运算 或 <表达式> 对应的半角尖括号格式纯运算字符串和尖括号内公式会尝试计算
damage-sx、attr-sx<表达式> 对应的半角尖括号格式及数值运算使用最上级召唤者解析 PAPI
heal-papi、sethealth-papi、setmaxhealth-papi直接填写算式使用逆波兰表达式计算器处理

尖括号公式应写在技能代码中,例如:

text
attr-ap{time=200;物理伤害=<100+20>}

公式计算器支持整数、小数、括号以及 +、-、*、/、^。如果公式包含无法识别的内容,可能保留原字符串、输出公式错误,或导致数值转换失败。

PAPI 变量没有被替换怎么办? ​

确认 PlaceholderAPI 已经启用。插件启动时会在控制台输出 PlaceholderAPI 的检测结果。

变量上下文根据技能不同而变化:

技能主要变量上下文
damage-ap、attr-ap最上级召唤者是玩家时,使用该玩家解析 PAPI
damage-sx、attr-sx最上级召唤者是玩家时,使用该玩家解析 PAPI
attribute-summon召唤物主人是玩家时,使用主人解析 PAPI
lycmd使用技能目标玩家解析 PAPI
heal-papi根据 origin 选择目标或最上级召唤者作为数值来源
sethealth-papi、setmaxhealth-papi使用目标玩家解析 PAPI

如果上下文实体不是玩家,对应的 PAPI 变量不会被解析。

attribute-summon 召唤成功但没有继承属性怎么办? ​

检查以下内容:

  1. 召唤类型必须是 MythicMob。直接生成普通 MythicEntity 的分支不会附加属性。
  2. 召唤物必须成功设置 owner,没有主人时不会继承属性。
  3. 属性、additionalattributes 或 aa 不能为空。
  4. 插件、plugin 或 attributeplugin 应填写 ap、sx2 或 sx3。
  5. 对应属性插件及其 API 必须正常加载。
  6. 属性字符串必须符合对应属性插件的格式。
  7. 生命、health 或 hp 计算结果必须大于 0,否则保留 MythicMob 默认生命。

插件会在控制台输出召唤物名称和最终生成的属性列表,可根据该输出检查变量与公式结果。

attribute-summon 设置生命后没有变化怎么办? ​

生命配置会先解析 PAPI 和 {math:表达式},然后转换为数字。只有结果大于 0 时,插件才会同时设置召唤物的最大生命和当前生命。

以下情况会保留怪物默认生命:

  • 未填写生命参数。
  • 最终结果为 0 或负数。
  • 使用的 PAPI 没有正确解析。
  • 公式或最终文本无法转换为数字。

damage-sx 或 attr-sx 没有效果怎么办? ​

先确认 SX-Attribute 已正常启用,并且版本号以 2 或 3 开头。其他主版本会被识别为无法兼容。

当前代码中,attr-sx 构造 SX 属性数据后,实际写入和移除实体临时属性数据的调用处于注释状态。damage-sx 中写入临时 SX 属性数据的调用同样处于注释状态。因此,这两个机制不能保证按配置生成临时 SX 属性,不应将其视为与 AttributePlus 实现完全等价。

启动时可通过控制台确认插件最终注册的是 SX-Attribute 2 还是 SX-Attribute 3 的实现。

gtag、ltag、etag 条件一直不通过怎么办? ​

当前条件实际读取的参数如下:

参数别名说明
tagt标签 ID
layerl用于比较的层数

条件中的层数应使用 l 或 layer,不是旧配置注释中的 v。

text
gtag{t=怒气;l=3}
ltag{t=怒气;l=10}
etag{t=怒气;l=5}

另外还需要确认:

  • 目标已经通过 ly-settag、ly-addtag 或 ly-taketag 写入同名标签。
  • 标签名称完全一致。
  • 标签由本插件写入。条件只读取归属于本插件的实体 metadata。
  • 没有标签时,三个比较条件都会返回不通过。

标签层数会自动限制为零以上吗? ​

不会。

  • ly-addtag 会在当前值上直接增加配置值。
  • ly-taketag 会在当前值上直接减去配置值。
  • ly-settag 会直接覆盖为配置值。

插件没有设置最小值或最大值,因此标签层数可以为负数。标签技能可以使用 value、v、layer 或 l 指定变化值。

dp 或 dm 队友条件无法判断怎么办? ​

dp 对应 DungeonPlus,dm 对应 DungeonMaster。对应副本插件没有正常启用时,相关条件无法工作。

参数值结果
s=true目标必须是队友,默认值
s=false目标必须不是队友
s=allow不限制队友关系,条件始终通过

队友条件不包含施法者本人。施法者或目标如果是召唤物,插件会尝试沿最多 8 层召唤链解析最终玩家主人。

DungeonPlus 条件只检查队伍中符合 NO_DEATH 状态的玩家。DungeonMaster 条件要求施法者已经处于副本实例中,并检查该实例的玩家 UUID 列表。

DungeonPlus 或 DungeonMaster 选择器选不到目标怎么办? ​

先确认施法者确实位于对应队伍或副本中,再检查选择器类型和半径。

  • dptm、dpotm、dmtm、dmotm 只选择队友。
  • dpntp、dpontp、dmntp、dmontp 选择排除自己及队伍成员后的玩家。
  • dpnte、dponte、dmnte、dmonte 选择排除自己及队伍成员后的实体。
  • 名称中带 o 的选择器使用技能基础坐标作为范围中心,适合放置物等场景。
  • 不带 o 的选择器以自身为范围中心。

可以先将 r 设为 -1 排除距离和世界限制。能够选中后,再改为实际半径。数字参数支持 PAPI 和四则运算时,还需要确认 PlaceholderAPI 已启用且最终结果可以转换为数字。

autofollow 或 moveto 没有移动怎么办? ​

这两个机制直接使用 v1_12_R1 的 NMS 寻路与移动控制器,施法者必须是具有 AI 和移动控制器的生物实体。

请检查:

  • 技能目标是存活且有效的生物实体。
  • 施法者与目标位于同一世界。
  • 施法者不是没有原版 AI 控制器的实体类型。
  • speed 是有效数字;小于等于 0 时会回退到 0.35。
  • 实体没有在技能执行期间更换移动控制器或导航对象。

移动任务最长运行 200 Tick,距离目标约 2 格时会停止。对同一实体再次释放会取消上一次移动任务。

autofollow 中,如果双方距离超过 border,目标会被传送到施法者身后;施法者已有存活攻击目标时,不会启动新的跟随寻路。双方不在同一世界时,当前施法者会被设置为死亡。

runfunc 没反应怎么办? ​

runfunc 依赖 DragonCore,技能目标必须是在线、存活且有效的玩家。怪物或其他非玩家实体不能接收客户端方法调用。

可以先使用简单方法测试客户端通信:

text
runfunc{s=方法.屏幕抖动(3,15,10,3)} @self

如果没有效果,检查 DragonCore 服务端插件、玩家客户端和对应方法名称是否正常。runfunc 只读取 s 参数。

bindentity 没反应或报 UUID 错误怎么办? ​

bindentity 依赖 DragonCore,技能目标必须是玩家。参数中的 entity 和 owner 会直接通过 UUID.fromString 转换,必须是完整有效的 UUID 字符串。

参数默认值说明
entity无被绑定实体的 UUID
owner无绑定目标实体的 UUID
forward0前后偏移
offsetY0垂直偏移
sideways0左右偏移
bindYawtrue是否绑定水平朝向
bindPitchtrue是否绑定俯仰角

缺少 UUID、UUID 格式错误或参数无法转换为数字、布尔值时,技能可能抛出解析异常。

camera 没反应怎么办? ​

camera 依赖 GermPlugin,最终技能目标必须是玩家。目标是怪物时不会发送镜头数据。

参数说明
tGermPlugin 的镜头类型
m移动到目标镜头值所需时间
s镜头持续时间,配置注释说明 -1 表示持续
v镜头数值
r是否旋转,填写 true 或 false

已确认的镜头类型包括:

  • CAMERA_PITCH
  • CAMERA_ROLL
  • CAMERA_YAW
  • OFFSET_X
  • OFFSET_Y
  • OFFSET_Z
  • PITCH
  • ROLL
  • YAW

t 会直接通过枚举名称解析,大小写或名称错误会导致解析失败。

lycmd 没有执行指令怎么办? ​

lycmd 的目标必须是在线、存活且有效的玩家。cmd 中的 PAPI 变量使用目标玩家解析。

前缀执行方式
无前缀由目标玩家执行
[op]临时给予目标玩家 OP 后执行,完成后恢复原状态
[console]由控制台执行

不要在命令内容前添加 /,插件会直接将处理后的文本提交给 Bukkit 指令调度器。cmd 为空时不会执行任何内容。

heal-papi 的数值来源不正确怎么办? ​

heal-papi 支持 v、value 和 origin 参数。

origin数值变量来源
target使用技能目标,默认值
me使用解析到的最上级召唤者

目标不是玩家时不会解析目标的 PAPI 变量,只会计算纯数字公式。治疗结果不会超过目标最大生命,负数结果会降低生命,但最终不会低于 0。

sethealth-papi 或 setmaxhealth-papi 对怪物报错怎么办? ​

虽然技能入口接受生物实体,但当前实现会将目标直接转换为玩家并使用 PlaceholderAPI。因此这两个技能应只对玩家目标使用。

sethealth-papi 会把最终生命限制在 0.01 到目标当前最大生命之间。

setmaxhealth-papi 同样会把数值限制在 0.01 到目标当前最大生命之间,因此当前实现不能把最大生命提高到原最大生命以上,只能保持或降低最大生命。

开启 debug 后为什么玩家看不到信息? ​

不同机制的调试输出位置不同:

  • damage-ap 的属性列表只发送给作为最上级召唤者的 OP 实体,部分伤害源信息写入控制台日志。
  • attr-ap 的最上级召唤者和属性列表输出到控制台。
  • damage-sx 的属性列表发送给作为最上级召唤者的 OP 实体。
  • attr-sx 的属性列表输出到控制台。
  • 其他技能可能只在发生公式或指令错误时输出异常。

排查时应同时查看游戏内 OP 消息和服务端控制台。

服务端版本不一致时出现 NMS 错误怎么办? ​

当前项目中的攻击、自动跟随和移动实现直接引用 net.minecraft.server.v1_12_R1 与 org.bukkit.craftbukkit.v1_12_R1。

如果服务端不是对应的 v1_12_R1 实现,可能出现类不存在、方法不兼容或技能无法执行。仅修改 Java 构建目标或 Paper API 依赖不能消除这种 NMS 版本绑定,必须使用与插件实现匹配的服务端环境。