Skip to content

常见问题

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

按以下顺序检查:

  1. 确认 MythicMobs 已经正常启用。插件只有检测到 MythicMobs 后,才会注册扩展技能、条件和选择器。
  2. 确认配置中的 load-mythic-functiontrue。设为 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-modedebugno-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-apattr-apdamage-sxattr-sxheal-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、替换后的 summonattribute-summon 建立。
  5. 检查 attack-mode。模式 1 使用基于 v1_12_R1 的原版近战攻击实现,并且最上级攻击者必须是玩家类型;配置文件建议使用模式 24
  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-apattr-ap数值运算<表达式> 对应的半角尖括号格式纯运算字符串和尖括号内公式会尝试计算
damage-sxattr-sx<表达式> 对应的半角尖括号格式及数值运算使用最上级召唤者解析 PAPI
heal-papisethealth-papisetmaxhealth-papi直接填写算式使用逆波兰表达式计算器处理

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

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

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

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

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

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

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

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

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

检查以下内容:

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

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

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

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

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

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

damage-sxattr-sx 没有效果怎么办?

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

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

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

gtagltagetag 条件一直不通过怎么办?

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

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

条件中的层数应使用 llayer,不是旧配置注释中的 v

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

另外还需要确认:

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

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

不会。

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

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

dpdm 队友条件无法判断怎么办?

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

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

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

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

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

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

  • dptmdpotmdmtmdmotm 只选择队友。
  • dpntpdpontpdmntpdmontp 选择排除自己及队伍成员后的玩家。
  • dpntedpontedmntedmonte 选择排除自己及队伍成员后的实体。
  • 名称中带 o 的选择器使用技能基础坐标作为范围中心,适合放置物等场景。
  • 不带 o 的选择器以自身为范围中心。

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

autofollowmoveto 没有移动怎么办?

这两个机制直接使用 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,技能目标必须是玩家。参数中的 entityowner 会直接通过 UUID.fromString 转换,必须是完整有效的 UUID 字符串。

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

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

camera 没反应怎么办?

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

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

已确认的镜头类型包括:

  • 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 支持 vvalueorigin 参数。

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

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

sethealth-papisetmaxhealth-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_R1org.bukkit.craftbukkit.v1_12_R1

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