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

UiCore

シェーダーで GUI 空間に描画されるメニュー、HUD、会話、ミニマップ、ネームプレート。クライアントモッド不要。

プライベートv0.1.0-alphaメニューとビジュアル
必要TypeWriter0.9.0-beta-177 (BTC build)CraftEnginePacketEventsEntityQuestBTCMobsGUI任意Codex任意BattlePass任意TinyEssentials任意Cosmetics任意Party任意

BornToCraft ネットワーク向けに作られた拡張機能です。参照用にドキュメント化されており、配布されていません。

概要​

UiCore は、クライアント MOD なしで、バニラクライアントの GUI 空間に、メニュー、カード、HUD、ダイアログ、ミニマップ、ワールドマップを描画します。これは、リソースパックに含まれるコアシェーダー(text.vsh)によって実現されています。描画されるものはすべてフォントのグリフで、シェーダーがグリフのアセントと色を読み取り、固定の 15 × 15 のグリッド上のどこに配置するかを判断します。その結果、GUI スケール、視野角、ウィンドウサイズにかかわらず、すべてのプレイヤーに対して同一に表示され、インベントリが開く場所だけでなく、画面上のどこにでも表示できます。

UiCore は、2 つの古いツール、AdvancedMenus(チェストメニュー)と BetterHud を置き換えます。メニューはもはやチェストインベントリではなく、Web パネルで作成するコンポーネントのレイヤーを積み重ねたビューで、プレイヤーは頭の向きで狙います。同じグリッドが、HUD モジュール、ダイアログの行、選択肢も描画します。

このエクステンションのソースフォルダーは、古い HUD エクステンションにちなんだ名前になっていますが、エクステンション名は UiCore です。TypeWriter の BTC ビルド上で動作し、リソースパックをホストするために CraftEngine が必要で、アルファ版(0.1.0-alpha)としてマークされています。

機能​

  • ビュー — パネル、ボタン、リスト、タブ、サブ画面、ツールチップ、ゲージ、テキスト入力を備えた全画面。
  • ステートとアニメーション — コンポーネントはファクトやパーミッションで変化し、ビューはワイプ、ブルーム、フェードで登場できます。
  • HUD モジュール — 隅または中央に固定される常時表示の要素。プレイヤーが別の画面を読んでいる間は非表示になります。
  • ダイアログ — 会話の行と、スクロールホイールまたはカーソルで答える選択肢。共有のスタイルエントリーを 1 つ使用します。
  • シネマティックダイアログ — シネマティックのタイムライン上の、同じ会話の行。
  • ミニマップとワールドマップ — 関心地点、ウェイポイント、調査モードを備えた地形マップ。
  • ネームプレート — モブとプレイヤー用の 3D ネームプレート。バナー、レベルバッジ、NPC のステータスインジケーターに対応します。
  • バナーとチャット制御 — 画面上部の 1 行のお知らせと、特定の場所でチャットをミュートするアクション。
  • アイテムトリガー — 素材を右クリックしてビューを開きます。
  • 連携 — クエスト、codex、バトルパス、コスメティック、ペット、ソーシャル、wiki、RPG Core のデータを、それらのエクステンションがある場合に表示します。

インストール​

  1. CraftEngine をインストールします。シェーダー、フォント、画像を含むリソースパックをホストします。ビルドで提供されていない場合は、PacketEvents もインストールしてください。チャットの抑制と、スクロールホイールおよび移動キーに使用されます。
  2. TypeWriter の Entity エクステンションと Quest エクステンション、そして BTCMobs エクステンションをインストールします。これらは、宣言された依存関係です。
  3. 任意で、UiCore が読み取れるエクステンションをインストールします。Ghost、Codex、BattlePass、TinyEssentials、Cosmetics、NumericalStorage、Permissions、Pets、Friend、Party、Guild です。GUI エクステンションも任意です。ある場合、UiCore はそれが公開するメニューの状態を読み取ります。
  4. UiCore の JAR を plugins/Typewriter/extensions/ に配置し、サーバーを再起動します。
  5. UiCore のリソースパックの断片を、CraftEngine のパックにデプロイします。パックはエクステンション自身のツール(generate-gui-pack、続いて validate-gui-pack)で生成され、対応する JAR より前にデプロイする必要があります。そうしないと、エラーなしで、すべてのアイテムアイコンが 1 つずつずれます。
リソースパックの識別子

Minecraft のリソース識別子で使用できるのは、[a-z0-9._-/] のみです。それ以外の文字を含むフォントプロバイダーは、クライアントによって通知なしに拒否され、グリフは画面上部に黒い長方形として表示されます。パックジェネレーターは、そのようなパスの書き込みを拒否します。

はじめに​

コンパスから、小さなメニューを開きます。

  1. TypeWriter の Web パネルでスタティックページを開き、UI View エントリーを追加します。viewId を hello_menu に設定します。
  2. レイヤー(layerId は main)と最初のコンポーネントを追加します。placement.kind は CELL、column は 4、row は 6、width は 7、height は 3、palette は SURFACE、hoverPalette は BLUE_LIGHT、text は Hello、tooltip は Click me です。
  3. onLeftClick に、コマンドやメッセージなどのアクションをリンクします。退出するために、navigateTo または Close UI View を持つ 2 つ目のコンポーネントを追加します。
  4. viewId が hello_menu の Open UI View アクションを追加するか、アイテムに割り当てます。material が COMPASS、viewId が hello_menu の UI Item Trigger を追加します。
  5. Publish します。コンパスを右クリックすると、画面が表示されるので、頭でボタンを狙ってクリックします。

仕組み​

ビューは、(奥から手前の順の)レイヤーのリストです。レイヤーはコンポーネントを持ち、コンポーネントは、どこにあるか、どのように塗られるか、何を表示するか、クリックで何がトリガーされるかを示します。エンコーディングに由来する、コードではなく仕様上の制限が 3 つあります。

  • 色合いはインデックスです。 セルの色は、その列、行、パレットのインデックスを持つため、色合いは、自由な 16 進値ではなく、固定の名前付きパレット(SURFACE、BLUE_LIGHT、GOLD など)から選びます。
  • 画像は安価で、フォントは貴重です。 コンポーネントはパネル画像で塗ることができ、任意の数の画像が 1 つのフォントを共有します。テキストの色合いはフォントから決まり、パックには 16 種類のテキストの色合いが含まれているため、17 番目は白にフォールバックします。
  • スライドもテキストのフェードもありません。 アニメーションは、セルを順番に表示します。テキストは、パネルとともに現れます。

開いているビューは、プレイヤーが落下している間は開始を拒否します(プレイヤーにはメッセージが表示されます)。レンダラーチェーン(UI Configuration の rendererOrder)が、どのレンダラーがビューを担当するかを決めます。GUI(このシェーダー)、DIALOG、SPATIAL、CHEST です。

メニュー​

開く​

ビューは、次の方法で開けます。

  • Open UI View アクション(viewId)
  • UI View Commands エントリーの /ui open <viewId> コマンド
  • UI Item Trigger。プレイヤーが特定の素材で右クリックしたときにビューを開きます(2 つのビューが同じ素材を要求すると、警告がログに記録され、最後のものだけが開きます)
  • ミニマップの openMaterial。ワールドマップを開きます

Close UI View または /ui close で閉じます。

レイアウトとコンポーネント​

メニューのグリッドは、15 列 × 15 行です。placement.kind は、CELL(グリッド上のセル: column、row、width、height)、MARKER(ビューポート全体にわたる 0 から 1 の位置、x と y。範囲内に制限されます)、または SCRIM(全画面のベール)です。ボタンは、狙いやすくするために、複数のセルが必要です。

コンポーネントのフィールド効果
palette, hoverPalette, disabledPalette通常時、カーソルが乗ったとき、criteria が一致しないときの色合い。
background単色の代わりに、パックのパネル画像(9 スライス)を使用します。backgroundBinding は、プレースホルダーから画像を選びます。
text, textPalette, textAlign, textEffectコンポーネント全体に描画されるテキスト。
icon, lineIconテキストの前、または行の末尾に描画される、素材の画像。
image, imageBindingアスペクト比を維持して、コンポーネントの内側に収められる、パックの画像。
label, tooltipカーソルがコンポーネントに乗っている間、画面の横またはツールチップのアンカーに表示されるテキスト。
gauge0 から 100 の値を持つプレースホルダー(たとえば btcui_health_percent)からバーを描画します。
bindingコンポーネントが値を取得するプレースホルダー。
criteria, onLeftClick, onRightClickクリックするための条件と、トリガーされるエントリー。
navigateTo同じビューの別の画面を開きます。
inputプレイヤーに値の入力を求めます。onInputCommands は、{input} と %player% を置き換えて、コンソールから実行されます。

画面、リスト、ステート​

  • ノード(nodes、rootNodeId)は、タブとサブ画面を宣言し、それぞれが、どのレイヤーがどの名前付きの領域を埋めるかを選びます。タイトルは、パンくずリストに使われます。
  • リピート(レイヤーの repeats)は、番号付きのソースにまたがるウィンドウを描画します。アイテム n は、バインディング <source>.<n> を読み取ります。stepMode が PAGE の場合は、ジェスチャーごとにウィンドウ全体がめくられ、ITEM の場合は 1 つずつ移動します。
  • ステート(states)は、条件が成立している間、コンポーネントを変化させます。色合い、テキスト、ツールチップ、アイコン、パネル、表示可否です。条件が成立している中で最も優先度の高いステートが有効になり、ステートは parentId を詳細化でき、コンポーネントは ID または column:row で指定されます。ステートは、再描画のたびに再評価されます。
  • 登場(opening、openingMillis、openingFade): WIPE_DOWN、WIPE_UP、WIPE_RIGHT、WIPE_LEFT、BLOOM、FADE。インターフェースに入るときにのみ再生され、2 つの画面の間では再生されません。

パレット​

FRAME, SURFACE, SURFACE_LIGHT, MUTED, BLUE, BLUE_LIGHT, CYAN, TEAL, GREEN, GREEN_LIGHT, YELLOW, ORANGE, RED_DARK, RED, PURPLE, WHITE, BLACK, INK, SLATE, STEEL, STEEL_LIGHT, MIST, PAPER, FOREST, MINT, GOLD, AMBER, WINE, CORAL, VIOLET。NONE は何も描画しません。

インタラクション​

カーソルは、プレイヤーの頭に追従します。ヨーとピッチがグリッドに投影され、セルにスナップされます。プレイヤーは、/ui sensitivity <degrees> で速度を変更できます。角度が大きいほど、カーソルは遅くなります。

  • 左クリックと右クリックは onLeftClick と onRightClick をトリガーします。スクロールホイールはリストとタブをスクロールします。スニークはビューを閉じるショートカットです(研究ツリーのリストにフォーカスがある間を除く)。
  • ビューはワールドに道を譲ります。歩き去る、テレポート、ダメージを受ける、インベントリを開く、のいずれかで閉じられます。
  • ビューが開いている間、他のプレイヤーのチャットは画面に表示されず、サーバーメッセージは、バニラのチャットではなく、UI チャットによって再描画されます。

HUD モジュール​

UI HUD エントリーは、ビューと同じレイヤーとコンポーネントを使用し、corner(TOP_LEFT、TOP_RIGHT、BOTTOM_LEFT、BOTTOM_RIGHT、CENTRE)に固定されます。オフセットは、そこから内側に向かって数えます。priority は、重なり合う 2 つのグループのうち、どちらを上に描画するかを決め、visibility はグループの表示を制御します。HUD モジュールは、ビュー、ダイアログ、シネマティック、ワールドマップが画面を占有している間は、自動的に一時停止されます。

ダイアログ​

UI Spoken Dialogue は、話し手の名前、任意の portrait、タイピングの duration(ゼロだとすぐに表示)、sound とともに、1 行を表示します。UI Option Dialogue は、選択肢(options)を追加します。navigation は、KEYS(スクロールホイールと確認キー)、CURSOR、またはその両方(デフォルト)です。timer は、ダイアログをキャンセルして cancelTriggers を発火します。各選択肢は、criteria(ロックされた状態で描画されるか、hideWhenLocked で非表示になります)、ロック中にツールチップの代わりに表示される lockedReason、modifiers、triggers を持ちます。どちらも style エントリーを受け取ります。空のままにすると、サーバー自身のものが使われます。

UI Dialogue Style は、グリッドのセル単位で、見た目を定義します。speech(フレーム、テキスト領域、話し手のバナー、ポートレート)、options(ウィンドウ、パネル、選択中およびロック中の選択肢の色合い、キャレットとスクロール矢印、任意の 2 列目)、chrome(確認キーの画像、カウントダウンの行、レターボックスの行)です。UI Spoken Cinematic は、startFrame と endFrame のセグメントで、シネマティックページに行を配置します。

マップとネームプレート​

常時表示のミニマップは、Minimap Settings(worlds と excludeListedWorlds、size、blocksPerCell、borderThickness、openMaterial、maxWaypoints、worldMapAreas)で設定し、その地点は Minimap Points of Interest で設定します。画面上の位置は、サーバーが解像度も GUI スケールも知らないため、ここではなくリソースパックで設定します。ワールドマップは、openMaterial を右クリックするか、/worldmap で開きます。通常のプレイでは、ミニマップが読み取った内容で埋められ、調査モードでは、より広い半径を意図的にマッピングします。

ネームプレートは 3 次元で、閲覧者ごとに表示されます。Global Nameplate は、モブの上に行を描画します(entityTypes、btcMobsOnly、lines、viewDistance、requireLineOfSight など)。Player Nameplate Banner は、選択可能なバナーの背景(_left、_middle、_right のスライスを持つ CraftEngine の画像プレフィックス)を定義し、プレイヤーの選択は選択アーティファクトに保存されます。Nameplate Settings は、距離、予算、体力の単位を設定し、Level Badge Settings は、レベルの前に書かれる語(デフォルトのプレフィックス。翻訳プレースホルダーにもできます)を設定します。NPC Status Override は、NPC の上に、インジケーターモデル(受注可能、進行中、インタラクションなど)を配置します。

コマンド​

コマンド説明
/ui open <viewId>ビューを開きます。
/ui close開いているビューを閉じます。
/ui sensitivity [degrees]カーソルの移動角度(度)を表示または設定します。
/ui icons [materials]スプライトフォントを確認するために、アイテムアイコンをチャットに出力します。
/ui chat vanillaオペレーター専用: 切断するか、もう一度実行するまで、バニラのチャットに切り替えます。
/worldmapワールドマップを開く、または閉じます。
/worldmap survey, forget, stats, minimap, waypoint <name>, waypoint clear, save, debug調査モード、マップの消去、サイズの表示、ミニマップの切り替え、ウェイポイントの名前変更または消去、保存、診断の出力。
/nameplates(エイリアス /nameplate、/btcnameplates)equip <id>、unequip、preview [id]、list、toggle [on|off]、および管理者用の force-equip、force-unequip、force-preview、admin-toggle。

/ui と /worldmap の名前は、それぞれのエントリーの commandName フィールドから決まります。それらの permission フィールドは、自分で選ぶパーミッションノードで、空の場合は全員が対象です。/worldmap survey、forget、save、調査の切り替えは、surveyPermission を使用します。

パーミッション​

パーミッション許可される内容
UI View Commands の permission/ui のサブコマンド(空の場合は全員)。
World Map Command の permission と surveyPermission/worldmap、そして調査と消去(空の場合は全員)。
btcnameplates.command.equip, .unequip, .preview, .list, .toggleプレイヤー向けの、対応する /nameplates のサブコマンド。
btcnameplates.command.admin.force_equip, .force_unequip, .force_preview, .toggle管理者向けの /nameplates のサブコマンド。
コンポーネントとグループの visibility.permissionそのノードを持たないプレイヤーに対して、要素を表示または非表示にします。

プレースホルダー​

コンポーネント、ゲージ、テキスト用の、MiniPlaceholders のエクスパンション btcui です。

プレースホルダー戻り値
<btcui_level_glyph:37>パックの色付きのレベル数字として書かれた、任意の数値。
<btcui_global_level_glyph>, <btcui_global_level>, <btcui_global_level_badge>グリフ、数字、または設定されたプレフィックス付きの、グローバルレベル。
<btcui_global_percent>, <btcui_global_detail>, <btcui_xp_detail>次のグローバルレベルまでの進捗と、その数値。
<btcui_health>, <btcui_health_max>, <btcui_health_percent>, <btcui_absorption>体力と吸収。
<btcui_food>, <btcui_food_max>, <btcui_food_percent>, <btcui_saturation>満腹度。
<btcui_air>, <btcui_air_max>, <btcui_air_percent>, <btcui_air_gauge>酸素。ゲージは、プレイヤーが息苦しくない間は空です。
<btcui_xp_level>, <btcui_xp_progress>, <btcui_xp_percent>バニラの経験値バー(エンチャントに使用)。
<btcui_riding>, <btcui_mount_name>, <btcui_mount_health>, <btcui_mount_health_max>, <btcui_mount_health_percent>, <btcui_mount_gauge>乗り物。
<btcui_underwater>, <btcui_swimming>, <btcui_burning>, <btcui_freezing>プレイヤーの状態。
<btcui_x>, <btcui_y>, <btcui_z>, <btcui_world_time>, <btcui_world_day>位置と時間。
<btcui_banner>, <btcui_actionbar>, <btcui_chat:...>UI が描画する、現在のバナー、アクションバー、チャットの行。

エントリー​

26 件のエントリー(拡張機能のソースから生成)。

アクション5
オーディエンス2
ダイアログ2
シネマティック1
エンティティデータ1
コマンド2
アーティファクト1
マニフェスト12

トラブルシューティング​

テキストやセルがあるべき場所に、黒い長方形や豆腐が表示される。 リソースパックの断片がないか、古いか、JAR より後にデプロイされているか、フォントのパスに [a-z0-9._-/] 以外の文字が含まれています。先にパックを、続いて対応する JAR を再デプロイし、CraftEngine がそれを再読み込みしたことを確認してください。

アイテムアイコンが、間違ったアイテムを表示する。 パックと JAR が一致していません。アイコンの文字は、テーブル内での順位であるため、JAR より後に生成されたパックは、すべてのアイコンをずらします。パックを再生成して検証し、両方を再デプロイしてください。

アイテムを使うと、空のメニューが開く。 2 つの UI Item Trigger のバインディングが、同じ素材を要求しています。ログに、それぞれのコンポーネント数とともに est reclame par ... と表示されます。余分なバインディングを削除してください。

names view '<id>', which no page defines. アクション、コマンド、アイテムに指定した viewId が、Publish 済みのどの UI View とも一致していません。declared but incomplete のビューには、解決できるレイヤーもコンポーネントもありません。

空中でメニューが開かない。 UiCore は、プレイヤーが落下している間は、画面を開くことを拒否します。地面に着いてから、もう一度試してください。

チャットが消えた。 UiCore は、チャットを自分で描画します。ビューが開いている、Mute UI Chat が有効である、またはプレイヤーがオフにしています。ミュートした場所を離れるときは、Unmute UI Chat を使用してください。オペレーターは、/ui chat vanilla でバニラのチャットを確認できます。

ジェスチャーが機能しなくなる。 ログの Gesture decoding unavailable は、PacketEvents を起動できなかったことを意味します。スクロールホイールと移動キーは使えなくなりますが、クリックは引き続き機能します。

関連エクステンション​

  • TinyEssentials — ビューに表示される、wiki、ホーム、タブのデータ。
  • RPG Core — 成長、ストレージ、ワードローブのパネルは、UiCore を使用します。
  • Codex、BattlePass、Cosmetics、Pets — データ画面。
  • Party、Friend、Guild — ソーシャルパネル。
  • GUI — チェストメニュー。UiCore は、その公開されたメニューの状態を共有します。