ルッキーのコマンドメモ

主にマイクラのコマンドやデータパックに関することを書いていきます。

(マイクラ コマンド・データパック) プレイヤのクリックを検知する方法

クリックを検知する

今回はプレイヤがクリックしたことを検知する方法を紹介します

目次

クリック検知する方法

エンティティのinteractionを利用することでプレイヤのクリックを検知することができます。
interactionエンティティは左クリックしたエンティティと右クリックしたエンティティのUUIDをそれぞれattackとinteractionというnbtに格納するので、ここに書かれているUUIDを持ったプレイヤを対象にコマンドを実行することで、クリックしたプレイヤを対象にコマンドを実行できます。

  • まず、毎tick以下のコマンドを実行することにより、プレイヤの頭の部分に常にinteractionが存在している状態にする。

    まず、以下のようにexecuteコマンドのanchoredを使うことによってプレイヤの頭の位置にinteractionエンティティを召喚します

  execute as @a at @s anchored eyes positioned ^ ^ ^ run summon interaction ~ ~-0.5 ~
  • interactionにattackとinteractionのnbtが存在しているかをしらべることでクリックを行なったプレイヤがいるかをしらべ、そのプレイヤを対象にコマンドを実行する。

    attackとinteractionのnbtに入っているUUIDのプレイヤに対して操作を行うのが正確ですが、ここでは一番近くのプレイヤをクリックを行なったプレイヤとして操作を行います。

    check.mcfunction

  # 左クリック
  execute as @e[type=interaction] if data entity @s attack at @s as @a[sort=nearest,limit=1] run say left click

  # 右クリック
  execute as @e[type=interaction] if data entity @s interaction at @s as @a[sort=nearest,limit=1] run say right click

これにより、左クリックを行なったプレイヤが入ればleft click、右クリックを行ったプレイヤが入ればright clickとチャットに表示されます

  • interactionをkillする

    このままでは1のコマンドによって無限にinteractionが召喚されるので、interactionをkillするコマンドも毎tick実行します。

    kill_interaction.mcfunction

  kill @e[type=interaction]

利用例

プレイヤが行なったクリックをチャットに表示する

シンプルにプレイヤが左クリックを行なったらleft click, 右クリックを行ったright clickと表示するfunctionです。
以下のコマンドを毎tick実行します。

click_check.mcfunction

# 左クリック
execute as @e[type=interaction] if data entity @s attack at @s as @a[sort=nearest,limit=1] run say left click

# 右クリック
execute as @e[type=interaction] if data entity @s interaction at @s as @a[sort=nearest,limit=1] run say right click


# 前のtickで召喚したinteractionをkill
kill @e[type=interaction]

# interactionを召喚
execute as @a at @s anchored eyes positioned ^ ^ ^ run summon interaction ~ ~-0.5 ~

実行結果

このようにチャットに行なったクリックが表示されます。

左クリックしたプレイヤの視点先に雷を落とす

左クリックしたプレイヤが向いている方向の10ブロック先に雷を落とすコマンドです。

実は、左クリックだけであればexecuteコマンドのon attackerを利用すると簡単にプレイヤを見つけられます。

以下のコマンドを毎tick実行

lightning.mcfunction

# 左クリックしたプレイヤが向いている方向の10ブロック先に雷を落とす
execute as @e[type=interaction] if data entity @s attack on attacker at @s anchored eyes positioned ^ ^ ^10 run summon lightning_bolt

# 前のtickで召喚したinteractionをkill
kill @e[type=interaction]

# interactionを召喚
execute as @a at @s anchored eyes positioned ^ ^ ^ run summon interaction ~ ~-0.5 ~

実行結果

このように、左クリックすると雷が落ちます

まとめ

interactionエンティティを利用することで、プレイヤの右クリックと左クリックを検知することができます。