Youtubeチャンネルはこちら!コマンド解説を動画で観れます!

【徹底解説】左クリック検知にはinteractionが大事【マイクラ】

【徹底解説】左クリック検知にはinteractionが大事【マイクラ】

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

コマンドで左クリックを検知したいマインクラフター
「どうにかして左クリックをしたことを検知することはできないのかな? できるならどうやるのか教えて欲しいな!」

こんな疑問を解決します!

本記事の内容
  • 左クリック検知には、interactionが大事

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

なつめ

マイクラ歴は5年程で、最近は脱出マップやミニゲームを制作しています!
ダウンロードページ

この記事では左クリックを検知する方法を解説していきます。

ver.1.9.4にアップデートしたおかげで、進捗を作成する必要はあるものの、かなり簡単に左クリックしたことを検知できるようになりました。

この記事を読めば左クリックの検知ができるようになりますので、ぜひ参考にしてくださいね。
さっそく見ていきましょう!



左クリック検知には、interactionが大事

コマンドで左クリック検知をしようとすると、interactionという目に見えないエンティティを召喚する必要があります。

ただしinteractionだけでは検知できないため、interactionに対して左クリックしたことを検知する進捗も作成していきます。

というわけで、まずはinteractionを召喚するコマンドです。

/summon minecraft:interaction ~ ~ ~

このコマンドは、コマンドの実行場所にinteractionを召喚するシンプルなコマンドとなっています。

interactionは基本的に視認することができないため、F3とBの同時押しで当たり判定を表示してその存在を確認します。

interactionについては以下の記事で詳しく説明しているので、ぜひ参考にしてみてくださいね。

【サイズ変更も可】interactionでクリック検知が可能【マイクラ】

左クリックを検知して達成される進捗を作成する

次に進捗を作成します。
とはいえ、1から作ると面倒なので後ほど記載するものをコピペしてしまってOKです。

進捗はデータパックの適切な箇所に作成する必要があります。
以下の構造になるようにフォルダ(ファイル)を作成すれば問題なく動作するはずです。

データパック本体/data/任意のフォルダ/advancements/任意のフォルダ/ここにjsonファイルとして作成

作成するJSONファイルの中身は以下の通り。

{
  "display": {
    "icon": {
      "item": "minecraft:air"
    },
    "title": "",
    "description": "",
    "show_toast": false,
    "announce_to_chat": false
  },
  "criteria": {
    "requirement": {
      "trigger": "minecraft:player_interacted_with_entity",
      "conditions": {
        "player": {
          "type": "minecraft:player"
        },
        "entity": {
          "type": "minecraft:interaction"
        }
      }
    }
  }
}

シンプルな設定にしていますので、進捗達成した旨をアナウンスしないようにしていること以外は特に設定していません。

triggerの部分に書かれているminecraft:player_interacted_with_entityが左クリックを検知するのに大切な箇所となります。

これでinteractionに対して左クリックをすると達成できる進捗を作成できました。

進捗達成を機にコマンドを実行する

interactionの召喚、進捗の作成が済んだら、残りはコマンドを組むだけです。
難しいことはないので、サクッとやってしまいましょう。

実行したいコマンド

ターゲットセレクターにadvancementsの指定を付け加えれば、簡単に進捗を達成しているかどうかで判断できます。

例えば、左クリックをしたらダイヤモンドが1つ貰えるようにしたい場合は以下の通りです。
(データパック本体/data/left_click/advancements/test/interact.jsonという構成の場合でコマンドを組んでいます)

give @a[advancements={left_click:test/interact=true}] diamond 1

このコマンドはリピートしておく必要があります。
左クリックをした後に実行するわけではなく、常に実行しておいて条件を満たしたプレイヤーがいたら実行されるという感じですね。

負荷が怖いという場合はexecuteコマンドでif entityを指定して条件を満たすプレイヤーがいる場合に実行されるようにしましょう。

また、後述する進捗を未達成に戻すコマンドがないと延々とコマンドが実行される点に注意です。

進捗を未達成に戻すコマンド

今のままでは1度左クリックをして進捗を達成すると、再度進捗を達成することができません。
なので、進捗を剥奪するコマンドをリピートしておきます。

文末にある進捗の指定は先ほどのターゲットセレクター同様、作成したフォルダ名に合わせる必要があるので丸々コピーしても使えない点に要注意です。

advancement revoke @a only left_click:test/interact

これで「進捗を達成した後にコマンドを実行、そして進捗を剥奪して再度進捗を達成できる状態に戻す」ということが可能です。
(必ずコマンドを実行した後に進捗を剥奪するようにしましょう)

まとめ

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

今回使ったコマンドはこちら。

今回使ったコマンド
  • interactionを召喚するコマンド
/summon minecraft:interaction ~ ~ ~
  • 特定の進捗を達成しているプレイヤーにダイヤモンドを1つ付与するコマンド
give @a[advancements={left_click:test/interact=true}] diamond 1
  • 特定の進捗を全てのプレイヤーから剥奪するコマンド
advancement revoke @a only left_click:test/interact
ポイント
  • interactionと進捗によって、左クリックを検知できます。

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