マルチプレイなら『シン・VPS』がおすすめ!

【マイクラ】entity_propertyでエンティティの状態を指示【predicate】

【マイクラ】entity_propertyでエンティティの状態を指示【predicate】

この記事では、Minecraft Java Edition(バージョン1.20.4)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。

こんにちは!
マインクラフターのなつめ(@natsume_717b)です。

なつめ

2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!

この記事では、こんな疑問を解決します!

本記事の内容
  • エンティティの状態を指示できるentity_property
  • 実際の例

entity_propertyはエンティティの状態を指示できるpredicateの項目です。

加えて、かなり細かくエンティティの状態を指示できるのが強みになります。

この記事では3つの項目の例と、どのような項目があるのかを紹介していきます。

さっそく見ていきましょう!

本記事で紹介するデータパックのサンプルはGitHubにてダウンロードできます。
また、当記事で解説していない項目についても解説しています。

エンティティの状態を指示できるentity_property

entity_propertyを使うことで、エンティティの状態を指示できます。

スニークしているかどうかや手にしているアイテムが指示したものと合っているかどうか、立っている場所の特徴など様々な項目で指示できるので、かなり便利です。

具体的には以下の通りです。

項目名説明
Entity Typeエンティティの種類。
Type specificエンティティの中でも特定の種類に分けられるもの。
ネコの種類など。
NBTNBTタグを指示する。
team指示しているチームに所属しているか。
Locationコマンド実行位置の特徴。
location_checkと使い方は同じ
【マイクラ】location_checkで場所の確認【predicate】
stepping onLoctaionとほとんど同じ。
立っている場所の特徴を指示する。
Distanceコマンド実行位置と指示した内容(座標や2点間の距離)を比較する。
flags幼体か、燃えているか、スニークしているか、泳いでいるか、走っているかの項目があり、それらが適切かどうか。
equipment装備やメインハンドにあるアイテムを指示して、それが合っているかどうか。
vehicleどのエンティティに騎乗しているか。
passengerどのエンティティに騎乗させられているか。
targeted entityどのエンティティを狙っているか、攻撃対象としているか。
プレイヤーでは上手くいかず、ゾンビなど他のエンティティを狙うmobをコマンドの実行者にすると分かりやすい。
effects指示したエフェクトを受けているかどうか。

predicateですので上記の内容を指示したうえで、コマンドなどで指定するなどといった使い方をします。

executeコマンドのif predicateであれば、「指示した内容のエンティティが存在する場合にコマンドを実行する」なんてことができるわけです。

上記の説明はかなり大雑把ですので、GitHubからサンプルをダウンロードして実際に触ってみることをおすすめします。

実際の例

ここからは実際の例を見てきます。
ただし、項目数が多いので3つに絞らせていただきました。

他の項目はGitHubにあげたサンプルから勉強してください。
README.mdに簡単な説明書きはしてあります。

というわけで、まずはデータパックとして共通する部分からです。

データパックの構造

まずはデータパックの構造からです。

  • datapack本体
    • data
      • sample
        • predicates
          • 各種jsonファイル
    • pack.mcmeta

pack.mcmeta、jsonファイル以外は全てフォルダでOKです。

また、pack.mcmetaの中身は以下の通り。

{
  "pack": {
    "pack_format": 26,
    "description": ""
  }
}

jsonファイルに記述する内容はpredicateに属するわけですが、1から書くのは困難です。
そこで、生成サイトを利用することをおすすめします。

jsonファイルの記述も行い、データパックを導入すれば準備OKです。

次項からはentity propertyにある3つの項目を指示した場合を見ていきます。

NBTを指示した場合

NBTを指示した場合はこちら。

{
    "condition": "minecraft:entity_properties",
    "entity": "this",
    "predicate": {
      "nbt": "{Air:300s}"
    }
  }

{Air:300s}とあるので、空気が300sの状態であれば真となります。

nbt.jsonと命名していた場合は

/execute if predicate sample:nbt run give @a diamond 1

といった風にコマンドを実行すればOKです。

Distanceを指示した場合

Distanceを指示した場合はこちら。

{
    "condition": "minecraft:entity_properties",
    "entity": "this",
    "predicate": {
      "distance": {
        "absolute": {
          "min": 0,
          "max": 10
        }
      }
    }
  }

Distanceはコマンド実行位置と対象となっているエンティティのいる座標を比較して、適切であれば真となります。

上記の場合はabsoluteが0~10であれば適切であると判定されるわけですね。

absoluteは3D空間上で、コマンド実行位置とエンティティ(コマンドの実行者)のいる位置を比較します。
また、horizontalはY座標を除いて平面状で比較した場合になります。

実行するコマンドとしては、positionedなどで実行位置の指定を行うと扱いやすいですね。

targeted entityを指示した場合

targeted entityを指示した場合はこちら。

{
    "condition": "minecraft:entity_properties",
    "entity": "this",
    "predicate": {
      "targeted_entity": {
        "type": "minecraft:player"
      }
    }
  }

この項目はentity部分で指定したものが、targeted_entityで指示したものを攻撃対象に見做した時に真となります。

つまり、ゾンビなど敵mobをthisに当てはめる必要があります。

例えばですが、ゾンビをthisに当てはめるようas @e[type=zombie]などと指示し、その上でゾンビが何を狙っているのかを決める必要があります。

上記の例の場合ですが、ゾンビをコマンドの実行者にした場合は、ゾンビがプレイヤーを攻撃対象にすることで、真となります。

なので、コマンド例としては以下の通り。
(上記コードをtargeted_entity.jsonと命名したとします)

/execute as @e[type=minecraft:zombie] if predicate sample:targeted_entity run give @a diamond 1

まとめ

というわけで、今回のまとめです。

ポイント
  • entity propertyはエンティティの状態を細かく指示できる。

この記事は以上になります。

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】
  • 【一覧】夏メの制作物【マップ・データパック配布】