LoginSignup
5
1

More than 1 year has passed since last update.

【Minecraft BE Addon講座#5】エンティティとコンポーネントとは?~entity.jsonの書き方とコンポネ~

Last updated at Posted at 2021-09-26

本ページはアドオン講座#5、「コンポネ編、エンティティとコンポーネントとは?~entity.jsonの書き方とコンポネ~」です。
目次や、この講座については#1の記事をご覧ください。

コンポネ編で理解してほしいこと!

コンポネ編はこのアドオン講座の基礎編の次のページに位置し、内容としては応用編の中でも基礎寄りになります。
エンティティの追加には欠かせませんし、特に初回の#5の内容はアニコン編でもお世話になります。
基礎編を終えてとりあえず何かやってみようという方におすすめです!

コンポネ編は3ページからなり、初回#5は基礎編の延長で、書き方(記法)と仕組みの理解について、#6では重要な条件分岐の役割を担う機能について、最後#7では実践としてタグによって体力(HP)が変わるアドオンを作ってみます。

このコンポネ編では、エンティティの持つコンポーネントを自由に追加消去編集することで、エンティティに特殊な性質をもたせる、また特殊な動きをさせられるようになることを目的としています。

  • (前提#3~#4)基礎編
  • (#5)エンティティとは?
  • (#5)entity.jsonとは?
  • (#5)エンティティのしくみとコンポーネント
  • (#5)[実践]プレイヤーの名前を非表示にしてみよう
  • (#6)フィルターとは?
  • (#6)フィルターの記法
  • (#7)コンポーネントを操るには?
  • (#7)センサーとは?/コンポーネントグループとは?
  • (#7)[実践]プレイヤーの体力をタグで変更してみよう

エンティティとは?

まず、みなさん「エンティティ(entity)」と言われて、何のことか分かるでしょうか?
マイクラのワールド内で動いているもののほとんどがエンティティです。
例えば、牛、豚、羊、ゾンビなどMobと呼ばれるものから、
プレイヤー、アーマースタンド、トロッコ、エンドクリスタルなども含み、
「落ちているアイテム」「投げられているアイテム(雪玉、卵、火球、花火、矢など)」、「経験値オーブ」、
さらには「雷」「残留ポーションのもや」もエンティティです。

いくつかほかの要素と間違えやすいエンティティも存在します。 例えば、TNTはブロックですが、着火された瞬間ブロックではなく、エンティティになります。 他には、「残留ポーションのもや」はエンティティですが、「スプラッシュポーションが着弾したときに出る一瞬のもや」はエンティティではなく、パーティクルです。

/summonコマンドで召喚できないからといって、それがエンティティでないとは限りません。 /summonコマンドで召喚できないエンティティも存在します(例えば、プレイヤー)。 behavior/entitiesフォルダに入っているファイルのものがすべてのエンティティとなるので、そこにあれば、それはエンティティです。

このコンポネ編では、これらエンティティについての設定が書かれたファイルentity.jsonについて扱い、それらのエンティティの性質を自由に追加したり、削除したり、変更したりするのが目的なのです!

entity.jsonとは?

呼び方について

この呼び方は実は正式名称ではありません!(おい)
個人的に、behavior/entitiesフォルダに入っている[entity名].jsonのファイルたちのことをentity.jsonと呼んでいます。
説明する度毎回「behavior/entitiesフォルダに入っている[entity名].jsonのファイル」と呼ぶのは逆に分かりにくいので、この講座ではこの略称を用いています。

実はリソースの方にもresource/entityというフォルダがあるのですが、こちらは使用しないのでご注意を。
アニコンのときと違い、「behavior/entitiesに入っている[entity名].json」と「resource/entityに入っている[entity名].json」はだいぶ異なるものです。
エンティティ追加のときにまた詳しく説明すると思います。

entity.json=エンティティの設定ファイル

話がそれましたが、このentity.json、何が書かれているファイルなのかというと、エンティティが何なのか、どういう行動をするのか/できるのかが主になります。まさにbehavior(直訳:行動)そのものが書かれているファイルです。

まずはサンプル(behavior/entities/player.json)

とりあえずentity.jsonの一例の中身をのぞいてみましょう。
基本的に、例ではplayer.jsonを使います1

behavior(v1.17.30)/entities/player.json
{
  "format_version": "1.17.10",
  "minecraft:entity": {
    "description": {
      "identifier": "minecraft:player",
      "is_spawnable": false,
      "is_summonable": false,
      "is_experimental": false
    },

    "component_groups": {
      ...
    },

    "components": {
      ...
    },

    "events": {
      ...
    }
  }
}

※「...」は略

2行目はお決まりの"format_version"ですが、それ以降はすべて"minecraft:entity"というカッコの中に入っていることが分かります。
"minecraft:entity"内には、

  • "description"
  • "component_groups"
  • "components"
  • "events"

の4つが入ります。

entity.json/"minecraft:entity"解説

"description"=エンティティの概要、説明

"description"にはそのエンティティが何なのか、マイクラ内にエンティティが存在する上でのシステム面的な設定が書かれます。
具体的には、

説明
必須 "identifier" エンティティidです。 "minecraft:player"
必須 "is_spawnable" スポーンエッグで召喚できるか true
必須 "is_summonable" /summonコマンドで召喚できるか true
必須 "is_experimental" 試験的要素か。trueにすると、ワールドの試験的がオフのとき、エンティティは認識されません false
animations このエンティティにひもづけるアニメーションとアニコンの登録 詳しくは#11#13
scripts アニメーションとアニコンの常時実行 詳しくは#11#13

です。これ以外を使うことは基本的にありません。

"components"=コンポーネント、エンティティの行動要素

この"components"のカッコの中に入っているものが、さっきからずっとコンポネコンポネと言っている正体、コンポーネントです。
それぞれのコンポーネントという部品をたくさん連ねることで、マイクラのエンティティの動きを形作っています。

例えば簡単な例を出すと、behavior/entities/player.json64行目2"minecraft:can_climb"というコンポーネントは、「このコンポーネントを持っているエンティティは「はしご」を上ることができるようになる」という効果をもちます。

エンティティが多種多様な動きをするように、コンポーネントにはたくさんの種類があります

これがそのコンポーネントのリストです。ものすごい数で、解説するにはキリがないのでひとつひとつ解説することはしないと思います。
検索したら日本語で解説してくれている人がいそう。

"component_groups"=コンポネの切り替え用セット

コンポーネントをいくつか集めてグループにしたものをコンポーネントグループと言います。
必要に応じて、コンポーネントのセットであるコンポーネントグループを切り替えることで、エンティティを成り立たせています。
詳しい意味合い、使用方法は次々回#7で解説します。

"events"=イベント、コンポネグループの切り替えスイッチ

エンティティのもつイベントです。
このイベントが起きたらこのコンポネグループをオンにして、このコンポネグループをオフにして、などを記述します。
このように、コンポネ切り替えスイッチの役割を担うのが"events"です。
詳しい内容は次々回#7で解説します。

また、イベントはアニコンでも起こすことができます。
詳しくはアニコン編#11#13をご覧ください。

さらに、最近のバージョンアップで、コマンドでもイベントが起こせるようになりました。
/eventコマンドのほか、/summonコマンドの引数でも起こすことができます。

イベントとアニコンやコマンドなど、他の要素との連携ができる機能は、上級者になればなるほどありがたいものになってくると思います。
私自身が使った例だと、投擲物追加でお世話になりました。
最初のうちは複雑に感じる一方なのであまり気にしなくて大丈夫です。

[実践]プレイヤーの名前を非表示にしてみよう

ゲーム内設定/ビデオに「ゲーム内プレイヤーの名前の表示」という設定があります。
よくマルチプレイをされる方なら、「敵の位置がバレてしまうからオフにして!」と言われたことがあるかもしれません。
しっかりした企画ワールドなら、目を合わせなければ名前が表示されないようになっていたかもしれません。

実はプレイヤー名を表示するかしないかの制御はこのentity.jsonが行っています。
そのコンポーネントはこちら!

[抜粋]behavior(v1.17.30)/entities/player.json
      ...
      "minecraft:nameable": {
        "always_show": true,
        "allow_name_tag_renaming": false
      },
      ...

※「...」は略

102行目2からの部分を抜粋しました。
そうです"minecraft:nameable"というコンポーネントです。
このコンポネは「そのエンティティに名前が付けられる」ようになる効果をもちます。
そもそもコンポネ自体がないとエンティティに名前が付かなくなります。

このコンポネには、子要素"always_show""allow_name_tag_renaming"があります
"always_show"「そのエンティティの名前を常に表示するか」で、
"allow_name_tag_renaming"「そのエンティティの名前をネームタグで変更できるようにするか」を設定しています。

今回は"always_show"をいじってみます。
"always_show"trueからfalseに変更することで、他のMobと同じように、目を合わせたとき以外、名前が常に表示されなくなります。

[抜粋・変更後]behavior(v1.17.30)/entities/player.json
      ...
      "minecraft:nameable": {
        "always_show": false,
        "allow_name_tag_renaming": false
      },
      ...

ちなみに、"allow_name_tag_renaming"falseからtrueにして、プレイヤーの名前をネームタグで変更できるようにしたものは、過去に配布したことがあります。

ダウンロードして中身を見てみると、実はこれしか変えてないんですね笑
コンポネを適当にいじってたら革新的なアドオンができたりするので、他の技術と違いコンポネには夢があります笑

名前非表示化アドオンができたところで、今回はおしまいです!
1ページ分だけで実践までできてしまうのがコンポネの恐ろしいところです。

次回#6からは深くまで踏み込んで、コンポネの制御に使われる条件設定であるフィルターについてやっていきます。
アニコン編の方は次回が#11になります。
すぐにアニコンを習得したい!という方はそちらへどうぞ!

お疲れ様でした~


  1. Mobとかをいじって遊ぶよりも、player.jsonいじって、プレイヤー自身がいろいろ不思議なことができるようにした方がおもしろいと思っているので、主にプレイヤーをいじっていきます。 

  2. バージョン違いによって正確な行数は変わっている可能性が高いです。v1.17.30のバニラでの行数です。 

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1