Skip to content

Instantly share code, notes, and snippets.

@wakame0731
Last active October 10, 2022 06:52
Show Gist options
  • Save wakame0731/e5b8daa7f813fed70f12bdbff54b215d to your computer and use it in GitHub Desktop.
Save wakame0731/e5b8daa7f813fed70f12bdbff54b215d to your computer and use it in GitHub Desktop.
設定画面に独自のフォームを出す方法

設定画面に独自のフォームを出す方法

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

1.2のアップデートで設定画面に独自のフォームが出せるようになりました。
ここではその出し方について説明したいと思います。

設定画面の送り方

送るjsonのサンプル

{
    "type": "custom_form",
    "title": "タイトル",
    "icon":[
            "type" =>"url",
            "data":"https://minecraft-ja.gamepedia.com/media/minecraft-ja.gamepedia.com/c/c5/Grass.png"
    ],
    "content": [
        {
            "type": "label",
            "text": "テキストはこれで書く"
        },
        {
            "type": "input",
            "text": "inputText",
            "placeholder": "placeholder",
            "default": "Default"
        }
    ]
}

基本的にはModalFormの時と同じです。ただ、設定画面に出すときのみiconを設定してあげることができます。

コード(適当)

use pocketmine\network\mcpe\protocol\ServerSettingsRequestPacket;
use pocketmine\network\mcpe\protocol\ServerSettingsResponsePacket;
use pocketmine\event\server\DataPacketReceiveEvent;
use pocketmine\Player;
function D(DataPacketReceiveEvent $e){
    $p = $e->getPlayer();
    $pk = $e->getPacket();
    if ($pk instanceof ServerSettingsRequestPacket) {
        $packet = new ServerSettingsResponsePacket();
        $packet->formId = $id;//FormのID
        $packet->formData =$data//jsonのデータ
        $p->dataPacket($packet);
    }
}

軽く説明すると、ServerSettingsRequestPacketがクライアントから送られてきたときにServerSettingsResponsePacketをサーバー側から送ってあげれば、サーバーの設定画面にオリジナルのフォームを出すことができます。
フォームに入力されたデータは設定画面が閉じられたときにModalFormResponsePacketで返ってきます。
その部分に関してはhttps://gist.github.com/wakame0731/144a02b8e79f625ddd92edd61032147c で書いたので省略します。

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