解説
今回は三つのフォームのうち、ModalFormの解説をしていきます。
早速次のようなフォームを作ってみましょう。
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]}`);
});
}
});
サンプルコード:メッセージフォーム
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 開発初心者コミュニティ
参考にしたサイト
マイクラの泉
コメント