当サイトはアドセンス及びアフィリエイト広告を使用しています。

Java版Minecraft・遅延コマンドブロックの作り方(マイクラJE)

動画の方では初心者向けに割とゆっくり解説しているので、記事の方ではすでにある程度コマンドを触っている人向けにサクサク簡単に説明していきます。

Java版Minecraft・コマンドブロックで遅延ありのコマンドを作成する方法Java版Minecraft・コマンドブロックで遅延ありのコマンドを作成する方法
目次

やり方

/scoreboard objectives add timer dummy

と打ち込みタイマー用のスコアボードを作成します。(timerの部分を好きな名前に変えて構いません。その場合は以降のtimerの部分を自分で付けた名前に変えてください。

ちゃんと追加されているか確認したい方は「/scoreboard objectives list」と打ち込んでください。「オブジェクトが1個あります : [timer]」とチャットログに表示されればOKです。

コマンドブロックを矢印がつながるように置いてください。矢印の根本から1つ目のコマンドブロックは「リピート 無条件 動力が必要」、2つ目のコマンドブロックは「チェーン 無条件 常時実行」、3つ目は「チェーン 条件付き 常時実行」としてください。

1つ目のコマンドブロックには

scoreboard players add timer timer 1

と打ち込んでください。これをコピペする場合はCtrl+Vで貼り付けられます。

2つ目のコマンドブロックには

execute if score timer timer matches 「遅延させたい秒数×20」 run 「実行したいコマンド」

を書き込んでください。(カギカッコは取っ払って英数字で入れてください)

今回は例として

execute if score timer timer matches 20 run say こんにちは

と打ち込んでいます。これは1秒経った時に「こんにちは」と発言するコマンドです。20の部分を好きな時間に、runの後を好きなコマンドに変えればそのコマンドが実行できます(必要に応じてexecuteの後ろも変えてください)

入れる数字は20の倍数でなくてもOKです。例えば30と入れれば1.5秒の遅延を置いてコマンドが実行されます。

最後のコマンドブロックには

scoreboard players set timer timer 0

と入れてください。

この状態で最初のリピートコマンドブロックにレッドストーン動力を渡せば、動力が流れている間1秒に一回「こんにちは」と発言されます。

コマンドブロックが動作するたびに出るログを消したい場合は

/gamerule commandBlockOutput false

とチャットで打ち込んでください。

理屈

最初にチャットで打ち込んだコマンドで時間計測用のスコアボードを作成しました。

1つ目のコマンドブロックはリピートなので1ティックごとに起動し、毎回タイマーの数値を1大きくします。
中のコマンドブロックは「execute if score timer timer matches 20」=「timerというエンティティのtimerというスコアが20と一致している時」と条件分岐をしているため、タイマーが20になったときのみ自身のコマンドを実行します。
最後のコマンドブロックは「条件付き」の設定をしているため一つ前のチェーンコマンドブロックが実行されたときのみタイマーの数値を0に設定します。

コマンドを増やす場合

コマンドを実行するコマンドブロックを複数にする場合もやることは同じです。最後のチェーンコマンドブロックの「条件付き」とすることを忘れないようにしてください。

コマンド一覧

【下準備】
タイマーの作成(チャットでOK)
/scoreboard objectives add timer dummy
ちゃんとできてるか確認(チャットでOK)
/scoreboard objectives list

【コマンドブロックの中身】
最初のコマンドブロック(矢印の一番手前)(毎1/20秒ごとに1カウント増加)
scoreboard players add timer timer 1

2つ目のコマンドブロック:数字20の書き換えで遅延秒数変更(20秒ごとに1秒)(runの後ろを好きなコマンドに書き換えでなんでも実行可能)
execute if score timer timer matches 20 run say こんにちは

3つ目のコマンドブロック(タイマーのリセット)
scoreboard players set timer timer 0

コマンドブロックの動作報告を消す(チャットOK)
/gamerule commandBlockOutput false

【デバッグ】
タイマーの手動リセット(チャットOK)
/scoreboard players set timer timer 0

コマンドブロックの報告を見えるように戻す(チャットOK)
/gamerule commandBlockOutput true

追記:タイマーをカウントダウンして0でコマンドを発動する方法

リクエストを頂いたので、タイマーをカウントダウンして0になった瞬間にコマンドが発動するやり方を説明します。

カウントアップの時と同様、

/scoreboard objectives add timer dummy

のコマンドは打っておいてください(すでに打っている場合は不要)

それができたら、コマンドブロックを矢印がつながるように4つ並べます。1つ目は「インパルス、無条件、動力が必要」で、2つ目が「リピート、無条件、動力が必要」、3つ目が「チェーン、無条件、常時実行」、4つ目が「チェーン、条件付き、常時実行」です。

ただし、繰り返しをせずにタイマーが0になったときに1回コマンドを発動してそれで終わりにする場合は、4つ目のコマンドブロックは置かないでください。今回は繰り返す例で説明しますが、繰り返さない場合は4つ目のコマンドブロックのコマンドは無視してください。

1つ目のコマンドブロックは以下のようにしてください。

scoreboard players set timer timer タイマーの最初の秒数×20

例えば3秒後にタイマーが0になるようにしたい場合、つまりタイマーのカウントダウンが始まるときの秒数を3にしたい場合は、3×20=60ですので、

scoreboard players set timer timer 60

と入れればOKです。

2つ目のコマンドブロックは

scoreboard players remove timer timer 1

としてください。

これで自分の手番が来るたび、つまり1ティックごとに、このコマンドブロックはタイマーの数値を1減らしてくれます。

3つ目のコマンドブロックには「execute if score timer timer matches 0 run 発動したいコマンド」を入力してください。runのあとはすべてのコマンドが使用可能です。

今回は「こんにちは!」と画面に表示するため、以下のコマンドを打ち込みました。

execute if score timer timer matches 0 run say こんにちは!

タイマーが0になった時に1度だけコマンドが発動すればよいのなら作業はこれで終了です。一番最初のコマンドブロックにレバー等で動力を流しましょう。

タイマーを常にカウントダウンし、0になるたびにコマンドが発動するようにしたい場合は4個目のコマンドブロックが必要です。その場合は

scoreboard players set timer timer 2ループ目以降のタイマーの開始秒数×20

を入力しましょう。今回は再びタイマーを60(=3秒)に戻すため、

scoreboard players set timer timer 60

と入力しています。ここの数字を変えることで、1周目のカウントダウンが始まる秒数と、2周目のカウントダウンが始まる秒数を変更することができます。2周目以降は常にこのコマンドブロックで決めた秒数からカウントダウンが始まります。

コマンドを入れ終わったら、一番手前のコマンドブロックにレッドストーン動力を流してみましょう。タイマーが0になった瞬間に3つ目のコマンドブロックに設定していたコマンドが発動するはずです。

4つ目のコマンドブロックを用意していた場合は、1度きりではなく以降は4つ目のブロックに設定していた秒数がカウントダウンされるたびに3つ目のブロックに設定しておいたコマンドが発動するはずです。

4つ目のコマンドブロックを用意していない場合、再びレッドストーン信号を流し直さない限り、もう一度3つ目のコマンドブロックの内容が発動することはありません。

リピートのコマンドブロックにおいて、addではなくremoveを使うことでスコアボードの値を減らしているのがキモですね。

よかったらシェアしてね!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次