Skip to content

宝石规则

LyGemReload 通过装备 Lore 识别宝石槽位,并将镶嵌记录保存到装备 NBT。镶嵌、拆卸、开孔和额外道具均围绕物品名称、Lore 与配置 ID 工作。

镶嵌流程

玩家通过 /lgr inlay 打开镶嵌与拆卸界面。界面的主要槽位如下:

槽位用途
37放置待镶嵌或待拆卸的装备。
39放置宝石。
41放置本次镶嵌使用的额外道具。
43执行镶嵌,并显示本次消耗与成功率。
0-26展示装备中已经镶嵌的宝石,最多展示 27 个。

装备必须拥有 Lore,并且数量必须为 1。插件会按以下顺序处理镶嵌:

  1. 根据宝石的 gem-namegem-lore 识别宝石。
  2. 检查装备是否存在该宝石允许使用的槽位 Lore。
  3. 检查装备与宝石是否包含禁止镶嵌的 Lore。
  4. 检查变量镶嵌上限。
  5. 检查额外道具是否合法。
  6. 检查宝石的全部 condition
  7. 检查并扣除 eco 金币。
  8. 消耗一颗宝石;存在额外道具时同时消耗一个额外道具。
  9. 计算最终成功率并执行随机判定。
  10. 成功时替换槽位 Lore、保存宝石数据、执行成功指令并发送消息;失败时执行失败指令并发送失败消息。

金币会在成功率判定前扣除。镶嵌失败不会返还宝石、额外道具或金币。

界面交互模式

config.ymlgui-auto-slot-mode-enable 控制界面交互方式。

行为
true快捷模式。点击玩家背包中的普通物品会放入装备槽,宝石会放入宝石槽,额外道具会放入额外道具槽;点击三个主要槽位会尝试将物品放回背包。
false手动模式。玩家需要按原版背包操作方式拿起并放置物品。

快捷模式会根据已加载的配置识别宝石、额外道具和拆卸工具。拆卸工具不会自动进入界面槽位,需要由玩家拿在鼠标上点击已镶嵌宝石。

关闭界面时,装备槽、宝石槽和额外道具槽中的物品会自动返回玩家背包。背包已满时,无法放入的物品会掉落在玩家脚下。

宝石配置

宝石配置放在插件目录的 gem/ 中。插件会递归读取该目录下的 .yml 文件。每个文件可以定义多个宝石,文件顶层节点为宝石 ID。

宝石 ID 全局不可重复。宝石镶嵌后,ID 会写入装备数据,因此正式使用后不要随意修改或复用 ID。

节点类型说明
slot字符串列表可以镶嵌该宝石的槽位 Lore。装备必须至少存在一行完全相同的 Lore。
gem-name字符串用于识别宝石的物品名称。名称必须完全一致;留空或删除时不检查名称。
gem-lore字符串用于识别宝石的 Lore 文本。宝石任意一行 Lore 包含该文本即可;留空或删除时不检查 Lore。
show-name字符串镶嵌成功后替换槽位时显示的宝石名称。
show-lore字符串列表镶嵌成功后追加在 show-name 下方的显示 Lore。支持 PlaceholderAPI 变量、随机值和公式。
chance数值或公式基础镶嵌成功率。通常使用 0-1,支持 PlaceholderAPI 变量与四则运算。
eco整数镶嵌前需要检查并扣除的金币。为 0 时不处理经济。
can-disassembled布尔值是否允许从装备上拆卸该宝石。
condition字符串列表镶嵌条件,列表中的条件必须全部满足。
server-message字符串列表镶嵌成功后发送给所有在线玩家的消息。
success-command字符串列表镶嵌成功后执行的指令。
fail-command字符串列表镶嵌失败后执行的指令。
attribute字符串列表镶嵌成功时生成并保存到装备 NBT 的隐藏属性。
load-item-lore-attribute布尔值是否将该次镶嵌保存的 attribute 提交给已配置的属性插件。
load-item-lore布尔值是否将镶嵌时保存的原宝石物品 Lore 提交给已配置的属性插件。

完整结构如下:

yaml
示例宝石1:
  slot:
    - '&7<绿宝石槽位>'
    - '&7<红宝石槽位>'
  gem-name: '&6示例宝石'
  gem-lore: '&7这是一颗示例宝石'
  show-name: '&7已镶嵌<&6神奇的示例宝石&7>'
  show-lore:
    - '&7  这是一颗示例宝石'
  chance: 1
  eco: 1
  can-disassembled: true
  condition:
    - 'papi:{%player_level% > 0}'
    - 'gem-amount:{示例宝石1<1}'
  server-message:
    - '&7恭喜 &a%player_name% &7成功镶嵌了一颗 &6{gem} &7!'
  success-command:
    - '[console]tell %player_name% 你镶嵌了一颗{gem}成功.'
  fail-command:
    - '[op]tell %player_name% 你镶嵌了一颗{gem}失败.'
  attribute:
    - '&b生命加成 +{10-20-%.1f}%'
  load-item-lore-attribute: true
  load-item-lore: true

宝石识别规则

gem-namegem-lore 可以单独使用,也可以同时使用。

配置方式识别行为
只配置 gem-name只检查物品显示名是否完全一致。
只配置 gem-lore只检查物品是否有一行 Lore 包含指定文本。
两项都配置名称与 Lore 必须同时匹配。
两项都留空该配置会跳过名称与 Lore 限制,可能匹配到不应作为宝石的物品。

镶嵌界面要求宝石拥有显示名。因此即使 gem-name 留空,实际投入界面的宝石仍需要带有自定义名称。

槽位匹配与替换

slot 中的每一项都是可用槽位 Lore。例如:

yaml
slot:
  - '&7<绿宝石槽位>'
  - '&7<红宝石槽位>'

装备中只要存在其中一行完全相同的 Lore,即可使用该槽位。镶嵌成功后:

  • 命中的槽位 Lore 会被移除。
  • 原位置会插入 show-name 和全部 show-lore
  • 插入的每一行都会附带用于定位该次镶嵌记录的隐藏标识。
  • 原槽位文本会保存到装备 NBT,拆卸成功后恢复到原位置。
  • 同一装备存在多个可用槽位时,插件使用首先匹配到的宝石槽位。

插件会把每次镶嵌的宝石 ID、原宝石物品、原槽位名称和隐藏属性保存到装备 NBT。不要使用会清除未知 NBT 的物品编辑方式处理已镶嵌装备,否则可能造成宝石记录丢失。

镶嵌成功率

chance 使用小数表示概率:

配置含义
0不会成功。
0.1约 10% 成功率。
0.5约 50% 成功率。
1必定成功。

插件没有将结果强制限制在 0-1:计算结果大于等于 1 时会成功,结果小于等于 0 时不会成功。

chance 支持 PlaceholderAPI 变量以及 +-*/、括号运算。例如:

yaml
chance: '%player_level%*0.01'

计算失败时,控制台会输出玩家、宝石 ID 和错误公式,本次计算结果保持为 0

额外道具的 chance: 效果会直接加到宝石基础成功率上。界面按钮显示的是宝石基础成功率,不包含额外道具提供的成功率。

镶嵌条件

condition 是字符串列表。存在多个条件时,所有条件都必须通过。空列表表示不限制。

写法说明
permission:{权限节点}玩家必须拥有指定权限。
nopermission:{权限节点}玩家必须没有指定权限。
papi:{表达式}替换 PlaceholderAPI 变量后判断表达式。
gem-amount:{宝石ID<数量}统计当前装备中指定宝石 ID 的数量并比较。

尖括号只用于表示比较运算符,实际配置应写在代码格式中,例如 gem-amount:{示例宝石1<1}

宝石数量条件

gem-amount 支持以下比较符:

比较符示例说明
<gem-amount:{示例宝石1<1}已镶嵌数量小于 1。可用于限制唯一宝石。
<=gem-amount:{示例宝石1<=2}已镶嵌数量小于等于 2
==gem-amount:{示例宝石1==1}已镶嵌数量等于 1
>=gem-amount:{示例宝石1>=1}已镶嵌数量大于等于 1
>gem-amount:{示例宝石1>1}已镶嵌数量大于 1

统计依据是装备 NBT 中保存的宝石 ID,不是装备当前显示的 Lore。

PAPI 表达式

papi: 条件会先替换 PlaceholderAPI 变量,再执行判断。可使用:

  • 数值比较:><>=<===!=
  • 数值运算:+-*/ 和括号。
  • 逻辑与:&&
  • 逻辑或:||
  • 使用单引号或双引号包裹的字符串相等与不相等比较。
  • 不带比较符时,只有结果为 true 才会通过。
yaml
condition:
  - 'papi:{%player_level% >= 50 && %player_health% > 10}'

该功能依赖 PlaceholderAPI。表达式中的占位符必须能够返回适合比较的内容。

指令与消息替换

宝石的 success-commandfail-command 支持以下执行方式:

写法执行身份
[console]指令控制台执行。
[op]指令临时以 OP 身份让玩家执行,执行完成后恢复原状态。
无前缀指令玩家直接执行。

可确认的替换内容如下:

内容适用位置说明
PlaceholderAPI 变量成功指令、失败指令、全服消息按触发镶嵌的玩家解析。
{gem}成功指令、失败指令、全服消息替换为宝石配置的 gem-name
{item}成功指令、失败指令替换为装备显示名;没有显示名时使用物品材质名。

拆卸工具的 success-command 固定由控制台执行,支持 PlaceholderAPI 变量和 {gem},但不处理 [console][op] 前缀。

随机属性与随机 Lore

attributeshow-lore 和额外道具结果支持随机值写法:

text
{最小值-最大值-格式}

例如:

yaml
attribute:
  - '&b生命加成 +{10-20-%.1f}%'
  - '&b物理伤害 +{35-105-%.0f}'
  - '&6等级神力 +{%player_level%*2-%player_level%*5-%.0f}'
部分说明
最小值随机范围下限,支持 PlaceholderAPI 变量和四则运算。
最大值随机范围上限,支持 PlaceholderAPI 变量和四则运算。
格式Java 数字格式,例如 %.0f%.1f。省略时使用 %.0f

随机结果按 最小值 + 随机数 ×(最大值 - 最小值) 生成。PlaceholderAPI 变量会在计算前替换。

隐藏属性在镶嵌成功时计算一次并保存到装备中,之后不会随玩家变量变化而重新生成。

隐藏属性加载

宝石可以同时提供两类属性来源:

来源控制节点内容
隐藏属性load-item-lore-attribute加载镶嵌时保存的 attribute
原宝石 Loreload-item-lore加载镶嵌时保存的原宝石物品全部 Lore。

插件只会扫描 config.ymlattribute-slot 指定的装备位置。玩家加入、关闭背包、切换手持槽位和交换主副手时会刷新属性;属性列表未变化时会跳过重复提交。

可配置的属性插件名称包括:

  • AttributePlus
  • SX-Attribute2
  • SX-Attribute3
  • AttributeSystem
  • ItemLoreOrigin

attribute-plugin 修改后需要重启服务器。具体槽位格式与属性插件设置参见配置页面。

开孔道具

开孔道具在 开孔道具.yml 中配置。使用时,玩家需要在生存背包中拿起开孔器,左键点击目标装备。

目标装备必须满足以下要求:

  • 拥有物品元数据与 Lore。
  • 数量为 1
  • 名称符合 need-name 限制。
  • 存在 need-lore 指定的前置 Lore,或该配置为空。
  • 已使用开孔器的次数小于 max-count
节点类型说明
name字符串开孔器物品名称,必须完全匹配。
max-count整数单件装备最多成功触发该开孔流程的累计次数。计数保存在装备 NBT 中。
need-name字符串列表允许使用该开孔器的装备名称。装备名称包含列表中的任意文本即可;删除或留空列表时不限制名称。
need-lore字符串必须存在的前置 Lore。完全匹配;为空时直接在装备 Lore 末尾插入结果。
result节点组按权重随机抽取的开孔结果。

开孔结果

节点说明
weight当前结果的抽取权重。所有结果按相对权重参与随机。
message抽中结果后发送给玩家的消息列表。
lore插入装备的 Lore 列表。每一行都可作为一个宝石槽位。空列表可用于制作失败结果。
yaml
普通开孔器:
  max-count: 10
  need-name:
    - '牛马装备'
  need-lore: ''
  name: '&b普通开孔器'
  result:
    失败:
      weight: 30
      message:
        - '&7开槽失败……'
      lore: []
    绿宝石:
      weight: 10
      message:
        - '&a恭喜你开启了绿宝石槽位'
      lore:
        - '&7<绿宝石槽位>'

开孔器通过检测后会消耗一个,并将装备上的开孔次数增加 1。即使随机结果的 lore 为空,该次使用仍会消耗开孔器并累计次数。

need-lore 不为空时,插件只替换首先找到的一行前置 Lore;当结果含有多行 lore 时,会在该位置一次加入多个槽位。

拆卸规则

拆卸会删除指定宝石的镶嵌记录,并将原槽位 Lore 恢复到装备中。装备数量必须为 1,玩家背包还需要至少一个空位。

宝石自身的 can-disassembled 必须为 true,否则无论使用何种普通拆卸工具都不能拆卸。

使用拆卸工具

force-out-gem-enable: false 时,需要拿起拆卸工具点击界面上方 0-26 槽位内的已镶嵌宝石。

节点类型说明
name字符串拆卸工具物品名称,必须完全匹配。
chance小数拆卸成功率,默认 1
return-gem布尔值拆卸成功后是否有机会返还原宝石物品。
return-gem-chance小数启用返还后,返还宝石的概率,默认 1
success-command字符串列表拆卸成功后由控制台执行的指令。
disassembled-gem字符串列表允许拆卸的宝石 ID;* 表示全部宝石。
yaml
普通拆卸工具:
  name: '&a普通拆卸工具'
  chance: 0.5
  return-gem: true
  return-gem-chance: 0.5
  success-command:
    - 'tell %player_name% 你拆卸了{gem}'
  disassembled-gem:
    - '*'

匹配到拆卸工具后,插件会先消耗一个工具,再进行成功率判定。拆卸成功不代表一定返还宝石,返还还需要同时满足 return-gemreturn-gem-chance

无工具拆卸

force-out-gem-enable: true 时,玩家可以直接点击已镶嵌宝石进行拆卸:

  • 不需要拆卸工具。
  • 不进行拆卸成功率判定。
  • 不读取拆卸工具的宝石 ID 限制。
  • 不执行拆卸工具的成功指令。
  • 会直接返还镶嵌时保存的原宝石物品。
  • 仍然受宝石 can-disassembled 限制。

额外道具

额外道具在 额外道具.yml 中配置,只影响放入额外道具槽后的本次镶嵌。成功率判定前会读取 chance:,其他效果只在镶嵌成功后处理。

节点类型说明
name字符串额外道具物品名称,必须完全匹配。
result字符串列表本次镶嵌需要执行的效果。
效果写法说明
chance:数值将数值加到宝石基础镶嵌成功率。数值支持随机值与公式计算。
attribute:概率,属性镶嵌成功后按概率生成内容,并加入该次宝石保存的隐藏属性。
lore:概率,Lore当前实现同样会把结果加入该次宝石保存的隐藏属性,不会直接追加到装备显示 Lore。
message:文本镶嵌成功后向玩家发送消息,支持 & 颜色代码。
yaml
镶嵌幸运符:
  name: '&6镶嵌幸运符'
  result:
    - 'chance:0.1'
    - 'message:&7本次镶嵌增加了10%成功率!'

隐藏力量增强器:
  name: '&6隐藏力量增强器'
  result:
    - 'attribute:0.5,力量+{5-10-%.0f}'
    - 'message:&7本次镶嵌成功使用了力量增强器!'

attribute:lore: 使用逗号分隔概率和内容,当前解析方式要求效果内容本身不要包含额外逗号。

配置多个 chance: 时,当前实现不会累计每一项,而是使用最后一次读取到的数值作为额外成功率。建议每个额外道具只配置一条 chance:

变量镶嵌上限

启用 placeholder-inlay-enable 后,可以按玩家条件限制每件装备最多镶嵌的宝石数量。

插件按 placeholder-inlay 中的配置顺序检查分组,只使用第一个满足全部条件的分组。因此应将限制更特殊、条件更严格的分组写在前面,并在最后提供空条件的默认分组。

yaml
placeholder-inlay-enable: true
placeholder-inlay:
  OP权限:
    max-inlay: 999
    condition:
      - 'permission:{admin}'
  大于50级:
    max-inlay: 5
    condition:
      - 'papi:{%player_level% > 50}'
  默认:
    max-inlay: 2
    condition: []
节点说明
max-inlay当前分组允许每件装备保存的最大宝石数量。
condition分组条件,支持 permission:nopermission:papi:

如果没有任何分组通过,内部上限保持为 0,玩家将无法继续镶嵌。因此启用该功能时应保留一个 condition: [] 的默认分组。

禁止镶嵌 Lore

插件可以根据装备或宝石现有 Lore 阻止镶嵌:

配置项说明
the-item-exist-lore-prevent-inlay装备 Lore 完整包含列表中的任意一行时禁止镶嵌。
the-gem-exist-lore-prevent-inlay宝石 Lore 完整包含列表中的任意一行时禁止镶嵌。

这里使用整行匹配,不是模糊包含。颜色代码和文本必须与物品实际 Lore 一致。

数据限制与注意事项

  • 镶嵌记录保存在装备 NBT 中,不依赖物品当前显示名称判断已镶嵌内容。
  • 界面最多展示 27 条已镶嵌记录,插件 API 获取宝石 ID 时同样最多返回 27 条。
  • 宝石槽位、镶嵌显示内容和开孔次数都保存在单件装备上,因此装备堆叠数量大于 1 时不会执行镶嵌、拆卸或开孔。
  • 已镶嵌宝石的原物品会被序列化保存,用于界面展示和拆卸返还。
  • 删除宝石配置后,装备中的历史记录不会自动消失,但界面无法再读取该宝石的当前配置;其可拆卸状态会按不可拆卸展示。
  • 修改宝石 ID 会使已镶嵌装备中的旧记录无法关联到新配置。
  • load-item-lore-attributeload-item-lore 只控制属性插件加载,不决定装备上是否显示 show-lore
  • 经济消耗依赖 Vault 经济服务;为宝石设置大于 0eco 时,应确保 Vault 已成功连接经济插件。