查看与拆卸宝石
查看与拆卸宝石
装备上镶嵌了什么、想把某颗宝石拆下来,是两件不同的事,所以插件用两个命令、两个界面分开处理:
| 命令 | 界面 | 会不会改动装备 |
|---|---|---|
/sgem inspect | 只读查看面板 | 不会。点击没有任何效果 |
/sgem dismantle | 拆卸面板 | 会。点击即扣费拆卸 |
两个界面都只作用于主手手持的装备,打开前先把装备拿在手上。
/sgem inspect:只读查看
列出手持装备上已镶嵌的全部宝石,显示每颗宝石的名称与 Tips。点击不做任何事,界面底部提示「拆卸请用 /sgem dismantle」。
宝石图标会正确渲染 Texture(头颅材质)——配置里写了 base64 头颅的宝石,在这里显示的就是那个头颅,而不是退化成纸。
/sgem dismantle:拆卸
列出手持装备上已镶嵌的宝石,每个图标下方显示本次拆卸的费用与损坏概率,点击即执行。
拆卸按固定顺序走三步:
扣除费用
余额不足直接拒绝,不会动装备。这一步失败时宝石还在装备上,玩家没有任何损失。
撤销宝石效果并摘除
真正把这颗宝石加的属性修饰符移除、附魔降级或删除,再从装备的已镶嵌列表里摘掉。
掷骰子判定宝石是否损坏
按 BreakChance 判定。没损坏则把宝石实体返还进背包,损坏则不返还。
无论是否损坏,装备上的加成都已经撤销了——损坏只影响「宝石本体能不能拿回来」。
拆完会自动重开界面刷新列表。
配置:费用与损坏概率
全部在 config.yml 的 Dismantle 一节:
Dismantle:
# 拆卸费用
Cost:
# 是否收取拆卸费用
Enabled: true
# 费用类型: money(金币, 需 Vault) / points(点券) / exp(经验等级)
Type: money
# 费用数额(exp 类型时取整数级数)
Amount: 100
# 拆卸时宝石损坏(不返还)的概率, 0~100。0 表示永不损坏, 拆下必返还。
BreakChance: 20
| 字段 | 可选值 | 说明 |
|---|---|---|
Cost.Enabled | true / false | false 则完全免费,界面上也不显示费用行 |
Cost.Type | money / points / exp | 见下表 |
Cost.Amount | 数字 | exp 类型会取整 |
BreakChance | 0 ~ 100 | 0 = 永不损坏;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
Dismantle:
Cost:
Enabled: true
Type: points
Amount: 500
BreakChance: 0
Dismantle:
Cost:
Enabled: true
Type: money
Amount: 5000
BreakChance: 50
拆卸时到底撤销了什么
这是拆卸系统最容易产生误解的地方。拆卸会调用每条 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.yml 的 Dismantle.Cost 一处配置全局生效。两者会叠加收费,迁移时记得把宝石里的那行删掉。装备原生属性不会被抹掉
给下界合金套镶嵌属性宝石后,装备自带的护甲值与盔甲韧性不会消失。
插件在第一次向装备写入属性修饰符前,会先把该装备的默认属性固化成显式修饰符再追加自己的(用一个专属 NBT 标记确保只固化一次)。这是 Minecraft 的机制决定的:一旦物品有了任何显式的 AttributeModifiers,材质自带的隐式默认属性就整体失效,不做固化就会出现「镶了生命宝石,护甲和韧性全没了」。
权限
| 命令 | 权限节点 | 默认 |
|---|---|---|
/sgem inspect | snowygems.inspect | 所有人 |
/sgem dismantle | snowygems.dismantle | 所有人 |
两者都在 snowygems.user 伞节点下。详见权限节点。
排错
点击宝石提示「手持的装备已改变」
打开界面后手持物品变了(切换了物品栏、装备被其他插件改写)。重新打开即可。
扣了费用但宝石没拆掉
不应该发生——扣费在撤销之前,且撤销失败不会回滚扣费。若真遇到,开 /sgem debug Dismantle,GemManager 完整操作一次并提供日志。
拆卸后属性还在
开 /sgem debug Reward,GemManager,日志会打印「撤销了 N 条奖励效果」。如果 N 是 0,说明这颗宝石的 Rewards 全部是不可撤销类型(玩家类或 lore 类)。
拆卸后装备的 lore 上还有 BUFF 标记
这是预期行为,见上文。用 $onRemove 加 LoreReplace 处理。