Skip to content

宝珠配置 ​

LyPearls 通过宝珠物品名称识别宝珠,并将随机结果写入目标物品的 Lore、显示名称和 NBT。宝珠结果可以使用权重、权限、PlaceholderAPI 表达式和随机概率进行筛选。

宝珠配置文件位于插件数据目录的 pearls/ 文件夹中。插件会递归读取该目录及其子目录中的所有 .yml 文件,每个文件可以包含多个顶层宝珠节点。

插件版本:1.0.4

支持版本 ​

项目内置了以下服务端版本的 NMS 实现:

Minecraft 版本
1.7.10
1.8.8
1.11.2
1.12.2
1.13.2
1.14.4
1.15.2
1.16.5
1.17.1
1.18.2
1.19.2
1.19.4
1.20.1
1.20.2
1.20.3

依赖插件 ​

插件类型用途
PlaceholderAPI软依赖解析 papi 条件、Lore 数值公式、NBT 数值公式和指令变量
GermPlugin软依赖提供 Germ GUI 槽位中的宝珠镶嵌功能

PlaceholderAPI 仅在使用相关功能时需要安装,并且对应变量扩展必须可以正常解析。GermPlugin 未启用时,插件不会注册 Germ GUI 监听器。

镶嵌机制 ​

宝珠镶嵌通过玩家光标上的物品和当前点击的目标物品完成:

  • 宝珠必须拥有显示名称。
  • 插件只通过显示名称识别宝珠,不检查材质、Lore 或其他物品属性。
  • 宝珠名称匹配时忽略英文字母大小写,并将 & 颜色代码转换为 Minecraft 颜色代码。
  • 目标物品必须拥有 Lore。
  • 目标物品堆叠数量必须为 1。
  • 目标物品必须包含 item-need-lore 中的任意一行完整 Lore。
  • 成功镶嵌后消耗光标宝珠堆中的一个物品。
  • 新结果会替换旧的 LyPearls 宝珠 Lore,不会叠加多组宝珠结果。
  • replace-name 存在时会直接替换目标物品的显示名称。
  • 成功镶嵌后,插件会执行结果中的指令并发送成功消息。

普通背包功能仅处理标题为 container.crafting 的玩家个人背包界面。GermPlugin 功能处理 Germ GUI 的槽位点击。

完整结构 ​

yaml
"宝珠1":
  name: "&e荣耀宝珠"
  message:
    不可附魔: "该物品不可附魔该宝珠."
    附魔成功: "附魔成功!"
  item-need-lore:
    - "&7可附魔宝珠位"
  remove-default-lore: false
  add-lore-result:
    "结果1":
      weight: 10
      replace-name: "&6荣耀装备"
      condition:
        - "permission:{example.use}"
        - "papi:{%player_level% >= 30}"
      nbt:
        宝珠类型: "荣耀"
      lore:
        - "&7上等附魔【&e荣耀宝珠&7】"
        - "&7物理伤害 +{200~400~%.0f}"
        - "&7暴击几率 +<60*%player_level%~%.2f>%"
      command:
        - "[console]bc &a%player_name% &7镶嵌了荣耀宝珠"

一个文件可以包含多个顶层宝珠节点,也可以将不同宝珠拆分到不同文件。所有已加载文件中的顶层节点 ID 应保持唯一。相同 ID 会覆盖之前加载的配置,最终结果取决于文件加载顺序。

基础配置 ​

yaml
"宝珠1":
  name: "&e荣耀宝珠"
  item-need-lore:
    - "&7可附魔宝珠位"
  remove-default-lore: false
配置项类型必填默认值说明
顶层节点字符串是无宝珠 ID,用于区分不同宝珠
name字符串是无宝珠物品的显示名称,支持 & 颜色代码
item-need-lore字符串列表是无目标物品允许镶嵌时必须拥有的 Lore 列表
remove-default-lore布尔值否false是否删除匹配到的基础 Lore
message配置节点否使用全局消息当前宝珠的消息覆盖配置
add-lore-result配置节点是无当前宝珠可随机得到的结果列表

顶层节点 ID ​

顶层节点名称是宝珠配置 ID,不是玩家手持宝珠的显示名称。插件通过 name 匹配玩家手中的宝珠,通过顶层节点 ID 管理加载结果和宝珠配置。

不同宝珠不要配置相同的 name。名称相同的宝珠无法通过显示名称区分,实际匹配结果取决于宝珠遍历顺序。

宝珠名称匹配 ​

  • name 中的 & 会转换为 Minecraft 颜色代码。
  • 匹配时忽略英文字母大小写。
  • 只检查显示名称。
  • 不检查物品材质、Lore、数量或 NBT。

item-need-lore 匹配 ​

item-need-lore 使用任意一行完整匹配规则。目标物品只要包含其中任意一行 Lore,就可以进入镶嵌流程。

yaml
item-need-lore:
  - "&7可附魔宝珠位"
  - "&8可镶嵌特殊宝珠"

匹配规则如下:

  • 配置中的 & 会转换为 Minecraft 颜色代码。
  • Lore 必须整行相同。
  • 不支持包含匹配和正则表达式。
  • 匹配时忽略英文字母大小写。
  • 目标物品必须拥有 Lore。
  • 目标物品数量大于 1 时不会触发镶嵌。

remove-default-lore ​

配置值处理方式
false保留匹配到的基础 Lore,并在该行后插入宝珠结果 Lore
true删除匹配到的基础 Lore,并在对应位置写入宝珠结果 Lore

插件会在写入新结果前清理旧的宝珠标记 Lore。

在 1.0.4 中,普通背包监听的旧宝珠识别标记与结果写入标记不完全一致。使用 remove-default-lore: true 时,基础 Lore 被首次删除后,再次镶嵌可能无法找到可写入位置。需要重复覆盖宝珠时,建议使用 remove-default-lore: false。

消息配置 ​

全局消息位于 config.yml:

yaml
message:
  不可附魔: "该物品不可附魔该宝珠."
  附魔成功: "附魔成功!"

宝珠文件可以覆盖全局消息:

yaml
message:
  不可附魔: "&c该物品不可镶嵌此宝珠。"
  附魔成功: "&a宝珠镶嵌成功。"
配置项触发时机
message.不可附魔宝珠名称匹配,但目标物品没有符合要求的 Lore
message.附魔成功宝珠成功消耗并写入结果后

消息规则:

  • 支持 & 颜色代码。
  • 配置为 none 时不发送对应消息,不区分大小写。
  • 宝珠配置中存在对应消息时,优先使用宝珠自己的消息。
  • 删除宝珠配置中的对应消息项后,使用 config.yml 中的全局消息。

结果配置 ​

add-lore-result 下的每个节点代表一种可能出现的镶嵌结果。

yaml
add-lore-result:
  "结果1":
    weight: 10
    replace-name: "&6荣耀装备"
    condition:
      - "permission:{example.use}"
    nbt:
      宝珠类型: "荣耀"
    lore:
      - "&7上等附魔【&e荣耀宝珠&7】"
    command:
      - "[console]bc &a%player_name% &7镶嵌了荣耀宝珠"
配置项类型必填默认值说明
结果节点字符串是无结果 ID,仅用于区分同一宝珠下的不同结果
weight整数否1结果进入随机池后的权重
replace-name字符串否不修改镶嵌后替换目标物品的显示名称
condition字符串列表否无条件结果加入随机池前需要满足的条件
nbt键值节点否不写入镶嵌后写入目标物品的 NBT 键值
lore字符串列表否空列表镶嵌后写入目标物品的宝珠 Lore
command字符串列表否空列表镶嵌完成后依次执行的指令

权重计算 ​

插件先检查每个结果的条件,只将条件全部通过的结果加入权重总和,然后从可用结果中随机选择一个。

例如两个可用结果的权重分别为 10 和 5,理论比例约为:

结果权重理论比例
结果一10约 66.67%
结果二5约 33.33%

建议将 weight 配置为正整数。所有结果都不满足条件,或所有可用结果权重都为 0 时,可能无法取得有效结果。

replace-name ​

yaml
replace-name: "&6荣耀装备"

配置存在时,插件会在镶嵌完成后直接替换目标物品的显示名称。删除该配置项即可保留原名称。

replace-name 支持 & 颜色代码。插件不会自动保留原物品名称,也没有可确认的原名称变量。

条件 ​

yaml
condition:
  - "permission:{example.use}"
  - "nopermission:{example.blocked}"
  - "papi:{%player_level% >= 30}"
  - "roll:{10}"

同一结果中的条件按全部满足处理。任意一条条件失败,该结果就不会加入权重统计。

条件格式说明
permission:{权限节点}玩家必须拥有指定权限
nopermission:{权限节点}玩家不能拥有指定权限
papi:{表达式}解析 PlaceholderAPI 变量并判断表达式
roll:{几率}按百分比执行一次随机判定

条件前缀注意事项 ​

1.0.4 的条件识别代码使用前缀位置大于 0 的判断。因此,以下直接从字符串开头填写的条件可能不会进入对应检查流程,并被当作通过条件处理:

yaml
condition:
  - "permission:{example.use}"
  - "nopermission:{example.blocked}"
  - "papi:{%player_level% >= 30}"
  - "roll:{10}"

在该问题修复前,不要将结果条件作为权限隔离、防刷限制或其他安全校验的唯一依据。

roll ​

yaml
condition:
  - "roll:{10}"

roll:{10} 会生成 0 至 100 之间的随机数,并在配置值大于随机数时通过,理论通过率约为 10%。建议将几率配置在 0 至 100 之间。

papi 表达式 ​

papi 条件会先解析 PlaceholderAPI 变量,再判断表达式。

类型支持内容
数值比较>、>=、<、<=、==、!=
逻辑运算&&、`
数学运算+、-、*、/、(、)
字符串比较使用单引号或双引号包裹后进行 ==、!= 比较
布尔值没有比较运算符时,仅 true 会被视为通过
yaml
condition:
  - "papi:{%player_level% >= 30}"
  - "papi:{%player_health% > 10 && %player_level% >= 20}"
  - "papi:{'%player_world%' == 'world'}"
  - "papi:{(%player_level% + 10) / 2 >= 20}"

表达式会先按 || 分段,再按 && 判断。字符串字面量中的空格会保留,字符串外的普通空格会被移除。

Lore 数值 ​

结果 Lore 支持颜色代码、范围随机数和数学公式。

yaml
lore:
  - "&7物理伤害 +{200~400~%.0f}"
  - "&7暴击几率 +{20~40~%.2f}%"
  - "&7等级加成 +<60*%player_level%~%.2f>%"

Lore 在生成随机值和公式结果后,再将 & 转换为 Minecraft 颜色代码。

范围随机数 ​

格式:{最小值~最大值~格式}

部分说明
最小值随机范围下限,支持整数或小数
最大值随机范围上限,支持整数或小数
格式Java 数字格式,例如 %.0f、%.2f
yaml
lore:
  - "&7物理伤害 +{200~400~%.0f}"
  - "&7暴击几率 +{10.5~20.5~%.2f}%"

随机值按照最小值加上随机比例乘以范围差计算,最大值通常不会被直接取到。

公式计算 ​

格式:<公式~格式>

yaml
lore:
  - "&7等级加成 +<60*%player_level%~%.2f>%"
  - "&7最终伤害 +<{200~400~%.0f}*%player_level%~%.0f>"

处理顺序如下:

  1. 解析公式中的范围随机数。
  2. 解析公式中的 PlaceholderAPI 变量。
  3. 使用数学表达式计算结果。
  4. 按指定格式输出数值。

公式支持整数、小数、+、-、*、/ 和括号。数学表达式解析时会过滤无法识别的字符,因此应只填写数字和支持的运算符。

每一行 Lore 最多处理约 50 次随机数替换和 50 次公式替换。

NBT 配置 ​

结果节点提供 nbt 配置,用于向目标物品写入字符串 NBT:

yaml
nbt:
  宝珠类型: "荣耀"
  宝珠数值: "{100~200~%.0f}"

NBT 值支持与 Lore 相同的随机数、公式、PlaceholderAPI 和颜色代码处理流程。配置形式为当前节点下的单层键值,不支持嵌套对象。

当前 1.0.4 读取 NBT 值时使用了 nbt 节点路径,而不是具体键路径。为 nbt 添加实际键值可能导致配置加载异常,或无法取得预期值。该问题修复前,不建议使用 nbt 配置。

指令配置 ​

yaml
command:
  - "[console]bc &a%player_name% &7镶嵌了荣耀宝珠"
  - "[op]example command"
  - "[player]spawn"
前缀执行身份
[console]服务器后台
[op]临时给予玩家 OP 后,以玩家身份执行
[player]以玩家当前身份执行
无前缀以玩家当前身份执行

指令执行顺序如下:

  1. 处理 PlaceholderAPI 变量。
  2. 写入 Lore、显示名称和 NBT。
  3. 消耗一个宝珠。
  4. 按配置顺序执行所有结果指令。
  5. 发送成功消息。

其他规则:

  • 指令不需要填写 /。
  • [console] 的判断优先级高于 [op]。
  • [op] 会记录玩家原本的 OP 状态。
  • 非 OP 玩家执行 [op] 指令后会恢复为非 OP。
  • 玩家原本是 OP 时,执行完成后不会取消其 OP。
  • 不包含 [console] 或 [op] 时,按玩家身份执行。

配置加载与重载 ​

插件启动时会保存默认配置和 pearls/示例宝珠.yml,然后读取插件数据目录中的配置文件:

text
plugins/LyPearls/config.yml
plugins/LyPearls/pearls/

pearls/ 目录及其子目录中的所有 .yml 文件都会被递归读取。修改配置后可以使用以下命令重载:

指令权限要求说明
/lybzOP查看重载提示
/lybz reloadOP重载全局配置并重新读取宝珠文件

插件的 plugin.yml 没有声明独立权限节点,命令权限直接通过发送者是否为 OP 判断。

配置限制 ​

  • 宝珠通过显示名称识别,不验证物品类型,必须避免宝珠名称冲突。
  • 目标物品必须拥有 Lore,且堆叠数量必须为 1。
  • item-need-lore 使用完整行匹配,不支持模糊匹配。
  • 每次成功镶嵌只消耗光标宝珠堆中的一个物品。
  • 再次镶嵌会清除插件标记的旧宝珠 Lore,不会叠加多组结果。
  • replace-name 会直接覆盖物品显示名称。
  • 结果条件和权重配置不当时,可能无法取得有效结果。
  • 使用 PlaceholderAPI 条件、公式或指令变量时,必须安装 PlaceholderAPI 并安装对应变量扩展。
  • GermPlugin GUI 功能只有在 GermPlugin 已启用时才会注册。
  • remove-default-lore: true 在 1.0.4 中可能导致再次镶嵌无法找到写入位置。
  • nbt 配置在 1.0.4 中存在读取路径问题,不建议启用。
  • permission、nopermission、papi 和 roll 条件在 1.0.4 中存在前缀识别问题,不应作为唯一安全校验。