【マインクラフト（統合版）】発射アイテムの作り方まとめ

# はじめに

ここでご紹介させて頂く発射アイテムというのは、弓やクロスボウなどのような武器で遠隔攻撃を行うアイテムの事を指しています。

なお、基本的な部分は以下のページでダミーアイテムが実装済みである事を前提にしています。

https://qiita.com/glasses_seven/items/b41797e3df3325c3fab5/

以降では`components`ブロックのJSONデータの内容を「汎用ブロック」「アニメーション設定」「発射機能設定」の３つのパートに分けて発射アイテムの作り方をご紹介します。

:::note info
「汎用ブロック」とは、上記ページの[&gt;&gt; コンポーネント定義](https://qiita.com/glasses_seven/items/b41797e3df3325c3fab5#コンポーネント定義 "ダミーアイテムの作り方（コンポーネント定義）")の項目でご紹介させて頂いた`components`ブロックの便宜上の呼称です。
:::


# 定義ファイルの内容

以下のファイルはダミーアイテムの実装を元に必要な定義を追加したものです。

```json:<ビヘイビアパック>/items/dummy_item.json
{
    "format_version": "1.20.50",
    "minecraft:item": {
        "description": {
            "identifier": "customize:dummy_item",
            "menu_category": {
                "category": "items"
            }
        },
        "components": {

            // 汎用ブロック -----START
            "minecraft:icon": {
                "texture": "dummy_item"
            },
            "minecraft:display_name": {
                "value": "item.customize:dummy_item.name"
            },
            "minecraft:can_destroy_in_creative": false,
            "minecraft:hand_equipped": true,
            "minecraft:damage": 6,
            "minecraft:glint": true,
            // 汎用ブロック -----END

            // アニメーション設定 -----START
            "minecraft:use_animation": "bow",
            "minecraft:use_modifiers": {
                "use_duration": 1.6,
                "movement_modifier": 0.35
            },
            // アニメーション設定 -----END

            // 発射機能設定 -----START
            "minecraft:shooter":{
                "ammunition" :[{
                    "item" :"minecraft:arrow",
                    "use_offhand" :true,
                    "search_inventory" :true,
                    "use_in_creative" :true
                }],
                "max_draw_duration" :0.1,
                "scale_power_by_draw_duration" :true,
                "charge_on_draw" :false
            },
            "minecraft:cooldown": {
                "category": "dummy_item",
                "duration": 1.0
            }
            // 発射機能設定 -----END

        }
    }
}
```

上記のコメントのように、大きく分けて「汎用ブロック」「アニメーション設定」「発射機能設定」の３つのパートに分けています。

以下ではパート分けしたそれぞれの内容をみていきます。


# 汎用ブロック

## ・minecraft:icon

<dl>
    <dt>texture（="dummy_item"）</dt>
    <dd>
        テクスチャファイルの所在を表すキーを設定しています。
    </dd>
</dl>

## ・minecraft:display_name

<dl>
    <dt>value（="item.customize:dummy_item.name"）</dt>
    <dd>
        以下の<a href="#多言語設定">&gt;&gt; 多言語設定</a>の項目で設定しているキーの名前を設定しています。<br />
        この多言語設定で登録されているキーの値がアイテム名として表示されます。
    </dd>
</dl>

## ・minecraft:can_destroy_in_creative（=false）

クリエイティブモード時にブロックを壊さないようにfalseを設定しています。

## ・minecraft:hand_equipped（=true）

装備品としてtrueを設定しています。

## ・minecraft:damage（=6）

攻撃した時のダメージを設定しています。

## ・minecraft:glint（=true）

カスタムアイテムである事を表現するため、レンダリングがかかるようにtrueを設定しています。


# アニメーション設定

## ・minecraft:use_animation（="bow"）

アニメーションの種類を指定します。
今回は矢を射るアイテムなので`bow`を指定しています。

## ・minecraft:use_modifiers

アイテムを使用するまでにかかる時間を指定します。
ここでは[&gt;&gt; 食料アイテム](https://qiita.com/glasses_seven/items/633a9c4a3ad9c4b13d21/ "食料アイテムの作り方")の設定を流用しています。

アニメーションの種類と定義の詳細は以下のページをご覧ください。

https://qiita.com/glasses_seven/items/93ffdf68edb5e1f806bc/

https://qiita.com/glasses_seven/items/8d87b5f6b8ccea706dce/


# 発射機能設定

## ・minecraft:shooter

発射機能特定の設定項目です。
<dl>
    <dt>ammunition</dt>
    <dd>
        発射時に消費されるアイテムを指定します。<br />
        <dl>
            <dt>item（="minecraft:arrow"）</dt>
            <dd>
                ここには補充アイテム（発射時にアイテムスロット上で消費するアイテム）を指定します。今回は矢のアイテムを設定しています。<br />
ネイティブなアイテムを使う場合にはこれで問題ありませんが、補充アイテムとしてカスタムアイテムを指定する場合、および発射体エンティティとしてカスタムエンティティを使う場合は<a href="https://qiita.com/glasses_seven/items/6bcd386abd74db01e450/">&gt;&gt; 発射体エンティティ</a>のページをご覧ください。
            </dd>
            <dt>use_offhand（=true）</dt>
            <dd>
                trueの場合、オフハンドでアイテムを使用できます。<br /><br />
            </dd>
            <dt>search_inventory（=true）</dt>
            <dd>
                trueの場合、インベントリからアイテムを検索できるようになります。<br /><br />
            </dd>
            <dt>use_in_creative（=true）</dt>
            <dd>
                trueの場合、クリエイティブモードでも使用できます。<br /><br />
            </dd>
        </dl>
    </dd>
    <dt>max_draw_duration（=0.1）</dt>
    <dd>
        <code>scale_power_by_draw_duration</code>を設定している場合、ここで設定した時間（恐らく秒数）を超えるまでチャージしないと自分に当たるので注意が必要です。<br /><br />
    </dd>
    <dt>scale_power_by_draw_duration（=true）</dt>
    <dd>
        チャージ時間に応じて投げの威力が増加するかどうかを設定します。<br />
        trueの場合、長く押し続けるほど放した時のパワーが大きくなり、アニメーションの<code>use_modifiers</code>設定に関わらず右クリック状態を解除した時点で発射されます。<br /><br />
    </dd>
    <dt>charge_on_draw（=false）</dt>
    <dd>
        trueの場合、１回目のチャージでクロスボウのように溜めを作り、２回目のアクションで発射します。<br />
    </dd>
</dl>

## ・minecraft:cooldown

アイテムのクールダウン時間を指定します。
このブロックを設定していると、発射後のクールダウン時間内では再発射できなくなります。
また、右クリック状態を長押ししている間も発射されません。

<dl>
    <dt>category（="dummy_item"）</dt>
    <dd>
        このアイテムのクールダウンの種類を文字列で設定します。<br /><br />
    </dd>
    <dt>duration（=1.0）</dt>
    <dd>
        一致するカテゴリを持つアイテムが再び使用可能になるまでのクールダウン時間（秒単位）を設定します。
    </dd>
</dl>


# 多言語設定

カスタムエンティティの場合と同様に以下のファイルでアイテム名を定義しています。

```text:<リソースパック>/texts/en_US.lang
item.customize:dummy_item.name=ダミーアイテム
```


# おわりに

完成イメージは次の通り。
今回は木の棒をアイテム画像に使用しています。

![完成イメージ](https://socket-manager.github.io/document/minecraft-contents/img/custom-item-shoot/shoot-animation.gif "完成イメージ")

ここでご紹介させて頂いた作り方は以下のアイテム実装時に応用しています。

https://qiita.com/glasses_seven/items/3135aab823428dcc708e/

https://qiita.com/glasses_seven/items/ca0c5c8e4f599a551f1f/

https://qiita.com/glasses_seven/items/556927227356043752a2/

https://qiita.com/glasses_seven/items/6f125a1d45f5d9cef538/

https://qiita.com/glasses_seven/items/88f9e2fea056172d41b7/

https://qiita.com/glasses_seven/items/e3cf4ae07ce1c67383e1/

https://qiita.com/glasses_seven/items/129d40545884750e4e78/

https://qiita.com/glasses_seven/items/fa09b1f4ef3779dd692d/

https://qiita.com/glasses_seven/items/8fb6f96a829a449d4ad3/