跳到主要内容

Form 表单指南

在 Nukkit-MOT 表单分为四种类型:Modal、Simple、Custom、Dialog。

备注

其中 Dialog 自 PR#71 (版本 1.20.30) 后被加入,Dialog 需要绑定实体使用。

FormWindowModal 用于简单的确认或取消操作。

form/DemoModalForm.java
package cn.nukkitmot.exampleplugin.form;

import cn.nukkit.Player;
import cn.nukkit.form.handler.FormResponseHandler;
import cn.nukkit.form.window.FormWindowModal;

public class DemoModalForm {
public static void open(Player player) {
FormWindowModal form = new FormWindowModal("标题", "描述", "true", "false");
// 设置确认和取消的操作
form.addHandler(FormResponseHandler.withoutPlayer(ignored -> {
if (form.wasClosed()) return;
if (form.getResponse().getClickedButtonId() == 0) {
// 用户点击了 true 按钮
} else {
// 用户点击了 false 按钮
}
}));
// 显示表单给玩家
player.showFormWindow(form);
}
}

简易表单 Simple

FormWindowSimple 提供更丰富的按钮选择。

使用示例

form/DemoSimpleForm.java
package cn.nukkitmot.exampleplugin.form;

import cn.nukkit.Player;
import cn.nukkit.form.element.ElementButton;
import cn.nukkit.form.handler.FormResponseHandler;
import cn.nukkit.form.window.FormWindowSimple;

public class DemoSimpleForm {
public static void open(Player player) {
FormWindowSimple form = new FormWindowSimple("标题", "描述");
// 添加按钮
form.addButton(new ElementButton("按钮1"));
form.addButton(new ElementButton("按钮2"));
form.addButton(new ElementButton("按钮3"));
// 设置按钮点击处理
form.addHandler(FormResponseHandler.withoutPlayer(ignored -> {
if (form.wasClosed()) return;
int buttonIndex = form.getResponse().getClickedButtonId(); // 获取点击的按钮索引
String buttonText = form.getResponse().getClickedButton().getText(); // 获取点击的按钮文本
switch (buttonIndex) {
case 0:
// 处理按钮1的操作
break;
case 1:
// 处理按钮2的操作
break;
case 2:
// 处理按钮3的操作
break;
default:
// 默认处理
break;
}
}));
// 显示表单给玩家
player.showFormWindow(form);
}
}

组件

组件名称描述引用
Button按钮,用于简单的点击操作,可附带图片ElementButton

自定义表单 Custom

FormWindowCustom 允许开发者自定义表单的内容和交互方式,包括文本输入框、下拉框等。

使用示例

form/DemoCustomForm.java
package cn.nukkitmot.exampleplugin.form;

import cn.nukkit.Player;
import cn.nukkit.form.element.ElementDropdown;
import cn.nukkit.form.element.ElementInput;
import cn.nukkit.form.handler.FormResponseHandler;
import cn.nukkit.form.window.FormWindowCustom;

import java.util.Arrays;

public class DemoCustomForm {
public static void open(Player player) {
FormWindowCustom form = new FormWindowCustom("标题");
// 添加组件
form.addElement(new ElementInput("文本输入框", "默认值"));
form.addElement(new ElementDropdown("下拉框", Arrays.asList("选项1", "选项2", "选项3")));
// 设置提交操作
form.addHandler(FormResponseHandler.withoutPlayer(ignored -> {
if (form.wasClosed()) return;
String inputText = form.getResponse().getInputResponse(0); // 获取文本输入框的值
int selectedIndex = form.getResponse().getDropdownResponse(1).getElementID(); // 获取下拉框选择的索引
String selectedText = form.getResponse().getDropdownResponse(1).getElementContent(); // 获取下拉框选择的文本
// 处理用户提交的数据
}));
// 显示表单给玩家
player.showFormWindow(form);
}
}

组件

组件名称描述引用
Dropdown下滑块,点击弹出一个下滑块列表,供用户选择ElementDropdown
Input文本输入框,允许用户输入字符串ElementInput
Label标签,在表单中添加文本标签ElementLabel
Slider水平滑块,设置最小值和最大值后,可滑动获取数值ElementSlider
StepSlider步进水平滑块,参数为字符串ElementStepSlider
Toggle开关,接受布尔值ElementToggle

对话框 Dialog

FormWindowDialog 是一种特殊的表单,需要绑定到实体上才能使用。且实体不能为玩家。

ScrollingTextDialog 是加强版的对话框,它提供了滚动文本的特性。

使用示例

form/DemoDialogForm.java
package cn.nukkitmot.exampleplugin.form;

import cn.nukkit.Player;
import cn.nukkit.entity.Entity;
import cn.nukkit.form.window.FormWindowDialog;

public class DemoDialogForm {
public static void open(Player player, Entity entity) {
FormWindowDialog form = new FormWindowDialog("标题", "描述", entity);
// 添加选项
form.addButton("选项1");
form.addButton("选项2");
// 设置提交操作
form.addHandler((player_, response) -> {
String buttonText = response.getClickedButton().getName(); // 获取点击按钮的文本
// 处理用户提交的数据
});
// 显示对话框给玩家
form.send(player);
}
}