# 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`。
