【解説】executeとは違った条件を付与するpredicate【マイクラ】

【解説】executeとは違った条件を付与するpredicate【マイクラ】

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

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

なつめ

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

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

本記事の内容
  • executeとは違った条件を付与するpredicate
  • 実際の使用例
  • predicateのメリット・デメリット

predicateはある程度コマンドについて勉強していくと出会うものです。
しかし、その実態はあまり詳しく説明されていません。

そこで今回はpredicateの基本的な部分を中心に使い方などを解説していきます。

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

executeとは違った条件を付与するpredicate

predicateはexecuteコマンドと似たような役割を持っています。
というのも、コマンドの実行をする際にexecuteとは違った条件を付与することが可能だからです。

例えば

  • 指定した確率でコマンドを実行するようにする
  • 特定の時間帯である時にコマンドが実行されるようにする
  • プレイヤーやmobが指定した状態である時に実行されるようにする

などが挙げられます。

しかしながら下準備の必要のないexecuteコマンドと違って、predicateはjsonファイルを作成する必要があります。
つまりデータパックを制作しなければ使えません。

手間がかかる上に、中にはexecuteコマンドでも似た挙動を再現できることもあります。
しかし、predicateだからこそ出来ることもあるので覚えて損はありません。

predicateを使うにはjsonファイルが必要

先ほども説明したように、データパックを作成しなければpredicateは使えません。
さらに言うと、適切に書かれたjsonファイルの作成がpredicateの使用には必須です。

とはいえ検知できる条件は複数あり、さらに項目によって書き込む内容が異なります。
なので、Predicate Generatorなどjsonファイルを簡単に作成できるツールを使うことをおすすめします。

実装する際は、データパックのdataフォルダの下にフォルダを作成し、その中にpredicatesという名前でフォルダを作成。
その中へ生成したjsonファイルを投入すればOKです。

  • データパック
    • data
      • フォルダ
        • predicates
          • jsonファイル
    • pack.mcmeta

以下はjsonファイルの中身の一例です。
30%の確率でコマンドが実行されるようにできるものとなっています。

{
    "condition": "minecraft:random_chance",
    "chance": 0.3
  }

実際の使用例

predicateの使い方として、「ターゲットセレクターに条件として書き込む」、「executeコマンドのif predicateの項目で指示をする」という方法が挙げられます。

それそれの使い方について見ていきましょう。

ターゲットセレクターに書き込む例

ターゲットセレクターに書き込む場合は、predicate=を使用します。

実際のコマンド例としては以下の通り。

/give @a[predicate=ntm:red_sneak] diamond 1

ntm:red_sneakの部分がjsonファイルを指示している部分です。

このpredicateの条件を満たしているプレイヤーにのみダイヤモンドを付与するコマンドとなっています。

ntm:red_sneakの中身は以下の通りです。
entity_propertiesという項目で、プレイヤーの状態を指示しているものになります。

{
    "condition": "minecraft:entity_properties",
    "entity": "this",
    "predicate": {
      "type": "minecraft:player",
      "team": "red",
      "flags": {
        "is_sneaking": true
      }
    }
  }

teamコマンドによってredチームに追加されており、しゃがんでいることが条件として書かれています。

なので、redチームに所属しているしゃがんでいるプレイヤーに対してダイヤモンドを付与できます。

if predicateの例

if predicateでも使い方は概ね同じです。

参照したいjsonファイルを記述すればよいので、以下のようなコマンドを書きましょう。

/execute if predicate ntm:time run give @a torch 1

if predicateでは、「参照するpredicateが条件を満たしていればコマンドを実行する」という形になります。

今回はtime_checkという時間帯を条件として指示できる項目を例に話を進めます。
使用するjsonファイルの中身はこちら。

{
  "condition": "minecraft:time_check",
  "value": {
    "min": 13000,
    "max": 15000
  }
}

このjsonファイルでは、時間が13000から15000の間である時が条件としています。
つまり夜の時間帯を指示しているわけです。

この時間と値の関係については、【解説】timeコマンドで朝にしてみよう!【Java版マイクラ】の記事で詳しく解説しています。

指定した時間内ならコマンドが実行され、それ以外の時間帯ではコマンドは失敗します。

predicateのメリット・デメリット

さて、ここまででpreicateの特徴と使い方を説明してきました。
最後にpredicateのメリットとデメリットについてまとめて終わろうと思います。

predicateのメリット
  • executeだけではできない、より幅広いことを再現できる
  • 自分でファイル名を命名できるので、管理が簡単になる

デメリットとしては、慣れるまでに時間がかかることや日本語の情報が少ないことが挙げられます。

predicateは使えないよりも使えた方が良いので、少しずつ覚えるようにしましょう。

まとめ

というわけで、今回のまとめです。
今回はpredicateの基本的な部分について解説しました。

ポイント
  • predicateはexecuteコマンドとはまた違った条件を付与することができる。
  • ターゲットセレクターに書き加えるほか、executeコマンドのif predicateにて使用することができる。
  • jsonファイルを使う都合上、データパックを制作する必要はあるが、それ故に自分の分かりやすい名前で管理することができる。

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

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】