[PMMP5] FormConstructor - Библиотека для простого создания и обработки форм

Этот плагин представляет собой переписанную версию плагина FormConstructor для Nukkit на PocketMine-MP API 5.0.0.

Я решил написать этот плагин в качестве эксперимента и моего первого плагина на PHP. Был бы рад, если бы вы оценили качество кода и написали что можно улучшить или добавить.

:hammer_and_wrench: Примеры

Создание 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

:clipboard: События

Название Отменяемое Описание
PlayerFormSendEvent Да Вызывается при отправке формы
PlayerFormCloseEvent Нет Вызывается при закрытии формы

Пример:

public function onFormSend(PlayerFormSendEvent $event) {
    // Получение игрока
    $player = $event->getPlayer();
    // Получение формы
    $form = $event->getForm();
}

:pushpin: Скачать

Скачать в phar: FormConstructor-v1.0.0.phar
Скачать в zip: FormConstructor-v1.0.0.zip

GitHub: GitHub - MEFRREEX/FormConstructor-PM: Library for easy creating and handling of forms for PocketMine-MP

6 лайков

Библиотека от разраба pmmp, зачем нужно что-то еще?

1 лайк

Ещё добавь поддержку virion v3

1 лайк

Не знал об этом плагине, но мне все равно не очень нравиться как там формы создаются

1 лайк

Хз) easyforms выглядит получше)

3 лайка

Мне в самом FormConstructor для Nukkit нравится то, что обработчик для кнопки указывается при добавлении кнопки, а не получением индекса или названия кнопки, решил тут реализовать что-то подобное

1 лайк

Всем привет, я лучший пхпшер. Даже лучше чем @mopsikzloS. Я очень люблю играть в тимфортресс 2 после садика, поэтому я скачал крутой форм констрактор пммп. 11/10

3 лайка

Называется: Кому как удобно

1 лайк

Не, в простоте написание форм, easyform по моему мнению баще. Автору чипсиков

1 лайк