右クリック検知のやり方(Java版)
右クリック検知について
右クリック検知には二つ方法があり、
それぞれ得意不得意があるので、
使い分けるととても便利だと思います。
1.にんじん付きの棒検知
一つ目はにんじん付きの棒(以下にんじん棒)を使った検知です。
にんじん棒を持って右クリックをすることで、
「にんじん棒を使った回数」
をスコアボードで検知する。
というものです。
楽で汎用性が高いのですが、
にんじん棒を持たせなければいけないことがデメリットです。
(リソースパックで特定のにんじん棒の見た目を変える。というものを作れば基本問題ないです。)
これは知ってる人も多かったと思います。
2.操作記録エンティティ検知
二つ目は最近追加された操作記録エンティティというものを使います。
なんだそれはと思うかもしれません。
大きさの変更が可能な、操作を記録するエンティティです。
重要なのはクリックと攻撃ができる大きさの変更が可能なエンティティだ。
という事です。
だからなんだと思うかもしれませんが、
executeのon attackerやon targetを使うとこで、
コマンドの実行者に右クリックや攻撃をしたエンティティを実行者にしてコマンドを実行することができます。
つまり、
executeコマンドと併用することで、
このエンティティを右クリックしたプレイヤーを実行者にコマンドを実行できる
ということです。
また、
プレイヤーの頭サイズにしたこのエンティティを頭にtpし続ければどこでも右クリック検知ができます。
また、
操作記録エンティティを右クリックするとNBTに
{interaction:{player:UUID,timestamp:クリックされたゲーム内時刻}}
というように操作が記録されています。
だから操作記録エンティティなんですね。
ここのUUIDをデータパックのマクロで何かに代入したりしてもいいかもしれません。(executeとほぼ同じですが...)
一見万能に見えるこのエンティティですが、
設置型以外では大きなデメリットがあります。
クリックと攻撃ができるということは、
クリックと攻撃の判定が全て吸われるということです。
なので、
ボタンも押せませんし、モンスターやプレイヤーを攻撃することもできません。
また、0.05秒に一回 tpしている都合上、ダッシュなどをすると操作記録エンティティの移動の方が遅く、置いてきぼりになってしまいます。
だからといって少し前に出すと別のプレイヤーにクリックされてしまいます。
なのでこのエンティティは、
看板をクリックしたら〇〇。
などの設置型ではとても優秀なのですが、
設置型以外では基本使わないほうが良さそうです。
おまけ
にんじん棒検知と操作記録エンティティ検知のどちらも、データパックのアドバンスメント(進捗)を追加する機能でより軽くすることができます。
まとめ
魔法の発動などに使うタイプの非設置型の右クリック検知はにんじん棒検知。
看板クリックなどの設置型は操作記録エンティティを使うと良さそうです。
細かい説明はリクエストがあれば作ります。
初めてのノート投稿なので見づらかったかもしれませんがお役に立てていれば嬉しいです。
「もっとこうしたほうがいいよ」などのアドバイスや「これを教えてほしい」などのリクエストなどがあればコメントしていただけると嬉しいです。
最後まで読んでくれてありがとうございました。