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

ビュー、タブ、継承

ビューは、メニューの 1 つの画面です。すべてのビューが同じ枠組み(タブの列、フッター)を共有し、内容だけが変わります。

ビューを宣言する​

views に、画面ごとに 1 つずつエントリを追加します。

フィールド役割
idgui: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 に設定します。アクティブなビューについて、拡張機能は次の順序でレイアウトを探します。

  1. そのフレームの id に対する、ビューの frames の対応付け。
  2. <view id>_<frame id> という名前のレイアウト。たとえば、フレーム content とビュー island なら island_content。
  3. 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 を使えます。