Cosmetics
概要
Cosmetics を使うと、プレイヤーは着飾ったり、装備をカスタマイズしたりできます。2 種類のコスメティックがあります。エンティティコスメティックは、プレイヤーに追従する 3D モデル(帽子、バックパック、翼、光輪)で、パーティクルを付けることもできます。アイテムコスメティックは、プレイヤーが持つ実際のアイテム(防具や剣など)のモデルを変更するため、新しい見た目は、アイテムを手に持ったとき、身につけたとき、ドロップしたときにも表示されます。別のスキン機能は、プレイヤーが手に持っているアイテムに、ラップを適用します。
プレイヤーは、カテゴリごとに 1 つのタブがあるワードローブメニューで、コスメティックを選びます。コスメティックが利用可能になるのは、権限がない場合、プレイヤーがその権限を持っている場合、または管理者や別のエントリによって解放された場合です。装備中と解放済みのコスメティックは、プレイヤーごとにアーティファクトに保存されます。
この拡張機能は、BTC ビルドの TypeWriter(BTC Core、Paper/Folia)上で動作し、ここでは参考情報として文書化されています。バージョン 0.0.2 は初期のリリースです。
機能
- エンティティコスメティック — 任意のエンティティ定義(アイテムディスプレイ、BetterModel のモデルなど)を、体や頭に対する相対位置、または固定位置で、プレイヤーに取り付けます。
- アイテムコスメティック — 一致するアイテムの
item_modelと、身につけたときの見た目を置き換え、コスメティックが外されると元に戻します。 - パーティクル — コスメティックに、パーティクルエフェクトを取り付けます。
- カテゴリとタブ — コスメティックをカテゴリにまとめ、カテゴリごとに 1 つのタブを設けます。所有状況によるフィルター(すべて、所有、未所有)があります。
- カテゴリごとに 1 つ — プレイヤーは、カテゴリごとに同時に 1 つのコスメティックを身につけます。
- 解放 — 無料、権限による、コマンドによる、または他のエントリによる解放。
- スキン — 手に持っているアイテム用のラップ。専用のメニューで選び、アイテムをドロップすると外れます。
- エンティティへのコスメティック — エンティティデータを使って、NPC などのエンティティにコスメティックを取り付けます。
- プレースホルダーとファクト — 他のプラグインに数を表示し、criteria で所有状況をテストします。
インストール
- 両方のメニューが使う GUI 拡張機能(BTC ビルドでは
GuiAndDialogs)をインストールします。 - エンティティコスメティック用に、TypeWriter の Entity 拡張機能、またはエンティティ定義を提供する別の拡張機能をインストールします。アイテムコスメティックとスキンには必要ありません。
- 任意: アイテムコスメティックが CraftEngine のアイテムを対象にする場合は CraftEngine を、コスメティックをアクティブなプロファイルに追従させる必要がある場合は Profiles 拡張機能をインストールします。
- Cosmetics の JAR を
plugins/Typewriter/extensions/に置き、サーバーを再起動します。 - リソースパックにモデルを用意します。アイテムコスメティックとスキン用の
item_modelキー(Minecraft 1.21.4 以降)と、身につけた防具の見た目用のassets/<namespace>/textures/entity/equipment/のテクスチャです。
はじめに
プレイヤーが権限で解放する帽子を作成します。
- TypeWriter の Web パネルで manifest ページを開き、Cosmetic Category エントリを追加します。名前を
Hatsにして、iconを選びます。 - Cosmetic Definition エントリを追加します。
categoryにカテゴリエントリの ID(ID がない場合は名前)、priority、menuIcon、permission(たとえばcosmetics.hat.top_hat)を設定します。 modelで、エンティティ定義(たとえば帽子のモデルを持つアイテムディスプレイ)を参照します。rotationModeをRELATIVE_TO_HEADに設定し、offsetとrotationOffsetを調整します。- 装備中と解放済みのコスメティックが保存されるように、Player Cosmetics アーティファクトを追加します。
artifactIdは、Web パネルが生成するままにしておきます。 - BTC Cosmetics Menu アクションを追加します。メニューの項で説明する 5 つの
cosmetics_button:マーカーを使ってlayoutPoolでレイアウトを作成し、共通のメニューの土台を使う場合はbaseMenuIdを設定します。 - パブリッシュします。テスト用のプレイヤーに権限を与えるか、
/tw cosmetics give <player> <cosmetic entry id>を実行し、/tw cosmeticsを実行して、帽子を装備します。
解放リスト、装備リスト、give コマンド、Has Cosmetic ファクトはすべて、cosmeticId フィールドではなく、コスメティックのエントリ ID で識別します。cosmeticId フィールドは、メニュー内の {cosmetic_id} トークンとして表示されるだけです。
仕組み
定義は、itemModel または equipmentAssetId を持ち、さらに applicableCraftEngineIds または applicableItems を列挙している場合に、アイテムコスメティックとなります。それ以外の定義はすべてエンティティコスメティックで、model を使います。アイテムコスメティックは、更新のたびに、プレイヤーのインベントリ内の一致するアイテムに適用され、元のモデルは、復元できるようアイテムに保持されます。
メニュー
BTC Cosmetics Menu は、Cosmetic Category エントリから生成された、カテゴリごとに 1 つのビューを持つ GUI エントリです。コスメティックが使っていても、宣言されていないカテゴリは、それでもタブとして表示されます。レイアウトに、タグ cosmetics_button:<TYPE> で、次のマーカーを置きます。
| マーカー | 場所 | 動作 |
|---|---|---|
CATEGORY_TAB | 繰り返し可 | カテゴリごとに 1 つのタブ。トークン: {category_id}、{category_name}、{owned}、{total}。 |
COSMETIC_SLOT | 繰り返し可 | アクティブなタブのコスメティックごとに 1 つのスロット。priority 順に並びます。クリックで装備し、すでに身につけている場合は外します。未所有のコスメティックは表示されますが、反応しません。トークン: {cosmetic_id}、{cosmetic_name}、{category_name}、{state}。 |
SORT_TOGGLE | 1 回 | すべて、所有、未所有を切り替えます。トークン: {current_filter}。フィルターは、プレイヤーが離れるとリセットされます。 |
CLEAR_CATEGORY | 1 回 | アクティブなタブのコスメティックを外します。 |
PAGE_NAV | 1 回 | 左クリックで次のページ、右クリックで前のページ。トークン: {page}、{total_pages}、{page_indicator}。1 ページで足りる場合は非表示になります。 |
categoryView は、カテゴリごとに複製されるテンプレートで(その名前には {category_name} と {category_id} が使えます)、categoryViewIdPrefix(デフォルトは cosmetic_)は、ビュー ID のプレフィックスになります。閉じるマーカーや、ページ表示のマーカーはありません。閉じる操作は土台が処理し、カウンターは PAGE_NAV が担います。これらのボタンのデフォルトのテキストは、フランス語です。
スキンメニューは別個のもので、Open Skins Menu アクションまたは /tw skins で開き、プレイヤーのメインハンドにあるアイテムに適用できるスキンを表示し、Skins Menu Config エントリ(skinSlots、解放済み、アクティブ、ロック中のスキンのテンプレート、ボタン)でレイアウトされます。解放済みのスキンを左クリックすると適用され、ボタンでスキンを外したり、インベントリ内のすべての互換性のあるアイテムに適用したりできます。スキンが適用されたアイテムをドロップすると、スキンは失われます。
設定
コスメティックとスキンは、2 つのアーティファクトを通じて保存され、起動の約 1 秒後に読み込まれ、各変更の数秒後に保存されます。
- Player Cosmetics は、プレイヤーごとに、解放済みのコスメティックと、各カテゴリで装備中のものを保存します。
- Player Skins は、解放済みのスキンと、アイテムタイプごとに選択されているスキンを保存します。
Profiles 拡張機能がインストールされている場合、装備中のコスメティックは、UUID ではなく、プレイヤーのアクティブなプロファイルの下に保存されます。以前に UUID の下に保存されたコスメティックは削除されませんが、見つからなくなります。すでに実際のプレイヤーデータを保持しているサーバーでは、Profiles が存在する状態でインストールまたは更新する前に、キーを移行してください。解放は、常にプレイヤーの UUID ごとに保存されます。
コマンド
Cosmetics のコマンドは、TypeWriter のコマンドのサブコマンドであり、/typewriter または /tw で始まります。
| コマンド | 説明 |
|---|---|
/tw cosmetics または /tw cosmetics open | コスメティックのメニューを開きます。cosmetics.use が必要です。 |
/tw cosmetics give <player> <cosmetic> | エントリ ID で指定したコスメティックを解放します。cosmetics.admin が必要です。 |
/tw cosmetics remove <player> <cosmetic> | 解放を取り消します。cosmetics.admin が必要です。 |
/tw cosmetics reset <player> | プレイヤーのコスメティックを消去します。cosmetics.admin が必要です。 |
/tw skins または /tw skins open | 手に持っているアイテム用のスキンメニューを開きます。skins.use が必要です。 |
/tw skins give <player> <skin> | skinId でスキンを解放します。skins.admin が必要です。 |
/tw skins remove <player> <skin> | スキンの解放を取り消します。skins.admin が必要です。 |
/tw skins reset <player> | プレイヤーのスキンを消去します。skins.admin が必要です。 |
メニューのクリックは、拡張機能が処理する内部コマンド cosmetics ... と skins ... を使います。手で入力するためのものではありません。
権限
| 権限 | 許可される内容 |
|---|---|
cosmetics.use | /tw cosmetics と /tw cosmetics open。 |
cosmetics.admin | コスメティックの give、remove、reset。 |
skins.use | /tw skins と /tw skins open。 |
skins.admin | スキンの give、remove、reset。 |
コスメティックの permission | 1 つのコスメティックを解放する、自由に選べる権限。 |
スキンの permission | 1 つのスキンを解放する、自由に選べる権限。 |
プレースホルダー
これらは、cosmetics エクスパンションの MiniPlaceholders のタグです。cat をカテゴリの ID または名前に、id をコスメティックのエントリ ID に置き換えてください。
| プレースホルダー | 返す値 |
|---|---|
<cosmetics_total_unlocked> | プレイヤーが解放したコスメティックの数。 |
<cosmetics_total_available> | サーバー上のコスメティック定義の数。 |
<cosmetics_category_unlocked:cat> | カテゴリ内の、解放済みのコスメティック。 |
<cosmetics_category_total:cat> | カテゴリ内のコスメティック。 |
<cosmetics_is_unlocked:id> | true または false。 |
<cosmetics_is_active:id> | そのコスメティックが装備中の場合は true。 |
<cosmetics_active:cat> | カテゴリで装備中のコスメティックの ID。なければ空。 |
<cosmetics_category_unlocked:cat> が数えるのは、コマンドや他のエントリによって解放されたコスメティックだけで、権限によって利用可能になったものは含まれません。
エントリ
11 件のエントリー(拡張機能のソースから生成)。
アクション2
- BTC Cosmetics MenuBTC Cosmetics Menu
- Open Skins Menu ActionOpens the skins menu
ファクト2
- Has Cosmetic FactChecks if a player has a specific cosmetic unlocked.
- Has Skin FactVérifie si un joueur possède un skin spécifique.
エンティティデータ1
- Cosmetic Entity DataAttach cosmetics to an entity definition
アーティファクト2
- Player Cosmetics ArtifactStores player unlocked cosmetics
- Player Skins ArtifactStores player selected skins
マニフェスト4
- Cosmetic CategoryDéfinition d'une catégorie de cosmétiques (ex: Chapeaux, Capes)
- Cosmetic DefinitionDefine a 3D Cosmetic
- Skin DefinitionDéfinition d'une catégorie de skins (wraps) pour les items
- Skins Menu ConfigConfiguration du menu des skins
トラブルシューティング
メニューに「Aucun menu de cosmétiques n'est configuré」と表示される。 BTC Cosmetics Menu エントリがパブリッシュされていません。/tw cosmetics は、最初に見つかったものを開きます。
カテゴリのタブが空、またはコスメティックが見つからない。 コスメティックの category は、カテゴリエントリの ID(ID がない場合は名前)と、大文字と小文字を区別せずに一致している必要があります。どのカテゴリエントリとも一致しない名前でも、独自のタブが作成されます。
モデルがまったく表示されない。 エンティティコスメティックでは、model がエンティティ定義を参照している必要があります。itemModel はあるが、applicableItems も applicableCraftEngineIds もない定義は、アイテムコスメティックではなく、エンティティの経路にフォールバックします。アイテムコスメティックでは、itemModel のキーが、有効な名前空間付きのキー(namespace:path)でなければなりません。無効なキーは「Invalid itemModel」として一度だけログに記録されます。
インベントリではアイテムのモデルが変わるが、体では変わらない。 itemModel が変えるのは、手に持ったときとインベントリ内での見た目だけです。防具の場合は、equipmentAssetId も、部位の名前を除いた、素材の装備アセット(たとえば armors:enderite)に設定してください。身につけているアイテムがすでに equippable コンポーネントを持っている場合にのみ適用されます。
CraftEngine のアイテムにコスメティックが適用されない。 applicableCraftEngineIds に、CraftEngine の ID(たとえば armors:enderite_helmet)を使ってください。CraftEngine のアイテムは、素材ではなく ID で認識されるため、applicableItems では一致しません。
装備中のコスメティックや解放が失われる。 パブリッシュ済みのページに、アーティファクトを追加してください。ログには、アーティファクトがないこと、または「has no generated artifact id」と報告され、それらがないと何も保存されません。Profiles 拡張機能を最近インストールした場合は、上の警告を参照してください。
他のプレイヤーに自分のコスメティックが見えない。 エンティティコスメティックは、偽のエンティティです。ログに「Viewer method ... unavailable ... owner-only fallback active」と出ている場合、使用している Entity 拡張機能が追加の閲覧者を許可しておらず、コスメティックを見られるのはオーナーだけです。
/tw skins で、このアイテムに対するスキンがないと表示される。 手に持っているアイテムが、少なくとも 1 つのスキンを列挙している Skin Definition の applicableItems のアイテムと一致している必要があり、スキンメニューのエントリがパブリッシュされている必要があります。メッセージのテキストは、Skins Menu Config エントリから取得されます。
関連する拡張機能
- GUI — メニューのレイアウトと土台。
- Profiles — コスメティックを、アクティブなプロファイルに追従させられます。
- BetterModel — エンティティコスメティックとして使える 3D モデル。