UiCore
概要
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 のデータを、それらのエクステンションがある場合に表示します。
インストール
- CraftEngine をインストールします。シェーダー、フォント、画像を含むリソースパックをホストします。ビルドで提供されていない場合は、PacketEvents もインストールしてください。チャットの抑制と、スクロールホイールおよび移動キーに使用されます。
- TypeWriter の Entity エクステンションと Quest エクステンション、そして BTCMobs エクステンションをインストールします。これらは、宣言された依存関係です。
- 任意で、UiCore が読み取れるエクステンションをインストールします。Ghost、Codex、BattlePass、TinyEssentials、Cosmetics、NumericalStorage、Permissions、Pets、Friend、Party、Guild です。GUI エクステンションも任意です。ある場合、UiCore はそれが公開するメニューの状態を読み取ります。
- UiCore の JAR を
plugins/Typewriter/extensions/に配置し、サーバーを再起動します。 - UiCore のリソースパックの断片を、CraftEngine のパックにデプロイします。パックはエクステンション自身のツール(
generate-gui-pack、続いてvalidate-gui-pack)で生成され、対応する JAR より前にデプロイする必要があります。そうしないと、エラーなしで、すべてのアイテムアイコンが 1 つずつずれます。
Minecraft のリソース識別子で使用できるのは、[a-z0-9._-/] のみです。それ以外の文字を含むフォントプロバイダーは、クライアントによって通知なしに拒否され、グリフは画面上部に黒い長方形として表示されます。パックジェネレーターは、そのようなパスの書き込みを拒否します。
はじめに
コンパスから、小さなメニューを開きます。
- TypeWriter の Web パネルでスタティックページを開き、UI View エントリーを追加します。
viewIdをhello_menuに設定します。 - レイヤー(
layerIdはmain)と最初のコンポーネントを追加します。placement.kindはCELL、columnは 4、rowは 6、widthは 7、heightは 3、paletteはSURFACE、hoverPaletteはBLUE_LIGHT、textはHello、tooltipはClick meです。 onLeftClickに、コマンドやメッセージなどのアクションをリンクします。退出するために、navigateToまたは Close UI View を持つ 2 つ目のコンポーネントを追加します。viewIdがhello_menuの Open UI View アクションを追加するか、アイテムに割り当てます。materialがCOMPASS、viewIdがhello_menuの UI Item Trigger を追加します。- 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 | カーソルがコンポーネントに乗っている間、画面の横またはツールチップのアンカーに表示されるテキスト。 |
gauge | 0 から 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
- Close UI ViewClose UI View
- Mute UI ChatMute UI Chat
- Open UI ViewOpen UI View
- UI BannerUI Banner
- Unmute UI ChatUnmute UI Chat
オーディエンス2
- NPC Status OverrideNPC Status Override
- UI Look AudienceLooking At A Position
シネマティック1
- UI Spoken CinematicUI Spoken Cinematic
エンティティデータ1
- BTC Nameplate DataConfigure native text lines and an optional 3D attachment
コマンド2
- UI View CommandUI View Commands
- World Map CommandWorld Map Command
アーティファクト1
- BTC Player Nameplate Selection ArtifactStores each player's selected nameplate banner
マニフェスト12
- BTC Global NameplateGlobal mob nameplate
- BTC Player Nameplate BannerPlayer nameplate banner
- Minimap PoiMinimap Points of Interest
- Minimap SettingsMinimap Settings
- UI ConfigurationUI Configuration
- UI Dialogue StyleUI Dialogue Style
- UI HUDUI HUD
- UI Item TriggerUI Item Trigger
- UI Level Badge SettingsPrefix written before every level badge
- UI Nameplate SettingsShared nameplate visibility and health units
- UI Token ShopToken Shop Catalogue
- UI ViewUI View
トラブルシューティング
テキストやセルがあるべき場所に、黒い長方形や豆腐が表示される。 リソースパックの断片がないか、古いか、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 は、その公開されたメニューの状態を共有します。