# GeyserCommandsYML
**GeyserCommandsYML** 是一个专为使用 [Geyser-Spigot](https://geysermc.org/) 的服务器设计的轻量级插件,用于更好地控制向他们的 bedrock 版玩家展示的 **命令建议列表**。
而不是完全通过 Geyser-Spigot 配置文件 (aka `Geyser-Spigot\config.yml` → `command-suggestions: false`) 禁用所有服务器命令建议,这个插件 **直接对接** Geyser + Floodgate API,让你 **定义你自己的自定义命令列表** **仅为 bedrock 版玩家** — 避免崩溃、臃肿或暴露不相关的命令。
---
## 功能
- ✅ 添加你自己的可定制的 bedrock 版玩家可见命令列表。
- ✅ 避免禁用 Geyser 全局的命令建议。
- ✅ 简单的 YAML 配置文件 (`plugins/GeyserCommandsYML/commands.yml`)。
- ✅ 对外部配置文件编辑提供热重载支持(伴随受控的玩家踢出)。
- ✅ 非常轻量级 — 仅仅拦截 `PlayerCommandSendEvent` 并对 bedrock 客户端进行修改。
---
## 命令
| 命令 | 描述 | 权限 |
| :--- | :--- | :--- |
| `/geysercommands add ` | 将命令添加到 bedrock 命令列表中。 | `geysercommands.add` |
| `/geysercommands remove ` | 从 bedrock 命令列表中移除命令。 | `geysercommands.remove` |
| `/geysercommands list` | 在聊天中列出所有当前注册的 bedrock 命令。 | `geysercommands.list` |
| `/geysercommands reload` | 重新加载插件的配置文件并更新 bedrock 命令列表(强制 bedrock 玩家重新连接)。 | `geysercommands.reload` |
**别名:**
`/geysercommandsyml`, `/gcyml`
---
## 工作原理
- 在 `PlayerCommandSendEvent` 时,插件:
- **检查玩家是否为 bedrock 客户端**(通过 Geyser/Floodgate API)。
- 如果 **是**,它将 **清除** 默认的命令建议列表。
- 然后它 **添加** 仅插件 YAML 文件中定义的命令。
- **Geyser 客户端** **在玩家加入时拉取可用的命令**,而不是动态地 —
**因此,在运行 `/geysercommands reload` 后,bedrock 玩家必须重新加入才能看到更新后的列表。**
(此命令将自动以友好的消息踢出 bedrock 玩家,要求他们重新加入。)
- **重要:**
- 在 `Geyser-Spigot\config.yml` 中,确保设置 `command-suggestions: true`。
- `/geysercommands add ` 和 `/geysercommands remove ` 命令 **不会** 踢出玩家。
- 但请记住,**在线 bedrock 玩家在他们手动离开并重新加入之前将看不到更新后的命令列表**。
---
## 权限总览
| 权限 | 目的 |
| :--- | :--- |
| `geysercommands.add` | 允许将命令添加到 bedrock 命令列表。 |
| `geysercommands.remove` | 允许从 bedrock 命令列表中移除命令。 |
| `geysercommands.list` | 允许查看当前的 bedrock 命令列表。 |
| `geysercommands.reload` | 允许重新加载插件配置并强制 bedrock 玩家重新连接。 |
- 如果玩家缺少所需的权限,他们将被拒绝访问子命令。
- 服务器运维人员保持默认的命令访问权限。
---
## 已测试环境
- ✅ **PaperMC 1.21.4 - Build #226**: 兼容
- ✅ **Geyser-Spigot - Build #816:** 兼容
- ✅ **Floodgate - Build #116:** 兼容
---