はじめに
この記事は Equipment についてプラグインの側からできることについて書いたものです。
定義ファイルの書き方やモデルの作成方法などについては解説していませんので予めご了承下さい。
この記事は主に PaperMC の JavaDoc を基にして書かれています。
そのため Spigot などでは実装や挙動に多少の差異が含まれている可能性があります。
PaperMC JavaDoc 1.21.3 EquippableComponent
EquippableComponent とは?
Minecraft Java Edition 1.20.5 か 1.21 あたりで追加された、アイテム装着時に色々な効果をもたらす動作の定義を行うコンポーネントのこと。
名前が近い EquipmentSlot とは別物です。
ItemMeta
のフィールドであり、API 利用者側での初期化はできません。
効果やその発動条件などはほぼすべてデータパック内で管理するため、プラグイン側で出来ることはあまりありません。
プラグインからできること
- データパック側で作成した定義を(取得・アイテムに適用)する
- 装着可能なエンティティの種類を(取得・設定)する
- 装着可能な装備スロットを(取得・設定)する
- ダメージを受けた際に耐久が削れる(かどうかを取得・ように設定)する
- ディスペンサーで射出して装備できる(かどうかを取得・ように設定)する
- 装備したときにならす音を(取得・設定)する
- 装着したときの外観に適用するモデルを定義したファイルの名前空間を(取得・設定)する
- 装備をインベントリ内などで右クリックしたときに、既存の防具と同じように装着される(かどうかを取得・ように設定)する
装着可能なエンティティの制限、装着時の音、スロット制限以外では真偽値を取得・設定するか、名前空間 (NamespacedKey) を指定する以外できることがありません。
使用例
データパック datapack-name
の assets/datapack-name/models/equipment/namespace.json
に配置された定義ファイルに記載されている内容を鉄のレギンスに適用する例
val item = ItemStack(Material.IRON_LEGGINGS)
item.editMeta { meta ->
meta.setEquippable(meta.equippable.apply {
slot = EquipmentSlot.LEGS
model = NamespacedKey("datapack-name", "namespace")
}
})
datapack-name
の部分にはデータパックの名前空間(assets/~~~/models
の ~~~
)を、"namespace" には定義ファイルを示す文字列を入れます。(assets/~~~/models/equipment/***.json
の ***
)
定義ファイルで humanoid
, humanoid_leggings
といったようにきちんと定義をしていると、上記のコードで設定したアイテムを装備したときの外観が変わります。