GUI
GUI 拡張は Typewriter の中核メニューシステムです。9 つの設定可能なレイアウトエンジン(加えて API 専用コンポーネント)、23 のインベントリタイプ、キーボード/マウス操作、永続的なアイテムストレージ、完全な MiniMessage 書式に対応します。他のほぼすべての拡張が、メニューのためにこれに依存しています。
近日公開:ドラッグ&ドロップ、ゲーム内忠実なライブプレビュー、CSS-flexbox 自動レイアウト、メニュー状態、タイルマップ、複数プロバイダーのリソースパック対応を備えた Web ベースの WYSIWYG エディター。
- ソースコード — GitHub でソースを見る。
- リリースをダウンロード — 最新の JAR を入手する。
機能
- 9 つのレイアウトエンジン — Simple、Composite、Scrollable、Paginated、Frame、Flex、Storage、Book、Merchant —— 加えて Kotlin API 経由の Iterator、Slider、ReactiveSlot。
- 23 のインベントリタイプ — チェスト、かまど、金床、エンチャントテーブル、鍛冶台、行商人、本など。
- スクロールとナビゲーション — 設定可能な上/下/左/右ボタンを備えたスクロール可能なレイアウト。スクロールボタンはビューポートに固定されます。独立したゾーンを持つマルチフレーム。
- 永続ストレージ — アーティファクトに支えられたアイテムストレージ —— プレイヤー単位またはグループ単位。進捗追跡のための累積モード。設定可能なクリックアクション。
- ストレージプレースホルダー — スロット名や Lore 内の動的プレースホルダー
{stored_name}、{stored_amount}、{stored_max}。 - MiniMessage — タイトル、アイテム名、Lore を完全に MiniMessage 対応。色、グラデーション、ホバー/クリックイベント。
- クリック操作 — LEFT、RIGHT、SHIFT、DOUBLE_CLICK、DROP、SWAP_OFFHAND、NUMBER_KEY、SCROLL —— スロット単位またはグローバル。
- アニメーション — 設定可能なイージング(linear、ease-in、ease-out)を備えた滑らかなスロット遷移。
- 入力ダイアログ — Paper のダイアログ API により、メニュー操作中にテキスト入力を求めます。
アーキテクチャ
エントリーライブラリ
アクション
- Open GUI — 主要な入口。タイトル、レイアウト、アイテム、操作、ストレージを備えたインベントリ GUI を定義します。
設定
- GUI Settings — グローバルな既定値:オーディオ設定、ストレージのクリック挙動のマッピング、スキルツリーノード。
ガイド
- はじめに — システムの仕組み、用語、そして最初のメニューをステップごとに。
アーティファクト
- GUI Storage — 永続ストレージのアーティファクト。プレイヤー単位またはグループ単位のアイテム永続化、累積対応。
クイックスタート
-
1. Open GUI エントリーを作成する — Open GUI アクションエントリーを作成します。この 1 つのエントリーが 1 つのメニューのすべてを定義します:基本設定: -
title— インベントリのタイトル(MiniMessage + PlaceholderAPI) -guiType— インベントリタイプ:CUSTOM、CHEST、MERCHANT、BOOK、ANVILなど(23 種) -size—CUSTOMタイプの場合:SIZE_9からSIZE_54レイアウト(1 つ選択): -simple— 明示的な x,y 座標、グリッドパターン用のcount/direction/gap/repeatY-scrollable— スクロールボタン付きビューポート、内側のレイアウトがスクロール -frame— 複数の独立ゾーン、それぞれに子レイアウト -paginated— 次へ/前へのナビゲーション付きの個別ページ -composite— Z 順に重ねた子 -book— 書かれた本としての MiniMessage ページ -merchant— カスタムアイテムを使った村人取引 アイテムと操作: -item、displayName、loreでスロットを定義 —— 配置にはx/y/count/directionを使用 - スロットごとにinteractionListを付与:LEFT、RIGHT、SHIFT_LEFT、SHIFT_RIGHT、DOUBLE_CLICK、DROPなど - クリック時に Typewriter アクションを発動するにはtriggersを付与 ストレージ(任意): - アイテムを永続化するには任意のスロットにstorageを追加 - プレースホルダー{stored_name}、{stored_amount}、{stored_max}を使用 → Open GUI エントリーのリファレンス -
2. 他の拡張から参照する — GUI エントリーが用意できたら、メニューが必要な他のどの拡張からでも参照します:- QuestCodex —
quest_codex_settingsはクエスト閲覧に GUI レイアウトを使用 - Shops — ショップメニューはアイテム表示に GUI レイアウトを使用 - BattlePass、Crates、Pets、Party、Profiles、Cosmetics、Dungeon、BTCSky…… — いずれもメニューに GUI 拡張を使用 他の拡張のメニュー設定で Open GUI アクションエントリーの ID を参照するだけです。> GUI 拡張は 20 以上の他の拡張にとって必須の依存です。
レイアウトタイプ
SimpleLayout
仮想グリッド上の明示的な (x, y) 座標にアイテムを配置します。静的なメニュー、装飾、背景に最適。グリッドパターン用に count、direction、gap、repeatY に対応します。
ScrollableLayout
子レイアウトをスクロール対応で包みます。カスタムスクロールボタン(UP/DOWN/LEFT/RIGHT)はビューポートに固定され、コンテンツがスクロールしても動きません。長いアイテム一覧に最適。
FrameLayout
画面を独立したゾーンに分割します。各フレームは独自の位置・サイズ・子レイアウト(通常はスクロール可能)を持ちます。ダッシュボード、サイドバー、複数ペインのパネルに最適。各スクロールゾーンは、スクロールを正しく分離するために一意の IDを持つ必要があります。
PaginatedLayout
次へ/前へのナビゲーションボタン付きの個別ページ。複数ページのメニューや大きなコレクションに最適。
CompositeLayout
複数の子レイアウトを Z 順に重ねます。オーバーレイや複雑な UI に最適。
BookLayout
MiniMessage ページを書かれた本として描画します。Lore、ガイド、対話に最適。
MerchantLayout
入力アイテムと結果を伴う村人取引を定義します。ショップや取引に最適。
操作リファレンス
サポートされるすべての操作
| 操作 | トリガー |
|---|---|
LEFT | マウス左ボタン |
RIGHT | マウス右ボタン |
SHIFT_LEFT | Shift + 左クリック |
SHIFT_RIGHT | Shift + 右クリック |
MIDDLE | マウス中ボタン |
DOUBLE_CLICK | ダブルクリック |
NUMBER_KEY_1..9 | ホットバーキー 1-9 |
DROP | Q キー |
DROP_ALL | Ctrl+Q |
SWAP_OFFHAND | F キー |
用法: クリックアクションにはスロットごとの interactionList、メニュー全体のキーバインドには globalInteractions。
GUI タイプリファレンス
サポートされる 23 のインベントリタイプすべて
| タイプ | 説明 |
|---|---|
CUSTOM | 設定可能なチェスト(1-6 段) |
CHEST | 標準チェスト |
FURNACE | かまど |
BLAST_FURNACE | 溶鉱炉 |
SMOKER | 燻製器 |
BEACON | ビーコン |
ENCHANTING_TABLE | エンチャントテーブル |
GRINDSTONE | 砥石での修理 |
CARTOGRAPHY_TABLE | 地図の加工 |
ANVIL | 金床での修理/改名 |
LOOM | 機織り機(旗の模様) |
SMITHING_TABLE | 鍛冶台 |
STONECUTTER | ストーンカッター |
CRAFTING_TABLE | 作業台 |
BREWING_STAND | 醸造台 |
HOPPER | ホッパー |
DROPPER | ドロッパー |
DISPENSER | ディスペンサー |
BARREL | 樽 |
SHULKER_BOX | シュルカーボックス |
ENDER_CHEST | エンダーチェスト |
MERCHANT | 行商人の取引 |
BOOK | 書かれた本 |
ストレージと累積
- 標準ストレージ:クリックでアイテムを預ける/引き出します。すべてのクリック挙動は GUI Settings でグローバルに設定できます。
- ストレージプレースホルダー:
{stored_name}、{stored_amount}、{stored_max}はスロットのdisplayNameとlore内で動的に解決されます forceStorage: true(既定):スタックできないアイテム(剣・道具・防具)も保管できます- 累積モード:
requiredItem+requiredAmountを設定 —— アイテムが消費され、しきい値でonReachRequiredトリガーが発火します - グループストレージ:
groupエントリーを通じてプレイヤー間(例:島チーム)でストレージを共有します - 一時スロット:閉じると削除されるアイテム(
temporary = true) onFill/onEmptyトリガー:スロットの状態変化時に Typewriter アクションを発火します
詳細は GUI Storage Artifact を参照してください。
プレースホルダー
ストレージプレースホルダー
ストレージスロットの displayName と lore 内で解決されます:
| プレースホルダー | 説明 |
|---|---|
{stored_name} | 保管されたアイテムの表示名 |
{stored_amount} | スロット内の現在のアイテム数 |
{stored_max} | スロットの最大容量 |
エンジンプレースホルダー
GUI のタイトルやアイテムの Lore も、@Placeholder フィールドを通じて Typewriter エンジンのプレースホルダーと PlaceholderAPI に対応します。
コマンド
この拡張は単独のコマンドを提供しません。すべてのメニュー操作は Typewriter のエントリーを通じて行われます。
権限
カスタム権限はありません。GUI へのアクセスは、Open GUI アクションを参照するエントリーによって制御されます。
依存関係
| Extension | 必須 | 用途 |
|---|---|---|
| (なし) | - | これは基盤となる拡張です。20 以上の他の拡張がこれに依存しています。 |
| PlaceholderAPI | 任意 | タイトル・名前・Lore 内の @Placeholder フィールド用。 |