この記事では、Minecraft Java Edition(バージョン1.17.1)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
コマンドで秒数をカウントできるようになりたいマインクラフター
「ゲームの開始前とかによくある3、2、1って数えるやつを再現したい。どんなコマンドを使えば出来るの?」
こんな疑問を解決します!
- カウントダウンをするには、titleコマンドとscoreboardコマンドを使う
こんにちは! マインクラフターのナツメ(@natsume_717b)です。
普段は脱出マップを配布・制作しています!
→配布マップ・ダウンロードページ
今回はコマンドを使って、カウントダウンをするシステムの作り方を解説していきます。
カウントダウンをする仕組みとしては、時間を計測するスコアボードを作成して、それの時間でカウントとなる文字を表示するといった感じですね。
ミニゲームなどの開始直前に、今回紹介するコマンドを挟むことでクオリティが上がること間違いありません。
というわけで、さっそく見ていきましょう!
カウントダウンをするには、titleコマンドとscoreboardコマンドを使う
カウントダウンをするためには、時間を計測するものと画面に文字を表示させるコマンドの2つを使う必要があります。
時間を計測して、それをもとに文字を表示させるということですね。
具体的には、scoreboardコマンドとtitleコマンドを使っていきます。
流れとしては
- スコアボードを作成するコマンドブロックの用意
(作った瞬間に時間を計測してしまうため、コマンドブロックに入力してボタンを押すと計測し始めるようにする) - スコアボードの値が特定のなった時に画面に文字を表示する
- スコアボードの削除
(負荷軽減のため。また、再度カウントダウンを始めるのに、既にカウントが始まっているとコマンドが失敗するため)
となります。
1、スコアボードを作成するコマンドブロックの用意
まず初めに、スコアボードを作成します。
ただし、時間を計測するスコアボードは、スコアボードが作成された瞬間から時間を計測してしまいます。
なので、コマンドブロックにコマンドを入力し、ボタンを押すことでスコアボードが作成されるようにします。
というわけで、コマンドブロックに以下のコマンドを入力しましょう。
コマンドブロックの出し方が分からないなんて方は、【Java版】コマンドブロックの出し方【1から始める配布マップ作り】を参考に用意してくださいね。
/scoreboard objectives add XXXX minecraft.custom:minecraft.play_time
コマンドブロックに備わっている3項目はいじる必要がありません。
もしもコマンドブロックの項目を弄ってしまった場合は、インパルス、無条件、動力が必要に合わせておきましょう。
XXXXの部分が作成するスコアボードの名称になります。
分かりにくいという方は、countdownなど自分で把握しやすい名称にしておきましょう。
ただし、名称を変えた場合はこの後紹介するコマンドのXXXX部分を各自変更した名称に変えてください。
そうしないと参照するスコアボードが正しくないと、正常に動作してくれません。
最後にボタンをつけ忘れないようにしましょう。
しゃがむことで、コマンドブロックの中身を開かずにつけることができます。
2、スコアボードの値が特定のなった時に画面に文字を表示する
さて、スコアボードを作成する準備ができたら次は画面に文字を表示するコマンドの準備です。
使うコマンドはtitleコマンドで、Minecraft Toolsという海外サイトのtitle generatorを使うと便利です。
今回は3、2、1とカウントダウンする「3」で例を出していきます。
というわけで、まずはコマンドブロックを2つ用意して向きを合わせて設置、それぞれに以下のコマンドを入力していきます。
①のコマンドブロックの内容
(リピート、無条件、常時実行)
execute if entity @p[scores={XXXX=20}] run title @a times 0 20 0
②のコマンドブロックの内容
(チェーン、条件付き、常時実行)
title @a title {"text":"3"}
文字を表示させるタイミングは、①のコマンドブロックに書かれている「XXXX=20」の部分で指定しています。
この20はスコアボードが作成されてから1秒経過した時点での値になります。
マイクラは1秒間の間に20回のカウントがされています。
なので、20と指定した場合は、1秒となります。
次に「2」という文字を表示させたいなら、1秒後である40を指定すべきです。
そうすることで、違和感なくカウントができます。
その際は「XXXX=40」と入力すればOKですよ。
また、表示させたい文字を変更するには、②のコマンドブロックの{”text”:”3″}の3の部分を表示させたい文字に変更してください。
「2」と表示させたいなら、2とだけ入力すれば問題ありません。
”(ダブルクォーテーション)で囲むことは忘れないようにしましょう!
3、スコアボードの削除
最後にスコアボードの削除を行います。
これは再度、スコアボードの作成をしてカウントダウンが始められるようにするための処理ですね。
スコアボードは既に同じ名前のものが存在していると作成することができません。
なので、削除しておかないと延々と時間を計測してしまう上に、再びカウントダウンが始められない仕様になっているわけですね。
というわけで、リピートコマンドブロックに以下のようにコマンドを入力しておきましょう。
(リピート、条件なし、常時実行)
execute if entity @p[scores={XXXX=100}] run scoreboard objectives remove XXXX
このコマンドによって、XXXXの値が100まで到達すると、XXXXという名称のスコアボードは削除されます。
つまり、100まで数えたら自動的に削除されますよということですね。
この100という値は各々都合の良い数字に調整してください。
今回は3、2、1、STARTという4つを表示させた後に削除されるようにしたかったので、スコアボード作成から5秒後の100を設定しました。
それぞれ1秒ごとに表示されるので、丁度良い感じです。
まとめ
というわけで、今回のまとめです。
今回使ったコマンドはこちら。
- 時間を計測するスコアボードを作成するコマンド
/scoreboard objectives add XXXX minecraft.custom:minecraft.play_time
- 計測した時間を元に、画面に文字を表示させるコマンド
execute if entity @p[scores={XXXX=20}] run title @a times 0 20 0
title @a title {"text":"3"}
- 一定時間の計測で、スコアボードを削除するコマンド
execute if entity @p[scores={XXXX=100}] run scoreboard objectives remove XXXX
- 文字を表示させるタイミングは、スコアボードの値を変更することで変えられます!
- 表示させたい文字を変更するには、text部分に続く箇所を変更する!
- スコアボードは削除しておかないと、再度カウントダウンすることができなくなります!
この記事は以上になります。