既存のエンティティを改造する場合は他のアドオンが同じエンティティを改造していると競合してしまいますし、やはり他と被らない独自のエンティティの追加が必要になります。
今回は追加することだけに焦点を当て、まずはAIやアニメーションも省いた極力シンプルなエンティティの追加を目指します。
ビヘイビアーパック
エンティティを追加するビヘイビアーパックを用意しましょう。manifest.jsonなどに関してはこの記事では特に説明しません。
構成
📂(ビヘイビアーパックのルートフォルダ)
├📁entities
│└📄custom_entity.json
└📄manifest.json
エンティティファイル
entitiesフォルダの中にJSONファイルcustom_entity.jsonを作ります。
これがエンティティを定義するファイルで、マインクラフトに新しいエンティティを登録します。
ファイル名は自由に付けて構いませんが分かりやすいようにエンティティ名、後述のエンティティIDを使うことが多いです。
AIもない、ほとんど空っぽのサンプルです。エンティティを追加する際のテンプレートとしても使えます。
{
"format_version": "1.21.44",
"minecraft:entity": {
"description": {
"identifier": "example:custom_entity",
"is_spawnable": true,
"is_summonable": true
},
"components": {
"minecraft:physics": {}
}
}
}
体力すら書いていませんが、省略した時はデフォルトで20(プレイヤーと同じ)になります。
JSONファイル内のプロパティについてそれぞれ簡単に解説していきます。
format_version
ファイルがどのバージョンで作られたかを示します。
マイクラにアップデートが来てもそのアドオンが正しく動作し続けるようにする目的があります。
基本的にアップデートで機能が増えていき、古いフォーマットを使っていると新しい機能(コンポーネントなど)が使えないということもあります。
統合版はマイクラのバージョンを下げることが公式にサポートされていないこともあり、わざわざ古いバージョンで作る理由も基本的に無いので、新しく作る際にはその時点の最新のバージョンを指定するのが無難です。
identifer
エンティティのIDです。
コロンで区切られているこの文字列は名前空間IDと呼ばれ、IDの重複の回避やどのアドオンのものなのかをわかりやすくする目的などがあります。
コロンの左側が名前空間で、既存のエンティティはminecraft:となっています。
エンティティの追加をする際は名前空間にminecraft:は使用できません。作者名やアドオン名で統一した名前をつけることが多いです。
is_spawnable・is_summonable
is_spawnableをtrueにすることでスポーンエッグを使えるようにします。 is_summonableはsummonコマンドで召喚できるかどうかを設定できます。
両方とも省略できますがそのときのデフォルト値はfalseであり、スポーンエッグでもコマンドでも出せなくなります。
minecraft:physics
物理演算(重力、衝突など)に関するコンポーネントです。
このコンポーネントが無くてもエンティティの追加自体はできますが、デフォルトで重力を受けない設定になります。
今回のようなAIを持たないエンティティが無重力だと何かの拍子で殴ったりしたときに、ノックバックで飛び上がった勢いそのままにどこかへ飛んで行って帰ってこなくなります。
もし後々無重力にしたいとなった場合はこのコンポーネントを消すのではなく、has_gravityプロパティをfalseにすることで重力を受けないように設定できます。
今回は空のままですが、使用できるプロパティは以下の通りです。
{
"minecraft:physics": {
"has_collision": true, // 衝突するか(falseだとブロックをすり抜ける)
"has_gravity": true, // 重力の有無
"push_towards_closest_space": false // ブロックに埋まったとき空きスペースに押し出されるか
}
}
リソースパック
ここまででビヘイビアーパックの準備はできましたが、これだけではエンティティを出しても透明で見えません。
エンティティの見た目はリソースパックで作っていきます。
構成
📂(リソースパックのルートフォルダ)
├📁entity
│└📄custom_entity.entity.json
├📁texts
│├📄en_US.lang
│└📄ja_JP.lang
└📄manifest.json
例によって新しいリソースパックを作成します。たまにある間違いですがビヘイビアーパックではentitiesフォルダであるのに対して、リソースパックではentityと名前が単数形なので注意しましょう。
クライアントエンティティファイル
custom_entity.entity.jsonがエンティティの外見設定の中心となるファイルです。
エンティティの外見は主にモデル、テクスチャ、マテリアル、レンダーコントローラー、アニメーション、アニメーションコントローラーなどを使いますが、これらを纏めるのがこのファイルです。
ビヘイビアーパックのエンティティファイルに対して、リソースパック側のJSONファイルをクライアントエンティティファイルと呼びます。
ファイルの名前は好きな名前でも動作上問題ありませんが、ビヘイビアーパックのエンティティファイルの名前と拡張子の間に.entityを追加した名前にすることが推奨されています。
.entity.jsonのようにするのはリソースパックではモデルやアニメーションなどJSONファイルを多く扱うことになってくるので、何の役割のJSONファイルなのかを分かりやすくするための目印としてつけられています。
種類 | ファイル名 |
---|---|
クライアントエンティティ | *.entity.json |
ジオメトリー | *.geo.json |
アニメーション | *.animation.json |
アニメーションコントローラー | *.animation_controllers.json |
レンダーコントローラー | *.render_controllers.json |
custom_entity.entity.jsonファイルの中身は以下の通りです。
{
"format_version": "1.21.44",
"minecraft:client_entity": {
"description": {
"identifier": "example:custom_entity",
"materials": {
"default": "entity"
},
"geometry": {
"default": "geometry.humanoid"
},
"textures": {
"default": "textures/entity/steve"
},
"render_controllers": [
"controller.render.default"
],
"spawn_egg": {
"base_color": "#ff0000",
"overlay_color": "#0000ff"
}
}
}
}
format_version
ファイルがどのバージョンで作られたかを示します。
クライアントエンティティファイルはアップデートによる変更があまり頻繁ではなく、最後に変化があったのは1.10.0です。今のところ、これ以上バージョンを上げてもフォーマットに変化はありません。
この記事では執筆時点のゲームバージョン(1.21.44)で統一しています。
ゲームバージョンを超えた、まだ存在しないバージョンだとエラーが発生します。
minecraft:client_entity
ビヘイビアーパックではminecraft:entityとなっている所がこちらはentityの前にclient_がつきます。
identifer
エンティティのIDです。ビヘイビアーパックで定義したIDと同じである必要があります。
materials
使用するマテリアルを記述します。 materialsを含め、geometry、texturesにもdefaultという名前が出てきますが、これは後述のレンダーコントローラーのcontroller.render.defaultを使う際に必要になります。
他のレンダーコントローラーや独自のものを追加して使う場合はdefault以外の名前だったり、複数指定する場合もあります。
defaultの右側、entityという部分がマテリアルの種類です。マテリアルとは3DCG分野では物体の表面・質感を決定するものです
カスタムマテリアルを追加することもできますが、特別なもので無い限りもともと用意されているマテリアルで十分です。主にテクスチャの透過の有無によって選びます。
entity | テクスチャに透明な部分がない場合 |
entity_alphatest | 透明な部分がある場合 |
entity_alphablend | 半透明の場合 |
geometry
ジオメトリーのIDを記述します。
ジオメトリーはいわゆる3Dモデルのことです。モデリングにはBlockbenchが有名です。
今回はプレイヤーのような人型の既存モデルを指定しています。
textures
エンティティに使われるテクスチャを記述します。
指定するのはリソースパック内の画像ファイルの拡張子を除いたパスです(拡張子まで書いていても動作はするようです)。
render_controllers
マテリアル・ジオメトリー・テクスチャを書いたのでもう完成だと思われがちですが、それだけではまだ何も表示されません。 実際に表示させるにはレンダーコントローラーが必須です。
レンダーコントローラーはエンティティのJSONのmaterials、geometry、texturesで指定されたものの中から何を表示するかを決めたり、頭や腕などのパーツごとに表示・非表示を切り替えたりする役割があります。
独自のレンダーコントローラーを追加すると状況に応じてテクスチャやマテリアル、モデルを切り替えることもできますが
今回は切り替えなどを行わないので、常時それぞれのdefaultを用いるだけのシンプルな既存レンダーコントローラーであるcontroller.render.defaultを使います。
spawn_egg
ビヘイビアーパックのJSONでis_spawnableをtrueにしているなら、スポーンエッグの見た目も決める必要があります。
簡単なのは画像ファイルを用意しなくて済む、2色を指定する方法です。
base_color | 下地の色をRGBカラーコードで指定 (RGBがよく分からなければ「RGBカラーコード」などで調べると良い) |
overlay_color | 斑点の色 |
langファイル
見た目ではないですが、エンティティの名前やスポーンエッグのアイテム名も決めておかないといけません。
en_US.lang(アメリカ英語)さえ設定しておけば、他のlangファイルを用意していない言語の人にもこの英語が代わりに表示されます。
日本語だけでは、他の言語設定にした時に翻訳キーそのまま表示されてしまいます。
ここは日本語の記事なので日本語で開発している方がほとんどだと思いますし、日本語だけで十分ではあるのですが、仕様上では英語がデフォルトであると覚えておきましょう。
entity.example:custom_entity.name=Custom Entity
item.spawn_egg.entity.example:custom_entity.name=Custom Entity Spawn Egg
日本語のja_JP.langも用意します。
entity.example:custom_entity.name=カスタムエンティティ
item.spawn_egg.entity.example:custom_entity.name=カスタムエンティティのスポーンエッグ
エンティティの名前の翻訳キーはentity.名前空間ID.name、スポーンエッグはitem.spawn_egg.entity.名前空間ID.nameとなります。
完成
以上で完成です。
ビヘイビアーパックとリソースパック両方を適用したワールドに入り、クリエイティブモードでインベントリにスポーンエッグが追加されているか確認をしましょう。
追加されているなら使用してエンティティがちゃんとスポーンするか、見た目はスティーブになっているかを見てみましょう。
今回の例で追加したエンティティにはAIもアニメーションもないので攻撃しても棒立ちのままです。
ここから中身を増やしていき、自分だけのエンティティを作っていくと良いでしょう。
コンポーネントの使い方などがまだあまり分からない最初の内は、既存のエンティティも参考になります。
トラブルシューティング
上手くいかない時、どこに問題があるのかわからないという方もいるかもしれません。
以下はエンティティが上手く追加できない場合に、おおまかにビヘイビアーパックとリソースパックどちらに問題があるかを判別する例です。
スポーンエッグが追加されていない
ビヘイビアーパックに問題があります。誤字や脱字などのミスがないかよく確認しましょう。
真っ黒なスポーンエッグはあるがエンティティが見えない
リソースパックに問題がある可能性が高いです。誤字や脱字の確認は勿論、定義ファイルのエンティティIDはビヘイビアーパックのものと一致していますか?
マイクラの設定→クリエイター→コンテンツログGUIの有効化をONにしておくと、エラーが見れるようになります。
エラーメッセージは原因の発見と解決に大いに役立ちます。問題が分からない時、エラーが出ているならCtrl+Hキーでしっかり読んでみるのも大事です。
コメント