Skip to content

规则与条件

规则写在宝石物品的 nbt.gtgem.rules 下,用来控制镶嵌成功率、金币消耗、经验消耗和使用条件。

最常见的位置:

yaml
nbt:
  gtgem:
    type: "gem"
    name: "&c红宝石"
    socket: "&c红宝石"
    rules:
      chance: 0.8
      cost:
        money: 100
        exp: 0
      conditions:
        - "%level% >= 10"
    attributes:
      物理攻击力: 20

rules 字段

字段说明
chance镶嵌成功率,1.0 为 100%,0.8 为 80%
cost.money镶嵌时扣除的金币,需要 Vault 和经济插件
cost.exp镶嵌时扣除的总经验值
conditions镶嵌前必须通过的条件列表

没有写 rules 时,会使用 config.yml 中的 defaults

成功率例子

100% 成功,适合测试:

yaml
rules:
  chance: 1.0
  cost:
    money: 0
    exp: 0

80% 成功,失败后是否消耗宝石由 config.ymlconsume-on-fail 决定:

yaml
rules:
  chance: 0.8
  cost:
    money: 100
    exp: 0

50% 成功,适合高价值宝石:

yaml
rules:
  chance: 0.5
  cost:
    money: 500
    exp: 30

条件表达式

conditions 是一个列表,每一行都必须满足。只要有一行不满足,宝石就不会镶嵌。

可直接使用的内置变量:

变量内容
%money%玩家金币
%exp%玩家总经验
%level%玩家等级
%health%当前血量
%max_health%最大血量
%food%饥饿值
%online%当前在线人数

表达式支持:

text
>   >=   <   <=   ==   !=
&&  ||   !
+   -    *   /    %
( )

如果安装了 PlaceholderAPI,也可以直接写 PAPI 变量。GTGem 会先解析 PAPI,再执行条件判断。

等级限制宝石

玩家等级达到 30 级才能镶嵌:

yaml
rules:
  chance: 0.85
  cost:
    money: 200
    exp: 0
  conditions:
    - "%level% >= 30"

适合做三阶、四阶、高级副本宝石。

金币限制宝石

需要玩家拥有至少 1000 金币,实际镶嵌时再扣 500 金币:

yaml
rules:
  chance: 0.8
  cost:
    money: 500
    exp: 0
  conditions:
    - "%money% >= 1000"

conditions 是进入镶嵌流程前的判断,cost.money 是实际扣除。
两者可以相同,也可以不同。

经验限制宝石

要求总经验不少于 300,同时扣除 100 总经验:

yaml
rules:
  chance: 0.75
  cost:
    money: 0
    exp: 100
  conditions:
    - "%exp% >= 300"

这里的 %exp% 是总经验,不是等级数。

职业宝石

职业通常由 PlaceholderAPI 变量提供。下面示例用 %player_class% 演示,实际变量以服务器职业插件为准。

yaml
rules:
  chance: 0.8
  cost:
    money: 300
    exp: 0
  conditions:
    - "'%player_class%' == 'Warrior'"

如果职业变量显示中文,也可以这样写:

yaml
conditions:
  - "'%player_class%' == '战士'"

字符串比较建议加引号,避免变量为空或带特殊字符时表达式无法解析。

多条件宝石

同时要求等级、金币、职业:

yaml
rules:
  chance: 0.7
  cost:
    money: 1000
    exp: 50
  conditions:
    - "%level% >= 50"
    - "%money% >= 1000"
    - "'%player_class%' == 'Warrior'"

也可以写成一行:

yaml
conditions:
  - "%level% >= 50 && %money% >= 1000 && '%player_class%' == 'Warrior'"

分成多行更方便排查;一行适合简单组合条件。

或条件

战士或骑士都能镶嵌:

yaml
conditions:
  - "'%player_class%' == 'Warrior' || '%player_class%' == 'Knight'"

等级达到 60,或者拥有特殊权限变量:

yaml
conditions:
  - "%level% >= 60 || '%luckperms_has_permission_gtgem.special%' == 'yes'"

PAPI 变量返回什么,就按实际返回值写判断。

条件失败提示

可以在 conditions 中加入 fail_message:。当任意条件失败时,会显示这条提示。

yaml
rules:
  chance: 0.8
  cost:
    money: 100
    exp: 0
  conditions:
    - "%level% >= 30"
    - "%money% >= 500"
    - "fail_message:&c需要 30 级并准备 500 金币才能镶嵌这颗宝石。"

fail_message: 只负责显示失败提示,不参与条件判断。

镶嵌动作

动作写在 gtgem.actions 下。成功和失败可以分别配置。

yaml
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 物品配置中测试规则、条件、动作和属性写入:

yaml
高级红宝石:
  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.ymlremove.global-rules所有宝石使用同一套拆卸规则

remove.use-global: false 时优先使用宝石自带拆卸规则。
remove.use-global: true 时强制使用全局拆卸规则。

宝石自带拆卸规则

写在宝石的 gtgem 下:

yaml
remove-rules:
  conditions:
    - "%level% >= 10"
  cost-items:
    - "DIAMONDx3"
  cost-money: 50
  cost-exp: 10

含义:

  • 玩家等级至少 10 级才能拆卸。
  • 拆卸需要 3 个钻石。
  • 拆卸扣 50 金币和 10 总经验。

cost-items 使用 物品名x数量 格式。原版物品可以写 DIAMONDx3,中文名需要服务器物品识别能匹配到对应物品。

全局拆卸规则

所有宝石统一拆卸收费:

yaml
remove:
  use-global: true
  global-rules:
    conditions: []
    cost-items:
      - "DIAMONDx3"
    cost-money: 50
    cost-exp: 10

免费拆卸:

yaml
remove:
  use-global: false
  require-cost: false
  cost-money: 0
  cost-exp: 0

没有特殊需求时,推荐先用全局拆卸规则,方便统一维护。需要区分普通宝石、高级宝石、限定宝石时,再把拆卸规则写到宝石自己的 NBT 中。

调试流程

  1. 先把 chance 设置成 1.0
  2. cost.moneycost.exp 设置成 0
  3. 不写 conditions,确认宝石能放进槽位。
  4. 加上 conditions,逐条测试。
  5. 加上正式成功率和消耗。
  6. 使用 /gtgem debug item 查看手持物品 NBT。

常见问题

总是提示条件不满足

先把条件拆成多行,例如:

yaml
conditions:
  - "%level% >= 50"
  - "%money% >= 1000"
  - "'%player_class%' == 'Warrior'"

逐条删除测试,可以很快定位是哪一个变量返回值不符合预期。

PAPI 条件不生效

检查:

  1. PlaceholderAPI 是否安装。
  2. 对应变量扩展是否加载。
  3. 变量在 PAPI 测试命令中能否正常返回。
  4. 字符串比较是否加了引号。

金币扣除失败

检查:

  1. Vault 是否安装。
  2. 经济插件是否正常。
  3. 玩家余额是否足够。
  4. cost.money 是否写成整数。

经验扣除看起来不对

cost.exp 扣的是总经验值,不是等级。
如果要用等级限制,条件写 %level% >= 30,消耗写 exp: 0 或按总经验单独设置。