この記事では、Minecraft Java Edition(バージョン1.19)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
コマンドの発動条件を考えているマインクラフター
「雪玉を投げたらコマンドが発動するようにしたいんだけど、どうすればいいのかな?」
こんな疑問を解決します!
- scoreboardコマンドで雪玉を投げたことを検知する
こんにちは! マインクラフターのなつめ(@natsume_717b)です。
マイクラ歴は5年程で、最近は脱出マップやミニゲームを制作しています!
→ダウンロードページ
この記事では、雪玉を投げたことを検知してコマンドを実行する方法について解説しています。
雪玉を投げるだけでコマンドが実行できるようにすると、コマンドを起動させる条件がかなり簡単になりますので、非常に扱いやすい機構と言えます。
また、脱出マップにしろミニゲームにしろ取り入れやすいのもおすすめポイントですね。
それでは、さっそく見ていきましょう!
scoreboardコマンドで雪玉を投げたことを検知する
雪玉を投げたことはスコアボードで検知すればOKです。
なので、scoreboardコマンドを使っていきます。
スコアボードとはscoreboardコマンドで作成できるもので、特定の行動をした回数をカウントするものです。
まずは雪玉を投げたことをカウントするスコアボードを作っていきます。
そのためにminecraft.used:minecraft.snowballという項目を指定し、雪玉を投げたことを検知できるようにします。
/scoreboard objectives add yukinage minecraft.used:minecraft.snowball
yukinageというのはスコアボードの名称になりますので、分かりやすい名前を付ければOKです。
今回は雪玉を投げたことを分かりやすいように名付けました。
準備としてはこれだけで、あとはスコアボードの値が1のプレイヤーがいる時にコマンドを実行するようにすればOKです。
作成したスコアボードの値が1ということは、1回雪玉を投げているということになります。
今回は雪玉を投げるたびにダイヤモンドが1つ貰えるようにしていきます。
ですので、まずはスコアボードの値が1の時にダイヤモンドを付与するコマンドです。
execute at @a[scores={yukinage=1}] run give @p diamond 1
上記のコマンドはリピートコマンドブロックに無条件、常時実行にしておく必要があります。
これは常にスコアボードの監視、今回の場合はyukinageというスコアボードの値を監視する必要があるため、リピートしておく必要があるわけですね。
さらにこのままではスコアボードの値が1のままですので、ダイヤモンドが付与され続けてしまいます。
その対策として、ダイヤモンドを付与したらスコアボードの値を0に戻すコマンドをリピートコマンドブロックに繋がる形でチェーンコマンドブロックを設置します。
scoreboard players reset @a yukinage
チェーンコマンドブロックの設定は、条件付き、常時実行にします。
これで雪玉を投げるとスコアボードの値が1になってダイヤモンドを付与、その後スコアボードの値を0に戻すという仕組みになりました。
まとめ
というわけで、今回のまとめです。
今回使ったコマンドはこちら。
/scoreboard objectives add yukinage minecraft.used:minecraft.snowball
execute at @a[scores={yukinage=1}] run give @p diamond 1
雪玉を投げるのではなく、捨てたことを検知したい場合には以下の記事が参考になります。
雪玉だけでなく、様々なアイテムを捨てたことを検知できますよ。
この記事は以上になります。