【統合版】ScriptAPI #5 モーダルフォーム

スポンサーリンク

解説

今回は三つのフォームのうち、ModalFormの解説をしていきます。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2024-03-27-180910-4.png

早速次のようなフォームを作ってみましょう。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2024-04-03-000140.png
import { world } from "@minecraft/server";
import { ModalFormData } from "@minecraft/server-ui";

world.afterEvents.itemUse.subscribe(ev => {
const player = ev.source;
const itemStack = ev.itemStack;

// アイテムの種類がダイヤモンドの場合
if (itemStack.typeId === "minecraft:diamond") {

// フォームをメソッドチェーンで定義
const form = new ModalFormData()
.title("タイトル")
.toggle("トグル",false) // (ラベル,初期値)
.slider("スライダー",0,100,1,0) // (ラベル,最小値,最大値,刻み,初期値)
.dropdown("ドロップダウン",["選択肢0","選択肢1","選択肢2"],0) // (ラベル,配列,初期値)
.textField("テキストフィールド","プレースホルダ",""); // (ラベル,プレースホルダ,初期値);

// フォームの表示
form.show(player).then(res => {

// res.canceled - フォームをキャンセルしたかどうか
// res.formValues[] - フォームの結果

if (res.canceled) return;
// フォームの結果をsayする
player.runCommand(`say トグル: ${res.formValues[0]}`);
player.runCommand(`say スライダー: ${res.formValues[1]}`);
player.runCommand(`say ドロップダウン: ${res.formValues[2]}`);
player.runCommand(`say テキストフィールド: ${res.formValues[3]}`);
});
}
});

サンプルコード:メッセージフォーム

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2024-04-03-011805.png
import { world } from "@minecraft/server";
import { ModalFormData } from "@minecraft/server-ui";

world.afterEvents.itemUse.subscribe(ev => {
const player = ev.source;
const itemStack = ev.itemStack;

if (itemStack.typeId === "minecraft:iron_ingot" && itemStack.nameTag === "メッセージを送る") {
// 全てのプレイヤーの配列
const players = world.getPlayers();
// 名前の配列
const names = players.map(player => player.name);

// フォームの定義
const form = new ModalFormData()
.title("メッセージフォーム")
.dropdown("どのプレイヤーに送りますか?", names)
.textField("メッセージ", "", "")
.toggle("匿名にする", false);

// フォームの表示
form.show(player).then(res => {
if (res.canceled) return;

// 送信先のプレイヤー
const toPlayer = players[res.formValues[0]];
// メッセージ
const message = res.formValues[1];
// 匿名かどうか
const isAnonymous = res.formValues[2];

if (message === "") return player.sendMessage("§cメッセージがありません");

// 三項演算子で匿名の場合、"匿名"と表示する
toPlayer.sendMessage(`§e${isAnonymous ? "匿名" : toPlayer.name}§f => ${message}`);
});
}
});

参考URL

公式リファレンス
minecraft/server Module | Microsoft Learn

ディスコードサーバー
Script API 開発初心者コミュニティ

参考にしたサイト
マイクラの泉

備忘録ブログ
さば2号のgametest(scriptAPI)備忘録

※投稿記事に含まれるファイルやリンクにより発生した被害についてクラフターズコロニーは責任を取りません
投稿通報

コメント

コメント通報