この記事では、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については以下の記事で詳しく説明しているので、ぜひ参考にしてみてくださいね。
右クリックを検知して達成される進捗を作成する
次に進捗を作成します。
とはいえ、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/right_click/advancements/test/interact.jsonという構成の場合でコマンドを組んでいます)
give @a[advancements={right_click:test/interact=true}] diamond 1
このコマンドはリピートしておく必要があります。
右クリックをした後に実行するわけではなく、常に実行しておいて条件を満たしたプレイヤーがいたら実行されるという感じですね。
負荷が怖いという場合はexecuteコマンドでif entityを指定して条件を満たすプレイヤーがいる場合に実行されるようにしましょう。
また、後述する進捗を未達成に戻すコマンドがないと延々とコマンドが実行される点に注意です。
進捗を未達成に戻すコマンド
今のままでは1度右クリックをして進捗を達成すると、再度進捗を達成することができません。
なので、進捗を剥奪するコマンドをリピートしておきます。
文末にある進捗の指定は先ほどのターゲットセレクター同様、作成したフォルダ名に合わせる必要があるので丸々コピーしても使えない点に要注意です。
advancement revoke @a only right_click:test/interact
これで「進捗を達成した後にコマンドを実行、そして進捗を剥奪して再度進捗を達成できる状態に戻す」ということが可能です。
(必ずコマンドを実行した後に進捗を剥奪するようにしましょう)
まとめ
というわけで、今回のまとめです。
今回使ったコマンドはこちら。
- interactionを召喚するコマンド
/summon minecraft:interaction ~ ~ ~
- 特定の進捗を達成しているプレイヤーにダイヤモンドを1つ付与するコマンド
give @a[advancements={right_click:test/interact=true}] diamond 1
- 特定の進捗を全てのプレイヤーから剥奪するコマンド
advancement revoke @a only right_click:test/interact
- interactionと進捗によって、右クリックを検知できます。
この記事は以上になります。