どーも、お久しぶりです。Takeです。久々の投稿です。
この記事で Minecraft で Mod なし・コマンドだけで時間停止する方法について記述します。
ちょっと難しいかもしれませんが、この記事通りにやれば下記動画みたいに時間停止できます。
★★★ショート動画ですので是非見てください!★★★
https://youtube.com/shorts/9rfFF17-rws
※ 上記動画ではスタンドっぽいのもでてますが、今回の記事ではスタンドを出す方法については記述しません。
またこのスタンドは完全に飾りですので、気にしなくて大丈夫です。
今回のマイクラのバージョンは、Minecraft Java版 1.17 ですが、Java版なら問題なく実行できると思います。
マイクラでザ・ワールド(時間停止)する方法
まずザ・ワールドの動きですが、動作イメージは下記です。
- 「ザ・ワールド!!!」(かっこいい演出をする!)
- 5秒の時間計測をスタート!!
- 5秒間、すべての生き物(エンティティ)の動作を停止
- 5秒後、時間が動きだし、すべてのエンティティが動き出す
「ザ・ワールド!!!」(かっこいい演出をする!)
これは「ザ・ワールド!!!」(演出)これは好みだと思います。。
アニメ「ジョジョの奇妙な冒険」を見てなんとなく爆発っぽいイメージがあったので、私は爆発させるイメージにしました。
コマンドはこんな感じです。
1 2 3 |
tellraw @a[sort=nearest,limit=1] {"text":"「世界」ツ!!時よ止まれ!","underlined":true} particle minecraft:explosion_emitter ~ ~ ~ 5 5 5 1 100 playsound minecraft:entity.generic.explode master @a ~ ~ ~ |
まず「「世界(ザ・ワールド)」ツ!!時よ止まれ!」って叫んで、爆発します。
これなくてもいいんですが、あったほうがかっこいいです。
5秒の時間計測をスタート!!
この処理はこんな感じの流れです。
- 時間計測スタート!(スコアボードにtimerを登録)
- 5秒経過するまで待つ(スコアボードのtimerを1ずつ加算)
- 5秒経過!(スコアボードのtimerをリセット)
まず「ザ・ワールド」開始時にマイクラのスコアボードにtimerを登録します。
1 |
scoreboard objectives add timer dummy |
つぎに時間が経過するごとに timerの値をどんどん加算するようにします。
Minecraft にはゲームティックというものがあり、イメージは Minecraft の時間経過のようなもの1秒間に20回動き続けてるものです。
このゲームティックが1回処理するたびにtimerを1ずつ足すようにします。
こうすることで1秒間実行し続けることで、timerの値は20になります。
1 |
scoreboard players add @a timer 1 |
最後に5秒経過したとき(つまり timer が20×5 = 120になったとき)にtimer の値を削除します。
1 |
execute if score @p timer matches 100.. run scoreboard objectives remove timer |
5秒間、すべての生き物(エンティティ)の動作を停止
時間とすべての生き物(エンティティ)の動作を停止する方法ですが、
さきにコマンドを記述するとこんな感じです。
1 2 3 4 5 6 |
execute if score @p timer matches ..99 run gamerule doDaylightCycle false execute if score @p timer matches ..99 run gamerule doFireTick false execute if score @p timer matches ..99 run gamerule randomTickSpeed 0 execute if score @p timer matches ..99 run gamerule doMobSpawning false execute if score @p timer matches ..99 run gamerule doInsomnia false execute as @e[type=!player] if score @p timer matches ..99 run data merge entity @s {NoAI:true,NoGravity:true,Motion:[0,0,0],knockback_resistance:1,DeathTime:5s} |
「if score @p timer matches ..99」とありますが、これはタイマーが5秒未満の場合に処理するという意味です。
これはマイクラの gamerule の設定を書き換えて、エンティティの動き停止しています。
- gamerule doDaylightCycle false ← マイクラの時間経過を固定
- gamerule doFireTick false ← 火の燃え移り停止
- gamerule randomTickSpeed 0 ← 植物の成長停止
- gamerule doMobSpawning false ← モブのスポーン停止
- gamerule doInsomnia false ← ファントムのスポーン停止
- execute as @e[type=!player] run data merge entity @s {NoAI:true,NoGravity:true,Motion:[0,0,0],knockback_resistance:1,DeathTime:5s} ← エンティティの動き停止
gameruleは大体こんな感じでいけますが、
エンティティの動き停止(execute as @e[type=!player] run data merge entity @s {NoAI:true,NoGravity:true,Motion:[0,0,0],knockback_resistance:1,DeathTime:5s})について補足します。
この {NoAI:true,NoGravity:true,Motion:[0,0,0],knockback_resistance:1,DeathTime:5s} の部分ですが、
これはエンティティに「重力をなくす」「モブのAI機能をなくす」「エンティティの動き」「ノックバックを無効化する」です。
5秒後、時間が動きだし、すべてのエンティティが動き出す
5秒たったらまずスコアボードの timer を削除します。
1 |
execute if score @p timer matches 100.. run scoreboard objectives remove timer |
この方法ですが、さきほどの停止した手順の逆をやればOKです。
1 2 3 4 5 6 |
execute if score @p timer matches 100.. run gamerule doDaylightCycle true execute if score @p timer matches 100.. run gamerule doFireTick true execute if score @p timer matches 100.. run amerule randomTickSpeed 3 execute if score @p timer matches 100.. run gamerule doMobSpawning true execute if score @p timer matches 100.. run gamerule doInsomnia true execute as @e[type=!player] if score @p timer matches 100.. run data merge entity @s {NoAI:false,NoGravity:false,Motion:[0,0,0],knockback_resistance:0,DeathTime:0s} |
最後にかっこよく「時は動き出す...」と言ってあげましょう!
1 |
tellraw @a[sort=nearest,limit=1] {"text":"時は動き出す","underlined":true} |
これでOK!あとはコマンドブロックで実装しましょう。
ザ・ワールドをコマンドブロックで実行する!!
最後にマインクラフトで コマンド ブロックでザワールドを実行する方法です。
前章で説明したコマンドを下の表のようにコマンドブロックに書き込めばOKです!
No. | コマンドブロックの種類 | 条件 | コマンド |
1 | インパルス | 動力が必要 | gamerule commandBlockOutput false |
2 | チェーン | 常時実行 | tellraw @a[sort=nearest,limit=1] {"text":"「世界」ツ!!時よ止まれ!","underlined":true} |
3 | チェーン | 常時実行 | particle minecraft:explosion_emitter ~ ~ ~ 5 5 5 1 100 |
4 | チェーン | 常時実行 | playsound minecraft:entity.generic.explode master @a ~ ~ ~ |
5 | チェーン | 常時実行 | scoreboard objectives remove timer |
6 | チェーン | 常時実行 | scoreboard objectives add timer dummy |
7 | ループ | 常時実行 | scoreboard players add @a timer 1 |
8 | チェーン | 常時実行 | execute if score @p timer matches ..99 run gamerule doDaylightCycle false |
9 | チェーン | 常時実行 | execute if score @p timer matches ..99 run gamerule doFireTick false |
10 | チェーン | 常時実行 | execute if score @p timer matches ..99 run gamerule randomTickSpeed 0 |
11 | チェーン | 常時実行 | execute if score @p timer matches ..99 run gamerule doMobSpawning false |
12 | チェーン | 常時実行 | execute if score @p timer matches ..99 run gamerule doInsomnia false |
13 | チェーン | 常時実行 | execute as @e[type=!player] if score @p timer matches ..99 run data merge entity @s {NoAI:true,NoGravity:true,Motion:[0,0,0],knockback_resistance:1,DeathTime:5s} |
14 | チェーン | 常時実行 | execute if score @p timer matches 100.. run gamerule doDaylightCycle true |
15 | チェーン | 常時実行 | execute if score @p timer matches 100.. run gamerule doFireTick true |
16 | チェーン | 常時実行 | execute if score @p timer matches 100.. run gamerule randomTickSpeed 3 |
17 | チェーン | 常時実行 | execute if score @p timer matches 100.. run gamerule doMobSpawning true |
18 | チェーン | 常時実行 | execute if score @p timer matches 100.. run gamerule doInsomnia true |
19 | チェーン | 常時実行 | execute as @e[type=!player] if score @p timer matches 100.. run data merge entity @s {NoAI:false,NoGravity:false,Motion:[0,0,0],knockback_resistance:0,DeathTime:0s} |
20 | チェーン | 常時実行 | execute if score @p timer matches 100.. run tellraw @a[sort=nearest,limit=1] {"text":"時は動き出す","underlined":true} |
21 | チェーン | 常時実行 | execute if score @p timer matches 100.. run scoreboard objectives remove timer |
最後に
いかがでしたでしょうか?
この記事で Minecraft で Mod なし・コマンドだけで時間停止する方法について記述しました。
★ 動画でもこの記事について解説していますのでよければどうぞ!
https://youtu.be/li8MPqxlP1A
最近YouTube でマイクラの普段動画流してます。
よければチャンネル登録&高評価していただけると嬉しいです。
ではでは。