宝石与槽位
GTGem 的核心是两类 NBT:
- 宝石 NBT:定义宝石能镶嵌到什么槽位、成功率、消耗、属性、动作和拆卸规则。
- 装备槽位 NBT:定义装备有哪些槽位,每个槽位是什么类型。
宝石 NBT 完整结构
yaml
gtgem:
type: "gem"
name: "&6&l红宝石"
socket: "&6&l红宝石"
rules:
chance: 0.8
cost:
money: 100
exp: 0
conditions:
- "%level% >= 10"
attributes:
生命值: 500.0
物理攻击力: 10.0
actions:
success:
- "SOUND:ENTITY_VILLAGER_YES;1.0;1.2"
- "MESSAGE:&a宝石镶嵌成功!"
fail:
- "SOUND:ENTITY_VILLAGER_NO;1.0;0.8"
- "MESSAGE:&c镶嵌失败!"
remove-rules:
conditions: []
cost-items:
- "钻石x3"
cost-money: 50
cost-exp: 10| 字段 | 必填 | 说明 |
|---|---|---|
type | 是 | 必须是 gem |
name | 是 | 宝石显示名 |
socket | 是 | 可镶嵌槽位类型 |
rules.chance | 否 | 成功率,未写则使用 config 默认值 |
rules.cost | 否 | 镶嵌消耗 |
rules.conditions | 否 | 镶嵌条件 |
attributes | 否 | 写入装备的属性 |
actions.success | 否 | 成功动作 |
actions.fail | 否 | 失败动作 |
remove-rules | 否 | 拆卸规则 |
成功率:
text
1.0 = 100%
0.8 = 80%
0.5 = 50%socket 支持单个和多个
单槽位:
yaml
socket: "&6&l红宝石"多个槽位:
yaml
socket:
- "&6&l红宝石"
- "&e&l通用槽位"这个宝石可以镶嵌到红宝石槽位,也可以镶嵌到通用槽位。
装备槽位结构
空槽位:
yaml
gtgem:
sockets:
"0":
type: "&6&l红宝石"
"1":
type: "&b&l蓝宝石"装备的 Lore 中也要放槽位显示行,玩家才能直观看到这件装备可以镶什么:
yaml
lore:
- "&7一把带红宝石槽位的剑"
- "§孔§位 &7[ &c空槽位 &7<&6&l红宝石&7> ]"这里的 §孔§位 要和 config.yml 里的 prefix.socket 保持一致。<&6&l红宝石&7> 里的槽位文字要和 NBT 中的 type 保持一致。
NeigeItems 完整宝石示例
yaml
红宝石:
material: NETHER_STAR
amount: 1
Name: "&c&l红宝石"
Lore:
- ""
- "&7宝石等级: &6★★☆☆☆"
- "&7镶嵌类型: &c攻击"
- "&7宝石属性: &f物理攻击力 &a+20"
- "&7成功几率: &e80%"
- "&7镶嵌消耗: &6100金币"
- ""
- "§宝§石"
nbt:
gtgem:
type: "gem"
name: "&c&l红宝石"
socket: "&c红宝石"
rules:
chance: 0.8
cost:
money: 100
exp: 0
attributes:
物理攻击力: 20
actions:
success:
- "SOUND:ENTITY_VILLAGER_YES;1.0;1.2"
- "MESSAGE:&a宝石镶嵌成功!"
fail:
- "SOUND:ENTITY_VILLAGER_NO;1.0;0.8"
- "MESSAGE:&c镶嵌失败!宝石已损坏。"使用 NeigeItems 模板批量创建宝石
NeigeItems 批量做宝石主要用两种写法:
| 写法 | 适合场景 |
|---|---|
sections + weight | 一个物品 ID 随机生成不同类型的宝石、词条和数值 |
inherit | 做一套公共模板,再派生出红宝石、蓝宝石、生命宝石等固定 ID |
一个 ID 随机生成多种宝石
yaml
副本1宝石:
material: DIAMOND
name: "§f暗淡的<宝石类型>宝石"
amount: 1
lore:
- "§宝§石"
- "§-&6 <<宝石类型>.属性> +%neigeitems_nbt_属性数值%<<宝石类型>.后缀>"
- ""
- "§f镶嵌类型:§6 武器"
- "§f成功几率:§c 80%"
nbt:
属性数值: <<宝石类型>.数值>
gtgem:
type: "gem"
name: "§f暗淡的<宝石类型>宝石"
socket: "&c红宝石"
rules:
chance: 0.8
cost:
money: 100
exp: 0
attributes:
<<宝石类型>.属性>: <<宝石类型>.数值>
actions:
success:
- "SOUND:ENTITY_PLAYER_LEVELUP;1.0;1.5"
- "MESSAGE:&a宝石镶嵌成功"
fail:
- "SOUND:ENTITY_VILLAGER_NO;1.0;0.8"
- "MESSAGE:&c镶嵌失败!宝石已损坏。"
sections:
宝石类型:
type: weight
values:
- 1::锯齿
- 1::会心
- 1::狂怒
- 1::星痕
- 1::利刃
- 1::噬魔
会心:
属性: "暴击率"
数值: <number::1_3_0_HALF\_UP>
后缀: "%"
锯齿:
属性: "物理穿透"
数值: <number::1_10_0_HALF\_UP>
后缀: ""
狂怒:
属性: "暴击伤害"
数值: <number::1_5_0_HALF\_UP>
后缀: "%"
噬魔:
属性: "魔法穿透"
数值: <number::1_10_0_HALF\_UP>
后缀: ""
利刃:
属性: "物理伤害"
数值: <number::1_3_0_HALF\_UP>
后缀: "%"
星痕:
属性: "魔法伤害"
数值: <number::1_3_0_HALF\_UP>
后缀: "%"生成时,宝石类型 会先按权重抽取一个结果,例如 锯齿。
后面的 <<宝石类型>.属性>、<<宝石类型>.数值> 会读取 锯齿 节点下面的配置。
这样一个 副本1宝石 就能生成多种不同属性的宝石,不需要为每一种属性复制一整段 NBT。
用 inherit 做固定宝石模板
yaml
通用宝石模板:
material: NETHER_STAR
amount: 1
lore:
- "§宝§石"
- "&7宝石属性: <属性名> +%neigeitems_nbt_属性数值%<属性后缀>"
- "&7成功几率: &e<成功率显示>"
nbt:
属性数值: <属性值>
gtgem:
type: "gem"
name: "<显示名>"
socket: "<槽位>"
rules:
chance: <成功率>
cost:
money: <金币>
exp: 0
attributes:
<属性名>: <属性值>
sections:
显示名: "&f宝石"
槽位: "&f通用槽位"
属性名: "生命值"
属性值: 100
属性后缀: ""
成功率: 1.0
成功率显示: "100%"
金币: 0
一级生命宝石:
inherit: 通用宝石模板
name: "&a一级生命宝石"
sections:
显示名: "&a一级生命宝石"
槽位: "&a生命槽位"
属性名: "生命值"
属性值: 300
成功率: 1.0
成功率显示: "100%"
金币: 50
二级攻击宝石:
inherit: 通用宝石模板
name: "&c二级攻击宝石"
sections:
显示名: "&c二级攻击宝石"
槽位: "&c攻击槽位"
属性名: "物理攻击力"
属性值: <number::10_30_0_HALF\_UP>
成功率: 0.8
成功率显示: "80%"
金币: 200inherit: 通用宝石模板 会继承模板里的材质、Lore、NBT 和规则。
每个子宝石只需要覆盖 name 和 sections,适合做一整套固定宝石。
NeigeItems 多槽位装备示例
yaml
多彩盾牌:
material: SHIELD
Name: "&d&l多彩盾牌"
Lore:
- "&7可镶嵌多种宝石的盾牌"
- "§孔§位 &7[ &c空槽位 &7<&6&l红宝石&7> ]"
- "§孔§位 &7[ &c空槽位 &7<&b&l蓝宝石&7> ]"
- "§孔§位 &7[ &c空槽位 &7<&e&l黄宝石&7> ]"
nbt:
gtgem:
sockets:
"0":
type: "&6&l红宝石"
"1":
type: "&b&l蓝宝石"
"2":
type: "&e&l黄宝石"NeigeItems 通用宝石
yaml
万能石:
material: QUARTZ
Name: "&f&l万能石"
Lore:
- "§宝§石"
- "&7可镶嵌到多种槽位"
- "&7成功率: &e100%"
nbt:
gtgem:
type: "gem"
name: "&f&l万能石"
socket:
- "&6&l红宝石"
- "&b&l蓝宝石"
- "&e&l黄宝石"
rules:
chance: 1.0
cost:
money: 0
exp: 0
attributes:
生命值: 100.0MythicMobs 宝石示例
yaml
RubyGem:
Id: NETHER_STAR
Display: "&6&l红宝石"
Lore:
- "§宝§石"
- "&7一颗闪耀的红宝石"
Options:
NBT:
gtgem.type: "gem"
gtgem.name: "&6&l红宝石"
gtgem.socket: "&6&l红宝石"
gtgem.rules.chance: 0.8
gtgem.rules.cost.money: 100
gtgem.rules.cost.exp: 0
gtgem.attributes.生命值: 500.0
gtgem.attributes.物理攻击力: 10.0MythicMobs 装备示例
yaml
RubySword:
Id: DIAMOND_SWORD
Display: "&c&l红宝石之剑"
Lore:
- "&7一把镶嵌了红宝石槽位的剑"
- "§孔§位 &7[ &c空槽位 &7<&6&l红宝石&7> ]"
Options:
NBT:
gtgem.sockets.0.type: "&6&l红宝石"
gtgem.sockets.1.type: "&6&l红宝石"镶嵌后的 Lore 显示
装备原本的槽位行:
yaml
lore:
- "&7一把带红宝石槽位的剑"
- "§孔§位 &7[ &c空槽位 &7<&6&l红宝石&7> ]"镶嵌成功后,这一行会按 config.yml 的模板变成已镶嵌显示:
yaml
lore-template:
socket-filled: "&7[ &a已镶嵌 &7<&b{gem}&7> ]"显示效果:
text
[ 已镶嵌 <红宝石> ]可用变量:
| 变量 | 内容 |
|---|---|
{gem} | 宝石名称 |
{type} | 槽位类型 |
如果想显示槽位类型和宝石名称,可以这样写:
yaml
lore-template:
socket-filled: "&7[ &a已镶嵌 &7<&e{type}&7> &8- &b{gem}&7 ]"显示效果:
text
[ 已镶嵌 <红宝石槽位> - 红宝石 ]拆卸宝石后,GTGem 会把镶嵌前那一行槽位 Lore 恢复回来,所以原本装备的排版不会被固定模板覆盖。
属性写入结果
镶嵌成功后,GTGem 会把所有已镶嵌宝石的属性汇总到配置中的 tag。
默认:
yaml
attribute:
write-to-nbt: true
tag: "GTGemAttr"装备最终会出现:
yaml
GTGemAttr:
生命值: 500.0
物理攻击力: 10.0CraneAttribute、AttributePlus 等属性插件需要读取这个 NBT 标签,属性才会真正生效。
调试方法
手持宝石或装备执行:
text
/gtgem debug item重点看:
- 宝石是否有
gtgem.type: gem。 - 宝石
socket是否和装备槽位type一致。 - 装备是否有
gtgem.sockets。 - 镶嵌后是否出现
GTGemAttr。
