Skip to content

配置说明

LyAlchemy 的主配置位于 plugins/LyAlchemy/config.yml。丹方、丹药和四个 GUI 使用独立目录保存。执行 /lyld reload 会重新读取这些配置;mysql.enable 只在插件启动时决定存储模式,修改后必须重启服务器。

文件位置

路径说明
config.yml物品解析、奖励投递、玩家数据、属性、探索、权限倍率、GUI 文本、消息和音效
recipe/*.yml丹方配置,最外层节点为丹方 ID
item/*.yml丹药配置,最外层节点为丹药 ID
gui/丹方界面.yml已学丹方列表界面
gui/丹药界面.yml已服用丹药列表界面
gui/炼制界面.yml丹方炼制、材料展示和奖励领取界面
gui/探索界面.yml未知丹方探索界面
playerdata/<玩家UUID>.ymlYAML 存储模式下的玩家数据,同时保留 .bak 备份
LyAlchemy_player_dataMySQL 存储模式下的玩家数据表

主配置 config.yml

物品库与奖励投递

yaml
item-provider: ''
delivery-order:
  - 'LyLootsWarehouse'
  - 'LyWarehouse'
  - 'SpaceRingPlus'
  - 'StarStorage'
  - 'inventory'
配置项说明
item-provider丹方材料和丹药产物未填写物品库前缀时使用的默认物品库。留空时默认使用 MythicMobs
delivery-order炼制奖励的投递顺序,从上到下依次尝试

材料和丹药产物可以使用 物品库@物品ID 明确指定来源,也可以省略前缀并使用 item-provider。支持的物品库包括:

MythicMobsLyItemSaveAzureFlowNeonFlashSX-ItemNeigeItemsOriginAttribute

MythicMobsLyItemSave 同时启用时:

  • MythicMobs@物品ID 优先查询 MythicMobs,找不到时回退 LyItemSave。
  • LyItemSave@物品ID 优先查询 LyItemSave,找不到时回退 MythicMobs。
  • 只启用其中一个物品库时,两个前缀都可以访问已启用的物品库。

delivery-order 只支持以下目标:

目标说明
inventory玩家背包
LyLootsWarehouseLyLootsWarehouse 仓库
LyWarehouseLyWarehouse 仓库
SpaceRingPlusSpaceRingPlus 仓库
StarStorageStarStorage 仓库

未安装或未启用的仓库会自动跳过。列表为空或过滤后没有有效目标时,默认使用 inventory。所有目标处理后仍有剩余奖励时,物品会掉落在玩家位置。

GUI 槽位、丹方图标和丹药图标只使用原版物品 ID,例如 262:0PAPER:0APPLE:0,不使用物品库,也不支持 Vanilla@。物品库规则只适用于丹方材料和丹药实际产物。

玩家数据与存储模式

yaml
loop-save-thread-time: 6000
mysql:
  enable: false
  databasename: mc2
  username: mc2
  password: mc1234
  port: 3306
  ip: 127.0.0.1
配置项说明
loop-save-thread-timeYAML 自动保存间隔,单位为秒。设置为 0 或负数时关闭自动保存
mysql.enablefalse 使用 YAML,true 使用 MySQL。只在启动时读取,修改后必须重启服务器
mysql.databasenameMySQL 数据库名
mysql.usernameMySQL 用户名
mysql.passwordMySQL 密码,正式环境应修改默认值
mysql.portMySQL 端口
mysql.ipMySQL 地址

启用 MySQL 存储时,必须安装并启用 LyMySQLCore,并且数据库连接和表初始化成功后玩家数据读写才会生效。连接或初始化失败时插件会卸载,不会自动回退到 YAML。

YAML 数据位于 playerdata/<玩家UUID>.yml。保存时使用临时文件、.bak 备份和原子替换;主文件损坏时会尝试从备份恢复。

MySQL 模式使用 LyAlchemy_player_data 表,玩家名称作为主键,data 字段保存与 YAML 文件相同的完整数据文本。玩家改名后会产生新的数据行,不会自动迁移旧名称的数据。

两种模式都会保存以下数据:

数据节点说明
learned-recipes玩家已学会的丹方 ID
recipe-progress各丹方独立的熟练度等级和经验
medicine-counts各丹药累计服用次数
exploration-cooldown-until探索冷却截止时间,单位为 Unix 毫秒时间戳
crafting-task当前唯一炼制任务

crafting-task.status 支持 CRAFTINGREADYCLAIMING

  • CRAFTING:炼制等待中。
  • READY:炼制完成,等待玩家领取。
  • CLAIMING:奖励正在领取或领取已加锁。

CLAIMING 状态会在服务器重启后保持锁定,不会自动再次领取。需要先核对奖励投递结果,再处理该任务。循环开关只存在当前在线会话,不写入存档;关闭炼制界面或退出后不会恢复循环。

属性与探索时间

yaml
attribute-plugin: 'AttributePlus'
exploration-cooldown: 60
permission-time:
  - permission: 'lyalchemy.time.vip1'
    multiplier: 0.90
  - permission: 'lyalchemy.time.vip2'
    multiplier: 0.70
配置项说明
attribute-plugin属性适配器,可填写 AttributePlusAttributeSystemSX-Attribute
exploration-cooldown每次非空探索尝试使用的固定冷却时间,单位为秒
permission-time[].permission应用时间倍率所需的权限
permission-time[].multiplier时间保留比例。0.90 表示保留 90% 的时间,即缩短 10%

玩家同时拥有多个配置权限时只取最小 multiplier,不叠加。倍率会同时影响炼制时间和探索冷却,并且应用后可以低于丹方的 need-time.minimum-time。空探索不会启动冷却。

属性显示模板

yaml
attribute-template:
  '攻击力': '&7攻击力 &6+{value}'
  '生命力': '&7生命力 &6+{value}'
  '攻击力%': '&7攻击力 &6+{value}(%)'
  '生命力%': '&7生命力 &6+{value}(%)'
配置项说明
attribute-template将丹药属性键转换为 GUI 显示文本
attribute-template.<属性名>显示模板,使用 {value} 插入属性值

丹药必须至少存在一组有效 attribute 范围,才允许服用并显示在丹药界面。无属性或空属性范围的丹药会被运行时跳过。

成品几率与数量显示

yaml
product-chances-format: '  &7{name}: &a{chance} &f数量: &e{amount}'

product-chances-format 同时用于 {product_chances}{next_product_chances},每个产物生成一行文本。

占位符说明
{name}丹药显示名称
{chance}当前等级下的百分比几率
{amount}发放数量文本
{min}数量范围下限
{max}数量范围上限

GUI 通用文本

yaml
gui-format:
  status:
    NONE: '&a可开始炼制'
    CRAFTING: '&e炼制中(剩余 {remaining} 秒)'
    READY: '&a可领取'
    CLAIMING: '&e领取锁定,请联系管理员核对'
  loop_status:
    ON: '&a已开启'
    OFF: '&c未开启'
  enough:
    TRUE: '&a✔'
    FALSE: '&c✘'
节点可用键用途
gui-format.statusNONECRAFTINGREADYCLAIMING炼制按钮的 {status} 文本
gui-format.loop_statusONOFF循环炼制的 {loop_status} 文本
gui-format.enoughTRUEFALSE材料是否足够的 {enough} 文本

CRAFTING 状态支持 {remaining},表示当前任务剩余秒数。

音效

yaml
sound:
  craft-finish: 'ENTITY_PLAYER_LEVELUP'
  exploration-success: 'ENTITY_PLAYER_LEVELUP'
  exploration-failure: 'BLOCK_ANVIL_DESTROY'
  page-turn: 'UI_BUTTON_CLICK'
配置项默认音效用途
sound.craft-finishENTITY_PLAYER_LEVELUP炼制完成并进入可领取状态时播放
sound.exploration-successENTITY_PLAYER_LEVELUP探索成功时播放
sound.exploration-failureBLOCK_ANVIL_DESTROY探索失败时播放
sound.page-turnUI_BUTTON_CLICK列表实际翻页时播放

项目配置注释提供旧版名称对应关系:LEVEL_UPANVIL_BREAKCLICK。请根据实际服务端版本填写可识别的音效名称。

消息

消息键位于主配置的 message 节点,支持 & 颜色码。重载输出中的丹方和丹药名称会将 & 颜色码转换为 §

配置键用途和占位符
CRAFT_SUCCESS炼制奖励成功,支持 {item}
CRAFT_FAILURE炼制失败
CRAFT_READY炼制完成,提示手动领取
MATERIALS_INSUFFICIENT材料不足
RECIPE_NOT_FOUND丹方不存在
RECIPE_NOT_LEARNED玩家尚未学会丹方
CRAFTING当前已有炼制任务
CRAFT_COOLDOWN当前炼制尚未完成
CRAFT_CLAIMING当前奖励正在领取或已锁定
CRAFT_OTHER_RECIPE其他丹方任务占用中,支持 {recipe}{recipe_name}
CRAFT_NO_ACTIVE_RECIPE当前没有可打开的炼制任务
CRAFT_LOOP_ENABLED开启循环炼制,支持 {recipe}{recipe_name}
CRAFT_LOOP_DISABLED关闭循环炼制
CRAFT_LOOP_INTERRUPTED关闭炼制界面后中断循环
RECIPE_MAX_LEVEL丹方达到最高可实现等级时的提示
MAX_LEVELGUI 下一等级信息中的满级文本
LEVEL_UP熟练度升级提示,支持 {recipe}{level}
EXPERIENCE_GAIN熟练度经验提示,支持 {recipe}{level}{exp}{total_exp}{next_exp}
NO_AVAILABLE_RESULT当前等级没有可产出的丹药
EXPLORATION_SUCCESS探索成功,支持 {recipe}
EXPLORATION_FAILURE探索失败
EXPLORATION_COOLDOWN探索仍在冷却中
EXPLORATION_MATERIALS_INSUFFICIENT探索材料不足
MEDICINE_CONSUMED服用成功,支持 {medicine}{count}{max_count}
MEDICINE_MAX_COUNT达到服用上限,支持 {medicine}{count}{max_count}
MEDICINE_CONSUME_FAILURE服用失败
ATTRIBUTE_PROVIDER_UNAVAILABLE属性插件不可用
DATA_LOADING玩家数据尚未加载完成

当丹药没有有限的最大服用次数时,{max_count} 显示为 无限

PlaceholderAPI 变量

安装并启用 PlaceholderAPI 后,插件注册 lyld 标识符。完整格式为 %lyld_变量名%。动态丹方 ID 和丹药 ID 放在变量末尾,ID 中的下划线会保留。

变量返回内容
%lyld_recipe_learned_<丹方ID>%玩家是否可以使用该丹方。公开丹方或已探索丹方返回 true
%lyld_recipe_level_<丹方ID>%当前熟练度等级,不存在或未解锁时返回 0
%lyld_recipe_experience_<丹方ID>%当前等级经验,不存在或未解锁时返回 0
%lyld_recipe_next_level_<丹方ID>%下一熟练度等级,满级时返回当前等级
%lyld_recipe_next_experience_<丹方ID>%升级所需经验,满级时返回 0
%lyld_recipe_max_level_<丹方ID>%丹方可实现的最高熟练度等级
%lyld_recipe_time_<丹方ID>%当前等级且应用权限倍率后的炼制时间,单位为秒
%lyld_recipe_next_time_<丹方ID>%下一等级且应用权限倍率后的炼制时间,单位为秒;满级时返回 0
%lyld_medicine_count_<丹药ID>%当前丹药累计服用次数
%lyld_known_recipe_count%公开或已学会的丹方数量
%lyld_consumed_medicine_count%有服用记录的丹药种类数量
%lyld_exploration_cooldown%探索冷却剩余时间,单位为秒
%lyld_crafting_status%是否存在炼制任务,返回 truefalse
%lyld_crafting_recipe%当前任务丹方 ID,无任务时为空文本
%lyld_crafting_level%当前任务开始时的熟练度等级,无任务时返回 0
%lyld_crafting_remaining%当前任务剩余时间,单位为秒;可领取或无任务时返回 0
%lyld_crafting_time%当前任务总炼制时间,单位为秒,无任务时返回 0
%lyld_crafting_finish_time%任务完成时间的 Unix 毫秒时间戳,无任务时返回 0
%lyld_crafting_claim_status%NONECRAFTINGREADYCLAIMING
%lyld_crafting_product%已确定的丹药配置 ID,尚未确定或无任务时为空文本
%lyld_crafting_loop%当前在线会话是否开启循环炼制,无任务时返回 false

recipe_learned 外,丹方变量在玩家未解锁或目标不存在时返回 0。未知变量不会影响其他 PlaceholderAPI 变量。

丹方文件 recipe/*.yml

丹方文件的最外层节点是丹方 ID。默认资源为 recipe/示例丹方.yml,根节点 ID 为 示例丹方

配置项说明
icon丹方列表和炼制界面使用的原版 GUI 图标,例如 PAPER:0
name丹方显示名称
lore丹方显示 Lore
publictrue 表示公开丹方;false 表示只能通过探索收录
need-item丹方材料列表,格式为 物品库@物品ID 数量
need-time.formula炼制时间公式,{level} 表示当前丹方熟练度等级,结果单位为秒
need-time.minimum-time炼制时间最低值,单位为秒
experience-gain每次完成炼制获得的随机经验范围,格式为 最小值-最大值
level-up.experience升级经验,可按单等级或等级范围配置固定值或 {level} 公式
level-up.commands升级时执行的指令列表
level-bonus不同熟练度等级下的丹药权重和发放数量
yaml
示例丹方:
  icon: 'PAPER:0'
  name: '示例_筑基丹方'
  lore:
    - ''
    - '&7一张神秘的筑基丹方'
  public: true
  need-item:
    - 'MythicMobs@筑基灵液 1'
    - 'MythicMobs@玄黄草 3'
  need-time:
    formula: '66-{level}*3'
    minimum-time: 30
  experience-gain: '1-3'
  level-up:
    experience:
      1-5: '50 + {level}*50'
      6-10: '100 + {level}*50'
    commands: []
  level-bonus:
    1-9:
      示例_残破筑基丹:
        weight: '480 - {level}*48'
        amount: '1'
      示例_中品筑基丹:
        weight: '136 + {level}*8'
        amount: '1-2'
    10-max:
      示例_中品筑基丹:
        weight: '20'
        amount: '1-2'
      示例_天道筑基丹:
        weight: '2'
        amount: '1'

材料配置

need-item 中的材料和数量必须与玩家物品匹配。匹配时优先比较物品库实际物品的真实 displayName;任一方没有真实显示名称时回退 ItemStack.isSimilar。GUI 图标、配置显示名称和 Lore 不参与材料识别。

探索材料同样遵循该匹配规则,并要求材料种类和总数量完全一致,忽略输入槽位顺序。只有 public: false 且玩家尚未学会的丹方会进入探索候选。

有效的非空探索尝试会扣除材料并立即启动冷却,无论匹配成功或失败;多个匹配丹方时随机收录一个。

炼制时间与熟练度

  • need-time.formula 的结果先应用 minimum-time,再应用玩家的权限倍率。
  • experience-gain 使用包含首尾的随机整数范围。
  • level-up.experience 的键可以是单个等级或连续等级范围。
  • 不需要填写 max 升级经验范围。
  • 丹方最高等级由 level-bonus 可实现的最终档位决定。10-max 表示从 10 级开始使用最后一档,当前示例的最高可实现等级为 10 级。
  • level-up.commands 支持 [console] 控制台执行、[op] 临时 OP 执行和无前缀玩家身份执行。

权重与数量

每个产物必须使用以下结构:

yaml
示例_中品筑基丹:
  weight: '20 + {level}*8'
  amount: '1-2'

weight 是抽取权重,不是直接填写的百分比。系统会将当前等级所有大于 0 的权重相加,再用单项权重除以总权重计算实际几率。负权重按 0 处理,权重为 0 的产物不会被抽中。

amount 支持固定正整数或首尾包含的正整数范围。领取时会在范围内随机发放数量。非法、非正规整数、范围倒置或小于 1 的值按 1 个发放。

丹方重载会校验公式、时间、等级范围覆盖和重叠、升级经验范围以及每个可实现等级是否存在正权重。level-bonus 中引用的每个产物 ID 必须对应 item/*.yml 中的丹药配置。

丹药文件 item/*.yml

丹药文件的最外层节点是丹药 ID。

配置项说明
item丹药实际物品,使用物品库 ID 或 物品库@物品ID
icon丹药 GUI 图标,只使用原版物品 ID
name丹药显示名称
lore丹药显示 Lore
attribute按服用次数配置的属性增量,可使用单次数或次数范围
yaml
示例_中品筑基丹:
  item: 'MythicMobs@示例_中品筑基丹'
  icon: 'APPLE:0'
  name: '&b中品筑基丹'
  lore:
    - '&7一枚中品筑基丹'
  attribute:
    1:
      攻击力: 100
      生命力: 100
    2-9:
      攻击力: 10
      生命力: 10
    10:
      攻击力: 120
      生命力: 120

attribute 的每个值必须是有限数字,次数范围不能重叠,起始次数应为有效正整数。

丹药必须至少存在一组有效属性范围,才会被识别为可服用丹药,也才会进入丹药列表。已存在但没有有效属性的服用记录同样不会显示。

丹药服用识别优先比较物品库实际物品和玩家物品的真实 displayName;任一方没有显示名称时回退 ItemStack.isSimilar。多个不同丹药使用相同真实显示名称时,会按配置加载顺序命中第一个,应避免名称重复。

GUI 文件

四个 GUI 都使用 54 个槽位,每行 9 个槽位。GUI 槽位物品只填写原版物品 ID,例如 262:0145:2160:15

所有原版背包点击和拖拽都会被取消,按钮和探索材料投入只处理插件定义的普通左键、右键业务。非法 GUI 材质会导致对应 GUI 配置加载失败,不会静默替换为石头。

gui/丹方界面.yml

配置项默认值或说明
title&6已学会的丹方
layout前 45 个槽位使用 R 动态列表,底栏为 P##123##N
button.recipesR,丹方列表
button.previous-pageP,上一页
button.next-pageN,下一页
button.open-medicines1,丹药界面
button.open-craft2,炼制界面
button.open-exploration3,探索界面
slot.R使用丹方的 iconnamelore,并追加熟练度、经验、当前/下一等级时间和成品几率
slot.Pslot.N翻页按钮物品和文本
slot.1slot.2slot.3三个界面跳转按钮
slot.#底栏填充物品

布局位置为:45 号槽上一页,48 至 50 号槽为三个界面跳转,46、47、51、52 号槽为填充,53 号槽下一页。

slot.R.template 支持 {level}{total_exp}{next_exp}{time}{product_chances}{next_level}{next_time}{next_product_chances}

gui/丹药界面.yml

配置项默认值或说明
title&6已服用的丹药
layout前 45 个槽位使用 D 动态列表,底栏为 P##123##N
button.medicinesD,丹药列表
button.previous-pageP,上一页
button.next-pageN,下一页
button.open-recipes1,丹方界面
button.open-craft2,炼制界面
button.open-exploration3,探索界面
slot.D使用丹药的 iconnamelore,并追加服用次数和累计属性
slot.Pslot.N翻页按钮物品和文本
slot.1slot.2slot.3三个界面跳转按钮
slot.#底栏填充物品

slot.D.template 支持 {now_count}{max_count}{attribute}。没有有限服用上限时,{max_count} 显示为 无限

gui/炼制界面.yml

yaml
layout:
  - '#########'
  - '####R####'
  - '#MMMMMMM#'
  - '####B####'
  - '####L####'
  - '###123##X'
配置项默认值或说明
title&6炼制丹药
button.recipeR,当前丹方信息
button.materialsM,丹方材料展示槽
button.buttonB,开始炼制或领取奖励
button.loopL,循环炼制开关,位于 40 号槽
button.closeX,关闭界面,位于 53 号槽
button.open-recipes1,丹方界面
button.open-medicines2,丹药界面
button.open-exploration3,探索界面
slot.R使用当前丹方图标和名称,追加熟练度、经验、当前/下一等级时间和成品几率
slot.M运行时显示材料实际物品、需求数量、当前数量和是否足够;只读
slot.B显示当前/下一等级时间、成品几率和 {status}
slot.L显示 {loop_status},切换循环炼制
slot.1slot.2slot.3三个界面跳转按钮
slot.X关闭界面按钮

炼制界面中的占位符包括:

占位符说明
{recipe_name}当前丹方显示名称
{need}材料需求数量
{current}玩家当前拥有数量
{enough}gui-format.enough.TRUE/FALSE 读取
{time}当前等级炼制时间
{product_chances}当前等级成品几率和数量
{next_level}下一熟练度等级
{next_time}下一等级炼制时间
{next_product_chances}下一等级成品几率和数量
{status}gui-format.status 读取
{loop_status}gui-format.loop_status 读取

玩家同时只能存在一个炼制任务。关闭界面不会取消当前这一炉,但会关闭循环炼制;循环开关只保存于当前在线会话。

打开炼制界面前会校验当前丹方的全部材料,以及所有等级档位中的成品丹药。物品库缺失、成品配置缺失或物品标识为空时不会打开界面,并会在控制台输出具体丹方和物品标识。

gui/探索界面.yml

yaml
layout:
  - '#########'
  - '#MMMMMMM#'
  - '####I####'
  - '#########'
  - '####B####'
  - '###123##X'
配置项默认值或说明
title&6丹方探索
button.materialsM,探索材料目标槽
button.infoI,未知丹方说明
button.buttonB,尝试探索
button.closeX,关闭界面
button.open-recipes1,丹方界面
button.open-medicines2,丹药界面
button.open-craft3,炼制界面
slot.M.item必须保留为空文本,表示材料输入目标槽
slot.I未知丹方说明物品
slot.B显示探索状态、总冷却和剩余冷却
slot.X关闭界面按钮

探索材料不能通过原版拖拽投入。点击玩家底部背包中的物品时,插件会扣除 1 个并放入第一个空的 M 槽;点击已有 M 槽或关闭界面时返还材料。

探索按钮支持以下占位符:

占位符说明
{cooldown}应用权限倍率后的本次探索总冷却,单位为秒
{cooldown_remaining}当前剩余探索冷却,单位为秒
{status}当前探索状态文本

探索前不会显示目标丹方名称、炼制时间和成品几率。有效的非空尝试会扣除材料并立即启动冷却,无论匹配成功或失败;多个匹配丹方时随机收录一个。

重载与配置校验

执行 /lyld reload 时会读取主配置、权限时间规则、丹方、丹药和四个 GUI。应用新配置前会保存旧运行时状态;任一阶段失败时恢复旧配置,不会让部分新配置进入运行状态。

重载阶段会校验以下内容:

  • 主配置结构和权限倍率格式。
  • 丹方公式、炼制时间、经验范围、等级范围覆盖和重叠。
  • 每个可实现等级是否存在正权重。
  • 丹方产物 ID 是否对应丹药配置。
  • 丹方材料和丹药实际物品标识。
  • 丹药属性范围、属性值和服用次数范围。
  • 丹方图标、丹药图标和 GUI 原版物品。
  • GUI 按钮与布局字符的对应关系。

默认配置资源只在目标文件不存在时释放,不会覆盖已有的 config.yml、丹方、丹药和 GUI 文件。每次执行重载都会强制覆盖插件数据目录根目录中的 简易使用说明.txt

配置读取失败时应根据控制台输出修正对应文件、配置键或物品标识;确认配置无误后再重新执行 /lyld reload