|
1 | 1 | --- |
2 | 2 | title: 绑定与 UI |
3 | | -description: MatrixShop 的命令绑定、菜单布局与动作执行规则。 |
| 3 | +description: MatrixShop 的绑定配置、菜单结构和动作执行模型。 |
4 | 4 | slug: /matrixshop/bindings-and-ui |
5 | 5 | sidebar_position: 6 |
6 | 6 | --- |
7 | 7 |
|
8 | 8 | # 绑定与 UI |
9 | 9 |
|
10 | | -## 命令绑定来源 |
| 10 | +## 绑定来源 |
11 | 11 |
|
12 | | -MatrixShop 的命令不只来自固定代码,还来自配置: |
| 12 | +MatrixShop 当前的命令绑定主要来自两类配置: |
13 | 13 |
|
14 | 14 | 1. 模块级 `settings.yml` |
15 | 15 | 2. 入口级 `shops/*.yml` |
16 | 16 |
|
17 | | -模块级绑定由 `ModuleBindings` 读取,入口级绑定由 `ShopMenuLoader` 读取。 |
| 17 | +其中: |
18 | 18 |
|
19 | | -## 绑定字段 |
| 19 | +- `ChestShop / Cart / Record` 仍主要由 `settings.yml` 驱动 |
| 20 | +- `Menu / SystemShop / PlayerShop / GlobalMarket / Auction / Transaction` 主要由 `shops/*.yml` 驱动 |
20 | 21 |
|
21 | | -这组字段在模块和入口里通用: |
| 22 | +## 当前绑定写法 |
22 | 23 |
|
23 | | -```yaml |
| 24 | +MatrixShop 1.8.0 开始,绑定方式改成类似 TrMenu 的直接文本风格: |
| 25 | + |
| 26 | +```yml |
24 | 27 | Bindings: |
25 | 28 | Commands: |
26 | | - Bindings: |
27 | | - - 'market' |
28 | | - - 'gm' |
29 | | - Register: true |
30 | | - Show-In-Help: true |
31 | | - Priority: 100 |
| 29 | + - "trade" |
| 30 | + - "tm" |
| 31 | + Register: true |
| 32 | + Show-In-Help: true |
| 33 | + Priority: 100 |
32 | 34 | ``` |
33 | 35 |
|
34 | | -含义: |
| 36 | +这表示: |
35 | 37 |
|
36 | | -- `Bindings`:命令关键字列表 |
| 38 | +- `Commands`:直接写绑定命令列表 |
37 | 39 | - `Register`:是否注册为独立命令 |
38 | | -- `Show-In-Help`:是否出现在 `/ms help` |
| 40 | +- `Show-In-Help`:是否在帮助里显示 |
39 | 41 | - `Priority`:冲突时优先级 |
40 | 42 |
|
41 | | -如果你需要: |
42 | | - |
43 | | -- 自定义多行帮助 |
44 | | -- 自定义帮助描述键 |
45 | | -- 自定义子命令提示键 |
46 | | - |
47 | | -请继续看: |
| 43 | +不再需要先去 `Lang/*.yml` 里维护 `commands.routes.xxx` 再间接引用。 |
48 | 44 |
|
49 | | -- [Help、Help-Key 与 Hint-Keys](./bindings-help-and-hints) |
| 45 | +## 路由级写法 |
50 | 46 |
|
51 | | -## `shopId` 规则 |
| 47 | +子命令路由也支持直接写文本: |
52 | 48 |
|
53 | | -当前实现里,`shopId` 不再依赖 YAML 内部的 `id` 字段,而是直接取: |
54 | | - |
55 | | -```text |
56 | | -shops/<file-name>.yml |
| 49 | +```yml |
| 50 | +Routes: |
| 51 | + open: |
| 52 | + Action: transaction.open |
| 53 | + Bindings: |
| 54 | + - "open" |
57 | 55 | ``` |
58 | 56 |
|
59 | | -例如: |
60 | | - |
61 | | -- `PlayerShop/shops/default.yml` -> `default` |
62 | | -- `Menu/shops/main.yml` -> `main` |
63 | | - |
64 | | -这条规则非常重要,因为它会影响: |
65 | | - |
66 | | -- `/ms open <shop-id>` |
67 | | -- `/ms open <type:id>` |
68 | | -- 多商店模块的数据作用域 |
| 57 | +这类配置主要用于 `/trade open`、`/cart checkout` 这样的模块内路由。 |
69 | 58 |
|
70 | 59 | ## 菜单结构 |
71 | 60 |
|
72 | | -菜单文件的核心字段如下: |
| 61 | +典型菜单文件仍然由这些字段组成: |
73 | 62 |
|
74 | | -```yaml |
| 63 | +```yml |
75 | 64 | Title: |
76 | | - - '&8Global Market &7{page}/{max-page}' |
| 65 | + - "&8Global Market &7{page}/{max-page}" |
77 | 66 |
|
78 | 67 | layout: |
79 | | - - '#########' |
80 | | - - '#ggggggg#' |
| 68 | + - "#########" |
| 69 | + - "#ggggggg#" |
81 | 70 |
|
82 | 71 | icons: |
83 | | - '#': |
84 | | - material: 'STAINED_GLASS_PANE' |
85 | | - name: ' ' |
86 | | - 'g': |
87 | | - material: 'AIR' |
88 | | - mode: 'goods' |
| 72 | + "#": |
| 73 | + material: "STAINED_GLASS_PANE" |
| 74 | + name: " " |
| 75 | + "g": |
| 76 | + material: "AIR" |
| 77 | + mode: "goods" |
89 | 78 | ``` |
90 | 79 |
|
91 | | -### 关键规则 |
| 80 | +关键规则: |
92 | 81 |
|
93 | 82 | - `layout` 每行 9 格 |
94 | | -- `icons` 里每个字符都对应一种图标定义 |
95 | | -- 带 `mode:` 的格子会交给模块代码渲染动态内容 |
96 | | -- 没有 `mode:` 的格子会按静态图标直接渲染 |
| 83 | +- `icons` 的字符与布局字符一一对应 |
| 84 | +- 带 `mode` 的槽位通常由模块代码动态填充 |
| 85 | +- 不带 `mode` 的槽位由菜单系统静态渲染 |
97 | 86 |
|
98 | | -## 动作语法 |
| 87 | +## 动作执行 |
99 | 88 |
|
100 | | -`ActionExecutor` 当前支持这些动作: |
| 89 | +当前 `ActionExecutor` 支持: |
101 | 90 |
|
102 | 91 | - `close` |
103 | 92 | - `back` |
104 | | -- `tell:消息` |
105 | | -- `sound:SOUND-VOLUME-PITCH` |
106 | | -- 其他任意字符串:作为玩家命令执行 |
| 93 | +- `tell:...` |
| 94 | +- `sound:...` |
| 95 | +- `player:...` |
| 96 | +- `console:...` |
| 97 | +- `js:...` |
| 98 | +- `kether: ...` |
107 | 99 |
|
108 | | -例如: |
| 100 | +推荐优先使用 `kether:` 写业务动作。 |
109 | 101 |
|
110 | | -```yaml |
| 102 | +### 推荐写法 |
| 103 | + |
| 104 | +```yml |
| 105 | +actions: |
| 106 | + left: |
| 107 | + - "kether: matrixshop system open weapon" |
| 108 | +``` |
| 109 | + |
| 110 | +### 不推荐写法 |
| 111 | + |
| 112 | +```yml |
111 | 113 | actions: |
112 | 114 | left: |
113 | | - - 'matrixshop open systemshop:weapon' |
114 | | - - 'sound:ui_button_click-1-1' |
| 115 | + - "kether: command \"weapon\" by player" |
115 | 116 | ``` |
116 | 117 |
|
117 | | -这意味着大多数按钮跳转其实都是“把一条命令当动作执行”,而不是写死在 UI 系统里。 |
| 118 | +后者虽然旧版可工作,但已经不是 1.8.0 推荐路径。 |
118 | 119 |
|
119 | | -## 重载与重启的区别 |
| 120 | +## shopId 规则 |
120 | 121 |
|
121 | | -`/matrixshopadmin reload` 会重新加载配置和模块,但有一个边界要注意: |
| 122 | +当前实现里,`shopId` 默认取自文件名,而不是依赖 YAML 内部 `id` 字段: |
| 123 | + |
| 124 | +```text |
| 125 | +shops/<file-name>.yml |
| 126 | +``` |
| 127 | + |
| 128 | +例如: |
| 129 | + |
| 130 | +- `PlayerShop/shops/default.yml` -> `default` |
| 131 | +- `Menu/shops/main.yml` -> `main` |
122 | 132 |
|
123 | | -- `/ms` 这种主入口绑定可以随重载更新 |
124 | | -- 独立命令注册只发生在插件启动时 |
| 133 | +## 重载与重启 |
125 | 134 |
|
126 | | -所以如果你改了 `Bindings.Commands.Register` 或独立命令关键字,最好完整重启服务器。 |
| 135 | +`/matrixshopadmin reload` 可以刷新大部分配置,但对于“独立命令注册”本身,仍建议完整重启服务器后再验证。 |
0 commit comments