バリアント
バリアント(Variants) は、同じスロットのアイテムについて、プレイヤーの権限や条件に応じて「見た目(名前・素材・説明文)」や「実行するコマンド」を動的に差し替える機能です。
設定例: VIPプレイヤー向けの割引表示
一般プレイヤーには通常価格(1000円)、VIP権限を持つプレイヤーには割引価格(500円)で表示・実行する例です。
menu-items:
- id: buy_diamond
slot: 13
material: DIAMOND
name: "&bダイヤモンドを購入"
lore:
- "&7通常価格: &e1,000円"
command: "shop buy diamond standard"
# VIP向けの差し替え設定
variants:
- id: vip_discount
when:
permission: "myserver.vip"
override:
name: "&d&l[VIP] ダイヤモンドを購入 (半額!)"
lore:
- "&7VIP限定価格: &a500円"
- "&dVIP特典が適用されています"
glint: true
command: "shop buy diamond vip"
バリアントの評価と適用ルール
- 上から順に評価:
variantsリストの上から順番にwhen条件を判定し、最初に成立したバリアントが1つだけ適用されます。 - 指定したキーのみ上書き:
overrideセクションに指定した項目(name,lore,material,commandなど)だけが上書きされ、指定しなかった項目(slotなど)は基底要素の設定がそのまま引き継がれます。 - アクションのクリーンな置換:
override内でcommand、action、actionsのいずれかを指定すると、基底要素のアクション定義全体が置き換わります。基底のアクションと混ざることはありません。 - セッション固定: バリアントはプレイヤーがメニューを開いた瞬間に決定され、そのセッション中は固定されます。表示されている見た目と、クリック時に実行されるアクションが常に100%一致することを保証します。
:::note バリアントの入れ子禁止 バリアントの中にさらにバリアントを記述すること(ネスト)はできません。 :::
リロード時の安全検証
バリアントの override 設定は、通常のアイテムと同様にサーバーリロード時に厳密に検証されます。
存在しない素材名や無効なコマンドが override 内に含まれていた場合、/menu reload の時点でエラーが検知されリロードが拒否されます。条件に合致したプレイヤーが後からエラーに遭遇することはありません。