给特殊物品添加 NBT 附加价值
这篇文档对应的使用场景是:
- 同一种物品因为 NBT 不同,需要有不同价值
- 你在做枪械、模块、强化、词条、品质、附魔、插件或自定义数据物品
- 你希望“基础物品值一样,但附带数据不同就加价”
什么是附加价值
附加价值不是独立替代基础价值的另一套系统,它是在最终计算时额外加上去的值。
最终关系是:
最终价值 = 基础价值或配方生成价值 + 所有命中的 NBT 附加价值
这意味着附加价值最适合做“同类物品之间的差异化定价”。
基础用法
OEVEvents.addItemValue(event => {
event.addBaseItemValue('minecraft:crossbow', 512)
event.addExtraItemValue('{CustomModelData:1}', 2048)
})
这个例子表示:
- 普通弩的基础价值是 512
- 只要某个物品堆带有
CustomModelData:1这段 NBT,就额外增加 2048
如果这个 NBT 正好出现在弩上,那么最终价值就是 2560。
最常见的使用方式
枪械类物品
OEVEvents.addItemValue(event => {
event.addBaseItemValue('tacz:modern_kinetic_gun', 10000)
event.addExtraItemValue('{GunId:"tacz:m700"}', 500000)
})
适合用于:
- 同一物品 ID 下,通过 NBT 区分不同枪型
- 不同配件、改装、型号的价值区分
附魔装备
OEVEvents.addItemValue(event => {
event.addExtraItemValue('{Enchantments:[{id:"minecraft:sharpness",lvl:5s}]}', 1024)
})
这类写法适合粗粒度加价。
但要注意,NBT 匹配是“命中就加”,不是自动帮你解析整个附魔体系的价值差。
自定义模块或品质系统
OEVEvents.addItemValue(event => {
event.addExtraItemValue('{Tier:"legendary"}', 100000)
event.addExtraItemValue('{Sockets:4}', 4096)
})
如果某个物品同时满足多个条件,这些附加值会叠加。
多规则叠加行为
这一点非常重要。
源码里的行为是遍历全部附加价值规则,只要命中就全部相加。
因此:
- 不是“命中第一条就停止”
- 不是“只取最高一条”
- 而是“所有命中的规则一起累加”
例如:
OEVEvents.addItemValue(event => {
event.addExtraItemValue('{Tier:"legendary"}', 100000)
event.addExtraItemValue('{Sockets:4}', 4096)
})
如果某件物品同时具备这两个 NBT 条件,那么它会同时获得两部分附加价值。
设计时要注意的边界
NBT 规则越宽,命中范围越大
如果你写得过于宽泛,可能会让很多不想加价的物品一起命中。
所以在做高价值物品时,建议尽量匹配能唯一识别目标物品的数据字段。
附加价值不会阻止基础价值或配方价值生效
附加价值只是“往上加”。
如果你需要完全重写某类物品的价值逻辑,通常要先把基础值或配方链设计好,再考虑附加值。
显示层只看最终值
Tooltip 显示的是最终值,而不会帮你拆开显示:
- 基础值是多少
- 配方值是多少
- 附加值是多少
如果你要做更详细的调试显示,通常需要自己在脚本层读取并输出。
适合与哪些系统联动
- 枪械模组
- 带品质系统的 RPG 装备
- 带插槽、词条、升级数据的道具
- 自定义卡片、芯片、模块、法术卷轴
- 需要根据内部数据定价的任务物品
调整思路建议
实际整合时,常见做法不是给每一个 NBT 组合单独定价,而是拆成几层:
- 先给物品本体一个基础值。
- 再给高价值 NBT 特征追加附加值。
- 尽量让规则复用,而不是为每个具体成品写死一条。
这样脚本更容易维护。