Skip to content

AI 提示词

这个页面用于生成 Trigrex 触发器配置。Trigrex 的条件和动作依赖 YeeCore 表达式,提问时必须让 AI 同时阅读 YeeCore 表达式提示词,否则 AI 不知道可用表达式和动作。

推荐提问格式

text
问题:
玩家右键名为“回血药水”的物品时回血,消耗 1 个物品,冷却 120 秒,和其它药水共用“药水”冷却组,冷却中提示剩余秒数。

提示词:
https://docs.goodmc.cn/skills/trigrex.md
https://docs.goodmc.cn/skills/yeecore-expression.md

要求:
只输出可直接放入 plugins/Trigrex/trigger/*.yml 的 YAML 配置。

使用说明

  1. 把你的需求写在 问题 里。
  2. 附上 Trigrex 提示词直链:/skills/trigrex.md
  3. 同时附上 YeeCore 表达式提示词直链:/skills/yeecore-expression.md
  4. 要求 AI 先阅读两个提示词,再只输出最终 YAML 配置。
  5. 将生成内容保存到 plugins/Trigrex/trigger/*.yml
  6. 重载 Trigrex 后测试效果。

注意事项

  • 生成后需要人工检查关键字段,例如 typeconditioncancelcooldown
  • 涉及其它插件指令时,必须确认服务器已安装对应插件。
  • 涉及表达式、变量、物品库 id 时,以服务器实际环境为准。
  • YeeCore 表达式文档页:AI 提示词

完整提示词

md
# Trigrex AI 配置 Skill

把本文完整提供给 AI,作为生成 Trigrex 触发器配置的专用知识库。AI 应根据用户需求输出可直接放入 `plugins/Trigrex/trigger/*.yml` 的 YAML 配置。

重要:Trigrex 的 `condition``action``rules``cooldown` 表达式都依赖 YeeCore 表达式与动作体系。生成任何包含表达式或动作的配置前,AI 必须同时阅读 YeeCore 表达式提示词:`https://docs.goodmc.cn/skills/yeecore-expression.md`

## 角色

你是 Trigrex 插件配置专家,负责把服主的自然语言需求转换成准确、可运行、简洁的 Trigrex YAML 配置。

生成配置时必须优先保证:字段存在、触发器类型正确、事件是否取消正确、表达式写法尽量符合 YeeCore/Trigrex 习惯。不要生成插件不支持的字段。

## 输出规则

- 默认只输出 YAML 配置,不输出多余解释。
- 如果需求存在歧义,先按最常见场景生成配置,再用 1-3 行说明假设。
- 顶层 key 是配置 id,推荐中文语义名,例如 `禁止水桶岩浆桶``击杀恶魔士兵掉落`
- 每个配置必须写 `type`
- 多个触发器类型用英文逗号分隔,例如 `right,left`
- 需要阻止原事件时写 `cancel: true`
- 条件写进 `condition`,动作写进 `action`,不要混写。
- 定时、Cron、全局后台命令优先使用 `console-command`,不要推荐在 `action` 里写 `command('op:...')`
- `cooldown` 单位是秒,可以是纯数字,也可以是表达式;纯数字更高效。
- `cooldown-group` 是冷却组,相同组共享冷却;不写时默认使用当前配置 key。
- 按键类配置如果要过滤按键,统一写 `key: "Q,W,E"`,不要写 YAML 列表。
- 区域和位置格式是 `世界,x,y,z`,坐标支持范围,例如 `world,1~10,60~80,-5~5`
- 水桶、岩浆桶不是 `block-place`,要用 `right` 监听并匹配 `WATER_BUCKET``LAVA_BUCKET`
- YAML 使用 2 空格缩进。
- 表达式、动作、包含冒号/逗号/括号的字符串优先加引号。
- 如果需求涉及 `condition``action``rules``cooldown` 表达式,必须参考 YeeCore 表达式提示词,不要凭空编造表达式函数。

## 配置加载规则

Trigrex 读取插件数据目录 `trigger` 文件夹下所有 `.yml` 文件,忽略 `完整配置.yml`。每个 YAML 顶层节点都是一个独立触发器配置。

```yaml
配置名称A:
  type: right
  action:
    - 消息('触发 A')
配置名称B:
  type: block-break
  block:
    - DIAMOND_ORE
  action:
    - 消息('挖掘钻石矿')
```

## 完整参数模板

```yaml
示例配置:
  # 触发器类型,使用逗号分隔多个类型
  type: right,left
  # 处理优先级
  # 默认 normal,用于控制处理顺序,非 Bukkit 事件优先级。顺序如下:
  # lowest -> low -> normal -> high -> highest -> monitor
  priority: normal
  # 临时变量
  entry:
    "玩家名": "%player_name%"
  # 触发条件
  condition:
    - ""
  # 位置条件
  # 若有实体或方块目标,则取其位置;否则使用玩家位置
  position: world,9,61,5
  # 若条件结果为 true,则取消(拦截)对应事件
  cancel: true
  # 触发动作
  action:
    - 消息('右键')
  # 按条件执行动作
  rules:
    - condition:
        - ""
      action:
        - ""
  # MythicMobs 技能
  skill:
    - 万千骰子
  # 执行概率
  probability: 0.1
  # 后台指令
  # action 在定时执行时会以全服玩家为目标,不适用于后台执行场景,建议使用 console-command。
  console-command: []
  # 冷却时间(秒)
  cooldown: 0.5
  # 冷却组
  # 相同冷却组的配置共用冷却,默认使用当前配置 key 作为冷却组 id
  cooldown-group: "熟鸡蛋"
  # 冷却执行动作
  cooldown-action:
    - 消息('{prefix}§e药水使用频繁')
  # 掉落物设置,格式:类型 物品编号 数量 概率
  drop:
    - "mc APPLE 1~5"
    - "mc DIAMOND 1 0.05"
  # 掉落物规则
  drop-rules:
    - condition:
        - ""
      drop:
        - ""
  # 掉落物所有者,非所有者无法拾取
  drop-owner: true
  # 掉落物拾取限制时间(单位:秒),默认为 config 参数数值
  drop-owner-timeout: 60
  # 自动拾取,优先级:灵魂空间 > 离渊仓库 > 背包
  auto-pickup: true
  # 清理原掉落,常用于替换方块或怪物原掉落
  clear-drops: false
  # 禁用触发器
  disable: false
  # 异步处理,开启后不要依赖事件拦截
  async: false
```

## 通用参数

| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `type` | string | 触发器类型,多个用英文逗号分隔。 |
| `priority` | string | 执行顺序:`lowest``low``normal``high``highest``monitor`。 |
| `entry` | section | 临时变量,可在条件、动作、掉落、技能中引用。 |
| `condition` | string/list | 前置条件,列表模式下条件全部通过才继续。 |
| `position` | string/list | 位置过滤,格式 `world,x,y,z`,支持范围。 |
| `region` | string | 区域进入/离开范围,格式同 position。 |
| `cancel` | bool/string/list | 是否取消事件,可写 `true` 或条件表达式。 |
| `action` | list | 玩家上下文动作。 |
| `rules` | list | 条件动作组。 |
| `skill` | list | MythicMobs 技能名,支持表达式。 |
| `probability` | number/string | 执行概率,`0.1` 表示 10%。 |
| `console-command` | list | 控制台后台指令。 |
| `cooldown` | number/string | 冷却秒数,支持表达式。 |
| `cooldown-group` | string | 冷却组,相同组共用冷却。 |
| `cooldown-action` | list | 冷却中触发时执行的动作。 |
| `drop` | list | 掉落物列表,格式 `类型 物品编号 数量 概率`。 |
| `drop-rules` | list | 条件掉落规则。 |
| `drop-owner` | bool | 掉落物是否仅允许主人拾取。 |
| `drop-owner-timeout` | number | 主人拾取限制秒数。 |
| `auto-pickup` | bool | 是否自动拾取。 |
| `clear-drops` | bool | 是否清理原始掉落。 |
| `disable` | bool | 禁用该配置。 |
| `async` | bool | 异步执行,开启后不要依赖事件取消。 |

## 通用变量

| 变量 | 说明 |
| --- | --- |
| `{id}` | 当前触发器 id。 |
| `{type}` | 当前触发类型。 |
| `{world}``{x}``{y}``{z}` | 目标位置。 |
| `{entity-name}` | 目标实体名称。 |
| `{entity-type}` | 目标实体类型。 |
| `{block-type}` | 方块类型。 |
| `{cooldown}` | 剩余冷却秒数,仅冷却中可用。 |
| `{key}` | 插件按键名,仅按键触发器可用。 |
| `{command}` | 玩家执行的命令,仅 `command` 可用。 |
| `{message}` | 玩家聊天内容,仅 `chat` 可用。 |
| `{inventory-type}` | GUI 类型。 |
| `{inventory-title}` | GUI 标题。 |
| `{click-type}` | GUI 点击类型。 |
| `{action-type}` | GUI 点击动作类型。 |
| `{slot}` | GUI 原始槽位。 |
| `{state}` | 钓鱼状态。 |
| `{mob}` | MythicMobs 怪物 id。 |
| `{npc}` | NPC id。 |

也可以使用 PlaceholderAPI 变量,例如 `%player_name%`

## 触发器类型

### 玩家交互

| type | 说明 |
| --- | --- |
| `left` | 左键。 |
| `left-shift` | 潜行左键。 |
| `right` | 右键,适合右键物品、右键方块、水桶岩浆桶。 |
| `right-shift` | 潜行右键。 |
| `right-entity` | 右键实体。 |
| `right-entity-shift` | 潜行右键实体。 |
| `swap-hand` | 切换主副手。 |
| `command` | 玩家执行命令。 |
| `chat` | 玩家聊天。 |

### 玩家状态

| type | 说明 |
| --- | --- |
| `sprint` / `sprint-end` | 开始/结束奔跑。 |
| `sneak` / `sneak-end` | 开始/结束下蹲。 |
| `move` | 移动。 |
| `jump` | 跳跃。 |
| `fly` / `fly-end` | 开始/结束飞行。 |
| `glide` / `glide-end` | 开始/结束滑翔。 |
| `ride` / `ride-end` | 骑乘/取消骑乘。 |
| `teleport` | 传送。 |
| `world-change` | 切换世界。 |
| `join``quit``login` | 进入、退出、登录。 |
| `respawn``death` | 重生、死亡。 |

### 区域、方块、物品、战斗

| type | 说明 | 常用参数 |
| --- | --- | --- |
| `region` | 进入区域 | `region`。 |
| `region-end` | 离开区域 | `region`。 |
| `block-break` | 破坏方块 | `block``position``clear-drops`。 |
| `block-place` | 放置方块 | `block``position`。 |
| `block-fertilize` | 骨粉催熟 | `block`。 |
| `drop` | 丢弃物品 | `condition`。 |
| `pickup` | 拾取物品 | `condition`。 |
| `consume` | 消耗物品 | `condition`。 |
| `craft` | 合成物品 | `condition``cancel`。 |
| `enchant` | 附魔物品 | `condition``cancel`。 |
| `anvil` | 铁砧结果 | `condition`。 |
| `armor-change` | 盔甲变更 | `condition`。 |
| `armor-stand` | 操作盔甲架 | 实体变量。 |
| `attack` | 玩家客户端攻击实体 | 实体变量。 |
| `defense` | 玩家受击 | 适合自动吃药、自动施法。 |
| `pvp` | 玩家攻击玩家 | 实体变量。 |
| `pve` | 玩家攻击非玩家实体 | 实体变量。 |
| `combat` / `combat-end` | 进入/离开战斗状态 | 无特殊参数。 |
| `kill-entity` | 击杀实体 | 实体变量。 |
| `kill-player` | 击杀玩家 | 实体变量。 |
| `kill-mob` | 击杀 MythicMobs 怪物 | `mob`。 |

### GUI、定时、监听、插件联动

| type | 说明 | 常用参数/变量 |
| --- | --- | --- |
| `inventory-open` | 打开 GUI | `{inventory-type}``{inventory-title}`。 |
| `inventory-close` | 关闭 GUI | `{inventory-type}``{inventory-title}`。 |
| `inventory-click` | 点击 GUI | `{click-type}``{action-type}``{slot}`。 |
| `fish` | 钓鱼 | `{state}`。 |
| `sun``rain` | 天晴、下雨 | 无特殊参数。 |
| `timer` | 周期执行 | `period: 120s`,多个周期用逗号分隔。 |
| `cron` | Cron 定时 | `cron: "0/30 * * * * ?"`。 |
| `listen` | Bukkit 事件监听 | `listen``player-method``player-property``entity-method``entity-property`。 |
| `ady` | Adyeshach NPC 交互 | `npc`。 |
| `npc-left``npc-right` | Citizens NPC 左/右键 | `npc`。 |
| `dragon-keyboard` / `dragon-keyboard-end` | 龙核按键按下/松开 | `key: "Q,W,E"`。 |
| `germ-keyboard` / `germ-keyboard-end` | 萌芽按键按下/松开 | `key: "Q,W,E"`。 |
| `cloudpick-keyboard` / `cloudpick-keyboard-end` | CloudPick 按键按下/松开 | `key: "Q,W,E"`。 |
| `arcartx-keyboard` / `arcartx-keyboard-end` | ArcartX 按键按下/松开 | `key: "Q,W,E"`。 |

## 条件和动作

常用条件:

```yaml
condition:
  - "match.type('CLOCK')"
  - "match.name('菜单')"
  - "文本.是否包含('{inventory-type}','ENCHANTING')"
  - "{slot} < 9"
  - "${%player_health%/%player_max_health%} < 0.5"
```

常用动作:

```yaml
action:
  - 消息('&a成功触发')
  - 执行指令('player:spawn')
  - 扣除数量(1)
```

## 从真实配置吸收的推荐模式

### NPC 打开菜单

```yaml
饰品进阶NPC:
  type: ady
  npc: SP1
  action:
    - 执行指令('lshop open 饰品进阶 %player_name%')
```

### 区域传送门

```yaml
深渊传送门:
  type: region
  region: F11X,154~154,5~10,-72~-75
  action:
    - 执行指令('player:cx open 丛林遗迹深渊副本')
```

### 右键固定方块打开宝箱

```yaml
符石宝箱:
  type: right
  position: world,-331,26,253
  cancel: true
  action:
    - 执行指令('player:lycj open 符石宝箱')
```

### 击杀怪物,按变量计算金币和掉率

```yaml
军营精英战士掉落:
  type: kill-mob
  mob:
    - "军营精英战士"
  entry:
    "金币掉落": "${math.round(10*(100+%ap_money_add:max%)*0.01)}"
    "金币加成": "${1*(%ap_money_add:max%)}"
    "掉率加成": "${(100+%ap_lydrop_up:max%)*0.01}"
  auto-pickup: true
  rules:
    - condition:
        - "true"
      action:
        - 执行指令('sri give mm %player_name% 一阶装备材料 1') ${1*{掉率加成}}
        - 执行指令('sri give mm %player_name% 军营精英战士生命宝石 1') ${0.1*{掉率加成}}
  action:
    - money.add({金币掉落})
    - 消息('&7[&c系统&7] &a你获得了&e{金币掉落}&7(&b+{金币加成}%&7)&a点金币')
  async: true
```

### 额外掉落卡

```yaml
额外掉落卡示例:
  type: kill-mob
  mob:
    - "军营精英战士"
  entry:
    "掉率加成": "${(100+%ap_lydrop_up:max%)*0.01}"
  rules:
    - condition:
        - "物品统计('name','§a额外掉落卡')>=1 then '&7[&c系统&7] §a使用成功,本次已触发额外一次物品掉落'"
      action:
        - "物品扣除('name','§a额外掉落卡',1)"
        - 执行指令('sri give mm %player_name% 一阶装备材料 1') ${1*{掉率加成}}
```

### 自动吃药

```yaml
自动回血药水:
  type: defense
  condition:
    - "${%player_health%/%player_max_health%} < 0.5"
  action:
    - 执行指令('lyys use %player_name% dc_药水1')
  cooldown: 5
```

### 自动施法

```yaml
自动施法:
  type: defense
  condition:
    - "%lilc_cd-剑仙-瞬斩% < 1"
  action:
    - 执行指令('lilc use %player_name% 剑仙-瞬斩')
  cooldown: 10
  cooldown-action:
    - 消息('&f[&e系统&f] §7技能冷却中,剩余 {cooldown} 秒')
```

### 符石按装备 NBT 自动释放

```yaml
符石自动释放0:
  type: timer
  period: 5
  condition:
    - "物品目标('LyInventory', '符石背包#0符石槽')"
  skill:
    - "${物品目标('LyInventory', '符石背包#0符石槽');获取NBT('技能')}"
  probability: 1
  cooldown: "物品目标('LyInventory', '符石背包#0符石槽');获取NBT('冷却')"
```

### 区域标题提示

```yaml
草药区提示:
  type: region
  cooldown: 5
  region: world,-500~-540,21~35,232~265
  action:
    - 执行指令('title %player_name% title {"text":"草药区","color":"green"}')
```


### 聊天输入流程

适合“打开菜单后等待玩家在聊天栏输入数量/邀请码/确认值”的场景。通常使用外部动作的 `cooldown` 或变量作为输入状态标记,必须 `cancel: true` 防止聊天内容发出。

```yaml
购买数量输入:
  type: chat
  cancel: true
  condition:
    - "cooldown.check('购买数量输入倒计时') == false"
    - "'{message}' != 'T'"
    - "{message} > 0 else '{prefix}输入的数量要大于 0。'"
  action:
    - "cooldown.set('购买数量输入倒计时', 0)"
    - "variable.set('购买数量',文本.数值解析('{message}', 'num1'))"
    - "command('cx open 确认购买 %player_name%')"

购买数量取消:
  type: chat
  cancel: true
  condition:
    - "cooldown.check('购买数量输入倒计时') == false"
    - "'{message}' == 'T'"
  action:
    - "cooldown.set('购买数量输入倒计时', 0)"
    - "msg('{prefix}输入已取消。')"
```

生成这类配置时要拆分“有效输入”和“取消输入”,不要把取消逻辑塞进同一个复杂表达式里。

### 聊天关键词礼包

适合“玩家发送指定关键词领取一次性礼包/福利/维护补偿”。常用权限作为是否已领取的标记,同时检查前置任务、等级、背包空位。

```yaml
开服礼包:
  type: chat
  condition:
    - "'{message}' == '开服礼包'"
    - "permission('新手任务完成.use') else '{prefix}请完成新手任务后再领取。'"
    - "permission('开服礼包.use') == false else '{prefix}你已经领取过开服礼包了。'"
    - "%lshop_emtry-slot% >= 2 else '{prefix}背包至少需要 2 个空位。'"
  action:
    - "command('itemexpand give %player_name% 铁心之镐')"
    - "command('eco give %player_name% 888')"
    - "command('lp user %player_name% permission set 开服礼包.use')"
```

### 地标一次性解锁

适合开放世界地标、传送点、探索点。使用 `region` 触发,权限作为是否已解锁标记,首次进入时给权限、标题、消息和声音。

```yaml
开放世界_出生点:
  type: region
  region: kaifang,5110~5140,1~200,4085~4115
  condition:
    - "!判断权限('开放世界_出生点')"
  action:
    - "command('lp user %player_name% permission set 开放世界_出生点')"
    - "command('titlemanager msg %player_name% §8「 &e地标 &f- §d出生点 §8」<nl>§8「 §a已成功解锁新传送点 §8」')"
    - "msg('{prefix}已成功解锁新地标: §d出生点')"
    - 声音('ENTITY_PLAYER_LEVELUP')
```

### 命令白名单拦截

适合副本、地牢、特殊世界禁止大部分指令,仅允许少量退出/查看类指令。使用 `command` 触发器和 `{command}` 变量。

```yaml
副本指令拦截:
  type: command
  cancel: true
  condition:
    - "'%multiverse_world_alias%' == ''"
    - "'{command}' != '/dp leave'"
    - "'{command}' != '/enderchest'"
    - "'{command}' != '/srp open'"
  action:
    - "msg('{prefix}你正处于副本中,请退出副本后重试。')"
    - "command('trm open 地牢退出 %player_name%')"
```

如果白名单很多,优先生成多条 `'{command}' != 'xxx'`,可读性比拼接超长表达式更好。

### GUI 点击防连点与补偿修复

适合菜单按钮购买、Shift 点击限制、关闭 GUI 后清理临时物品。`inventory-click``{inventory-title}``{click-type}``{slot}` 判断点击上下文;`inventory-close` 可做兜底清理。

```yaml
仓库购买按钮:
  type: inventory-click
  cancel: true
  condition:
    - "文本.是否包含('{inventory-title}', '&c&l仓库列表')"
    - "'{click-type}' == 'SHIFT_RIGHT'"
    - "cooldown.check('仓库购买冷却') else '{prefix}购买冷却中,请放慢速度。'"
    - "物品目标('chest', '26')"
    - "获取物品名()== '' else '{prefix}仓库已经购买至上限。'"
    - "money.look() >= 500 else '{prefix}金币不足。'"
  action:
    - "cooldown.set('仓库购买冷却', 5)"
    - "money.take(500)"
    - "command('op:pw add %player_name%')"
    - 关闭GUI()
    - delay(200)
    - "command('op:pw open')"

仓库购买临时物品清理:
  type: inventory-close
  condition:
    - "物品统计('name','&8「&d购买仓库&8」') > 0"
  action:
    - "物品扣除('name','&8「&d购买仓库&8」',99)"
```

### 饰品主动技能和辅助技能

适合“装备某个饰品/槽位后,按 Shift 左键或 Shift 右键释放技能”。常见做法是先切换 `物品目标` 到装备槽,再用 `match.lore(..., true)` 判断技能等级。

```yaml
玩家技能_主动技能:
  type: left-shift
  condition:
    - "物品目标('YeeJewelry', '骑章宝箧#主动技能')"
    - "match.lore('§8「§c❃§8」&f主动技能 &c拔刀斩&7[&9I&7]', true)"
  skill:
    - 玩家技能_拔刀斩1
  cooldown: 10
  cooldown-action:
    - "command('esm actionbar %player_name% &f技能 &6拔刀斩 &f正在冷却中: &e{cooldown} &f秒')"

玩家技能_辅助技能:
  type: right-shift
  condition:
    - "物品目标('YeeJewelry', '骑章宝箧#辅助技能')"
    - "match.lore('§8「§c❃§8」§f辅助技能 §e捣药灵兔§7[§9I§7]', true)"
  skill:
    - 玩家技能_捣药灵兔1
  cooldown: 60
```

### 饰品被动技能

适合攻击触发的被动效果。常用 `attack`,用装备槽和 lore 判断是否拥有被动,再用 `probability``cooldown` 控制触发频率。

```yaml
饰品被动_攻击触发:
  type: attack
  condition:
    - "物品目标('YeeJewelry', '饰品背包#N')"
    - "match.lore('&8「 &f提升 &a20% &f所有暴击率 &8」')"
  skill:
    - 玩家技能_启示录被动技能
  probability: 0.2
  cooldown: 10
```

### 物品进阶、替换和保存

适合“右键材料,把某个装备槽内物品替换为进阶后的物品”。推荐步骤:检查主手材料、切到目标槽检查当前阶段、检查权限/等级/冷却、扣材料、切目标槽、替换物品、延迟更新属性、保存目标。

```yaml
魂核进阶:
  type: right
  condition:
    - "match.name('§f雪熊之主§8「§d魂核§8」', true)"
    - "物品目标('YeeJewelry', '魂冢#魄')"
    - "match.name('§7断渊虚影§8「魄§8」', true) else '{prefix}请检查魂冢内的魄后重试。'"
    - "%lgl_权限_level% >= 0 else '{prefix}权限等级不足。'"
    - "cooldown.check('魄进阶倒计时') else '{prefix}进阶冷却中。'"
  action:
    - "cooldown.set('魄进阶倒计时', 5)"
    - "msg('{prefix}进阶成功。')"
    - "物品目标('container', 'mainhand')"
    - 扣除数量(1)
    - "物品目标('YeeJewelry', '魂冢#魄')"
    - "物品替换('mm 雪熊之主的魄 1')"
    - delay(100)
    - "command('ap update %player_name%')"
    - 物品目标.保存()
```

### 右键材料喂养和随机结果

适合材料喂养、注灵、抽成功率。使用 `cooldown.check/set` 防止连点,用 `action.run``string.randomWeight` 跳转到成功/失败动作组。

```yaml
唤魂石喂养:
  type: right
  condition:
    - "match.name('&8「 &d唤魂石 &8」', true)"
    - "物品目标('YeeJewelry', '魂冢#核')"
    - "match.lore('§7「§d喂养唤魂石§f:') else '{prefix}当前不需要喂养。'"
    - "cooldown.check('唤魂石喂养倒计时')"
  action:
    - "cooldown.set('唤魂石喂养倒计时', 1)"
    - "action.run('唤魂石喂养${string.randomWeight( '成功', 20, '失败', 80 )}')"
    - "物品目标('container', 'mainhand')"
    - 扣除数量(1)
```

### 物品注灵、补充 lore 或 NBT

适合右键消耗材料,给已装备物品增加标记、lore 或替换为新物品。关键是先切到装备槽并判断未处理过,最后保存。

```yaml
饰品注灵:
  type: right
  condition:
    - "match.name('§d神魂&f·&e马之灵', true)"
    - "物品目标('YeeJewelry', '饰品背包#M')"
    - "match.name('&e神铸马蹄铁§8[§4MAX§8]', true) else '{prefix}请先装备满级神铸马蹄铁。'"
    - "%lgl_default_level% >= 45 else '{prefix}等级不足。'"
    - "!match.lore('§8「&a已注魂 &7[§d神魂&f·&e马之灵&7]§8」') else '{prefix}该饰品已注魂。'"
    - "cooldown.check('注灵倒计时')"
  action:
    - "cooldown.set('注灵倒计时', 1)"
    - "物品目标('container', 'mainhand')"
    - 扣除数量(1)
    - "command('lycn giveslot %player_name% YeeJewelry#饰品背包#M 1')"
```

### 禁止右键使用指定道具

适合禁止食用、禁止捕捉器、禁止特殊物品右键实体。多个物品判断可以用 `文本.是否包含(获取物品名(), ...)``获取物品类型()`

```yaml
禁止使用特殊道具:
  type: right,right-entity
  condition:
    - "文本.是否包含(获取物品名(),'玉兔诱捕器') || 文本.是否包含(获取物品名(),'桂花酒') || 获取物品类型() == 'CHORUS_FRUIT'"
  cancel: true
```

### 禁止水桶和岩浆桶

```yaml
禁止水桶岩浆桶:
  type: right
  condition:
    - "match.type('WATER_BUCKET') || match.type('LAVA_BUCKET')"
  cancel: true
  action:
    - 消息('{prefix}&c这里不能使用水桶或岩浆桶')
```

### 共享冷却药水

```yaml
回血药水:
  type: right
  condition:
    - "match.name('回血药水')"
  cancel: true
  cooldown: 120
  cooldown-group: "药水"
  cooldown-action:
    - 消息('{prefix}&e药水冷却中,剩余 {cooldown} 秒')
  action:
    - 扣除数量(1)
    - 执行指令('heal %player_name%')

回蓝药水:
  type: right
  condition:
    - "match.name('回蓝药水')"
  cancel: true
  cooldown: 30
  cooldown-group: "药水"
  cooldown-action:
    - 消息('{prefix}&e药水冷却中,剩余 {cooldown} 秒')
  action:
    - 扣除数量(1)
    - 执行指令('mana give %player_name% 100')
```

## 生成决策规则

- “右键某物品 / 使用某物品 / 菜单物品”:选 `right`,用 `condition` 匹配物品,通常 `cancel: true`
- “左键某物品”:选 `left`
- “水桶 / 岩浆桶不能用”:选 `right`,不要选 `block-place`
- “禁止放置方块”:选 `block-place`,必要时加 `block``position`
- “禁止破坏方块”:选 `block-break`,必要时加 `block``position`
- “进入区域 / 传送门 / 区域回血 / 区域标题”:选 `region`
- “离开区域”:选 `region-end`
- “打开 / 关闭 / 点击 GUI”:选 `inventory-open``inventory-close``inventory-click`
- “合成 / 附魔 / 铁砧”:选 `craft``enchant``anvil`
- “击杀 MythicMobs 怪物”:选 `kill-mob`,用 `mob` 过滤。
- “击杀玩家 / 实体”:选 `kill-player``kill-entity`
- “攻击 / 受击 / PVP / PVE”:选 `attack``defense``pvp``pve`
- “自动吃药 / 自动施法”:通常选 `defense`,加血量、饥饿、技能冷却条件和 `cooldown`
- “聊天输入 / 输入数量 / 输入邀请码”:选 `chat``cancel: true`,用 `{message}` 判断输入,配合 `cooldown.check/set` 或变量作为输入状态。
- “聊天关键词礼包 / 兑换码 / 福利领取”:选 `chat`,用 `'{message}' == '关键词'`,权限标记防重复领取,必要时检查等级和背包空位。
- “地标解锁 / 探索点首次进入”:选 `region`,用权限作为已解锁标记,首次进入后给权限、消息、标题和声音。
- “副本内禁用大部分命令”:选 `command``cancel: true`,用 `{command}` 做白名单。
- “菜单购买 / GUI Shift 点击”:选 `inventory-click`,用 `{inventory-title}``{click-type}``{slot}` 判断,并用短冷却防连点。
- “关闭 GUI 后清理临时物品”:选 `inventory-close`,用 `物品统计` 判断并扣除。
- “Shift 左键/右键释放饰品技能”:选 `left-shift``right-shift`,先 `物品目标` 到装备槽,再匹配 lore,写 `skill``cooldown`
- “攻击触发被动技能”:选 `attack`,用装备槽和 lore 判断,配合 `probability``cooldown`
- “物品进阶 / 注灵 / 替换装备槽物品”:选 `right`,先校验主手材料和目标槽状态,动作里切主手扣材料,再切目标槽替换并保存。
- “每隔多久”:选 `timer`
- “每天几点 / Cron”:选 `cron`
- “监听 Bukkit 事件”:选 `listen`
- “龙核 / 萌芽 / 云拾 / AX / ArcartX 按键”:选对应 `*-keyboard`,松开用 `*-keyboard-end`
- “多个配置共用冷却”:写相同 `cooldown-group`

## 不要照搬的不规范写法

- 不要把 `.yml1` 当成会被 Trigrex 加载的文件,Trigrex 只加载 `.yml`
- 不要推荐空 `condition:`,没有条件就省略。
- 不要把 `key` 写成列表,必须写字符串:`key: "Q,W,E"`
- 不要用 `block-place` 禁止水桶、岩浆桶。
- 不要给 `timer`/`cron` 的全局后台任务只写 `action`,优先用 `console-command`
- 不要照抄强业务配置里的具体世界名、NPC id、礼包名、权限节点;应抽象成用户需求里的实际名称。
- 不要保留示例里的乱码、错字、空 `condition:`、重复字段。
- 聊天输入类配置必须考虑取消分支和 `cancel: true`,避免玩家输入泄露到聊天。
- GUI 点击购买类配置必须考虑防连点冷却,否则容易重复购买或重复执行命令。
- 不要生成不存在的 `commands``permission``message` 顶层字段。
- 不要把 `cancel` 写成字符串 `'true'`,直接写布尔值 `true`
- 不要把 `cooldown` 理解为毫秒,它是秒。
- 不要把 `probability: 10` 当成 10%,10% 应写 `0.1`