药水配置
LyPotion 用 YAML 文件定义自定义药水。药水可以绑定到带有指定显示名的物品,也可以通过普通背包、自定义槽位、DragonCore、GermPlugin 或插件 API 触发。
插件会为药水提供以下能力:
- 物品显示名匹配与 Lore 数值读取。
- 主手右键、DragonCore 按键和 GermPlugin 按键触发限制。
- 使用条件、权限条件和 PlaceholderAPI 表达式。
- 独立冷却、冷却组和原版物品冷却。
- 直接扣除物品或按 Lore 使用次数扣除。
- 立即指令、权重随机指令和使用成功消息。
- 属性、回血、饥饿值、SkillAPI、MythicMobs 和循环指令效果。
- 本地 YAML 或 MySQL 保存玩家冷却与未结束的药水效果。
项目的编译依赖为 Paper API 1.16.5-R0.1-SNAPSHOT,Java 编译目标为 1.8。项目文件还声明了 PlaceholderAPI、AttributePls、SX-Attribute、GermPlugin、DragonCore 和 LyCore 的软依赖;具体效果还需要对应插件提供 API。
药水文件放在 plugins/LyPotion/potion/ 目录。插件会递归读取该目录及其子目录中的 .yml 文件,每个文件的顶层节点代表一种药水,顶层节点名称就是药水 ID。
示例药水配置.yml 会在每次重载时被覆盖,并且不会作为正式药水加载。请新建其他 YAML 文件保存实际配置。
完整结构
yaml
"示例药水":
name: "测试药水"
interact-type: "all"
take: true
take-lore: "&a右键使用药水,药水将在&6{value}次&a后彻底销毁!"
condition:
- "%player_level% > 5 <-> &c测试药水必须在 5 级后使用!"
lore-placeholder:
力量: "力量+<value>"
cd: "10.5"
cd-group: "红药水"
minecraft-cooldown-effect: 0
offline-pause: true
stronger-effect:
- "heal{i=20;c=5;a=10}"
commands:
- "[console]say %player_name% 使用了测试药水"
weight-command:
奖励组:
- "30#[console]tell %player_name% 触发了奖励一"
- "70#[console]tell %player_name% 触发了奖励二"
use-message: "&7你触发了测试药水,进入冷却 &6{cd} &7秒!"配置项
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 顶层节点 | 无 | 药水 ID,用于指令、API、冷却效果和内部数据识别。 |
name | 必填 | 用于匹配物品显示名。通过药水 ID 直接触发时不检查该项。 |
interact-type | all | 限制主手右键或 DragonCore、GermPlugin 按键触发方式。 |
take | false | 是否在使用成功后扣除一个物品。 |
take-lore | 空字符串 | take: false 时用于读取和扣除物品剩余使用次数。 |
condition | 空列表 | 使用药水前依次检查的条件。 |
lore-placeholder | 空 | 从物品 Lore 中提取数值变量。 |
cd | 0 | 冷却秒数或数学表达式。 |
cd-group | default | 冷却组 ID,同组药水共享冷却。 |
minecraft-cooldown-effect | 0 | 触发原版物品冷却的数字物品 ID。为 0 时读取全局冷却组映射。 |
offline-pause | true | 玩家离线时是否暂停仍在运行的药水效果。 |
stronger-effect | 空列表 | 新版药水效果,使用 类型{参数} 格式。 |
effect | 空列表 | 旧版药水效果,继续兼容。新配置建议使用 stronger-effect。 |
commands | 空列表 | 药水使用成功后立即执行的指令。 |
weight-command | 空 | 按组随机抽取并执行的权重指令。 |
use-message | 空字符串 | 药水使用成功后发送给玩家的消息。 |
name 未配置时无法正常完成物品名称匹配,建议始终填写。
物品名称匹配
name 支持以下三种写法:
| 写法 | 说明 |
|---|---|
测试药水 | 完整匹配物品显示名,不区分大小写。 |
equals@测试药水 | 完整匹配物品显示名,不区分大小写。 |
contain@药水 | 物品显示名包含指定文本,包含判断区分大小写。 |
yaml
"恢复药水":
name: "contain@恢复药水"只有带有显示名的物品才能通过主手右键、DragonCore 按键、GermPlugin 按键或 /lyys use 的槽位检测触发。
直接通过 /lyys add 或插件 API 传入药水 ID 时,不检查物品显示名,也不会读取物品 Lore 变量。
触发方式
yaml
interact-type: "all"| 值 | 主手右键 | DragonCore、GermPlugin 按键 |
|---|---|---|
all | 允许 | 允许 |
hand | 允许 | 不允许 |
key | 不允许 | 允许 |
未配置、留空或填写非法值时,插件会回退为 all。非法值会向控制台输出提示。
interact-type 只由主手右键监听器和键位监听器检查。管理员通过 /lyys add、/lyys use 或插件 API 触发时不受该配置限制。
物品扣除
直接扣除物品
yaml
take: true药水通过冷却和条件检查后,扣除触发槽位中的一个物品。冷却中或条件不满足时不会扣除。
Lore 使用次数
yaml
take: false
take-lore: "&a右键使用药水,药水将在&6{value}次&a后彻底销毁!"当 take: false 时,插件会尝试在物品 Lore 中匹配 take-lore,并读取 {value} 位置的非负整数次数。
例如物品 Lore 为:
text
§a右键使用药水,药水将在§65次§a后彻底销毁!药水使用成功后,次数会变为 4。次数从 1 减少到 0 时,物品会被删除。
使用次数机制需要同时满足以下条件:
- 当前物品堆叠数量必须为
1。 - 物品必须存在 Lore。
take-lore必须包含{value}。- 实际 Lore 必须匹配
{value}左右两侧的文本。 {value}对应内容必须是整数。
如果物品数量不为 1、没有 Lore 或没有找到匹配行,插件不会扣除物品,可以继续使用该药水。
如果 take: false 且 take-lore 不包含 {value},插件会把该物品作为无限使用物品处理。
扣除物品只发生在药水成功使用后。冷却中、条件失败或玩家冷却数据尚未加载时,不会扣除物品。
使用条件
yaml
condition:
- "%player_level% > 5 <-> &c测试药水必须在 5 级后使用!"
- "permission:vip.use<->&c你需要 vip.use 权限!"
- "nopermission:potion.blocked<->&c你当前不能使用该药水!"所有条件按配置顺序检查。任意一条条件不满足,药水都不会进入冷却,也不会执行指令或效果。
条件与失败提示使用 <-> 分隔:
text
条件<->失败提示失败提示可以省略。省略后,条件不满足时会直接停止使用,不向玩家发送消息。
权限条件
| 写法 | 通过条件 |
|---|---|
permission:权限节点 | 玩家拥有指定权限。 |
nopermission:权限节点 | 玩家没有指定权限。 |
权限节点由药水作者自行填写。LyPotion 不会根据药水配置自动注册这些权限节点。
表达式条件
普通条件会先经过 PlaceholderAPI 替换,再进行逻辑和数值判断。
支持的比较运算符:
| 运算符 | 说明 |
|---|---|
> | 大于 |
>= | 大于或等于 |
== | 等于 |
!= | 不等于 |
< | 小于 |
<= | 小于或等于 |
支持使用 && 和 || 组合条件:
yaml
condition:
- "%player_level% >= 10 && %player_health% > 5"
- "%player_world% == 'world' || %player_world% == 'resource'"规则如下:
&&两侧都通过时,整组条件才通过。||任意一侧通过时,整组条件就通过。- 数值部分支持
+、-、*、/和圆括号运算。 - 字符串常量可以使用单引号或双引号包裹。
- 没有比较运算符时,只有文本
true会被视为通过。 &&和||不会把圆括号解析为逻辑分组语法;圆括号只用于数学表达式。
表达式解析失败时可能向控制台抛出异常,配置中的条件应保持为有效表达式。
Lore 数值变量
yaml
lore-placeholder:
力量: "力量+<value>"
品质: "品质:<value>级"每条规则必须使用 <value> 标记数值位置。插件会遍历物品 Lore,截取左右模板之间的文本,并把结果解析为小数。
例如物品 Lore 包含:
text
力量+25
品质:3级可以得到以下变量:
| 变量 | 值 |
|---|---|
{v.力量} | 25 |
{v.品质} | 3 |
Lore 变量可以用于:
cd冷却表达式。commands立即指令。stronger-effect参数和属性数值。- 旧版
effect效果。
如果物品存在 Lore,但某条规则没有匹配到数值,该变量会使用 0。如果物品没有 Lore,插件不会生成对应的 Lore 变量。
Lore 中提取到的内容必须能够转换为数字,否则插件会在控制台输出非法变量值提示,并继续查找其他 Lore 行。
直接通过药水 ID 使用时,调用方不会提供物品 Lore,因此 Lore 变量为空或使用默认值 0。
冷却
yaml
cd: "%player_level% * 1.5 + {v.品质}"
cd-group: "恢复药水"cd 的单位是秒,支持整数、小数、PlaceholderAPI 变量、Lore 数值变量和数学运算。
数学表达式支持:
- 加法
+ - 减法
- - 乘法
* - 除法
/ - 圆括号
()
同一个 cd-group 下的所有药水共享冷却。例如两种药水都使用 恢复药水 冷却组,任意一种进入冷却后,另一种也无法使用。
玩家在冷却中尝试使用时,会收到 config.yml 中 message.cooldown 配置的消息,其中 {time} 会替换为剩余秒数。
冷却写入发生在条件全部通过后,立即指令、权重指令和药水效果执行前。
原版物品冷却
yaml
minecraft-cooldown-effect: 322该配置不为 0 时,插件会按照药水冷却时间调用 Bukkit 原版物品冷却接口。配置值是数字物品 ID。
如果该项为 0,插件会尝试读取 config.yml 中与当前 cd-group 对应的 minecraft-cooldown-group:
yaml
minecraft-cooldown-group:
恢复药水: 322药水内的 minecraft-cooldown-effect 优先级高于全局冷却组映射。数字物品 ID 属于旧版 Bukkit 物品识别方式,在不支持数字 ID 的服务端版本上可能无法正确找到物品类型。
离线暂停与效果恢复
yaml
offline-pause: trueoffline-pause 控制玩家退出服务器时,尚未结束的药水效果如何处理。
| 值 | 离线行为 |
|---|---|
true | 下线时暂停效果并保存剩余进度;玩家上线后继续执行。 |
false | 离线期间时间继续流逝;上线时效果已过期则不恢复,未过期则按剩余时间恢复。 |
该机制适用于插件创建的持续效果快照,包括属性、回血、饥饿值、循环指令、SkillAPI 和 MythicMobs 技能效果。
玩家下线时,插件会取消在线运行任务并保存仍未结束的快照。玩家上线后,插件会重新创建对应任务。属性效果在恢复时会重新挂载属性来源,结束或暂停时会移除对应来源。
冷却组会独立持久化,不受 offline-pause 控制。
本地 YAML 存储
本地存储模式下,冷却和活动效果保存在:
text
plugins/LyPotion/data/<玩家UUID>.yml保存内容包括:
cd-group:冷却组到期时间。active-effect:尚未结束的药水效果快照。
插件保存本地数据时会使用临时文件和 .bak 备份文件。主数据损坏时会尝试从备份恢复。
MySQL 存储
启用 mysql.enable: true 后,冷却和活动效果会保存到 MySQL。MySQL 模式必须安装 LyMySQLCore,并且 LyPotion 成功连接数据库后,相关跨服读取、保存和效果恢复功能才会生效。
MySQL 模式使用 LyMySQLCore 提供的安全玩家加载和保存事件读取、写入玩家数据。数据库连接失败或 LyMySQLCore 未正常触发对应事件时,玩家冷却数据可能无法加载,药水不会正常执行。
立即指令
yaml
commands:
- "[console]say %player_name% 使用了药水"
- "[op]spawn"
- "[player]msg %player_name% 当前力量为 {v.力量}"| 前缀 | 执行身份 |
|---|---|
[console] | 控制台 |
[op] | 临时给予玩家 OP 后,以玩家身份执行,执行完成后恢复原状态。 |
[player] | 玩家 |
| 无前缀 | 玩家 |
立即指令会在药水进入冷却后执行,支持 PlaceholderAPI 变量和 {v.变量名} Lore 数值变量。
指令内容不要填写开头的 /。
commands 中的 Lore 变量会在执行前替换。PlaceholderAPI 变量由指令执行工具处理。
权重指令
yaml
weight-command:
普通奖励:
- "30#[console]tell %player_name% 获得普通奖励"
- "70#[player]msg %player_name% 获得另一种奖励"
额外事件:
- "50#[console]say %player_name% 触发了事件#[player]spawn"
- "50#[player]msg %player_name% 本次没有额外效果"每个权重组都会独立抽取一次。一个药水可以同时配置多个权重组,每个组都会产生自己的抽取结果。
单条格式为:
text
权重#指令一#指令二第一个字段必须是整数权重,后续字段都是该条目被抽中时执行的指令。同一条目可以包含多条指令。
权重指令支持 [console]、[op]、[player] 和 PlaceholderAPI 变量。当前实现不会替换权重指令中的 {v.变量名},需要使用 Lore 数值时应改用 commands 或效果配置。
权重总和由所有条目的第一个字段相加得到。权重为负数、非整数或空列表可能导致配置解析或随机抽取异常。
使用成功消息
yaml
use-message: "&7你触发了测试药水,进入冷却 &6{cd} &7秒!"消息会在药水成功进入冷却、执行立即指令和权重指令后发送。
| 占位符 | 说明 |
|---|---|
{cd} | 本次计算得到的冷却秒数,保留一位小数。 |
use-message 会转换 & 颜色代码。当前实现不会对该消息执行 PlaceholderAPI 替换,也不会替换 Lore 数值变量。
强化效果 stronger-effect
stronger-effect 是当前推荐的效果配置格式:
yaml
stronger-effect:
- "heal{i=20;c=5;a=10}"基础语法为:
text
类型{参数名=参数值;参数名=参数值}参数使用英文分号 ; 分隔。类型和参数名不区分大小写。
同一种效果类型的多条配置会在解析时合并为同一个类型的参数列表,不会作为多个完全独立的效果逐条运行。建议同一个药水中每种 stronger-effect 类型只配置一条。
通用参数
| 参数 | 说明 |
|---|---|
i | 循环效果的触发间隔,单位 tick,最小为 1,默认 20。 |
c | 循环效果的触发次数,最小为 1,默认 1。 |
t | 属性效果持续时间,单位 tick。必须大于 0。 |
time | icon 类型读取的时间参数。 |
a | 效果主要数值或技能 ID。 |
m | healpercent 类型的最大生命值比例。 |
cmd | command 类型循环执行的指令。 |
id | icon 类型读取的标识。 |
name | icon 类型读取的名称。 |
lore | icon 类型读取的描述。 |
level | 会被识别为参数,但当前 mmskill 实现不会使用该值。 |
数值参数支持 PlaceholderAPI、Lore 数值变量和数学表达式:
yaml
stronger-effect:
- "heal{i=20;c=5;a=<{v.力量}*0.5+%player_level%>}"参数被 <表达式> 包裹时,插件会先替换变量,再交给数学表达式计算器处理。普通数值参数也会尝试作为数学表达式计算。
LyCore 属性
yaml
stronger-effect:
- "lycore{t=200;攻击力=5;生命力=<{v.力量}*1.5>}"| 参数 | 说明 |
|---|---|
t | 属性持续时间,单位 tick,必须大于 0。 |
| 其他参数 | 作为属性名称和属性数值传给 LyCore 属性系统。 |
该效果需要服务器存在 LyCoreAPI。缺少 LyCore 时,该条效果无法正常执行。
属性参数支持以下形式:
text
攻击力=5
攻击力+5
攻击力-5
攻击力=<{v.力量}*1.5>属性名称和最终属性文本仍需符合 LyCore 属性系统的格式要求。
AttributeAPI 属性
yaml
stronger-effect:
- "ap{t=200;攻击力=5}"参数规则与 lycore 相同,通过 AttributeAPI 添加临时属性,并在持续时间结束后删除对应属性来源。缺少对应 AttributeAPI 时,该效果无法执行。
固定回血
yaml
stronger-effect:
- "heal{i=20;c=5;a=10}"| 参数 | 说明 |
|---|---|
i | 每次回血之间的间隔,单位 tick。 |
c | 回血次数。 |
a | 每次恢复的生命值。 |
回血不会超过玩家最大生命值,玩家死亡时不会处理。
百分比回血
yaml
stronger-effect:
- "healpercent{i=20;c=5;m=0.1}"m 是最大生命值比例,0.1 表示每次恢复最大生命值的 10%。如果没有填写 m,插件会尝试读取 a。
恢复饥饿值
yaml
stronger-effect:
- "food{i=20;c=5;a=1}"a 会转换为整数饥饿值。恢复结果不会超过 20,玩家死亡时不会处理。
循环指令
yaml
stronger-effect:
- "command{i=20;c=5;cmd=[console]say %player_name% 的药水效果触发}"cmd 支持 [console]、[op]、[player]、PlaceholderAPI 和 Lore 数值变量。变量会在效果创建时完成替换,然后按照 i 和 c 循环执行。
SkillAPI 回蓝
yaml
stronger-effect:
- "skillapi-mana{i=20;c=5;a=2}"每次为玩家恢复 a 点 SkillAPI Mana,不会超过最大 Mana。该效果需要 SkillAPI。
SkillAPI 减少冷却
yaml
stronger-effect:
- "skillapi-cd{i=20;c=5;a=1}"每次为玩家当前拥有的所有 SkillAPI 技能减少 a 秒冷却。a 为 0 时不会创建效果。该效果需要 SkillAPI。
MythicMobs 技能
yaml
stronger-effect:
- "mmskill{i=20;c=1;a=技能ID}"每次触发时,以玩家为施法者释放 a 指定的 MythicMobs 技能。该效果需要兼容当前接口的 MythicMobs。
解析器会识别 level 参数,但当前实现只读取 a,不会使用 level。
icon 类型
yaml
stronger-effect:
- "icon{time=200;id=恢复药水;name=恢复效果;lore=剩余时间 {time}}"当前实现会读取 time、t、id、name 和 lore,但不会创建显示任务,也不会发送界面内容,因此该类型目前不会产生实际效果。
旧版效果 effect
effect 使用 # 分隔参数,当前版本仍然兼容。新配置应优先使用 stronger-effect。
yaml
effect:
- "heal#10#5"旧版循环效果固定每 20 tick 执行一次,最后一个参数通常是执行次数或持续秒数,具体取决于效果类型。
| 类型 | 格式 | 说明 |
|---|---|---|
as | as#属性文本#持续秒数 | 通过 AttrAPI 添加临时属性。 |
ap | ap#属性文本#持续秒数 | 通过 AttributeAPI 添加临时属性。 |
lycore | lycore#属性文本#持续秒数 | 通过 LyCoreAPI 添加临时属性。 |
as-eval | as-eval#属性名~表达式#持续秒数 | 计算属性数值后,通过 AttrAPI 添加属性。 |
ap-eval | ap-eval#属性名~表达式#持续秒数 | 计算属性数值后,通过 AttributeAPI 添加属性。 |
heal | heal#每次数值#次数 | 每秒恢复固定生命值。 |
proportion-heal | proportion-heal#百分数#次数 | 每秒按最大生命值百分比回血,例如 10 表示 10%。 |
food | food#每次数值#次数 | 每秒恢复饥饿值。 |
command | command#指令#次数 | 每秒执行一次指令。 |
skillapi-mana | skillapi-mana#每次数值#次数 | 每秒恢复 SkillAPI Mana。 |
skillapi-cd | skillapi-cd#技能ID#减少秒数#次数 | 每秒减少指定 SkillAPI 技能的冷却。 |
yaml
effect:
- "ap#攻击力10#10"
- "heal#10#5"
- "proportion-heal#10#5"
- "food#1#5"
- "command#[console]say %player_name% 的效果触发#5"
- "skillapi-mana#5#10"
- "skillapi-cd#技能ID#2#5"
- "ap-eval#攻击力~{v.力量}*1.5*%player_level%#10"旧版属性效果的持续时间会从秒转换为 tick。旧版循环效果固定每 20 tick 执行一次。
指令
服务端功能加载并授权通过后,/lyys 由服务端命令处理器接管。以下子命令只允许 OP 使用。
| 指令 | 说明 |
|---|---|
/lyys | 显示服务端帮助。 |
/lyys reload | 重载 config.yml 和 potion/ 下的药水文件。重载时会重新覆盖示例药水配置文件。 |
/lyys add <玩家> <药水ID> | 直接按药水 ID 为在线玩家触发药水,不检查物品显示名和 interact-type。 |
/lyys use <玩家> <槽位表达式> | 检查指定槽位中的物品并尝试使用对应药水。 |
/lyys clear <玩家> <冷却组ID> | 清除在线玩家指定冷却组的 CD。 |
/lyys use 支持以下槽位表达式:
| 表达式 | 说明 |
|---|---|
0 至 35 | 普通玩家背包槽位。 |
dc_<槽位ID> | DragonCore 缓存槽位。 |
gp_<槽位ID> | GermPlugin 槽位。 |
li_<背包ID>#<槽位ID> | LyInventory 槽位。 |
<玩家>、<药水ID>、<槽位ID> 和 <冷却组ID> 是命令参数占位符,实际输入时不要保留尖括号。
没有代码证据表明 LyPotion 注册了固定 Bukkit 权限节点;命令权限由 OP 检查实现。
PlaceholderAPI 变量
PlaceholderAPI 扩展标识符为 lyys。
| 变量 | 返回内容 |
|---|---|
%lyys_all% | 返回玩家当前仍在冷却中的所有冷却组及剩余秒数,每组占一行。 |
%lyys_<冷却组ID>% | 返回指定冷却组的剩余秒数。冷却结束时返回 0,冷却组不存在时返回空字符串。 |
读取变量时玩家必须拥有已加载的冷却数据。玩家数据尚未加载或玩家对象为空时,扩展返回空字符串。
配置中的条件、冷却、属性表达式、指令和提示文本是否支持 PlaceholderAPI,要以各字段的实际处理逻辑为准:
condition支持 PlaceholderAPI。cd支持 PlaceholderAPI。commands支持 PlaceholderAPI。weight-command支持 PlaceholderAPI。stronger-effect的数值参数、属性表达式和技能 ID 支持 PlaceholderAPI。use-message当前不会执行 PlaceholderAPI 替换。
插件 API
服务端功能加载后会注册 LyPotion API。已确认的 API 能力如下:
| 方法 | 作用 |
|---|---|
addPotion(player, potionId) | 按药水 ID 触发药水。玩家对象或药水 ID 无效时返回 false。 |
getCooldownMap(player) | 获取玩家冷却组到期时间的只读副本。 |
getCooldown(player, cooldownGroupId) | 获取指定冷却组的到期时间;不存在时返回 0。 |
getCooldownGroupId(potionId) | 获取药水对应的冷却组 ID;药水不存在时返回空字符串。 |
通过 API 触发药水时会创建玩家冷却数据,因此不会依赖物品显示名、物品数量、Lore、主手右键或键位触发限制。
执行顺序
药水使用时按以下顺序处理:
- 检查玩家冷却数据是否已加载。
- 检查当前冷却组是否仍在冷却。
- 按顺序检查
condition。 - 计算
cd并写入冷却组。 - 触发药水内或全局配置的原版物品冷却。
- 执行
commands。 - 每个
weight-command分组独立抽取并执行一次。 - 发送
use-message。 - 创建旧版
effect效果快照。 - 创建新版
stronger-effect效果快照。 - 向触发监听器返回成功结果,由监听器扣除物品或更新次数 Lore。
如果玩家的冷却数据尚未完成加载,药水不会执行。MySQL 模式下必须确保 LyMySQLCore 的安全玩家加载事件正常触发,并且数据库连接可用。
配置文件重载规则
/lyys reload 会执行以下操作:
- 重新加载
plugins/LyPotion/config.yml。 - 强制覆盖
plugins/LyPotion/potion/示例药水配置.yml。 - 根据
mysql.enable初始化 MySQL 连接或使用本地 YAML 存储。 - 清空已加载的药水数据。
- 递归扫描
plugins/LyPotion/potion/下的所有.yml文件。 - 跳过
示例药水配置.yml,加载其他文件的顶层节点。
药水文件可以放在 potion/ 的子目录中。不同文件中的顶层节点应使用不同药水 ID,避免后加载的数据覆盖前面的同名药水。
常见问题
为什么右键没有触发药水?
按以下顺序检查:
- 物品是否有显示名。
- 显示名是否符合
name的匹配规则。 interact-type是否允许主手右键。- 玩家冷却数据是否已经加载。
condition是否全部通过。- 药水文件是否位于
plugins/LyPotion/potion/目录或其子目录中。 - 是否执行过
/lyys reload,并检查控制台是否有 YAML 或效果解析错误。
为什么使用次数 Lore 没有减少?
检查物品堆叠数量是否为 1、物品是否有 Lore、take-lore 是否包含 {value},以及实际 Lore 是否匹配模板。Lore 中的次数必须是整数。
为什么药水 ID 直接触发时 Lore 变量是 0?
通过 /lyys add 或 API 传入药水 ID 时没有物品对象,插件无法读取物品 Lore,因此 {v.变量名} 不会得到物品中的数值。
为什么 MySQL 模式下冷却没有跨服保存?
确认以下条件全部满足:
- 已安装 LyMySQLCore。
mysql.enable已设置为true。- MySQL 地址、端口、数据库名、用户名和密码正确。
- LyPotion 控制台显示数据库连接成功。
- LyMySQLCore 正常触发安全玩家加载和保存事件。
只有安装 LyMySQLCore 且 LyPotion 成功连接数据库后,MySQL 相关跨服冷却、活动效果读取和保存功能才会生效。
为什么 stronger-effect 没有执行?
检查效果类型拼写、参数格式、表达式和对应前置插件。属性效果需要相应属性 API,SkillAPI 效果需要 SkillAPI,MythicMobs 效果需要 MythicMobs。icon 类型当前不会产生实际界面效果。
为什么使用 use-message 时 PlaceholderAPI 没有替换?
当前实现只替换颜色代码和 {cd},不会对 use-message 执行 PlaceholderAPI 或 Lore 变量替换。
为什么 weight-command 中的 {v.变量名} 没有替换?
权重指令当前只执行 PlaceholderAPI 替换,不处理 Lore 数值变量。需要使用 Lore 数值时,应改用 commands 或支持该变量的效果配置。
为什么安装 DragonCore 和 GermPlugin 后键位配置异常?
当前实现为 DragonCore 和 GermPlugin 注册键位时都会清空共用的键位映射。两个插件同时启用时,后注册的模块可能覆盖前一个模块的映射。需要根据实际启用的键位模块检查 register-key 配置和控制台注册日志。