ビュー、タブ、継承
ビューは、メニューの 1 つの画面です。すべてのビューが同じ枠組み(タブの列、フッター)を共有し、内容だけが変わります。
ビューを宣言する
views に、画面ごとに 1 つずつエントリを追加します。
| フィールド | 役割 |
|---|---|
id | gui:view とタブから使われます。 |
name | パンくずリストに使われるラベル。省略すると id が使われます。 |
title | このビューのタイトル。空の場合はメニューのタイトルのままです。{breadcrumb}、{view}、{root} が使えます。 |
parentId | 親ビュー。パンくずリストのため、また親のタブを点灯したままにするために使います。 |
frames | フレームの id からレイアウトの id への明示的な対応付け。 |
criteria, viewPermission | これらを満たさない場合、ビューには到達できず、そのタブは非表示になります。 |
activeStyle | アクティブな間のタブの見た目: glint、material、customModelData、nameFormat、loreSuffix。 |
Open GUI では、defaultViewId が最初に開かれるビューです(空の場合は、最初に宣言されたもの)。breadcrumbSeparator はパンくずの区切りに使う MiniMessage テキストで、pushHistoryOnViewSwitch を有効にすると、タブ切り替えの後に gui:back で前のビューに戻れます。
フレームを埋める
frame レイアウトで、フレームの layoutId を @view に設定します。アクティブなビューについて、拡張機能は次の順序でレイアウトを探します。
- そのフレームの
idに対する、ビューのframesの対応付け。 <view id>_<frame id>という名前のレイアウト。たとえば、フレームcontentとビューislandならisland_content。parentIdの連鎖に対する、同じ 2 つの検索。
何にも解決されないフレームは、空のままになります。@view のフレームを解決するのは、メニューのルートレイアウト(mainLayoutId)だけです。
タブ
タブアイテムには、buttonPrefix に view: を、buttonType にビューの id を設定します。クリックするとそのビューに切り替わり、そのビューまたはその子のいずれかがアクティブな間、ビューの activeStyle が適用されます。到達できないビューのタブは非表示になります。
要求されたビューが非表示の場合は、プレイヤーが到達できる最初のビューが使われます。存在しないビューが要求されると、Unknown view としてログに記録されます。
メニューを継承する
baseMenuId は、テンプレートとなる Open GUI のエントリ id です。子は、その layoutPool、views、mainLayoutId、defaultViewId、size を継承し、継承の連鎖はルートまでたどられます。そのため、グローバルな枠組みを継承するドメイン用テンプレートを、さらにメニューが継承できます。子のレイアウトが継承元と同じ id を持つ場合は継承元を置き換え、ビューについても同様です。storagePool は、直接の親からのみ継承されます。子の mainLayoutId が空の場合は、親のものが使われます。
親が存在すること、すべての layoutId が統合されたプールに存在すること、2 つのメニューが互いを継承していないことを確認してください。
実践
固定のタブフレームと @view のコンテンツフレームを持つテンプレートメニューを作り、ドメインごとに 1 つずつ子メニューを作って、コンテンツのレイアウトだけを上書きします。コンテンツのレイアウトには、タブの列に触れることなく、simple、scrollable、paginated を使えます。