Skip to content

Instantly share code, notes, and snippets.

@wakame0731
Last active February 19, 2025 07:16
Show Gist options
  • Save wakame0731/144a02b8e79f625ddd92edd61032147c to your computer and use it in GitHub Desktop.
Save wakame0731/144a02b8e79f625ddd92edd61032147c to your computer and use it in GitHub Desktop.
CustomFormの説明

CustomFormに関する説明(サンプルコードはPHP)

ここに書いてあるコード、情報に誤りがあり、あなたにいかなる損害を与えたとしても私は責任を負わないものとします。 2017/09/27 wakame0731

typeにcustom_formを指定すると送信ボタンが必ず追加されるのでjsonでは追加しなくてもよいです。
ここでは以下のような画像のフォームを表示するjsonを書きます。 カスタムフォームの画像

json

{
    "type": "custom_form",
    "title": "タイトル",
    "content": [
        {
            "type": "label",
            "text": "テキストはこれで書く"
        },
        {
            "type": "input",
            "text": "inputText",
            "placeholder": "placeholder",
            "default": "Default"
        }
    ]
}

これを送信するコードがこれだとします(適当だけど)

use pocketmine\network\mcpe\protocol\ModalFormRequestPacket;
use pocketmine\Player;

function createWindow(Player $player, $data, int $id){
    $pk = new ModalFormRequestPacket();
    $pk->formId = $id;//任意の数字
    $pk->formData = $data;//json
    $player->dataPacket($pk);
}

formIdを1とすると送信ボタンが押されたときのコードがこれになります(同じく適当)

use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\network\mcpe\protocol\ModalFormResponsePacket;
use pocketmine\Player;
function GetForm(DataPacketReceiveEvent $e){
    $p = $e->getPlayer();
    $pk = $e->getPacket();
    if ($pk instanceof ModalFormResponsePacket) {
        $id = $pk->formId;
        $data = $pk->formData;
        switch($id){
            case 1:
                if($data==="null\n"){
                    break;
                }
                $Fdata=json_decode($data,true);
                $p->sendMessage($Fdata[1]);
            break;
        }
    }
}

今回のFormの場合、送信ボタンが押されたときに返ってくるFormDataの値は[null,"Default"]となります。
このコードではまず始めにjsonの形で書かれたformDataの値を配列にしています。
すると$Fdata[1]にはinputに入力された文字が入っています。まあ後は好きにしてください。
また、送信ボタンが押されずにFormが閉じた場合は"null\n"が返ってきますので例外処理を忘れないようにしてください。
以上で説明を終わります。

custom_Formで使えるUIパーツに関する紹介はここにあるので参考にしてみてください。 https://github.com/xBeastMode/McpeModalFormsDocumentation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment