# 类型

## 发送文本

> 向玩家发送一条普通消息

```yaml
- 'tell: Hello There'
```

```yaml
- 'tell: Hello There;There is a message'
- 'tell: First Line\nSecond Line!'
```

在 3.3.2e 之后，tell 支持发送 TabooLib Components 文本，以实现更加复杂的对话

如果你不需要,可以关闭`Using-Component`

[教程](https://plugins.ptms.ink/function/components/basic)

## 强制聊天

> 让玩家发送一条消息到聊天框

```yaml
- 'chat: Hello Everyone!'
```

## 发送音效

> 向玩家播放目标音效

```yaml
- 'sound: BLOCK_ANVIL_HIT-1-2'
```

```yaml
- 'sound: BLOCK_BEEHIVE_ENTER-1-2;BLOCK_BUBBLE_COLUMN_WHIRLPOOL_INSIDE-1-0'
```

## 发送 Title

> 向玩家展示一条 Title 信息

```yaml
# 用 \s 代替标题中需要使用的空格
- 'title: WELCOME %player_name%~ 20 20 10'

# 用 ` 括起内容，支持直接用空格
- 'title: `&c&lPermission Required` `&7&lYou need permission &6&ltrmenu.use &7&lto open this menu` 15 20 15'
```

* TITLE 后对应的三个整数型参数分别为 FadeIn, Stay, FadeOut (渐入、停留、渐出) 的时间，可以不设置

## 发送 Actionbar

> 向玩家展示一条 Actionbar 信息

```yaml
- 'actionbar: Hello There'
```

## 发送 Tellraw

> 向玩家发送一条原版 Json 消息，或利用 TrMenu 轻松构建一条

{% tabs %}
{% tab title="原版 JSON" %}

```yaml
- 'json: {"text":"Hello World!"}'
```

{% endtab %}

{% tab title="构建消息 1" %}

```yaml
- 'json: Hello World! <ClickMe@command=spawn@hover=to spawn> <--- Click That'
```

{% endtab %}

{% tab title="构建消息 2" %}

```
- 'json: &3Hello, &b%player_name%&3, Buy Ranks on our <&2&nstore@url=https://store.example.net> &3site.'
```

{% endtab %}
{% endtabs %}

## 执行命令

> 调用对象执行命令

### 玩家身份

```yaml
- 'command: spawn'
```

```yaml
# 以 ; 分隔，可以执行多个命令
# 下方动作等同于
# - 'command: spawn'
# - 'command: say I am Back'

- 'command: spawn ; say I am Back'
```

### Operator 身份

```yaml
- 'op: kick {meta:input}'
```

```yaml
- 'op: kick {meta:input} ; broadcast I just kicked {meta:input}'
```

{% hint style="danger" %}
实现以 Op 执行命令的方法是 **授予 OP，执行操作，撤销 OP**

可通过菜单选项 `Command-Fake-Op` 控制是否使用安全模拟 OP 机制 (默认开启)

在可以用 **CONSOLE** 控制台执行命令实现需求的情况下，**不推荐**使用此动作
{% endhint %}

### Console 控制台

```yaml
- 'console: lp perm add %player_name% vip.user; give %player_name% diamond 64'
```

## 跨服传送

> BungeeCord 群组下，跨服传送玩家到目标服务器

```yaml
- 'server: Lobby'
```

## 菜单

### 关闭菜单

```yaml
- 'close'
```

### 关闭菜单 (静默)

> 通过此形式关闭菜单，将不会执行 Events.Close 的动作组

```yaml
- 'force-close'
```

### 开启菜单

```yaml
- 'open: Example'
```

```yaml
# 打开菜单 Shop-Handler,
# 指定参数为 [APPLE, 10, 1]

- 'open: Shop-Handler APPLE 10 1'
```

```yaml
# 打开菜单 Browser 的指定页码 3

- 'open: Browser:3'
```

### 开启菜单 (静默)

> 通过此形式开启菜单，将不会执行 Events.Open 的动作组

```yaml
- 'force-open: <Menu>:[Page]'
```

### 切换页码

```yaml
- 'page: 0'
```

```yaml
- 'page: %trmenu_menu_next%'
```

### 设置容器标题

```yaml
- 'set-title: CUSTOM_TITLE'
```

* 会被动态标题覆盖

### 设置菜单参数

```yaml
- 'set-arguments: Custom\sArgument 10 Hello'
```

### 刷新图标

```yaml
# 刷新菜单所有活动图标
- 'refresh'

# 刷新菜单 ID 为 Bee 图标
- 'refresh: Bee'

# 刷新菜单 ID 为 A, B, C 的三个图标
- 'refresh: A;B;C'
```

* 这里的 “刷新” 是重新计算筛选子图标，而非更新动画

### 更新图标

> 使用方法同上，能够更新指定图标 Lore、名称 等显示属性 & 函数变量

```yaml
- 'update: Bee'
```

### 重置菜单

> 重置所有图标的动画属性缓存

```yaml
- 'reset'
```

### 刷新玩家库存

> 刷新玩家背包的物品显示

```yaml
- 'reload-inventory'
```

### 更新语言

> 更新玩家的语言环境，用于多语言支持

```yaml
- 'update-lang'
```

### 数据操作

> TrMenu 所提供的数据功能分三类
>
> Meta - 临时数据，关服后不会存储
>
> Data - 存储数据（可通过配置 TabooLib 实现跨服）
>
> GlobalData - 全局本地文件存储的数据，不针对玩家

* 操作类型 SET \[key] \[value]、DEL \[key]
* 下面以 Meta 为例

```yaml
- 'set-meta: customMeta customValue'
- 'set-meta: customMeta customValue; customKey2 customValue 2'

- 'del-meta: customMeta'
- 'del-meta: customMeta;customKey2'

- 'del-meta: (?i)customs?-?(meta|key)'
```

## 功能

### 编辑物品

这个action非常复杂，能不能学会就看你自己了

表达式`edit-item: <operation> <item> <op_type> <操作参数>`

其中，目前支持的`op_type`有

* `material` 材质
* `name` 名称
* `lore` LORE
* `flags` 标志
* `customModelData` 自定义模型数据
* `enchantment` 附魔
* `color` 颜色

### 扣除和给予物品

```yaml
# 扣除一组钻石
- 'take-item: material:DIAMOND,amount:64'

# 扣除一组铁锭和半组金锭
- 'take-item: material:IRON_INGOT,amount:64;material:GOLD_INGOT,amount:32'
```

```yaml
# 给予物品
- 'give-item: material:DIAMOND,amount:32,name:&bCustom Diamond'
```

### 控制经济货币

```yaml
- 'give-money: %server_time_s%'
- 'give-money: 100'
```

```yaml
- 'take-money: 100'
```

```yaml
- 'set-money: 500'
```

* Money 控制仅支持和 Vault 挂钩的经济系统
* 除 Money 以外，还支持 Points （挂钩 PlayerPoints），操作同理，这里不再赘述

### 捕获器

> TrMenu 提供的强大的捕获器功能 & 实现可输入 GUI 的设计

#### 类型

> CHAT 聊天框
>
> SIGN 告示牌
>
> ANVIL 铁砧
>
> BOOK 书

#### 变量

> {meta: input} 最后一次输入的内容

#### 配置

{% tabs %}
{% tab title="告示牌" %}

```yaml
- catcher:
    amount:
      type: SIGN
      start: 'actionbar: &b&lPlease input a valid number'
      cancel: 'tell: &8Cancelled'
      end:
       - 'set-args: {0} {1} {2} `${js: Math.min(Math.max(varInt("{meta:input}"), 1), 64)}`'
       - 'menu: Shop-Handler-Purchase'
```

{% endtab %}

{% tab title="铁砧" %}

```yaml
- catcher:
    amount:
      type: ANVIL
      item-left: '{"type":"DIAMOND_SWORD","data":0,"amount":1,"meta":{"Damage":{"type":"INT","data":0}}}'
      start: 'actionbar: &b&lPlease input a online player'
      cancel: 'tell: &8Cancelled'
      end:
        - condition: 'js: utils.isPlayerOnline(vars("{meta:input}"))'
          actions: 'tell: &aPlayer {meta:input} is online'
          deny: 'tell: &cPlayer {meta:input} is offline'
```

{% endtab %}
{% endtabs %}

## 逻辑

### 延时

> 延时执行该动作之后的所有动作

```yaml
- 'tell: The diamond reward will be distributed in 3 seconds'
- 'delay: 60'
- 'give-item: material:DIAMOND'
```

### 中断

> 中断之后所有动作的执行，并使该反应组结果为 FALSE

```yaml
- 'return'
```

## 脚本

### JavaScript 脚本执行

> 预编译执行 JavaScript 脚本

```yaml
- 'js: player.sendMessage("Hello World!")'
```

### Jexl 脚本执行

> 执行 Jexl 表达式

```yaml
- 'jexl: player.name'
```

### Kether 脚本执行

```yaml
- 'ke: tell *"Hello World!"'
- 'tell color *"Hello &bTrMenu"'
```

* 我们对 Kether 语法完整支持，且强烈推荐使用，若不指定 TrMenu 动作名称
* 将默认采用 Kether 脚本执行！如下

```yaml
Events:
  Open: |-
    if perm *trmenu.use then {
      tell *"You have permission"
    } else {
      tell *"You dont have permission"
    }
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hhhhhy.gitbook.io/trmenu-v3/menu/action/types.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
