SnowyGems

查看与拆卸宝石

/sgem inspect 只读查看与 /sgem dismantle 拆卸的区别、拆卸费用与损坏概率的配置方法。

查看与拆卸宝石

装备上镶嵌了什么、想把某颗宝石拆下来,是两件不同的事,所以插件用两个命令、两个界面分开处理:

命令界面会不会改动装备
/sgem inspect只读查看面板不会。点击没有任何效果
/sgem dismantle拆卸面板会。点击即扣费拆卸
拆开成两个界面的原因是防误触:查看装备信息是高频操作,而拆卸要扣钱、还有概率损坏宝石。两者混在一个界面里,点错一下就是真金白银的损失。

两个界面都只作用于主手手持的装备,打开前先把装备拿在手上。


/sgem inspect:只读查看

列出手持装备上已镶嵌的全部宝石,显示每颗宝石的名称与 Tips。点击不做任何事,界面底部提示「拆卸请用 /sgem dismantle」。

宝石图标会正确渲染 Texture(头颅材质)——配置里写了 base64 头颅的宝石,在这里显示的就是那个头颅,而不是退化成纸。


/sgem dismantle:拆卸

列出手持装备上已镶嵌的宝石,每个图标下方显示本次拆卸的费用损坏概率,点击即执行。

拆卸按固定顺序走三步:

扣除费用

余额不足直接拒绝,不会动装备。这一步失败时宝石还在装备上,玩家没有任何损失。

撤销宝石效果并摘除

真正把这颗宝石加的属性修饰符移除、附魔降级或删除,再从装备的已镶嵌列表里摘掉。

掷骰子判定宝石是否损坏

BreakChance 判定。没损坏则把宝石实体返还进背包,损坏则不返还。

无论是否损坏,装备上的加成都已经撤销了——损坏只影响「宝石本体能不能拿回来」。

拆完会自动重开界面刷新列表。


配置:费用与损坏概率

全部在 config.ymlDismantle 一节:

Dismantle:
  # 拆卸费用
  Cost:
    # 是否收取拆卸费用
    Enabled: true
    # 费用类型: money(金币, 需 Vault) / points(点券) / exp(经验等级)
    Type: money
    # 费用数额(exp 类型时取整数级数)
    Amount: 100
  # 拆卸时宝石损坏(不返还)的概率, 0~100。0 表示永不损坏, 拆下必返还。
  BreakChance: 20
字段可选值说明
Cost.Enabledtrue / falsefalse 则完全免费,界面上也不显示费用行
Cost.Typemoney / points / exp见下表
Cost.Amount数字exp 类型会取整
BreakChance0 ~ 1000 = 永不损坏;100 = 必定损坏

Cost.Type 三种费用的实际来源:

扣什么依赖
money金币需要 Vault 与一个经济插件
points / point点券Points.Provider(内置账户或 PlayerPoints)
exp / explevel / level玩家经验等级
exp 扣的是等级不是经验点数。Amount: 100 意味着扣 100 级,对绝大多数服务器来说这是个天文数字。用经验计费时把数额调到 5 ~ 30 这个量级更合理。

改完需要 /sgem reload


免费拆卸 / 无损拆卸怎么配

Dismantle:
  Cost:
    Enabled: false
  BreakChance: 0

拆卸时到底撤销了什么

这是拆卸系统最容易产生误解的地方。拆卸会调用每条 Rewards撤销逻辑,而不是只跑 $onRemove

奖励函数拆卸时的行为
Attribute移除本插件写的该属性修饰符,并清掉记录叠加值的 NBT
Enchant(未指定 level附魔等级 −1,降到 0 则移除该附魔
Enchant(指定了 level直接移除该附魔
Point / Money / MaxHealth / ExpLevel 等玩家类不动。「已经给出去的点券」没有撤销语义
LoreAdd / LoreVar / Name 等 lore 类不自动撤销

BUFF 类宝石拆卸后 lore 标记不会自动消失。 BUFF 宝石的原理是往 lore 写一行标记,而 lore 类奖励没有可靠的撤销方式(玩家可能在中间又镶了别的宝石改动过 lore)。如果你需要拆卸时清掉标记,用 $onRemove 显式写一条 LoreReplace

Rewards:
  - LoreAdd{lore=&6&l[&c&lBUFF&6&l] &b&l发光}
  - LoreReplace{old=&6&l[&c&lBUFF&6&l] &b&l发光;new=} $onRemove

$onRemove 阶段的奖励仍然有效,在撤销之后执行,可以用来做「返还材料」这类附加逻辑:

Rewards:
  - Attribute{name=health;operation=0;slot=auto;var=v+1;limit=5}
  - ItemGive{gem=宝石碎片;amount=2} $onRemove    # 拆卸时额外返还 2 个碎片
旧版本用 Point{amount=-1000} $onRemove 收拆卸费的写法仍然能用,但不推荐了——它是写在每颗宝石里的,改价格要逐颗改。现在统一用 config.ymlDismantle.Cost 一处配置全局生效。两者会叠加收费,迁移时记得把宝石里的那行删掉。

装备原生属性不会被抹掉

给下界合金套镶嵌属性宝石后,装备自带的护甲值与盔甲韧性不会消失

插件在第一次向装备写入属性修饰符前,会先把该装备的默认属性固化成显式修饰符再追加自己的(用一个专属 NBT 标记确保只固化一次)。这是 Minecraft 的机制决定的:一旦物品有了任何显式的 AttributeModifiers,材质自带的隐式默认属性就整体失效,不做固化就会出现「镶了生命宝石,护甲和韧性全没了」。


权限

命令权限节点默认
/sgem inspectsnowygems.inspect所有人
/sgem dismantlesnowygems.dismantle所有人

两者都在 snowygems.user 伞节点下。详见权限节点


排错

点击宝石提示「手持的装备已改变」

打开界面后手持物品变了(切换了物品栏、装备被其他插件改写)。重新打开即可。

扣了费用但宝石没拆掉

不应该发生——扣费在撤销之前,且撤销失败不会回滚扣费。若真遇到,开 /sgem debug Dismantle,GemManager 完整操作一次并提供日志。

拆卸后属性还在

/sgem debug Reward,GemManager,日志会打印「撤销了 N 条奖励效果」。如果 N 是 0,说明这颗宝石的 Rewards 全部是不可撤销类型(玩家类或 lore 类)。

拆卸后装备的 lore 上还有 BUFF 标记

这是预期行为,见上文。用 $onRemoveLoreReplace 处理。

Copyright © 2026