入力
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 |
boolean | ON/OFF(真偽値)の選択 | initial |
option | ドロップダウンや一覧からの単一選択 | options, initial |
すべての入力に共通のキーは次のとおりです。
| キー | 既定値 | 説明 |
|---|---|---|
id | 必須 | {input.<id>} で参照する識別子。メニュー内で重複するとエラー(duplicate-input-id)です。 |
type | text | 上の表のいずれか。未知の型はエラー(invalid-input)です。 |
label | id の値 | プレイヤーに表示する見出し。 |
timeout-seconds | config.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 と入力すると入力は取り消され、そのアイテムの後続アクションは実行されません。