常见问题
数据库连接失败,插件功能为什么不正常?
LySkillView 使用 MySQL 保存玩家技能数据和当前蓝量。
必须安装 LyMySQLCore,并确保 LyMySQLCore 已成功连接数据库。只有数据库连接成功、数据表初始化完成,并且 LyMySQLCore 正常触发玩家数据加载与保存事件后,玩家技能数据、绑定状态、冷却时间和蓝量相关功能才会正常生效。
检查以下内容:
- 服务端是否已安装并加载
LyMySQLCore。 config.yml中的mysql.ip、mysql.port、mysql.databasename、mysql.username和mysql.password是否正确。- MySQL 是否允许服务器所在主机连接。
- 控制台是否出现数据库连接成功和数据库初始化成功提示。
- 数据库中是否存在
lyskillview_newsave表。 - LyMySQLCore 是否已经成功加载玩家数据事件,而不是只完成数据库连接。
默认配置示例:
yaml
mysql:
databasename: mc2
username: mc2
password: mc1234
port: 3306
ip: 127.0.0.1插件使用 UTF-8 数据库连接。数据库连接失败时,玩家数据无法正常读取和保存,依赖玩家数据的技能释放、技能升级、技能绑定和蓝量功能也可能无法生效。
玩家数据保存了哪些内容?
LySkillView 会在 lyskillview_newsave 表中为玩家保存一条记录,数据内容以 YAML 文本保存。
已确认保存的内容包括:
| 数据 | 保存内容 |
|---|---|
| 技能等级 | 每个技能当前等级 |
| 技能冷却 | 技能冷却结束时间 |
| 技能绑定 | 技能绑定的快捷键;未绑定时保存为 null |
| 当前蓝量 | 玩家当前蓝量 |
自动释放状态保存在运行时缓存中,当前保存代码没有将其写入数据库,因此不能视为重启后自动恢复的数据。
为什么技能菜单打不开?
打开菜单时使用的菜单 ID 必须存在于 config.yml 的 skill-menu 下。
例如:
text
/lsv open 战士技能对应配置:
yaml
skill-menu:
战士技能:
- '战士技能1'
- '战士技能2'
- '战士技能3'还需要检查:
- 玩家数据是否已经加载完成。
技能界面.yml是否能够被 GermPlugin 正常读取。- 菜单 ID 是否完全一致,包括中文和大小写。
- 菜单中的技能 ID 是否与
skills目录中 YAML 文件的顶层节点一致。 技能界面.yml中是否存在必要的界面组件。
不存在的菜单 ID 会被直接忽略,不会打开界面。
为什么技能菜单打开后是空的?
菜单中的技能必须同时满足以下条件:
- 技能 ID 已加入当前
skill-menu.<菜单ID>列表。 - 技能文件位于插件目录的
skills目录或其子目录中。 - 文件扩展名为
.yml。 - 技能 YAML 存在有效的顶层技能节点。
- 技能配置包含
skill-level节点。 - 玩家满足全部
display-condition。
菜单打开时,插件会为配置中存在但玩家数据中没有的技能创建初始数据,初始等级为 0、冷却时间为 0、没有绑定键位。
如果菜单仍然没有技能,检查控制台中的技能加载日志,以及以下配置是否一致:
yaml
skill-menu:
战士技能:
- '测试主动技能'yaml
测试主动技能:
skill-level:
0:
lore: []为什么技能没有按照预期顺序显示?
技能按照 index 从小到大排序,数字越小越靠前。
yaml
测试主动技能:
index: 100000如果 index 小于 0 或未配置,插件会根据技能加载过程分配临时顺序。插件会递归读取 skills 目录下的 .yml 文件,因此不能依赖文件系统读取顺序。需要稳定排序时,应为每个技能配置明确的 index。
为什么技能不显示?
技能显示条件配置在技能顶层的 display-condition 中。所有条件都会检查,任意一项不满足,技能就不会显示。
支持的条件格式:
| 格式 | 检查内容 |
|---|---|
papi:{表达式} | 解析 PlaceholderAPI 变量并计算表达式 |
permission:{权限节点} | 检查玩家权限 |
name:{槽位<->文本} | 检查指定槽位物品显示名称是否包含文本 |
lore:{槽位<->文本} | 检查指定槽位物品 Lore 是否包含文本 |
示例:
yaml
display-condition:
- 'papi:{%player_level% > 0}'
- 'permission:{skill.测试技能}'
- 'name:{GermPlugin#宠物槽位<->&6天火神龙}'
- 'lore:{GermPlugin#宠物槽位<->&6天火神龙}'papi 表达式支持:
- 比较运算:
>、<、>=、<=、==、!= - 逻辑运算:
&&、|| - 数值运算:
+、-、*、/ - 括号:
() - 字符串相等比较:单引号或双引号
物品名称或 Lore 条件支持哪些槽位?
项目代码确认支持以下槽位来源:
| 槽位格式 | 说明 |
|---|---|
DragonCore#槽位名 | 读取龙核缓存槽位 |
GermPlugin#槽位名 | 读取萌芽槽位 |
Minecraft#数字槽位 | 读取玩家原版背包数字槽位 |
LyInventory#文件名#槽位名 | 读取 LyInventory 指定文件中的槽位 |
Origin#Mainhand | 读取玩家主手 |
Origin#Offhand | 读取玩家副手 |
名称条件检查物品显示名称是否包含指定文本,Lore 条件检查任意一行 Lore 是否包含指定文本。配置中的 & 会转换为 Minecraft 颜色符号后再比较。
使用外部插件槽位前,必须确保对应插件已加载,否则相关条件无法正常检查。
为什么快捷键注册失败?
register-skill-slot 的左侧必须是有效的萌芽按键枚举名称,例如默认配置中的 KEY_Z、KEY_X、KEY_C、KEY_V 和 KEY_B。
右侧必须填写 技能界面.yml 中真实存在的组件名:
yaml
register-skill-slot:
'KEY_Z': '技能槽位1'
'KEY_X': '技能槽位2'对应界面组件:
yaml
技能界面:
技能槽位1:
type: button按键名称无效时,控制台会提示快捷键注册失败。组件不存在时,控制台会提示检查技能界面中的对应组件名。
修改 register-skill-slot 后,需要重新加载插件,使快捷键、技能、界面和 HUD 重新注册。
为什么按下快捷键没有释放技能?
按键事件由 GermPlugin 发送。请依次检查:
| 检查项 | 要求 |
|---|---|
| 按键注册 | 按键已配置在 register-skill-slot 中 |
| 按键事件 | GermPlugin 能够正常发送客户端按键事件 |
| 技能类型 | 技能的 trigger-mode 必须为 主动 |
| 技能等级 | 当前技能等级必须大于 0 |
| 技能绑定 | 玩家已将技能绑定到对应槽位 |
| 显示条件 | 技能仍满足 display-condition |
| 释放条件 | 当前满足该等级的 cast-condition |
| 冷却状态 | 技能不处于自身冷却或公共冷却中 |
| 蓝量 | 当前蓝量不少于缩减后的实际蓝耗 |
| 对接技能 | mythicmobs-skill 指向的技能真实存在 |
| 玩家数据 | 玩家数据已经完成加载 |
按键配置和 PlaceholderAPI 变量使用的名称不同。配置中使用完整按键名,例如 KEY_Z;变量和自动释放权限省略 KEY_,例如 %lsv_Z:skill% 和 lsv.autocast.Z。
为什么技能无法绑定到快捷键?
只有主动技能可以绑定快捷键:
trigger-mode必须严格配置为主动。- 技能等级必须大于
0。 - 玩家数据中必须存在该技能。
register-skill-slot指向的界面组件必须存在。
被动技能绑定时,会发送 message.passive-skill-cannot-bind-to-key 配置的提示。
同一个按键只能绑定一个技能。绑定新技能时,原本绑定到该按键的技能会被解除绑定。
为什么已经绑定的技能被自动解绑?
打开技能菜单时,插件会重新检查当前菜单中可以显示的技能。如果已绑定技能不在当前可显示技能列表中,其绑定会被清除。
常见原因包括:
- 技能未加入当前
skill-menu.<菜单ID>列表。 - 玩家不再满足
display-condition。 - 玩家权限被移除。
- PlaceholderAPI 条件结果发生变化。
- 槽位物品名称或 Lore 不再满足条件。
- 技能 ID 被修改或对应 YAML 文件被移除。
为什么技能名称中的等级没有替换?
技能菜单会处理 skill-name 中的以下内容:
| 内容 | 含义 |
|---|---|
{level} | 玩家当前技能等级 |
{max} | 技能最大等级 |
| PlaceholderAPI 变量 | 按玩家上下文解析 |
示例:
yaml
skill-name:
- '&6天火暴动 &7({level}/{max})'
- '&b主动技能'等级详情应写入对应等级的 lore。等级替换只针对技能名称文本。
为什么技能无法升级?
升级目标是当前等级的下一级。以下情况会导致升级失败:
- 不存在当前等级的下一级节点。
- 下一级的
condition未全部满足。 - 背包中缺少
need-item要求的物品。 - 玩家数据尚未加载。
- 技能 ID 不存在或技能配置加载失败。
升级条件支持与 display-condition、cast-condition 相同的 papi、permission、name 和 lore 格式。
need-item 的格式为 物品显示名称#数量:
yaml
need-item:
- '&6测试技能书#3'升级时只检查玩家原版背包的前 36 个槽位,并按物品显示名称匹配。满足条件后,插件会扣除物品、提升技能等级、执行 run-command,刷新可用技能缓存,并发送升级成功消息。
为什么满级后仍然无法继续升级?
技能最大等级根据 skill-level 中从 0 开始连续存在的等级节点计算。
yaml
skill-level:
0:
lore: []
1:
lore: []
2:
lore: []此时最大等级为 2。当前等级不存在下一级节点时,插件会发送 message.skill-level-is-max 配置的提示。
等级编号应从 0 开始连续配置,不要跳过中间等级。
为什么升级条件满足了,物品仍然不够?
need-item 只检查玩家原版背包的 0 到 35 号槽位,并按物品显示名称进行不区分大小写的精确匹配。
检查以下内容:
- 物品必须有自定义显示名称。
- 配置名称与物品实际显示名称必须一致。
- 颜色代码必须一致。
- 数量必须写成
名称#数量。 - 多个同名物品可以累计数量。
- 末影箱、装备栏和外部插件槽位不会被统计。
condition 中的 name、lore 槽位条件与 need-item 是两套不同机制:前者只检查条件,后者会在升级成功时扣除原版背包中的物品。
为什么升级后的命令没有执行?
只有升级成功后,当前等级的 run-command 才会执行。命令由控制台执行,并先解析玩家的 PlaceholderAPI 变量。
yaml
run-command:
- 'tell %player_name% 技能升级完成'命令内容不需要添加 /。升级条件或物品条件未满足时,命令不会执行。
为什么技能释放失败?
常见原因如下:
| 原因 | 处理方式 |
|---|---|
| 技能冷却中 | 等待技能冷却结束 |
| 公共冷却中 | 等待同组技能的公共冷却结束 |
| 蓝量不足 | 提高当前蓝量或检查耗蓝缩减配置 |
cast-condition 不满足 | 检查权限、变量和物品条件 |
| 技能未激活 | 确认技能等级大于 0 且满足显示条件 |
| 技能未绑定 | 在技能界面中重新绑定主动技能 |
| 对接技能不存在 | 检查 MythicMobs、SkillAPI 或 Planners 中的技能 ID |
| 玩家数据未加载 | 先确认 LyMySQLCore 已完成玩家数据加载 |
当前等级应至少包含有效的 mythicmobs-skill、cooldown、mana 和相关条件列表。
为什么释放条件失败后蓝量发生了变化?
主动快捷键和被动事件的检查顺序不同。
主动快捷键会先检查冷却和 cast-condition,再检查并扣除蓝量。攻击、受击、左右键等被动事件会在蓝量检查后扣除蓝量,再检查 cast-condition。
因此,被动技能的 cast-condition 应尽量与 display-condition 保持一致,避免技能已经进入可触发列表,但在释放阶段又因条件失败。
为什么技能冷却时间与配置值不同?
cooldown 的单位是毫秒,读取时会先解析 PlaceholderAPI 变量,再计算表达式。
实际冷却会应用 cooling-reduction-placeholder 返回的百分比,并受 cooling-reduction-max 限制:
text
实际冷却 = 配置冷却 × (1 - 冷却缩减百分比)主动快捷键技能还会受到当前等级 gcd 的影响。如果技能自身冷却短于本次公共冷却,技能冷却结束时间会延长到公共冷却结束时间。
为什么冷却缩减或耗蓝缩减不生效?
检查以下配置:
yaml
mana-reduction-placeholder: ''
mana-reduction-max: 75
cooling-reduction-placeholder: ''
cooling-reduction-max: 75对应变量留空时,缩减功能不生效。填写后,PlaceholderAPI 必须返回可解析的数字,例如 20 表示缩减 20%。
返回值超过上限时,会按配置上限计算。返回空文本、非数字或无法解析时,插件会在控制台提示属性变量异常,并按 0 处理。
代码只限制缩减值的最大上限,不会自动将负数修正为 0。应确保变量返回 0 到对应上限之间的数字。
为什么 cooldown 表达式没有生效?
cooldown 支持 PlaceholderAPI 变量和以下运算:
- 加法
+ - 减法
- - 乘法
* - 除法
/ - 括号
()
示例:
yaml
cooldown: '%player_level% * 100 + 500'表达式最终必须得到数字。解析失败时,技能读取会使用默认冷却 1000 毫秒。
为什么公共冷却没有生效?
公共冷却需要同时配置技能等级中的 gcd 和 config.yml 中的 gcd-group。
yaml
gcd-group:
战士技能:
- '战士技能1'
- '战士技能2'yaml
战士技能1:
skill-level:
1:
gcd: 1500检查以下事项:
gcd单位是毫秒。- 触发技能的技能 ID 位于至少一个分组中。
- 分组内技能 ID 与技能 YAML 顶层节点一致。
- 同一个技能可以出现在多个分组中。
- 未配置
gcd时默认为0。 - 被动技能事件触发不会处理
gcd-group。
为什么设置了 GCD 后技能自身冷却也变长了?
主动快捷键释放时,插件会比较技能自身冷却结束时间和本次 GCD 结束时间。如果自身冷却更短,会将该技能冷却结束时间提升到 GCD 结束时间。
因此,主动技能的最终剩余冷却至少可能等于本次 gcd。
为什么主动技能插件对接失败?
mythicmobs-skill 会根据前缀选择释放方式:
| 配置格式 | 对接目标 |
|---|---|
技能 ID | MythicMobs |
SkillAPI#技能 ID | SkillAPI |
Planners#技能 ID | Planners |
示例:
yaml
mythicmobs-skill: 'SkillAPI#火球术'检查目标插件是否已经加载,以及技能 ID 是否存在。
- MythicMobs 技能不存在时,会提示
MythicMobs技能[技能ID]不存在。 - SkillAPI 要求玩家数据中已经拥有指定技能。
- Planners 要求其 API 能够查找到指定技能。
plugin.yml 将 MythicMobs、SkillAPI 和 Planners 声明为软依赖,不代表这些插件会自动安装。
为什么被动技能没有触发?
被动技能只遍历玩家当前已激活的技能,并要求技能等级大于 0、满足 display-condition、不在冷却中、蓝量足够且满足 cast-condition。
项目代码确认的事件触发格式如下:
| 格式 | 触发时机 |
|---|---|
ATTACK#几率 | 玩家造成伤害时尝试触发 |
DAMAGED#几率 | 玩家受到伤害时尝试触发 |
LEFT#几率 | 玩家左键空气或方块时尝试触发 |
RIGHT#几率 | 玩家右键空气或方块时尝试触发 |
几率按 0 到 100 使用。例如:
yaml
trigger-mode: 'ATTACK#25'表示玩家造成伤害时,以约 25% 的概率尝试触发技能。
当前监听代码读取 # 后的几率,因此不要只填写 LEFT 或 RIGHT,应使用完整的 LEFT#几率 或 RIGHT#几率 格式。
为什么 TIME#几率 被动技能没有触发?
示例技能配置注释列出了 TIME#几率 格式,项目中也存在被动技能定时任务。但当前项目证据没有包含该定时任务的完整触发实现,因此无法确认其扫描间隔和附加限制。
可以先检查:
trigger-mode是否严格写为TIME#数字。- 技能等级是否大于
0。 - 技能是否满足
display-condition。 - 当前蓝量是否足够。
- 技能是否处于冷却中。
cast-condition是否满足。- 插件重载后被动技能任务是否正常启动。
为什么被动技能频繁提示蓝量不足?
攻击、受击、左右键被动触发会先按配置几率尝试触发,再检查蓝量。蓝量不足时会发送 message.skill-cast-fail-from-mana 配置的提示。
如果玩家同时拥有多个高频被动技能,同一次操作可能遍历多个技能。可以通过降低触发几率、增加冷却、减少蓝耗或收紧显示条件控制触发频率。
为什么蓝量一直是 0?
检查以下配置和状态:
- 玩家数据是否已经通过 LyMySQLCore 加载。
player-mana-recovery-interval是否为有效的正整数秒数。player-mana-recovery-value是否大于0。player-mana-recovery-placeholder是否返回有效数字。%lsv_mana%是否在玩家上下文中解析。
玩家首次创建蓝量数据时,当前蓝量从 0 开始,之后由回蓝任务恢复,并在保存时写入数据库。
为什么最大蓝量或回蓝量与预期不同?
相关配置:
yaml
player-max-mana-default: 100
player-max-mana-placeholder: ''
player-mana-recovery-interval: 1
player-mana-recovery-value: 1
player-mana-recovery-placeholder: ''玩家数据首次加载时,player-max-mana-placeholder 和 player-mana-recovery-placeholder 按百分比参与计算。玩家关闭 Inventory 界面或触发主副手交换时,插件重新读取两个变量,并将结果作为固定值直接加到基础值上。
因此,同一个变量在首次加载和后续刷新时的计算方式不同。配置时应注意这一行为。变量留空时,只使用默认最大蓝量和基础回蓝值。
为什么修改属性装备后最大蓝量没有立即刷新?
代码会在以下事件中重新计算最大蓝量和每次回蓝量:
- 玩家关闭原版物品栏或其他 Inventory 界面。
- 玩家触发主副手交换事件。
只移动物品但没有触发这些事件时,不一定会立即刷新。完成装备变更后,可以关闭背包触发重新计算。
为什么当前蓝量超过最大值后被减少?
PlayerManaData 会将当前蓝量限制在 0 到最大蓝量之间。
当最大蓝量降低时,如果当前蓝量超过新的最大值,当前蓝量会自动降到新的最大值。数据库加载蓝量时也会执行相同限制。
自动释放为什么打不开?
玩家需要拥有对应键位的权限:
text
lsv.autocast.键位例如 Z 键:
text
lsv.autocast.Z自动释放变量为:
text
%lsv_Z:autocast%开启时返回 enable,关闭时返回 disable。
还需要确认:
- 键位已经配置在
register-skill-slot中。 - 玩家已经将有效的主动技能绑定到该键位。
- 权限中的键位使用省略
KEY_后的名称。
为什么自动释放变量始终返回 disable?
自动释放变量检查的是运行时缓存中的短键位名,例如 Z,不是 KEY_Z。
检查以下内容:
- 使用
%lsv_Z:autocast%,不要写成%lsv_KEY_Z:autocast%。 - 玩家拥有
lsv.autocast.Z权限。 - 自动释放功能已经成功切换为开启状态。
- PlaceholderAPI 已加载并成功注册 LySkillView 扩展。
为什么 PlaceholderAPI 变量没有解析?
PlaceholderAPI 是软依赖。只有服务端启用了 PlaceholderAPI,LySkillView 才会注册标识符为 lsv 的变量扩展。
检查以下内容:
- PlaceholderAPI 是否已经加载。
- LySkillView 是否正常启用。
- 变量是否带有完整的
%。 - 技能 ID 和键位名称是否正确。
- 变量是否在玩家上下文中解析。
没有玩家上下文时,扩展会返回空文本。
LySkillView 支持哪些 PlaceholderAPI 变量?
玩家蓝量变量
| 变量 | 说明 |
|---|---|
%lsv_mana% | 当前蓝量 |
%lsv_maxmana% | 最大蓝量 |
技能变量
| 变量 | 说明 |
|---|---|
%lsv_level:技能ID% | 玩家技能等级 |
%lsv_mana:技能ID% | 当前等级实际蓝耗,已应用耗蓝缩减 |
%lsv_cooldown:技能ID% | 当前等级实际冷却,已应用冷却缩减,单位为秒,保留一位小数 |
键位变量
变量中的键位省略 KEY_,例如 KEY_Z 对应 Z。
| 变量 | 说明 |
|---|---|
%lsv_Z:skill% | Z 键绑定的技能 ID |
%lsv_Z:icon% | Z 键绑定技能的图标路径 |
%lsv_Z:cd% | Z 键绑定技能的剩余冷却,单位毫秒 |
%lsv_Z:cdsecond% | Z 键绑定技能的剩余冷却,单位秒,保留一位小数 |
%lsv_Z:cdmax% | Z 键绑定技能当前等级的基础冷却,单位毫秒 |
%lsv_Z:autocast% | Z 键自动释放状态 |
X、C、V、B 等已注册键位使用相同格式。
当前选中技能变量
| 变量 | 无选中技能时的默认值 |
|---|---|
%lsv_target_skill_level% | 0 |
%lsv_target_skill_max_level% | 0 |
%lsv_target_skill_name% | 空文本 |
%lsv_target_skill_icon% | 空文本 |
%lsv_target_skill_id% | 空文本 |
这些变量只有在玩家打开 LySkillView 技能界面并点击选择技能后,才会读取当前选中技能。关闭技能界面后,当前选中技能缓存会被清除。
为什么键位变量返回默认贴图或 null?
键位没有绑定技能时,变量返回值如下:
| 变量 | 未绑定时返回 |
|---|---|
%lsv_Z:skill% | null |
%lsv_Z:icon% | default-slot-texture 配置的路径 |
%lsv_Z:cd% | 0 |
%lsv_Z:cdsecond% | 0 |
%lsv_Z:cdmax% | 0 |
如果键位没有配置在 register-skill-slot 中,无法进入正常的键位数据读取逻辑,变量可能最终返回 null。
为什么 %lsv_Z:cdmax% 没有应用冷却缩减?
%lsv_Z:cdmax% 返回当前等级配置计算出的基础冷却毫秒数,不会应用 cooling-reduction-placeholder。
| 变量 | 含义 |
|---|---|
%lsv_Z:cdmax% | 当前等级配置表达式计算出的基础冷却,单位毫秒 |
%lsv_cooldown:技能ID% | 应用玩家冷却缩减后的冷却,单位秒 |
制作冷却遮罩时,应根据需要选择对应变量。
为什么 HUD 冷却遮罩显示异常?
默认 技能栏.yml 使用键位冷却变量持续刷新,并通过剩余冷却与最大冷却的比例计算遮罩高度。
检查以下内容:
%lsv_键位:cd%和%lsv_键位:cdmax%是否能正常解析。- 技能是否已经绑定到该键位。
技能栏.yml中的组件名是否一致。- 冷却贴图路径是否存在。
cdmax是否为0。- HUD 更新表达式中的变量名是否正确。
示例配置中的 C 键冷却高度表达式使用了 %lsv_Ccd%,该写法缺少冒号。应改为:
yaml
- "update<->图标C冷却图片@height@h*0.09*(%lsv_C:cd%/%lsv_C:cdmax%)"为什么 HUD 图标无法显示?
HUD 图标变量来自已绑定技能的 skill-icon。没有绑定技能时使用 default-slot-texture。
检查:
skill-icon是否为萌芽能够读取的有效贴图路径。default-slot-texture是否有效。技能栏.yml是否刷新了对应键位的icon变量。- HUD 组件是否使用正确的
%lsv_键位:icon%。 - 技能是否仍满足显示条件并保持绑定状态。
修改技能配置后,玩家数据没有对应技能怎么办?
打开技能菜单时,插件会为配置中存在但玩家数据中缺少的技能创建默认数据,初始等级为 0、冷却为 0、未绑定按键。
如果新技能仍未出现,检查:
- 技能文件是否位于
plugins/LySkillView/skills或其子目录。 - 文件扩展名是否为
.yml。 - 顶层技能 ID 是否有效且不重复。
skill-level.0是否存在。skill-menu是否加入该技能 ID。- 玩家是否满足
display-condition。
修改技能 ID 后,旧数据会怎样?
技能 ID 是技能 YAML 的顶层节点,也是玩家数据、菜单列表、GCD 分组、变量和绑定关系使用的标识。
直接修改技能 ID 后,数据库中的旧 ID 不会自动改名。旧数据找不到对应技能配置时,会被部分逻辑跳过;新 ID 会被视为新的技能数据,默认等级为 0。
修改技能 ID 前,应同步处理:
skill-menu中的技能 ID。gcd-group中的技能 ID。- 配置和界面中引用该 ID 的变量。
- 外部插件中引用该技能的内容。
- 数据库中的历史玩家数据。
为什么重载后玩家状态没有立即完全刷新?
重载流程会重新读取配置、连接数据库、加载技能文件、读取萌芽界面和 HUD、注册快捷键、启动被动任务、注册 HUD,并刷新缩减变量和回蓝任务。
但在线玩家的技能数据缓存、已激活技能缓存和绑定状态不一定会像重新进服一样完整重建。重载后如果出现显示、绑定或数据状态不一致,可以让玩家重新进入服务器,使数据通过 LyMySQLCore 的加载事件重新初始化。
为什么循环保存没有运行?
loop-save-thread-time 的单位是 tick,配置为 0 时表示不使用该功能。
yaml
loop-save-thread-time: 6000项目配置注释说明 1200 tick 约为一分钟,因此 6000 tick 约为五分钟。
如果循环保存没有按预期运行,应确认:
- 配置值是否为有效的非负数。
- LyMySQLCore 是否正常工作。
- 玩家离线保存是否正常。
- 插件关闭保存是否正常。
- 控制台是否出现数据库错误。
为什么关闭服务器时出现保存失败?
插件关闭时会遍历缓存中的玩家技能数据,并将技能等级、冷却结束时间、绑定键位和当前蓝量写入数据库。
常见原因包括:
- 数据库连接已提前关闭。
- MySQL 服务不可用。
- 数据库用户没有查询、插入或更新权限。
- 数据表不存在或结构异常。
- 玩家名称为空。
- 玩家数据引用了已删除的技能。
应优先检查保存失败堆栈和数据库连接状态。必须确保 LySkillView 保存完成前,数据库服务和 LyMySQLCore 不要提前关闭或卸载。
为什么消息中的颜色没有显示?
message 下的插件提示会将 & 转换为 Minecraft 颜色符号。
yaml
message:
skill-cooling: '&f[&e技能系统&f] &7技能冷却中,剩余&6{time}&7秒!'检查 YAML 引号是否完整,以及消息是否仍位于正确的 message 节点下。
已确认的消息变量包括:
| 消息键 | 支持变量 |
|---|---|
skill-cooling | {time} |
skill-cast-fail-from-mana | {mana} |
没有代码证据表明其他消息支持额外的花括号变量。
哪些问题应先查看控制台?
以下问题通常会产生控制台提示:
- MySQL 连接或数据库初始化失败。
- 快捷键名称无效。
- 快捷键对应的技能界面组件不存在。
- 技能配置加载异常。
- 冷却缩减或耗蓝缩减变量不是数字。
- 最大蓝量或回蓝变量解析失败。
- 玩家数据读取或保存失败。
- 对接技能释放失败。
排查时应先定位最早出现的 LySkillView 错误,再处理后续由数据未加载引起的连锁问题。