アドオンの作り方をゆるーく紹介 #アイテム追加編

# 最終目的
・アイテム・ブロックを追加する

# 情報
・これは備忘録だよ
・自分が追加のときとてつもなくつまずいたから作ったよ
・これはMinecraft バージョン1.19.41時点の情報だよ
　それ以降のバージョンで動かなくなっても保証しないよ
・サンプルコードはyamlで書いてるけどコメントアウト用だから本番はjsonにしてね

# 対象ユーザ
・マイクラを持っている人
・アドオンを作る気力がある人
・~~メンタルが強い人(エラーで悩まされたから)~~
・[アドオンとはなにか](https://minecraft.fandom.com/ja/wiki/Add-on)知っている人 ~~(説明がめんどくさいから)~~

# 略称
・ビヘイビアーパック･･･bp
・リソースパック･･･rp
・マインクラフト･･･マイクラ
・Java Edition(Java版)･･･JE
・Bedrock Edition(統合版)･･･BE

# れっつごー
まず最初に下記の図のようにフォルダ・ファイルを作ってね
階層はわかりやすいところでいいよ

sample_resource_pack ←アドオンの名前。最後に_rpってつけとくと分かりやすい。
┣manifest.json
┣pack_icon.png
┣textures
┃┣items
┃┃┗(アイテムの名前).png
┃┗item_texture.json
┗texts
　┗(対応させたい言語の名前).lang

sample_behavior_pack ←アドオンの名前。最後に_bpってつけとくと分かりやすい。
┣manifest.json
┣pack_icon.png
┣items
┃┗(アイテムの名前).json
┗recipes
　┗(分類用の名前)_(アイテムの名前)_recipe.json

# それぞれの説明
## リソースパック
### textures フォルダ
#### items フォルダ
##### (アイテムの名前).png
これはテクスチャだね
.pngじゃないとだめっぽい
16x16ぐらいが丁度いい

#### item_texture.json
item_texture.jsonはテクスチャを指定するよ
```yaml:item_texture.json
{
  "resourse_pack_name":"ここは基本何でもいい",
  "texture_name":"atlas.items", #これ固定ね
  "texture_data":{
    "テクスチャID(困ったらアイテム名でいいよ)":{
      "textures":"textures/items/itemsフォルダの中にある画像の名前(_topと.pngとか抜きで)"
    }
  }
}
```

### textsフォルダ
#### (対応させたい言語の名前).lang
.langはこういう形式で書くよ
```(対応させたい言語の名前).lang
(1行開ける)
item.(identifier).name=(表示したい名前)
```
identifierは(アイテムの名前).jsonのidentifierだよ
日本語はja_JP.lang
英語はen_US.lang
すべて設定するのがめんどい!って人は[ここ](#(アイテムの名前).json)を読みましょう
## ビヘイビアーパック
### items フォルダ
#### (アイテムの名前).json
アイテムの振る舞いを設定する
これが一番長い。根気強くね!!
```yaml:(アイテムの名前).json
{
  "format_version":"1.16.100", #おすすめ。これ以外にして動かなくなっても知らん(無責任)
  "minecraft:item":{
    "description":{
      "identifier":"アイテムのフルIDの設定",
      "category":"左のタブからConstruction:構築、Equipment:所持品、Items:アイテム、Nature:性質(デフォ)"
    },
    "components":{
      #設定しといたほうがいいやつ
      "minecraft:foil":false, #エンチャント品のように光らせるかどうか。true=光る　false=光らない。,
      "minecraft:hand_equipped":false, #武器のように持つか。trueかfalse。,
      "minecraft:max_stack_size":64, #どこまでスタックできるか。デフォは64。,
      "minecraft:stacked_by_data":false, #データ値の違うものをスタックするか。デフォはfalse(?)。,
      "minecraft:display_name":{
        #(対応させたい言語の名前).langでいちいち指定がめんどいっ！って人向け
        "value":"すべての言語で表示される名前を指定する。"
      },
      "minecraft:damage":10, #叩いたときのダメージ,
      "minecraft:repairable":{
        "repair_items":[
          {
            "items":["どのアイテムで耐久値を回復させるか。コマンドIDで指定する。JEのほうね"]
            "repair_amount":10, #回復する耐久値の数,
          }
        ]
      },
      #"minecraft:repairable"とセット
      "minecraft:durability":{
        "max_durability":100, #耐久値の量
        "damage_chance":{
          "min":100, #耐久値が減る確率の最小値
          "max":100  #耐久値が減る確率の最大値
        }
      },
      "minecraft:creative_category":{
        "parent":"クリエイティブでどこのグループに属するのか。すべて下にあるリンクにある。カテゴリーとは違う。"
      },
      #絶対に指定するやつ
      "minecraft:icon":{
        "texture":"item_texture.jsonで指定したテクスチャIDを書く。"
      },
      "minecraft:render_offsets":"fleshかapple。appleの動作確認はしてない。",
      ...
      #他にもいっぱいある。下のリンクでね
    }
  }
}
```
クリエイティブのグループとすべてのcomponentsはここ。

https://tokamcwin10.blog.jp/article-37836639#beha_component

### recipes
#### (分類用の名前)_(アイテムの名前)_recipe.json
(分類用の名前)は並べ替えられたときに見やすくするため。無くても良い
```yaml:(分類用の名前)_(アイテムの名前)_recipe.json
{
  "format_version":"1.16.100", #ここはmanifest.jsonと統一する
  #決まった形のレシピの場合
  "minecraft:recipe_shaped":{
    "description":{
      "identifier":"基本何でもいい。でもbpのidentifierと統一したほうがいいかも。",
    },
    "tags":["crafting_table"], #そのレシピがクラフトできるもののタグ。
                               #"furnace","smoker","campfire","stonecutter", "brewing_stand"
                               #  かまど    燻製器   たき火類  ストーンカッター  醸造台(ここで変えるだけでは意味がありません)
    "pattern":[
      " A ", #レシピのパターンを設定する。
      "A A", #1つの材料につき一つのアルファベットを書く。
      "A A"  #↑のアルファベットは同じ材料なら同じアルファベットで。
    ],
    "key":{ #指定したアルファベットがそれぞれなんの材料かを指定する
      "指定したアルファベット":{
        "item":"itemIDをJEかBE版マイクラのコマンドIDで書く。",
        "data":"基本は0。データ値を指定する。"
      }, 
      #...
      #アルファベットの種類の数だけ続ける。
    "result":{
      "item":"作った結果、できるもの。のbpで書いたアイテムのidentifier",
      "count":1 #それが何個できるかの指定。多分いくつでも行ける。(やり過ぎは禁物)
    }
  }
}
```




# 共通の説明
### pack_icon.png
.pngじゃないとだめっぽい
このファイルはどんな大きさでも丁度いいようになるらしい
### manifest.json
<strong>これいちばん重要</strong>
アドオンとマイクラに認識させるためのファイル
例
```yaml:manifest.json
{
  "format_version":"1.16.100", #自分がよく使うバージョン。これじゃいけないなんてことはない。
  "header":{
    "name":"パックの名前"
    "description":"パックの説明。バージョン書いてもいいかも。",
    "uuid":"パックを特定するためのもの。",
    "version":[0,0,1] #パックのバージョンを書く。
  },
  "modules":[
    {
      "description":"パックの説明。表示されない。謎。",
      "type":"rpならresources、bpならdata。",
      "uuid":"パックを特定するためのもの。",
      "version":[0,0,1] #パックのバージョンを書く。headerと統一するといいよ。
    }
  ]
}
```
uuidは[ここ](https://www.uuidgenerator.net/)で生成できる。
4つ要るのでまとめて生成すると楽。

# 終わりに
<strong>はい!　お疲れ様でした!!</strong>
アドオンを作るのは根気と時間がとても要るので大変です!
ですが、できたとき、マスターしたとき、とても嬉しかったり、MODのようなこともできるので
とても楽しいです!!
この講座の続きも作るつもりなので、よかったら見てね!
下に[リンク集](#リンク集)つけとくね!

# とらぶるしゅーてぃんぐ
## 動かなかった人へ。
### よくある間違い1
カッコ({})の数が足りない。
さっと確認できる[vscode](https://vscode.dev/)がいいよ。(web版)

### よくある間違い2
記述ミス
```yaml:例.json
{
  "format_version":"1.16.100",
  "minecraft:item":{
    "description":{
      "identifier":"sample:sample_item",
      "category":"Equipment"
    },
    "component":{ #←ここ!!
    #...
```
"components"が"component"になっています。
こういうのがよくあるので注意してください。
## その他
そういうのは質問で聞いてね!

# リンク集
| 目的 | どんな知識がいるか | リンク |
|:-:|:-:|:-:|
| アイテムを作りたい | アドオンとはなにか | 今ここ |
| ブロックを作りたい | アドオンとはなにか | まだできてないよ |
| テクスチャを変えたい | アドオンとはなにか | まだできてないよ |
| レシピ・ドロップアイテムを変えたい | アドオンとはなにか | まだできてないよ |

アイデアあったら質問とかで。