【Minecraft BE Addon講座#1】Minecraft BE(統合版)のAddon講座を作りたい！～目次、経緯と内容のまとめ～

この記事ではタイトルの通り、MinecraftBEに対応するAddon講座についてどのように展開していくかについて触れ、その内容を結びつける目的のものです。具体的な内容についてはこの記事で触れないので、各記事をご覧ください。

#Minecraft BEのAddonとは
Minecraft Bedrock Edition(統合版)には、**Minecraft Java版のModに相当する拡張機能**として**Addon**が存在します。
しかし、詳しい話をすると、

* Java版は有志が開発して公開されているForgeなどを使ってModをゲームに適用させる

のに対して、

* BEは公式が提供しているアドオンのテンプレートを変更する形でゲームに変更を適用する

という違いがあります。

BEにもBlockLancherというForgeのようなアプリが存在していましたが、自由にバージョンを選択できないまま、Minecraft側が頻繁なアップデートを繰り返した結果、衰退してしまいました。
そのような背景があるので、BEでは**自由に機能を実装することが難しく**、**公式が用意した機能のみをうまく組み合わせて作る必要**があります。

その限られた使える機能のうち、よく使用する、

* コンポーネント(`behavior/entities/[entity].json`内のComponent Group)
* ファンクション(`behavior/functions/[function].mcfunction`と`tick.json`)
* アニコン(ビヘイビアのAnimation Controllerのコマンド的利用)
* スクリプト(ScriptingAPI, GameTest Framework)

についてを書いていきます。

ポイントは、
**①これらの機能がバニラ[^1]でどのように使われているのか**、
**②そしてそれをどのように利用するのか**、

です。

~~飽きの問題で、いつまで書き続けられるか分からないので、あまり期待せずにご覧ください…~~
[^1]: バニラとは、何も変更を加えていない状態のことを指します。[「minecraft バニラとは」](https://www.google.com/search?q=minecraft+%E3%83%90%E3%83%8B%E3%83%A9%E3%81%A8%E3%81%AF)と検索すれば詳しく分かると思います。

#講座を書こうと思った理由
* コマンドは解説記事/動画がたくさん存在するが、アドオンは開発を支援する目的の解説記事が少ない。
* アドオンに関する情報自体は存在する[^2]ものの、実用性に欠ける(=どうやって使えばものが作れるのかが分かりにくい)ため、敷居が高すぎる[^2]と感じた。
* ありがたいことに、アドオンを教えてほしいと言ってくださる機会が増え、一定の説明がどんな時でもできるといいなと思った。(個人的な理由)

これを教科書に説明できたらなと思っています。

[^2]: 例えば、 https://bedrock.dev/ などに、アドオンの中に含まれる要素のリストがあったり、どういう意味があるのかなどが記述されているが、英語なのはもちろんのこと、書き方についての情報がほぼ全くと言っていいほど書いておらず、もともとエンジニアをやってる人用なのかな…？という不親切っぷりなのです。。。

#対象技術レベル、必要知識
以下のことが分かっている前提で解説を書いていく予定なので、まだわからないよーって人はぐーぐるせんせいに聞いてみてください。
※結構条件厳しめなので、分からなくても落ち込まないでください。**ここでわざわざ解説しない理由はすでに解説してくれている人がたくさんいるから**です。探せば私よりわかりやすく教えている記事が見つかるはずです。

* (コンポネ後半#6以降)コマンド`/tag`が最低限分かる、下記表で前提"T"
* (ファンクション後半#10以降)コマンド`/execute`による実行主の変化が理解できる、下記表で前提"C"
* (スクリプト#14以降)`if`、「代入」、「変数の型」程度のJavascriptの基礎が分かる、下記表で前提"JS"
* (スクリプト#15)コマンド`/scoreboard`が最低限分かる

#目次
おおまかに上で記した4つの要素について触れていきます。
順序ですが、前提知識が少ないものから順番に並べています。
つまり、後半部分で前半部分の知識がないと「なにがなんやら」になる(？)可能性があります。

とはいえ、まずは**自分に必要なとこだけ読むのが吉**だと思います。
全部読もうとして**「なんか難しそうだからやめるかあ」ってなるのが一番もったいない**と思うので…。
下記表は、知りたい内容に対応するページだけをすべて読めば、ある程度のことが分かるように組み立ててあります。
###【講座概略】
|  | 編 | ページ | 前提 | 内容ざっくり |
|:--|:--|:--:|:--:|:--|
|基礎| 基礎編(A)  | 1, 3, 4  | なし | アドオンって何？どういう仕組みなの？どうやって書くの？  |
|応用| コンポネ編(B)  | 3~7  | A, T | エンティティの動きとかできることをいじれるように！  |
|応用| ファンクション編(F)  | 4, 8~10  | C | コマンドをアドオン内に書く！さようならコマンドブロック。  |
|応用| アニコン編(AC)  | 3~5, 8, 11~13  | A, B, C | コマブロだけではできなかった、コマンド実行の条件を大幅に拡張！ex)手に～を持っていたら、～を使ったら、飛んだら…etc  |
|応用※| スクリプト編(S)  | 3~4, 14~15, 16~18  | (B,) C, JS | これまでシステムに組み込めなかった、詳しい情報の取得と実行！ex)ダメージ、HPの取得、そのtitle表示、スコア代入、キルしたら実行…etc  |
|基礎| リソース基礎編(R)  |    | A | アイテムやMobに触るにあたって、リソースパックの一部を説明  |
|応用※| アイテム追加編  |    | A, B, R, AC | アイテムコンポーネント、新規アイテムの追加方法  |
|応用※| エンティティ追加編  |    | A, B, R | モデル、レンダーコントローラー、新規Mob追加方法  |
|発展| 発展編  |   | A, B, F, AC, S | できることを組み合わせれば、可能性は無限大！  |

###【各ページリンク】
リンク先が見つからないと出る場合、まだ編集途中か、限定公開になっています。
限定公開の場合、URLの`items`を`private`に書き換えると、仮完成のページを読むことができます。

1. [Addon講座を作りたい！～経緯と内容のまとめ～](https://qiita.com/pencilya/items/7b7e68265151f42a51ac) ←いまここ
1. [[前提] 技術を学ぶ上で](https://qiita.com/pencilya/items/ef71acec2c9630c88ab8)
1. [アドオンの構造について～ビヘイビアとリソース～](https://qiita.com/pencilya/items/a2b6debdf3e0a860688c)
1. [マニフェストの書き方](https://qiita.com/pencilya/items/bb66a6e7ca1ace88355b)
1. [エンティティとコンポーネントとは？～entity.jsonの書き方とコンポネ～](https://qiita.com/pencilya/items/89d0fdf6d575baea79c2)
1. [フィルターとは？/フィルターの書き方](https://qiita.com/pencilya/items/b45be36b12589f4dc7e3)
1. [コンポーネントグループの付与・削除](https://qiita.com/pencilya/items/c63ac2a6e34be38530fb)
1. [[復習] コマンドの実行主について～/executeコマンドの使い方～](https://qiita.com/pencilya/items/6a14dd03f2e6d7e272f7)
1. [ファンクションとは？/ファンクションの追加と実行](https://qiita.com/pencilya/items/ad0ad8a7ec0aec1cb314)
1. [アドオンだけでコマンドを実行する(常時実行)](https://qiita.com/pencilya/items/5c8ba7a7f60bb22cb8fc)
1. [アニコンとは？/アニコンの追加と実行](https://qiita.com/pencilya/items/0c7e5bdc285aca55ee4c)
1. [状態(state)の変化(トランジション)とMoLang](https://qiita.com/pencilya/items/52b9fd6eb19bb47d5f07)
1. [3発動の設定とアニメーションの活用](https://qiita.com/pencilya/items/103bb885fa9e4876d25c)
1. [ScriptingAPIとは？/サーバーとクライアントの違い](https://qiita.com/pencilya/items/ee200970aeb6cf0ac216)
1. [スクリプトの活用例～キルカウントを作ってみよう～](https://qiita.com/pencilya/items/686682f51477b7a01775)
1. [GameTestFrameworkとは？/マニフェストの書き方](https://qiita.com/pencilya/items/5bae0d2086939092a7f4)
1. [GameTestの活用例～コピー棒をつくろう～/GameTestリファレンスの読み方](https://qiita.com/pencilya/items/a2df981df9a78ce069a3)
1. [GameTestでUIをつくろう](https://qiita.com/pencilya/items/c38c00e8f86d40dabbda)
1. [発展] 技術の役割分担

###【前提条件】
基礎→応用(※難)→発展
C→コマンドの実行主がわかる、/executeコマンド
T→タグが分かる、/tagコマンド
JS→JavaScriptの基礎がわかる
A→基礎編、アドオンの基礎
B→コンポネ編、ビヘイビアの基礎がわかる
R→リソース編、リソースの基礎がわかる
F→ファンクション編、ファンクションがわかる
AC→アニコン編、アニメーションコントローラーがわかる

ざっと思いつく限りだとこんな感じです。増えたり減ったりしたらここに追記削除していきます。
やる気や素材の影響で、公開順番は目次の通りではないかもしれませんが、ぼちぼち書いていこうと思います。

また、最後になりますが、私もまだまだ完全に理解しているとは言い難いので、なにか技術的間違いや、間違った理解をさせてしまう可能性がある文章がありましたら、[Twitter(@pencilya_)](https://twitter.com/pencilya_)などでお知らせしてくださると助かります。必要であれば、追記という形で記事を改良する場合があります。