规则与条件
规则写在宝石物品的 nbt.gtgem.rules 下,用来控制镶嵌成功率、金币消耗、经验消耗和使用条件。
最常见的位置:
nbt:
gtgem:
type: "gem"
name: "&c红宝石"
socket: "&c红宝石"
rules:
chance: 0.8
cost:
money: 100
exp: 0
conditions:
- "%level% >= 10"
attributes:
物理攻击力: 20rules 字段
| 字段 | 说明 |
|---|---|
chance | 镶嵌成功率,1.0 为 100%,0.8 为 80% |
cost.money | 镶嵌时扣除的金币,需要 Vault 和经济插件 |
cost.exp | 镶嵌时扣除的总经验值 |
conditions | 镶嵌前必须通过的条件列表 |
没有写 rules 时,会使用 config.yml 中的 defaults。
成功率例子
100% 成功,适合测试:
rules:
chance: 1.0
cost:
money: 0
exp: 080% 成功,失败后是否消耗宝石由 config.yml 的 consume-on-fail 决定:
rules:
chance: 0.8
cost:
money: 100
exp: 050% 成功,适合高价值宝石:
rules:
chance: 0.5
cost:
money: 500
exp: 30条件表达式
conditions 是一个列表,每一行都必须满足。只要有一行不满足,宝石就不会镶嵌。
可直接使用的内置变量:
| 变量 | 内容 |
|---|---|
%money% | 玩家金币 |
%exp% | 玩家总经验 |
%level% | 玩家等级 |
%health% | 当前血量 |
%max_health% | 最大血量 |
%food% | 饥饿值 |
%online% | 当前在线人数 |
表达式支持:
> >= < <= == !=
&& || !
+ - * / %
( )如果安装了 PlaceholderAPI,也可以直接写 PAPI 变量。GTGem 会先解析 PAPI,再执行条件判断。
等级限制宝石
玩家等级达到 30 级才能镶嵌:
rules:
chance: 0.85
cost:
money: 200
exp: 0
conditions:
- "%level% >= 30"适合做三阶、四阶、高级副本宝石。
金币限制宝石
需要玩家拥有至少 1000 金币,实际镶嵌时再扣 500 金币:
rules:
chance: 0.8
cost:
money: 500
exp: 0
conditions:
- "%money% >= 1000"conditions 是进入镶嵌流程前的判断,cost.money 是实际扣除。
两者可以相同,也可以不同。
经验限制宝石
要求总经验不少于 300,同时扣除 100 总经验:
rules:
chance: 0.75
cost:
money: 0
exp: 100
conditions:
- "%exp% >= 300"这里的 %exp% 是总经验,不是等级数。
职业宝石
职业通常由 PlaceholderAPI 变量提供。下面示例用 %player_class% 演示,实际变量以服务器职业插件为准。
rules:
chance: 0.8
cost:
money: 300
exp: 0
conditions:
- "'%player_class%' == 'Warrior'"如果职业变量显示中文,也可以这样写:
conditions:
- "'%player_class%' == '战士'"字符串比较建议加引号,避免变量为空或带特殊字符时表达式无法解析。
多条件宝石
同时要求等级、金币、职业:
rules:
chance: 0.7
cost:
money: 1000
exp: 50
conditions:
- "%level% >= 50"
- "%money% >= 1000"
- "'%player_class%' == 'Warrior'"也可以写成一行:
conditions:
- "%level% >= 50 && %money% >= 1000 && '%player_class%' == 'Warrior'"分成多行更方便排查;一行适合简单组合条件。
或条件
战士或骑士都能镶嵌:
conditions:
- "'%player_class%' == 'Warrior' || '%player_class%' == 'Knight'"等级达到 60,或者拥有特殊权限变量:
conditions:
- "%level% >= 60 || '%luckperms_has_permission_gtgem.special%' == 'yes'"PAPI 变量返回什么,就按实际返回值写判断。
条件失败提示
可以在 conditions 中加入 fail_message:。当任意条件失败时,会显示这条提示。
rules:
chance: 0.8
cost:
money: 100
exp: 0
conditions:
- "%level% >= 30"
- "%money% >= 500"
- "fail_message:&c需要 30 级并准备 500 金币才能镶嵌这颗宝石。"fail_message: 只负责显示失败提示,不参与条件判断。
镶嵌动作
动作写在 gtgem.actions 下。成功和失败可以分别配置。
actions:
success:
- "MESSAGE:&a宝石镶嵌成功!"
- "SOUND:ENTITY_PLAYER_LEVELUP;1.0;1.4"
- "TITLE:&a镶嵌成功;&7属性已写入装备;10;40;10"
fail:
- "MESSAGE:&c镶嵌失败,宝石已损坏。"
- "SOUND:ENTITY_VILLAGER_NO;1.0;0.8"常用动作:
| 动作 | 写法 |
|---|---|
| 消息 | MESSAGE:&a内容 |
| 音效 | SOUND:音效;音量;音调 |
| 标题 | TITLE:主标题;副标题;淡入;停留;淡出 |
| 后台命令 | COMMAND:/say {player} 镶嵌成功 |
| 全服广播 | BROADCAST:&e{player} 镶嵌了一颗高级宝石 |
{player} 会替换为玩家名。
完整规则宝石
这颗宝石适合放进 NeigeItems 物品配置中测试规则、条件、动作和属性写入:
高级红宝石:
material: NETHER_STAR
amount: 1
Name: "&c&l高级红宝石"
Lore:
- ""
- "&7镶嵌类型: &c攻击"
- "&7宝石属性: &f物理攻击力 &a+50"
- "&7成功几率: &e70%"
- "&7镶嵌条件: &f等级 50,金币 1000"
- ""
- "§宝§石"
nbt:
gtgem:
type: "gem"
name: "&c&l高级红宝石"
socket: "&c红宝石"
rules:
chance: 0.7
cost:
money: 1000
exp: 50
conditions:
- "%level% >= 50"
- "%money% >= 1000"
- "fail_message:&c需要 50 级并准备 1000 金币才能镶嵌高级红宝石。"
attributes:
物理攻击力: 50
actions:
success:
- "MESSAGE:&a高级红宝石镶嵌成功!"
- "SOUND:ENTITY_PLAYER_LEVELUP;1.0;1.4"
fail:
- "MESSAGE:&c镶嵌失败,宝石已损坏。"
- "SOUND:ENTITY_VILLAGER_NO;1.0;0.8"拆卸规则
拆卸规则有两个来源:
| 来源 | 配置位置 | 说明 |
|---|---|---|
| 宝石自带 | 宝石 NBT 的 gtgem.remove-rules | 每种宝石可以有不同拆卸条件和消耗 |
| 全局规则 | config.yml 的 remove.global-rules | 所有宝石使用同一套拆卸规则 |
remove.use-global: false 时优先使用宝石自带拆卸规则。remove.use-global: true 时强制使用全局拆卸规则。
宝石自带拆卸规则
写在宝石的 gtgem 下:
remove-rules:
conditions:
- "%level% >= 10"
cost-items:
- "DIAMONDx3"
cost-money: 50
cost-exp: 10含义:
- 玩家等级至少 10 级才能拆卸。
- 拆卸需要 3 个钻石。
- 拆卸扣 50 金币和 10 总经验。
cost-items 使用 物品名x数量 格式。原版物品可以写 DIAMONDx3,中文名需要服务器物品识别能匹配到对应物品。
全局拆卸规则
所有宝石统一拆卸收费:
remove:
use-global: true
global-rules:
conditions: []
cost-items:
- "DIAMONDx3"
cost-money: 50
cost-exp: 10免费拆卸:
remove:
use-global: false
require-cost: false
cost-money: 0
cost-exp: 0没有特殊需求时,推荐先用全局拆卸规则,方便统一维护。需要区分普通宝石、高级宝石、限定宝石时,再把拆卸规则写到宝石自己的 NBT 中。
调试流程
- 先把
chance设置成1.0。 - 把
cost.money和cost.exp设置成0。 - 不写
conditions,确认宝石能放进槽位。 - 加上
conditions,逐条测试。 - 加上正式成功率和消耗。
- 使用
/gtgem debug item查看手持物品 NBT。
常见问题
总是提示条件不满足
先把条件拆成多行,例如:
conditions:
- "%level% >= 50"
- "%money% >= 1000"
- "'%player_class%' == 'Warrior'"逐条删除测试,可以很快定位是哪一个变量返回值不符合预期。
PAPI 条件不生效
检查:
- PlaceholderAPI 是否安装。
- 对应变量扩展是否加载。
- 变量在 PAPI 测试命令中能否正常返回。
- 字符串比较是否加了引号。
金币扣除失败
检查:
- Vault 是否安装。
- 经济插件是否正常。
- 玩家余额是否足够。
cost.money是否写成整数。
经验扣除看起来不对
cost.exp 扣的是总经验值,不是等级。
如果要用等级限制,条件写 %level% >= 30,消耗写 exp: 0 或按总经验单独设置。
