Skip to content

药水 LyPotion

MySQL 前置要求

启用 MySQL 存储时,必须安装 LyMySQLCore,并确认它已成功连接数据库。否则 MySQL 数据加载、保存、跨服冷却共享和持续效果恢复不会生效。

LyPotion 是一款自定义药水与增益管理插件。服主可以通过 YAML 将带有指定 DisplayName 的普通物品定义为药水,并配置触发方式、使用条件、冷却组、物品扣除、Lore 使用次数、动态数值、即时指令和持续效果。

玩家可以通过主手右键、GermPlugin 按键、DragonCore 按键使用药水。管理员也可以通过 /lyys add 直接触发指定药水,或通过 /lyys use 从普通背包及受支持的自定义槽位读取物品并执行完整使用流程。

药水可以添加临时属性、恢复生命值、恢复饥饿值、执行指令、恢复 SkillAPI 魔力、缩短技能冷却或释放 MythicMobs 技能。持续效果会保存为运行快照,记录剩余时间、已执行次数和下次触发延迟,支持玩家下线暂停或离线自然流逝。

插件信息

项目内容
插件名LyPotion
插件版本1.0.7
作者离渊
主命令/lyys
Java 版本Java 8
编译 APIPaper 1.16.5-R0.1-SNAPSHOT
已确认服务端版本项目仅确认使用 Paper 1.16.5 API 编译,其他版本未在项目文件中确认
配置目录plugins/LyPotion/
药水目录plugins/LyPotion/potion/
本地数据目录plugins/LyPotion/data/
声明的软依赖PlaceholderAPIAttributePlsSX-AttributeGermPluginDragonCoreLyCore

版本兼容说明

原版物品冷却使用数字物品 ID 调用旧版 Bukkit API。跨版本使用前,需要确认目标服务端能够通过数字 ID 正确获取对应材质。

玩法与触发方式

插件会递归扫描 plugins/LyPotion/potion/ 及其子目录中的 .yml 文件。每个 YAML 顶层节点代表一个药水 ID,因此可以在一个文件中定义多个药水,也可以按类型拆分到不同目录。

药水通过物品 DisplayName 识别。没有 DisplayName 的物品不会被识别为药水。

名称写法匹配规则
药水名称忽略大小写,完整匹配 DisplayName
contain@关键字DisplayName 包含指定关键字时匹配
equals@药水名称忽略大小写,完整匹配指定名称

每个药水可以通过 interact-type 限制允许的触发方式。

配置值允许的触发方式
all主手右键和按键均可触发,也是缺省值
hand仅允许主手右键触发
key仅允许 GermPlugin 或 DragonCore 按键触发

非法或空白的 interact-type 会回退为 all,并在控制台输出提示。

触发入口说明
主手右键右键空气或方块时检测主手物品,要求药水允许 handall
GermPlugin 按键根据 register-key 获取萌芽槽位物品,要求药水允许 keyall
DragonCore 按键根据 register-key 获取龙核缓存槽位物品,要求药水允许 keyall
/lyys add按药水 ID直接触发,不检查物品名称,不扣除物品,不受 interact-type 限制
/lyys use读取指定槽位物品,通过 DisplayName 匹配药水并执行正常扣除流程,不受 interact-type 限制

成功定位药水后,插件依次检查玩家数据、冷却和使用条件。全部通过后才会写入冷却、设置可选的原版物品冷却、执行指令、发送成功消息并启动持续效果。正常物品触发只有在药水执行成功后才会扣除物品或减少 Lore 次数。

依赖与功能关系

plugin.yml 中的依赖均为软依赖,但对应功能需要相关插件及 API 实际存在。

插件或组件用途使用要求
PlaceholderAPI解析条件、冷却公式、指令和效果参数,并注册 %lyys_*% 冷却变量使用变量、动态条件或动态计算时需要
LyMySQLCore提供安全的玩家数据加载与保存事件mysql.enable: true 时必须安装并成功连接数据库
LyCore执行 lycore 临时属性效果使用 lycore 效果时需要
AttributePls / AttributePlus API执行 ap 临时属性效果使用 ap 效果时需要
GermPlugin注册萌芽按键并读写萌芽槽位使用萌芽按键或 gp_ 槽位时需要
DragonCore注册龙核按键并读写龙核缓存槽位使用龙核按键或 dc_ 槽位时需要
SkillAPI恢复魔力或缩短技能冷却使用 SkillAPI 效果时需要
MythicMobs释放 mmskill 配置的技能使用 mmskill 效果时需要
LyInventory/lyys use 读取和写回 li_背包ID#槽位ID使用离渊背包槽位时需要

SX-Attribute 虽然出现在软依赖列表中,并保留了不同版本的桥接类,但核心中的初始化代码处于停用状态。当前项目不能确认 SX-Attribute 属性效果已经启用。

主要功能

功能说明
自定义药水使用 YAML 将带 DisplayName 的普通物品定义为药水
多文件加载递归读取 potion/ 及其子目录内的 .yml 文件
名称匹配支持默认完整匹配、contain@ 包含匹配和 equals@ 完全匹配
触发限制可设置全部触发、仅主手右键或仅按键触发
条件判断支持权限、反向权限、数值比较、字符串比较、&& 和 `
动态计算冷却与效果参数支持 PlaceholderAPI、Lore 数值和四则运算
冷却组多个药水可以共用一个冷却组,防止通过更换同类物品绕过冷却
原版物品冷却可在单个药水或全局冷却组映射中设置客户端物品冷却动画
物品扣除药水成功使用后扣除一个物品,失败时不扣除
Lore 使用次数take: false 时可以通过 Lore 保存剩余次数,归零后销毁物品
即时指令成功使用后以玩家、临时 OP 或控制台身份执行指令
权重指令每个权重组独立抽取一个条目,并执行条目中的全部指令
临时属性支持 lycoreap,持续结束、暂停或异常收尾时移除属性来源
周期回血支持固定生命值和最大生命值比例回血
周期恢复支持恢复饥饿值和 SkillAPI 魔力
技能处理支持缩短 SkillAPI 技能冷却和释放 MythicMobs 技能
持续指令按指定 tick 间隔和次数重复执行指令
效果快照保存效果类型、执行进度、剩余时间、下次延迟和效果参数
离线暂停offline-pause: true 时下线暂停,上线后继续剩余效果
离线流逝offline-pause: false 时离线期间继续计时,过期效果不再恢复
本地存储MySQL 关闭时,将冷却和持续效果保存到玩家 UUID 对应的 YAML 文件
安全写入本地数据使用临时文件和 .bak 备份替换,损坏时尝试从备份恢复
MySQL 同步MySQL 模式保存冷却组和持续效果,可用于跨服共享及恢复
冷却变量查询玩家全部有效冷却组或指定冷却组的剩余秒数
调试日志debug: true 时,为 OP 玩家输出快照启动、暂停、恢复、结束和异常信息
指令补全OP 可补全子命令、在线玩家、药水 ID、槽位格式和已有冷却组
Java API提供触发药水、查询冷却数据和查询药水冷却组的方法

物品扣除规则

配置与物品状态处理方式
take: true使用成功后将物品数量减一
take: false,物品数量为 1,Lore 匹配 take-lore使用成功后将 {value} 对应的整数减一
Lore 剩余次数减至 0将物品数量减一,即销毁该物品
take: false,没有匹配到次数 Lore不扣除物品,药水仍可正常触发
物品堆叠数量不为 1不执行 Lore 次数扣除
冷却或条件检查失败不扣除物品,也不修改 Lore 次数

take-lore{value} 只匹配非负整数。次数 Lore 的颜色和文本必须与配置转换后的内容一致。

冷却与数据存储

冷却以 cd-group 为单位记录,值为毫秒级绝对结束时间戳。多个药水使用相同冷却组时,会共同受到该组冷却限制。

存储模式数据位置说明
本地 YAMLplugins/LyPotion/data/玩家UUID.yml保存 cd-groupactive-effect,适合单服使用
MySQLlypotion使用玩家名作为数据键,在 data 字段保存序列化后的冷却和效果快照

本地 YAML 使用 UTF-8 无 BOM 写入。保存时先生成唯一临时文件,再把原主文件移动到 .bak,最后替换主文件。读取时如果主文件损坏、包含 NUL 字符或无法解析,插件会删除损坏主文件并尝试从 .bak 恢复。

MySQL 模式依赖 LyMySQLCore 提供的安全加载和保存事件。只填写数据库地址、安装 MySQL 驱动或成功创建连接池,不能替代该前置插件。

启用 MySQL 后,如果数据库连接尚未完成,玩家登录会被阻止,避免玩家在数据未加载时进入服务器。

持续效果

推荐使用 stronger-effect。旧版 effect 仍保留兼容处理,但示例配置已经将其标记为旧写法。

效果类型作用
lycore通过 LyCore 添加临时属性来源
ap通过 AttributeAPI 添加临时属性
heal按间隔和次数恢复固定生命值
healpercent按最大生命值比例恢复生命值
food按间隔和次数恢复饥饿值
command按间隔和次数执行指令
skillapi-mana按间隔和次数恢复 SkillAPI 魔力
skillapi-cd按间隔和次数减少 SkillAPI 技能冷却;新版写法作用于玩家全部技能
mmskill按间隔和次数释放指定 MythicMobs 技能

stronger-effect 解析器仍识别 icon 类型及其 ttimenameloreid 参数,但当前代码没有创建显示任务,也没有输出可见图标。不要将其作为已完成的效果使用。

持续效果以快照运行。循环效果会记录触发间隔、总次数、已执行次数和下次延迟;属性效果会记录属性来源键、属性列表和剩余持续时间。玩家下线时,插件会取消在线 Bukkit 任务并保存尚未完成的快照。

指令

所有已确认的服务端管理指令都要求发送者为 OP。项目没有注册独立权限节点。

指令说明
/lyys查看管理指令和自定义槽位格式
/lyys reload重载 config.yml;启用 MySQL 时重新创建连接池;清空并重新扫描全部药水配置
/lyys add [玩家] [药水ID]为在线玩家直接触发指定药水,不检查物品名称、不扣除物品,仍检查冷却和条件
/lyys use [玩家] [槽位ID]读取在线玩家指定槽位中的物品,按名称匹配药水并执行正常扣除流程
/lyys clear [玩家] [冷却组ID]清除在线玩家指定冷却组的冷却记录

/lyys use 槽位格式

格式说明
035普通玩家背包槽位
gp_槽位IDGermPlugin 槽位标识
dc_槽位IDDragonCore 缓存槽位 ID
li_背包ID#槽位IDLyInventory 背包 ID 与槽位 ID

/lyys add/lyys use/lyys clear 只处理在线玩家。玩家数据尚未加载时,药水不会成功触发。

变量

安装并启用 PlaceholderAPI 后,插件会注册标识符 lyys

变量返回内容
%lyys_all%返回玩家全部尚未结束的冷却组,每行格式为“冷却组 剩余秒数”
%lyys_冷却组ID%返回指定冷却组的剩余秒数

指定冷却组已经结束时返回 0;玩家数据尚未加载或冷却组不存在时返回空字符串。剩余秒数采用向上补一秒的显示方式。

药水条件、冷却表达式、即时指令和持续效果参数也可以使用 PlaceholderAPI 提供的玩家变量。具体语法见插件变量药水配置

Java API

核心完成加载后,主插件实例会设置 LyPotionAPI 实现。其他插件可以通过 LyPotion 主插件实例取得 API。

方法说明
boolean addPotion(Player player, String potionId)尝试触发指定药水;自动初始化玩家冷却容器,成功触发返回 true
Map<String, Long> getCooldownMap(Player player)返回玩家冷却组及结束时间戳的只读副本
long getCooldown(Player player, String cooldownGroupId)返回指定冷却组的结束时间戳,不存在时返回 0
String getCooldownGroupId(String potionId)返回指定药水的冷却组 ID,不存在时返回空字符串

getCooldownMapgetCooldown 返回毫秒级绝对结束时间,不是剩余秒数。调用方需要使用当前时间自行计算剩余时间。

addPotion 不会检查物品名称,也不会扣除物品,但会执行药水自身的冷却、条件、指令和效果逻辑。

运行机制

  1. 主插件启动后加载基础配置并等待核心完成加载。
  2. 核心加载后重载配置,初始化选定的数据存储方式,并设置 Java API 实现。
  3. 插件递归扫描 potion/ 目录,将每个 YAML 顶层节点加载为一个药水定义。
  4. 玩家上线时,从本地 YAML 或 MySQL 读取冷却组和未完成的持续效果快照。
  5. 玩家右键、按键或执行管理指令时,插件定位药水并读取物品 Lore 动态数值。
  6. 插件依次检查冷却、权限条件和表达式条件。
  7. 检查通过后写入冷却,设置可选的原版物品冷却,并执行即时指令、权重指令和成功消息。
  8. 持续效果转换为运行快照,记录执行间隔、次数、结束时间、效果参数和离线策略。
  9. 玩家下线时冻结快照、取消在线任务,并将冷却和未完成效果保存到当前数据源。
  10. 玩家再次上线时恢复仍然有效的快照;剩余时间已经归零的效果不会重新运行。

注意事项

  • potion/示例药水配置.yml 会在每次重载时被强制覆盖,只用于参考,不要直接作为正式配置修改。
  • /lyys reload 会清空并重新构建全部药水定义。所有正式药水文件必须保持有效 YAML 格式。
  • 插件只读取扩展名为 .yml 的药水文件,并跳过文件名为 示例药水配置.yml 的默认示例。
  • register-key 只在核心加载时注册。修改或新增按键后需要重启服务器,单独执行 /lyys reload 不会重新注册键位。
  • GermPlugin 与 DragonCore 同时启用时,两套初始化逻辑都会清空键位映射。由于 DragonCore 在后执行,最终可能只保留后一次写入的映射。
  • 原版物品冷却可由药水内的 minecraft-cooldown-effect 设置;该值为 0 时,才会读取全局 minecraft-cooldown-group.冷却组ID
  • 持续效果会创建 Bukkit 定时任务。配置大量高频效果时,应控制触发间隔、次数和同时在线人数。
  • 数学计算器只处理数字、+-*/ 和括号。非法表达式可能导致条件或旧版效果执行异常;新版效果参数解析失败时会输出错误并使用默认值。
  • condition 中的多个列表项必须全部通过。单条条件内部可以使用 &&||,但解析器不会按引号或括号保护逻辑分隔符。
  • 名称匹配依赖物品 DisplayName。普通名称比较和 equals@ 均忽略大小写,contain@ 使用区分大小写的包含判断。
  • 权重指令的权重必须是可解析的整数,并且每个条目至少应包含一条指令。
  • take-lore 次数扣除只在物品堆叠数量为 1、物品具有 Lore 且文本符合模板时生效。
  • 开启 debug 后,只会为触发快照的 OP 玩家输出详细生命周期日志。

页面索引

页面内容
配置说明全局消息、调试、MySQL、原版冷却和按键配置
药水配置名称匹配、触发方式、条件、扣除、冷却、指令和动态数值
效果配置stronger-effect 与旧版 effect 的类型、参数和执行规则
插件变量PlaceholderAPI 冷却变量与配置内变量规则
常见问题配置加载、依赖、存储、按键和效果排查
更新日志版本与文档变更记录