Discordサーバー「マイクラ脱出マップ大全【仮運営】」を開設しました!

【時間を測る】scoreboardコマンドで時間制限を設ける【マイクラ】

【時間を測る】scoreboardコマンドで時間制限を設ける【マイクラ】

1. 時間制限のあるギミックにはscoreboardが必須

ボタンを押してから10秒以内に扉の先へ進まなければならない。
そんなギミックを作りたいと思った時に必要なものが、scoreboardコマンドです。

scoreboardコマンドでは様々な値をカウントできますが、その中でも”minecraft.custom:minecraft.play_time”を使うことで時間を計測することが可能です。

具体的には1tick経過するごとに値が1増えますので、カウントが20になれば1秒経過したことになります。
(1tickは1/20秒です)
つまり、10秒経過したらコマンドを実行するという場合には、値が200になった瞬間を検知すればよいわけですね。

実際にはどうするのか、コマンド例を見てみましょう。

1-1.コマンド例

まずはscoreboardコマンドでスコアボードを作成しなければなりません。
ということで以下のコマンドになります。

/scoreboard objectives add Time_Check minecraft.custom:minecraft.play_time

しかしながら、この項目の特徴として作成した瞬間に計測を始めます。
なので計測し始めたいときに実行されるように、コマンドを組んでください。

コマンドに不慣れで難しいと思った方は、コマンドブロックにレッドストーン動力が伝わるようにしておき、ボタンを押すことでコマンドを実行するようにすると分かりやすいかと思います。

さて、次は特定の時間が経過したらコマンドが実行されるようにします。
今回は最初の例に出したように、10秒後に扉が閉まってしまうという想定で組んでみます。

扉を閉める機構は「レッドストーントーチを空気ブロックに置き換えて、レッドストーンによる動力をオフにするもの」を使用します。
なので、スコアボードを作成した時点でレッドストーントーチを置いて扉を開いたものだと思ってください。

/execute as @a[scores={Time_Check=200}] if entity @s run setblock 10 10 10 minecraft:air

上記のコマンドをリピートにしておき、常に実行するようにしておきましょう。
また、if entity @sを組み込んだためTime_Checkの値が200のプレイヤーがいる時にのみ実行されるようにしていますので、余計な負荷をかけないようになります。

これで表面上のギミックはOKなのですが、このままでは延々と時間を計測し続けます。
それでは余計なものを残してしまうので、削除しましょう。

先ほどよりも1tick多い値を指定しつつ、実行するコマンドはスコアボードを削除するものにします。

/execute as @a[scores={Time_Check=201..}] if entity @s run scoreboard objectives remove Time_Check

201以上の値を持っているプレイヤーがいると、Time_Checkというスコアボードを削除するように指示しています。
これもリピートしておきましょう。

これで時間計測を用いるギミックが作れるようになりました。

1-2.時間を計測することができる、そのほかのscoreboardの項目

今回は最も普遍的な”minecraft.custom:minecraft.play_time”を用いて紹介しましたが、そのほかにも時間を計測することができる項目があります。

1つは”minecraft.custom:minecraft.time_since_death”です。

これは死亡時に0にリセットされる特徴があり、名前の通り死亡してからの時間を計測するものです。
リスポーンしてからカウントするので、PVPなどでやられてしまい復活する際などに活用できますね。

2つ目は”minecraft.custom:minecraft.time_since_rest”です。

先ほどの”time_since_death”とほとんど同じで、死亡してからの時間を計測します。
しかし、こちらは死亡した直後からカウントを始めるので、リスポーンするまでの時間すらも計測します。
それ故、マルチプレイの挙動に近いと言えます。

いずれにせよ、上手く使い分けることが大事です。

2.レッドストーンリピーターではNGな理由

scoreboardコマンドで時間を計測するという話でしたが、レッドストーン回路では駄目なのかという疑問を持つ方もいるかと思います。

赤石回路による時間計測と言うと、レッドストーンリピーターで遅延を発生させることだと思いますが、これはNGとなります。
なぜなら、場所を取る、時間の調整が難しいという2つの問題が存在するからです。

2-1.場所を取る

レッドストーンリピーターは1つで最大4tick遅延させることができます。
しかし、これではいくらレッドストーンリピーターを設置するスペースがあっても足りません。

1秒遅延させるのに5つ、10秒遅延させるのならば50個必要です。

数秒ならまだしも、10秒遅延させるのに50マス必要と言うのは現実的ではないですね。

加えて、遅延時間を変更することになった場合さらにリピーターを追加することになります。
スペースが確保できていれば良いですが、もし足りなかった場合はどうするのでしょうか。

2-1.時間の調整が難しい

レッドストーンリピーターを設置できるスペースがあるとして、時間の調整が難しいという問題も存在します。

レッドストーンリピーターの場合には、リピーターの数を数えなければどれだけの遅延か分かりません。
さらに遅延の値を変更したいという場合も、わざわざリピーターを増やしたり破壊したりとかなり手間がかかります。

その一方で、コマンドであれば数字で扱っているため、簡単に確認と修正を行えます。

どちらが扱いやすいかなんて聞くまでもないですよね。

なので、レッドストーン回路による時間の計測はNGということになります。

まとめ

というわけで、今回のまとめです。

  1. 時間を計測する必要のあるギミックはscoreboardコマンドの”minecraft.custom:minecraft.play_time”で時間を計測する。
  2. レッドストーン回路では設置するスペースや修正の手間などの問題から採用する理由がない。

この記事は以上になります。