SnowyGems

查看与拆卸宝石

独立拆卸方案、多币种价格、宝石返还成功率、退款与旧装备限制。

查看与拆卸宝石

0.0.8:只允许镶嵌的宝石与装备

单颗宝石在 gems/*.yml 的对应节点设置 Removable: false,即可禁止拆卸该宝石,镶嵌仍正常进行。未填写时默认允许拆卸。游戏内编辑器的“基础信息”也能切换此字段。

绑定耐久宝石:
  Name: 绑定耐久宝石
  Material: EMERALD
  Removable: false
  Require: [WEAPON, ARMOR, TOOL]
  Rewards:
    - action: Enchant
      name: DURABILITY
      var: "v+2"
      limit: 7

要让整件装备上的所有宝石不可拆卸,可在 config.yml 配置 Lore 标记。装备任意说明行包含该文字就会命中,匹配时忽略颜色码:

DismantleProtection:
  Lore:
    - '&c不可拆卸'

其他插件也可在装备的 PersistentDataContainer 写入键 snowygems:no_dismantle,类型 BYTE,值 1。受保护宝石在拆卸台显示提示;点击时会再次检查,扣费前拒绝拆卸。标记变化后执行 /sgem reload 并重新放入装备测试。该保护不阻止镶嵌,也不代替已有的“奖励是否可安全撤销”检查。

/sgem inspect 只读查看主手装备。执行 /sgem dismantle 会打开拆卸台:把一件已镶嵌宝石的装备放入左侧空槽,右侧按顺序展示装备上的每颗宝石,包括重复镶嵌的同名宝石。每个图标显示该颗宝石按当前装备状态计算的拆卸价格和返还成功率;左键只拆所选的那次镶嵌记录。宝石较多时使用底部按钮翻页。拆卸完成后,结果装备留在槽位,报价和列表自动刷新;取出装备或关闭界面会返还槽位中的物品。

自定义拆卸台

界面独立配置在 plugins/SnowyGems/gui/dis.yml,与 gui/gui.yml 一样使用九列字符网格和 Items 定义图标。首次启动会生成默认文件;已有文件不会被覆盖。修改后执行 /sgem reload。

Slots 中的字符由 Items 的 Type 决定:FILLER 是背景玻璃,TIP 是说明图标,EQUIP_SLOT 是放装备的空槽(恰好一个),GEM_LIST 是右侧宝石展示格(可重复),PAGE_PREV 和 PAGE_NEXT 是翻页按钮(各一个),CLOSE 是关闭并返还装备按钮(一个)。每个图标可设置 Material、Display、Tips 和 Glow;宝石格用 Material: AUTO 显示宝石原有材质或皮肤。

拆卸台:
  Title: '&8◆ 宝石拆卸台'
  Slots:
    - TTTTTTTTT
    - TTQTTGGGT
    - TTETTGGGT
    - TTQTTGGGT
    - TTTTTGGGT
    - TXTTTPNTT
  Items:
    T:
      Type: FILLER
      Material: BLACK_STAINED_GLASS_PANE
      Display: ' '
    Q:
      Type: TIP
      Material: LIGHT_BLUE_STAINED_GLASS_PANE
      Display: '&b装备槽'
    E: {Type: EQUIP_SLOT}
    G:
      Type: GEM_LIST
      Material: AUTO
      Display: '{gem}'
      Tips: ['&7价格:{cost}', '&7返还概率:{chance}%', '&e左键拆卸']
    P:
      Type: PAGE_PREV
      Material: ARROW
      Display: '&e上一页'
    N:
      Type: PAGE_NEXT
      Material: ARROW
      Display: '&e下一页'
    X:
      Type: CLOSE
      Material: BARRIER
      Display: '&c关闭并取回装备'

宝石格支持 {gem}、{id}、{cost}、{chance}、{index}、{page}、{pages};翻页图标支持 {page} 和 {pages}。调整布局时,每行必须恰好 9 个字符,并为用到的每个字符配置 Items。

拆卸规则全部写在 plugins/SnowyGems/dismantle/ 的一个或多个 .yml / .yaml 文件中。gems/ 只定义宝石的镶嵌效果,不再使用 RemoveTip 或拆卸阶段的奖励收费。旧文件中的 RemoveTip、phase: remove / $onRemove 会被忽略,启动时会给出提示;升级后应手工删除这些字段并把价格迁到拆卸方案。

一个完整方案

dismantle/default.yml 必须提供唯一的 Default。下面的基础方案会随珍贵程度、宝石总数、装备耐久损坏和附魔种数改变金币价格;点券和经验明确为零。

Default:
  Rarity: 1
  Cost:
    Money: "100 + (rarity - 1) * 25 + (total - 1) * 10 + damage * 0.5 + enchants * 20"
    Points: 0
    Exp: 0
  Success: "80 - (rarity - 1) * 3 - (total - 1) * 2"

Success 是拆下后返还宝石的概率。例如 80 表示 80% 返还、20% 损坏;失败时装备上的效果仍会被撤销。结果夹在 0~100 之间。

规则叠加与筛选

规则按 Priority 从低到高叠加。命中的规则只覆盖它写出的字段,因此可以分别决定 Rarity、三种费用和 Success。相同优先级按规则 ID 排序。不同筛选字段同时满足才命中;同一字段的列表命中任意一个即可。

Rules:
  precious-gems:
    Priority: 100
    Match:
      GemIds: ["神生命宝石", "神速度宝石"]
    Rarity: 4
    Cost:
      Money: "100 + rarity * 50 + total * 20"
      Points: "rarity * 100 + same * 50"
      Exp: "rarity + total"
    Success: "85 - rarity * 5 - damage * 0.05"

  armor-extra:
    Priority: 200
    Match:
      Equipment: [ARMOR]
    Cost:
      Exp: "total + enchants"

Match 支持 GemIds(宝石 ID)、Categories(宝石配置文件名)和 Equipment(装备的 Require 类别或材质写法,例如 ARMOR、SWORD、DIAMOND_SWORD、COPPER_*)。省略 Match 的规则匹配所有宝石;用 Enabled: false 可暂时停用某条规则或整个文件。

例如一颗珍贵宝石在带两颗宝石、有一个附魔、损坏 40% 的盔甲上,先命中 precious-gems,再命中 armor-extra。金币与点券沿用前一条,经验由盔甲规则重新计算;四项价格及成功率最终各算一次。

可在 dismantle/ 下增加新文件,规则 ID 在所有文件中必须唯一。修改后执行 /sgem reload 并重新打开拆卸界面。文件缺少唯一 Default、表达式写错或价格无效时,本次重载失败,保留上一份可用方案。

可用变量和计算规则

变量含义
rarity方案设置的珍贵程度,整数 0~100;不从宝石名字或 Tips 猜测
total装备上已记录的宝石总数,包含本颗
same装备上与本颗同 ID 的数量
damage装备损坏百分比,0~100;无耐久物品为 0
enchants装备上不同附魔的种数
unbreakable装备有无限耐久时为 1,否则为 0

表达式支持 + - * /、括号、min(a,b)、max(a,b) 和 clamp(value,min,max)。三种费用各自独立计算:金币向上取到分,点券与经验等级向上取整,不足一个单位也会收费。费用不得为负数或非有限值;计算出无效价格会拒绝此次拆卸,不会按免费处理。Money: 0、Points: 0、Exp: 0 可分别关闭对应费用,三项全为零即免费。

金币通过 Vault 及经济插件扣除;点券由 Points.Provider 选择内置账户或 PlayerPoints;经验使用玩家的经验等级。可只写某一种非零费用,也可同时使用金币+点券、金币+经验,或三者全部。界面会组合展示本颗的实际价格。

想收取的费用Cost 写法
仅金币Money: 100、Points: 0、Exp: 0
仅点券Money: 0、Points: 500、Exp: 0
仅经验Money: 0、Points: 0、Exp: 5
金币+点券Money: 100、Points: 500、Exp: 0
金币+经验Money: 100、Points: 0、Exp: 5
三者都有Money: 100、Points: 500、Exp: 5

覆盖规则里没写的币种会继承上一层,因此要改成“仅点券”等方案时,必须显式把不用的币种写为 0。

执行、失败与退款

  1. 点击宝石后重新核对装备槽中的物品,并按当前宝石和装备重新计算报价。
  2. 先检查点券及经验,随后依次扣金币、点券、经验。后续扣款失败会尝试退回已扣部分,不改装备。
  3. 在装备副本上撤销这一颗宝石的实际效果。撤销失败时保留原装备,并尝试退还三种已支付费用。退款失败会提示管理员处理。
  4. 撤销成功后把装备写回拆卸台的装备槽,按这颗宝石的 Success 判定返还;失败则宝石损坏。背包满时返还物会掉在玩家身边。

不同经济插件无法提供跨后端的原子交易;极少数情况下退款接口也可能失败。遇到退款失败,应保存操作日志和余额记录人工处理。

同 ID 宝石拆卸时先撤销最近镶入的一颗。拆卸成功后界面刷新,下一颗会按新的装备状态重新计算价格。

哪些效果能够撤销

奖励新镶入宝石的撤销行为
Attribute / Enchant按本颗实际增量或等级变化撤销,保留其他来源
LoreAdd / LoreReplace只撤销本颗记录的文本变化
Conditional内部奖励成功且可撤销时使用其记录
Unbreakable / ItemFlag / SkillToNBT按记录恢复原状态;外部改写造成冲突时拒绝覆盖
LoreVar / Name / Durability不支持通用撤销,不能拆卸返还
Point / Money / ItemGive / ItemTake / MaxHealth / ExpLevel玩家或背包副作用不能通用撤销,含这些实际记录时不能返还

修复石等一次性效果不会生成可拆卸实例;TrackApplied: false 也关闭新实例记录。旧装备缺少实际变化历史时,只能走有限的兼容撤销路径。缺少必要凭据或记录损坏时会拒绝拆卸,保留物品。装备有隐藏技能 Lore 时,请先拆技能隐藏粉尘,再修改其他宝石。

排错

  • 价格显示“方案计算失败”:检查 dismantle/ 中匹配规则的公式、负数、除零及过大金额。
  • 余额不足:检查对应的 Vault、点券后端和经验等级;金币实际由经济插件扣款结果决定。
  • 宝石未返还:查看本颗的返还成功率、聊天提示和身边掉落物。
  • 撤销或退款失败:保留日志与余额记录,检查其他插件是否改写装备;不要反复点击。

权限为 snowygems.inspect、snowygems.dismantle,默认随 snowygems.user 提供。最近操作可通过操作记录查看。

Copyright © 2026