Этот плагин представляет собой переписанную версию плагина FormConstructor для Nukkit на PocketMine-MP API 5.0.0.
Я решил написать этот плагин в качестве эксперимента и моего первого плагина на PHP. Был бы рад, если бы вы оценили качество кода и написали что можно улучшить или добавить.
Примеры
Создание SimpleForm:
$form = new SimpleForm("Заголовок формы");
$form->addContent("Новая строка контента");
// Самый простой способ добавить кнопку
$form->addButton(new Button("Button", function (Player $pl, Button $b) {
$pl->sendMessage("Кнопка нажата: " . $b->getName() . " (" . $b->getIndex() . ")");
}))
// Кнопка с изображением
->addButton((new Button("Кнопка с изображением"))
->setImage(ImageType::PATH, "textures/items/diamond"))
// Другой способ добавить кнопку
->addButton((new Button("Другая кнопка"))
->setImage(ImageType::PATH, "textures/blocks/stone")
->onClick(function (Player $pl, Button $b) {
$pl->sendMessage("Нажата другая кнопка: " . $b->getName() . " (" . $b->getIndex() . ")");
}));
// Установка обработчика закрытия формы
$form->setCloseHandler(function (Player $pl) {
$pl->sendMessage("Вы закрыли форму!");
});
// Отправка формы
$form->send($player);
Создание ModalForm:
$form = new ModalForm("Тестовая модальная форма");
$form->addContent("Новая строка контента");
$form->setPositiveButton("Положительная кнопка")
->setNegativeButton("Отрицательная кнопка");
// Настройка обработчика формы
// $result возвращает true, если была нажата положительная кнопка, и false, если была нажата отрицательная кнопка
$form->setHandler(function (Player $pl, bool $result) {
$pl->sendMessage("Вы нажали " . ($result ? "правильную" : "неправильную") . " кнопку!");
});
// Установка обработчика закрытия формы
$form->setCloseHandler(fn(Player $pl) => $pl->sendMessage("Вы закрыли форму!"));
// Отправка формы
$form->send($player);
Создание CustomForm:
$form = new CustomForm("Тестовая пользовательская форма");
$form->addContent("Тестовая строка")
->addElement("input", (new Input("Поле ввода"))
->setPlaceholder("Текст")
->setDefaultValue("Значение по умолчанию"))
->addElement("slider", new Slider("Слайдер", 1, 100, 1, 1))
->addElement("stepslider", (new StepSlider("Пошаговый слайдер"))
->addText("1")
->addText("2")
->addText("3"))
->addElement("dropdown", (new Dropdown("Выпадающий список"))
->addText("Элемент 1")
->addText("Элемент 2")
->addText("Элемент 3"))
->addElement("dropdown1", (new Dropdown("Второй выпадающий список"))
->addElement(new SelectableElement("Опция 1"))
->addElement(new SelectableElement("Опция 2"))
->addElement(new SelectableElement("Опция со значением", 15)))
->addElement("toggle", new Toggle("Переключатель", false));
// Установка обработчика формы
$form->setHandler(function (Player $pl, CustomFormResponse $response) {
$input = $response->getInput("input")->getValue();
$slider = $response->getSlider("slider")->getValue();
$stepslider = $response->getStepSlider("stepslider")->getValue();
$dropdown = $response->getDropdown("dropdown")->getValue();
// Получение значения, которое мы установили в SelectableElement
$dropdownValue = $response->getDropdown("dropdown1")->getValue()->getValue();
$toggle = $response->getToggle("toggle")->getValue();
$pl->sendMessage("Поле ввода: " . $input . ", Слайдер: " . $slider . ", Пошаговый слайдер: " . $stepslider . ", Выпадающий список: " . $dropdown . ", Переключатель: " . $toggle);
$pl->sendMessage("Значение второго выпадающего списка: " . $dropdownValue);
});
// Отправка формы
$form->send($player);
Скачать пример плагина: GitHub - MEFRREEX/FormConstructor-PM-Example: Example of work with FormConstructor plugin for PocketMine-MP
События
| Название | Отменяемое | Описание |
|---|---|---|
| PlayerFormSendEvent | Да | Вызывается при отправке формы |
| PlayerFormCloseEvent | Нет | Вызывается при закрытии формы |
Пример:
public function onFormSend(PlayerFormSendEvent $event) {
// Получение игрока
$player = $event->getPlayer();
// Получение формы
$form = $event->getForm();
}
Скачать
Скачать в phar: FormConstructor-v1.0.0.phar
Скачать в zip: FormConstructor-v1.0.0.zip
