宝石与槽位
GTGem 的核心是两类 NBT:
- 宝石 NBT:定义宝石能镶嵌到什么槽位、成功率、消耗、属性、动作和拆卸规则。
- 装备槽位 NBT:定义装备有哪些槽位,每个槽位是什么类型。
宝石 NBT 完整结构
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 | 否 | 拆卸规则 |
成功率:
1.0 = 100%
0.8 = 80%
0.5 = 50%socket 支持单个和多个
单槽位:
socket: "&6&l红宝石"多个槽位:
socket:
- "&6&l红宝石"
- "&e&l通用槽位"这个宝石可以镶嵌到红宝石槽位,也可以镶嵌到通用槽位。
装备槽位结构
空槽位:
gtgem:
sockets:
"0":
type: "&6&l红宝石"
"1":
type: "&b&l蓝宝石"装备的 Lore 中可以放槽位显示行,玩家能直观看到这件装备可以镶什么:
lore:
- "&7一把带红宝石槽位的剑"
- "§孔§位 &7[ &c空槽位 &7<&6&l红宝石&7> ]"这里的 §孔§位 决定槽位信息显示在 Lore 的哪一行,要和 config.yml 里的 prefix.socket 保持一致。<&6&l红宝石&7> 里的槽位文字要和 NBT 中的 type 保持一致。
Lore 没有 §孔§位 也可以镶嵌。装备只要配置了 gtgem.sockets 即可使用;lore-template.append-when-marker-missing 决定是否把镶嵌显示追加到 Lore 末尾。关闭后不再自动新增显示行,镶嵌和拆卸仍可正常使用。
NeigeItems 完整宝石示例
红宝石:
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 随机生成多种宝石
副本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 做固定宝石模板
通用宝石模板:
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 多槽位装备示例
多彩盾牌:
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 通用宝石
万能石:
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 宝石示例
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 装备示例
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 显示
装备原本的槽位行:
lore:
- "&7一把带红宝石槽位的剑"
- "§孔§位 &7[ &c空槽位 &7<&6&l红宝石&7> ]"镶嵌成功后,这一行会按 config.yml 的模板变成已镶嵌显示:
lore-template:
socket-filled: "&7[ &a已镶嵌 &7<&b{gem}&7> ]"显示效果:
[ 已镶嵌 <红宝石> ]可用变量:
| 变量 | 内容 |
|---|---|
{gem} | 宝石名称 |
{type} | 槽位类型 |
如果想显示槽位类型和宝石名称,可以这样写:
lore-template:
socket-filled: "&7[ &a已镶嵌 &7<&e{type}&7> &8- &b{gem}&7 ]"显示效果:
[ 已镶嵌 <红宝石槽位> - 红宝石 ]拆卸宝石后,GTGem 会把镶嵌前那一行槽位 Lore 恢复回来,所以原本装备的排版不会被固定模板覆盖。
自定义镶嵌显示
宝石的 gtgem.display 决定镶嵌后的 Lore 样式。旧宝石没有这个节点时,继续使用 lore-template.socket-filled,现有物品不需要重做。
符文模式:多个槽位共用一行
{slots} 会替换为全部槽位标记。§孔§位 决定这一行显示在 Lore 的什么位置,槽位数量和类型在装备的 gtgem.sockets 中设置。
gtgem:
type: "gem"
name: "&c烈焰符文"
socket: "符文槽"
rules:
chance: 1.0
cost:
money: 0
exp: 0
attributes:
火焰伤害: 25.0
display:
mode: "compact"
style: "rune"
template: "§孔§位&7符文: {slots}"
empty: "&8□"
mark: "&c◆"三孔装备的显示行可以写成:
Lore:
- "&7烈焰长剑"
- "§孔§位&7符文: &8□ &8□ &8□"如果装备 Lore 没有这行,默认会在第一次镶嵌后追加到末尾。把 lore-template.append-when-marker-missing 设为 false 后,只保存 NBT 和属性,不自动新增 Lore。
另一套符板系统可以使用独立样式:
display:
mode: "compact"
style: "rune-board"
template: "§孔§位&7符板: {slots}"
empty: "&8☆"
mark: "&e★"同一件装备不能混用不同的 style 或 template,避免一行 Lore 无法确定该用哪种符号和标题。
附魔模式:多行信息
block 会完整输出 display.lore。文本支持 PAPI、{gem_name}、{type} 和宝石属性名变量。
gtgem:
type: "gem"
name: "&6锋利附魔 V"
socket: "附魔槽"
rules:
chance: 0.9
cost:
money: 500
exp: 30
attributes:
物理伤害: 200.0
暴击伤害: 15.0
display:
mode: "block"
lore:
- "§孔§位&6锋利附魔 V"
- " &7物理伤害: &a+{物理伤害}"
- " &7暴击伤害: &a+{暴击伤害}%"宝石模式:每个槽位一行
line 每个槽位只显示 display.lore 的第一行,适合传统宝石列表:
display:
mode: "line"
lore:
- "§孔§位&7镶嵌: &f{gem_name} &8(&a+{生命值} 生命&8)"display 只需要填写显示样式。成功率、金币、经验、条件、动作和拆卸规则继续按照原有配置填写,不需要为不同显示模式重复配置。
属性写入结果
镶嵌成功后,GTGem 会把所有已镶嵌宝石的属性汇总到配置中的 tag。
默认:
attribute:
write-to-nbt: true
tag: "GTGemAttr"装备最终会出现:
GTGemAttr:
生命值: 500.0
物理攻击力: 10.0CraneAttribute、AttributePlus 等属性插件需要读取这个 NBT 标签,属性才会真正生效。
调试方法
手持宝石或装备执行:
/gtgem debug item重点看:
- 宝石是否有
gtgem.type: gem。 - 宝石
socket是否和装备槽位type一致。 - 装备是否有
gtgem.sockets。 - 镶嵌后是否出现
GTGemAttr。
