【Minecraft BE Addon講座#3】アドオンの構造について～ビヘイビアとリソースの違い～

本ページは**アドオン講座#3、「基礎編、アドオンの構造について」**です。
目次や、この講座については[#1の記事](https://qiita.com/pencilya/items/7b7e68265151f42a51ac)をご覧ください。

#基礎編で理解してほしいこと！
アドオン講座の最初にあたる基礎編では、**アドオンに含まれるどんな内容をやるにも必要な知識**を書いていきます。
アドオンやりたい！となったら、まずこの基礎編からご覧ください！

* (#3)BE(統合版)のアドオンとは？Java版のModとの違い
* (#3)アドオンが機能する原理
* (#3)アドオンのファイル・フォルダ構成
* (#4)manifest.jsonの書き方
* (#4)完成したアドオンをマイクラに適用する方法

#統合版でアドオンが拡張機能として働く原理
[#1](https://qiita.com/pencilya/items/7b7e68265151f42a51ac)でも紹介したように、BE(統合版)でのアドオンはJava版のModと同じ立ち位置にいながら、その原理は異なります。

<details><summary>(長くなり過ぎたので中略)</summary>Java版では有志が製作したForgeなどのModとminecraftを中継するソフト(前提MOD)が存在するため、それらの前提MODが提供する開発用機能を用いて、Mod製作がなされています。
そのため、提供されている機能はもともと開発を意識したものであり、たいていのModを使って作りたいと思われがちな機能はそろっています(Java版のModは作ったことないので知らんけど情報)。
しかし、BE(統合版)では、Java版でいうところの前提MODの立ち位置にあったアプリBlockLauncherが、BEの度重なるアプデによって機能が減少し、衰退してしまいました。
BEでは好きなバージョンを指定して遊ぶことができないということも衰退を加速させました。
そこでMinecraft開発側が、開発ついでに用意したのがアドオンです(実際はついでではないですが、感覚としてはそんな感じです)。</details>

アドオンは基本的に、**すでにゲーム内にあるファイルや機能たちをうまく組み替えて上書きするもの**です。
そのため、基本的には、ゲームを構成するのに必要な機能だけしか使用することができません。
だからこの講座では、

* ゲーム内部でどんな機能が集まってマイクラの要素要素が動いているのか

を紹介した後、

* それをどのように活用すれば拡張機能としてModのように使えるか

を説明するという構造になります。

#アドオンのファイル・フォルダ構成
前述した特性から、まっさらなファイルにやりたいことを書いていくプログラミングと違い、アドオンでは、**元のファイルがすでにあって、それを上書きしていくのが基本**です。

じゃあ元のファイルとは何か？
それが~~**[公式が配布しているバニラのアドオン](https://www.minecraft.net/ja-jp/addons?ref=bm)**~~です。
まずはそれをダウンロードしてみましょう。
ページをちょっと下にスクロールすると、
![バニラ配布場所](https://cdn.discordapp.com/attachments/590590789533302816/888796992195678218/unknown2.png)
という文言がでてきます。
ここの`resource packs`と`behavior packs`のリンクを踏んでダウンロード開始です。

> 【2022/02/03更新】
公式の配布場所が変更になったみたいです。
**[公式バニラアドオンの新しい配布先](https://docs.microsoft.com/ja-jp/minecraft/creator/)**
一番下までスクロールすると
![バニラ配布場所](https://cdn.discordapp.com/attachments/590590789533302816/938759525903777802/unknowna.png)
がでてきます。
それぞれ`Vanilla Behavior Pack`と`Vanilla Resource Pack`から最新のバニラファイルが`.zip`でダウンロードできます。

ダウンロードが完了したら解凍して中身[^1]をながめてみましょう。
[^1]: これらのファイルはMinecraftゲーム内に存在するものです。これからこのファイルを変更していき、完成したら、ゲームに適用させれば、もともとゲームに入っているファイルを上書きして動作させることができるのです。ビヘイビアやリソースを適用させたとき、デフォルトのパックより上に表示されませんか？これが上書き(＝優先)という意味です。

以下はフォルダ構造と、何のためのファイルが入っているかの説明です。

```addon.mcaddon
behavior(.mcpack)/             
  -ビヘイビア、直訳で行動/挙動
  -つまりマイクラ内のものの動きを設定。
        /(animation_controllers)
                /[entity].animation_controllers.json
           -これがいわゆるアニコン。
           -バニラではリソースにのみ存在するが、
            ビヘイビアのアニコンとリソースのアニコンは別物で、
            できることも異なる。
        /(animations)
                /[entity].animation.json
           -アニメーション。
            アニコンまたはentity.jsonから呼び出せる。
           -バニラではリソースにのみ存在するが、アニコンと同様、
            できることが異なる。
        /entities
                /[entity].json
           -ビヘイビアの方のエンティティ。
           -エンティティがどんな行動をするのか決定する。
           -コンポネ編、Mob追加編でお世話になる。
           -個人的にentity.jsonと呼んでいるので、解説ででてきたら、
            ここのフォルダに入っている.jsonファイルのこと。
        /(functions)
                /[function].mcfunction
           -ファンクション。
           -コマンドを書くことができる。
           -バニラではフォルダが存在しないので、
            必要なときは自分で作成する必要あり。
           -詳しくはファンクション編にて。
        /items
                /[item].json
           -アイテムのコンポーネントはここ。
           -アイテム追加編でお世話になる。
        /loot_tables
           -ランダム要素の排出率決定のファイル。
           -敵のドロップ変更、装備変更とかはここ。
        /recipes
           -クラフトレシピの設定。
           -しばらく触ってないので変わってるかもしれないですが、
            既存のレシピ変更はできず、追加のみだった気がする。
        /scripts
          /client
                /[client].js
          /server
                /[server].js
           -これがscriptingAPI。
           -今現在まだWindows10版でしか実行できません。
           -clientはこのビヘイビアが入っている
            ワールドにいるプレイヤー全員が実行するスクリプト。
           -serverはワールド主のみが実行するスクリプト。
           -clientとserverでできることは異なります。
           -スクリプト編でお世話になります。
           -v1.18.20.21βで削除されたので、リリース版でもいずれ削除されます🥺(ぴえん)
        /spawn_rules
           -自然スポーンの設定。
           -暗かったらモンスターが湧くなどの設定。
        /trading
           -村人の交易レシピの設定。
        /manifest.json
           -超重要。
           -すべてのアドオンに含まれているファイル。
           -このアドオンが何たるかを記載する。
            言い換えれば、アドオンの自己紹介。
        /pack_icon.png
           -マイクラに導入した際に表示されるパックのアイコン。

resource(.mcpack)/
  -リソース、直訳で資源だが、実際の意味は感覚として見た目全般。
  -テクスチャパックというとリソースパックのこと。
  -テクスチャをはじめ、エンティティの(見た目上の)アニメーション、
   パーティクル、ゲーム内テキストなどもいじれる。
        /animation_controllers
           -アニメーションのコントローラー。
           -ビヘイビアのアニコンとは異なり、
            純粋にアニメーションを切り替えるための機能。
           -例えば、水の中にいれば泳ぐアニメーションに切り替えるなど。
           -慣習的なものだが、こちらをアニコンと呼ぶことは少ない。
        /animations
           -アニメーション。
           -エンティティのモデルをどういう風に動かすかを設定。
           -例えば、殴りアニメーションでは腕を回すなど。
        /attachables
           -Mobが装着して見た目が変わるものの設定。
        /entity
           -リソースのエンティティ。
           -エンティティのテクスチャ割り当て、
            モデル(geometry)割り当て、
            使用するアニメーションコントローラー、
            使用するアニメーション、
            使用するレンダーコントローラーの設定など。
           -Mob追加編でも必要。
        /fogs
           -直訳で霧。バイオームごとの水の色の変更？ぽい。
        /models
          /entity
                /[entity].geo.json
           -ここがモデル、ジオメトリ(geometry)。
           -テクスチャがぺたぺた貼り付けられるもの(形)を作っている。
           -Mob追加編で扱う。
        /particles
           -テクスチャと発生させるパーティクルを結びつける。
           -パーティクルも自作できるらしい。
        /render_controllers
           -ジオメトリ、マテリアル、テクスチャを結びつけるコントローラー。
           -あんまり理解してないけど必要なもの。
           -Mob追加編でも必要。
        /sounds
           -音楽(BGM)、効果音(SE)がたくさん入っている。
           -設定ファイルもあるが、いじったことがない…。
           -音楽、効果音を追加する場合にはいじる必要がありそう。
        /texts
          /ja_JP
             /font
                /glyph_~~.png
          /ja_JP.lang
           -ゲーム内テキスト。
           -言語別になっている。
           -日本語はja_JP.lang
           -fontではフォントを自分で書いたり、
            新しい文字を追加できる。
           -すごいuiが実装されているアドオンの大体が
            新しい文字の導入によるもの。
        /texture_sets
           -からっぽなのでよくわからないし、
            使ったこともない。
           -[追記]レイトレーシングなど、
            レイヤーを使うときに使うっぽいです！
        /textures
           -テクスチャの名前とテクスチャ画像を結びつけるファイル、
            テクスチャの画像が含まれているフォルダ。
           -Mob追加編、アイテム追加編でお世話になります。
        /ui
           -文字通りuiの設定です。
           -要らないボタンを消したり、title表示の位置を変更したり、
            新しくボタンを追加する場合はここを変更することになります。
        /manifest.json
           -ビヘイビアと同じく超重要。
           -すべてのアドオンに含まれているファイル。
           -このアドオンが何たるかを記載する。
            言い換えれば、アドオンの自己紹介。
        /pack_icon.png
           -マイクラに導入した際に表示されるパックのアイコン。
```

※(フォルダ名)はバニラに存在しないフォルダです。使用するときは自分で新規フォルダ作成する必要があります。
※[ファイル名]は内容が分かりやすい名前が付けられています。要するに自分で作成するときは自由に名前を付けることができます。

だいたいこんな感じです。
この講座内で解説するものに関しては、それぞれの解説編で詳細を説明しています。

だいぶ長くなってしまったので、manifest.jsonの書き方は[次回#4](https://qiita.com/pencilya/items/bb66a6e7ca1ace88355b)に回します。
これからも、書いている途中で分量調整や、より分かりやすくするための説明の順序入れ替えなどで、ナンバーが変わることがありますが、随時[#1の目次](https://qiita.com/pencilya/items/7b7e68265151f42a51ac)で変更していくので、そちらを確認ください。

それではまた次回！