メインコンテンツまでスキップ

入力

EasyMenu 7では、メニューを開く際やアイテムをクリックする際に、プレイヤーからテキスト、数値、真偽値、選択肢などの入力を受け付ける 入力フォーム(inputs) 機能を提供しています。

Native Dialog環境ではダイアログ内のグラフィカルな入力欄(テキストボックス、スライダー、スイッチなど)として提示され、インベントリGUI環境ではチャットプロンプトへ自動フォールバックします。


基本的な入力設定例​

購入個数をプレイヤーに入力させてからコマンドを実行する例です。

# メニュー全体で受け付ける入力フィールドの定義
inputs:
- id: count
type: integer
label: "購入個数を入力 (1〜64)"
min: 1
max: 64
initial: 1

menu-items:
- id: buy_diamond
slot: 13
material: DIAMOND
name: "&bダイヤモンドを購入"
input-refs:
- count # 上記の入力フィールドを参照
command: "shop buy diamond {input.count}"

入力タイプ一覧 (type)​

入力タイプ説明主な設定キー
text自由な文字列入力max-length, initial
integer整数値の入力min, max, max-length, initial
decimal小数値(実数)の入力min, max, max-length, initial
booleanON/OFF(真偽値)の選択initial
optionドロップダウンや一覧からの単一選択options, initial

すべての入力に共通のキーは次のとおりです。

キー既定値説明
id必須{input.<id>} で参照する識別子。メニュー内で重複するとエラー(duplicate-input-id)です。
typetext上の表のいずれか。未知の型はエラー(invalid-input)です。
labelid の値プレイヤーに表示する見出し。
timeout-secondsconfig.yml の input.default-timeout-seconds(既定: 60)チャット入力で待つ秒数。0 以下はエラーです。

min が max を超える、option に選択肢がない、選択肢の id が重複する、アイテムの input-refs が宣言されていない入力を指している、といった場合もエラーです。 min / max を text / boolean / option に書いた場合や、options を option 以外に書いた場合は警告になります。

type: input アクションとの違い

ここで説明する inputs はメニュー全体の入力フォームで、アイテムの input-refs から参照します。 アイテムのアクション内に書く type: input は別の仕組みで、チャットだけで1つの値を受け取ります。型は string / integer / decimal の3種類で、値は {input}(または variable で付けた名前)で参照します。詳しくは 高度なアクション を参照してください。


選択肢入力 (type: option) の設定例​

inputs:
- id: duration_choice
type: option
label: "ランクの期間を選択"
options:
- id: "1d"
display: "1日 (100円)"
- id: "7d"
display: "7日 (500円)"
- id: "30d"
display: "30日 (1,500円)"
initial: "7d"

menu-items:
- slot: 13
material: NETHER_STAR
name: "&6VIPランクを購入"
input-refs:
- duration_choice
command: "rank buy vip {input.duration_choice}"

環境間で統一された検証規則(パリティ保証)​

Native DialogのUIフォームから送信された値も、チャット入力から送信された値も、すべてEasyMenuの共通バリデーター(InputContract)によって同一のルールで厳格に検証されます。

  • 初期値(initial)の検証: 設定ファイル内の初期値がその入力条件(範囲など)を満たしているか、サーバーリロード時に事前検証されます。
  • 文字数制限: text、integer、decimal は max-length(既定128)を超える入力を拒否します。 数値は指数表記を通常表記へ変換した後の長さも検査し、長すぎる値を展開前に拒否します。
  • 入力値の安全性: プレイヤーが入力した値は {input.<id>} に安全に差し込まれ、PlaceholderAPIやカラーコードとして再解釈されることはありません。

チャット入力中にプレイヤーが cancel と入力すると入力は取り消され、そのアイテムの後続アクションは実行されません。