はじめに
ここではダミーアイテムの作り方を通して、カスタムアイテムを作る上で最低限必要な基本部分の実装をまとめています。
以下の環境ではこの作り方を基本としていますので、この環境に倣ってご紹介します。
カスタムアイテムの作り方には大きく分けて以下の2種類があります。
- ①既存のアイテムにデータ値を付与
-
弓や矢などの装備アイテムにユニークなデータ値を付与する事により、ターゲットセレクタ等で一意の判定を行います。
データ値の付与の方法は>> ルートテーブルの書き方のページでご紹介していますのでそちらをご覧ください。 - ②アイテムを新規で作成
- 今回ご紹介する方法です。アイテムIDを新規で割り当てて実装します。
定義ファイルの内訳
カスタムアイテムを作るためにはビヘイビアパックとリソースパックの両方が必要になりますが、最低限以下の3ファイルを実装すれば完了します。
ここではcustomize:dummy_item
というアイテムIDを使う想定でファイル名を記載しています。
/<ビヘイビアパックのルート>
/items
dummy_item.json
/<リソースパックのルート>
/texts
en_US.lang
/textures
item_texture.json
定義ファイルの内容
ビヘイビアパック
{
"format_version": "1.20.50",
"minecraft:item": {
"description": {
"identifier": "customize:dummy_item",
"menu_category": {
"category": "equipment",
"group": "itemGroup.name.sword",
"is_hidden_in_commands": false
}
},
"components": {
"minecraft:icon": {
"texture": "dummy_item"
},
"minecraft:display_name": {
"value": "item.customize:dummy_item.name"
}
}
}
}
上記のformat_version
とminecraft:item
の項目は固定だとお考えください。
- ・description
-
- identifier
- アイテムIDを設定します。
- menu_category
-
menu_category
ブロック自体が未定義の場合はデフォルトでitems
(アイテム)カテゴリに表示されます。- category
-
クリエイティブモード時にアイテムを表示するメニューカテゴリを文字列で設定します。
設定できる値は以下の通り。- construction(構築)
- equipment(所持品)
- items(アイテム)
- nature(性質)
- none(指定なし)
none
の場合は特別で、group
やis_hidden_in_commands
の設定に係わらずメニュー上には表示されなくなりgive
コマンドも使えませんが、loot
コマンドによる取得は可能です。
loot
コマンドで利用できるようにするには>> ルートテーブルの書き方のページでご紹介したJSONデータを作成しておく必要があります。 - group
-
アイテムグループを文字列で設定します。
category
の内容と一致していないと認識されないので注意が必要です。
例えば"category": "equipment"
の時、"group": "itemGroup.name.sword"
は認識されますが、"group": "itemGroup.name.boat"
は認識されません。
ちなみに、元々プラスマークが付いているグループを指定しないと意味はないようです。 - is_hidden_in_commands
-
アイテムをコマンドで利用できるかどうかを設定します(true:利用不可、false:利用可能)。
設定がtrueであってもloot
コマンドは利用できます。
- ・components
-
このブロックでアイテムが持つさまざまな性質や機能を定義する事ができるので、見た目以外の部分でオリジナルコンテンツを作る時はこの部分の定義がメインになるでしょう。
定義内容についての詳細は以下の>> コンポーネント定義の項目をご覧ください。
リソースパック
item.customize:dummy_item.name=ダミーアイテム
ここではアイテム名を定義します。
カスタムエンティティを作成する場合と同様にen_US.lang
ファイルが規定の言語ファイルになります。
{
"resource_pack_name": "family-customize",
"texture_name": "atlas.items",
"texture_data": {
"dummy_item": {
"textures": "textures/items/dummy_item"
}
}
}
上記のresource_pack_name
、texture_name
、texture_data
の項目は基本的に固定です。
resource_pack_name
の値にはあらかじめmanifest.json
内のリソースパック名であるheader.name
の値を入れておく必要があります。
- ・texture_data
-
このデータブロックに各アイテムのテクスチャファイルへのパスを列記します。
アイテムIDをキーとしたデータブロック内でtextures
キーの値としてパス(.png
の拡張子は省く)を設定します。
テクスチャファイルは、ここで指定したパスへ格納する必要があります。
アイテムIDのキーにはネームスペースを含めずに指定するので、他と被らないアイテムの命名をお勧めします。
テストしてみる
ここまで定義できればダミーアイテムとしての最低限の実装は完了です。
この時点で正しくアイテムを取得できるのかテストしておいた方がいいでしょう。
但し今のままでは取得できたとしても透明のままなので目視で確認する事ができません。
そこで以下の手順に従ってテストを進めてください。
①ダミー画像を設置
リソースパック内のtextures/items
の場所にダミー画像を格納してください。
動作を確認するだけであればバニラのリソースパック内にあるtextures/items/ender_pearl.png
(エンダーパール)あたりを使っておけば、わざわざ作る必要がないので手間が省けるでしょう。
textures/item_texture.json
内のtextures
の項目で設定したdummy_item
という名前がファイル名になるのでdummy_item.png
という名前にしておきます。
②コマンドで召喚する
コマンド行でgive @s customize
というところまで入力すると、入力補助の機能が働いて以下の赤枠部分のように選択できるアイテムIDが表示されるはずです。
これが表示されればJSONファイルが正しく認識されています。
後は実際にgive
コマンドを使って取得すると以下のように表示されます。
アイテムにカーソルを合わせた時にtexts/en_US.lang
のファイルで定義しておいたアイテム名が表示されるかどうかも確認しておきましょう。
あとは適当なタイミングでテクスチャファイル(今回の場合はリソースパック内のtextures/items/dummy_item.png
)を正式なテクスチャファイルで入れ替えておいてください。
コンポーネント定義
これまでの設定でベースの部分は出来上がりました。
あとは用途に応じてビヘイビアパック内にあるitems/dummy_item.json
ファイルのcomponents
ブロックに都度必要な定義を追加していく事になります。
ここではcomponents
ブロックのうち本環境で汎用的に使っている部分だけをピックアップしておきます。
- ・minecraft:icon
-
- texture(デフォルト:なし)
-
リソースパック内の
textures/item_texture.json
ファイルに定義済のキーを設定してテクスチャファイルの場所を指示します。
- ・minecraft:display_name
-
- value(デフォルト:なし)
-
リソースパック内の
texts/en_US.lang
ファイルに定義済のキーを設定する事で、そのキーに設定されているアイテム名が表示されます。
- ・minecraft:can_destroy_in_creative(デフォルト:true)
- クリエイティブモード時にアイテムがブロックを破壊できるかどうかを設定します(true:破壊可能、false:破壊不可能)。
- ・minecraft:damage(デフォルト:0)
- アイテムによる攻撃時のダメージ量を設定します。
- ・minecraft:hand_equipped(デフォルト:false)
-
アイテム装備時の持ち方にするかどうかを設定します(true:装備アイテム、false:装備品以外)。
▼trueの時
プレイヤーが向いている方向に対して直線的な向きになり、少しサイズが大きく見えます。
▼falseの時
プレイヤーが向いている方向に対して90度回転した向きになり、少しサイズが小さく見えます。
- ・minecraft:glint(デフォルト:false)
-
エンチャント付与状態の輝きのレンダリングの有無を設定します(true:レンダリング有り、false:レンダリング無し)。
エンチャントを付与していなくても適用されます。 - ・minecraft:enchantable
-
アイテムに適用できるエンチャントの種類を設定します。
- slot(デフォルト:なし)
-
エンチャントの種類を文字列で設定します。
例:sword、bowなど - value(デフォルト:なし)
- エンチャントの値を設定します。とりあえずゼロで問題ないようです。
基本的に定義されていないデータブロック、および値は暗黙的にデフォルト値が適用されます。
おわりに
本環境では以下のページでご紹介させて頂いたコンテンツ内で、今回ご紹介した方法を使ってアイテムを実装しています。