[MD]
# MEBForms
| | |
|---|---|
| API | `5.0.0` |
| Load | `STARTUP` |
---
MEBForms 是一个**纯类库插件**,把 PocketMine-MP 的原生 `Form` 接口包装成三个开箱即用的表单类,让你的插件用几行代码弹出 GUI 窗口。
### 三个表单类
| 类 | 界面 | 回调收到的值 |
|---|---|---|
| `SimpleForm` | 一列按钮,支持图标 | 按钮索引 `int`,或你指定的 `label` 字符串 |
| `CustomForm` | 输入框 / 开关 / 滑块 / 下拉框 / 分段滑块 | 数组,下标 = 元素添加顺序 |
| `ModalForm` | 两个按钮的确认框 | `true` = 第一个按钮,`false` = 第二个 |
全部继承自 `BaseForm`,共用 `setTitle()`、`setCallable()`。
### 安装
把 `MEBForms` 放进 `plugins/`。在你自己插件的 `plugin.yml` 里声明依赖(对于开发者):
```yaml
depend: [MEBForms]
```
### 用法
按钮窗口:
```php
use MengBao\MEBForms\SimpleForm;
$form = new SimpleForm(function(Player $player, $data): void {
if ($data === null) {
return; //玩家关掉了窗口
}
match ($data) {
"shop" => $player->sendMessage("打开商店"),
"spawn" => $player->sendMessage("传送到出生点"),
default => null,
};
});
$form->setTitle("§l主菜单");
$form->setContent("选一个功能");
$form->addButton("商店", 0, "textures/items/emerald", "shop");
$form->addButton("回出生点", -1, "", "spawn");
$player->sendForm($form);
```
`addButton` 的第四个参数 `label` 给了之后,回调收到的就是这个字符串而不是索引——中间插一个按钮也不用回去改 `match` 的数字。不给 `label` 时回调收到索引,按索引判断照样能用。
自定义窗口:
```php
use MengBao\MEBForms\CustomForm;
$form = new CustomForm(function(Player $player, $data): void {
if ($data === null) {
return;
}
//注意 label 也占一个下标,值恒为 null,后面的元素要跟着往后数
$name = (string) $data[1];
$isPvp = (bool) $data[2];
$size = (float) $data[3];
$mode = (int) $data[4]; //选中项的索引
});
$form->setTitle("创建领地");
$form->addLabel("填写领地信息");
$form->addInput("领地名称", "最多16个字");
$form->addToggle("允许PVP", false);
$form->addSlider("半径", 8, 128, 8, 32);
$form->addDropdown("类型", ["住宅", "商业", "农场"]);
$player->sendForm($form);
```
确认框:
```php
use MengBao\MEBForms\ModalForm;
$form = new ModalForm(function(Player $player, bool $confirm): void {
if ($confirm) {
$player->sendMessage("已删除");
}
});
$form->setTitle("确认删除");
$form->setContent("这个操作不可撤销,确定吗?");
$form->setButton1("§c确定删除");
$form->setButton2("取消");
$player->sendForm($form);
```
确认框没有关闭按钮,玩家按 ESC 等同于点了第二个按钮,所以 `ModalForm` 的回调可以直接把参数标成 `bool`。
### 提示
- 按钮文字和内容都支持 `§` 颜色码和 `\n` 换行。
- 图标参数:`0` = 材质路径(如 `textures/ui/accept`),`1` = 网络 URL,`-1` = 不要图标。
- 想复用同一个表单实例又要换回调,用 `setCallable()`。
- `getButtonCount()` / `getElementCount()` 在动态生成表单时用来对下标很方便。
---
[/MD]
GitHub开源
点击进群
GitHub开源
点击进群