MC CommanderMinecraft非公式コマンド支援

scheduleコマンドで数秒後に実行する方法

/schedule を使うと、データパックのファンクションを「5秒後」「1日後」のように時間をおいて実行できます。カウントダウンや、一定の間隔でくり返す仕組みを、コマンドブロックの回路なしで作れます。Java版1.14から使えるコマンドです。

schedulefunctionJava版

高度なコマンド生成ツールを開く

更新日:

5秒後にファンクションを実行する

/schedule function mypack:explode 5s

mypack:explode は、データパックの中の data/mypack/function/explode.mcfunction にあたるファンクションです(1.20.6以前はフォルダ名が functions)。ファンクションの作り方はデータパックの基本で説明しています。

時間の書き方

書き方意味
20t または 2020ティック(1秒)
5s5秒(100ティック)
1dゲーム内の1日(24000ティック、約20分)

単位を付けないときはティックとして扱われます。

一定の間隔でくり返す(ループ)

ファンクションの最後で、自分自身をもう一度予約すると、くり返し動き続けます。

# data/mypack/function/loop.mcfunction
effect give @a minecraft:regeneration 3 0 true
schedule function mypack:loop 10s

一度 /function mypack:loop を実行すると、その後は10秒ごとに全員へ再生の効果を付けます。毎ティック動かすより処理が軽いので、サーバーの負担を減らせます。

予約を取り消す

/schedule clear mypack:loop

上のループを止めるときに使います。取り消すまで、ワールドを閉じても予約は残ります。

replace と append の違い

書き方同じファンクションがすでに予約されているとき
/schedule function mypack:a 5s replace前の予約を消して、新しい時間で予約し直す(省略したときはこちら)
/schedule function mypack:a 5s append前の予約を残したまま、もう1つ追加する

実行する人と場所に注意

予約したファンクションは、プレイヤーではなくサーバー(ワールドの初期スポーン地点)として実行されます。そのため、ファンクションの中で @s や ~ ~ ~ を使っても、予約したプレイヤーにはなりません。プレイヤーごとに動かしたいときは、ファンクションの中で execute as @a at @s run … と書きます。

3・2・1のカウントダウン

# data/mypack/function/start.mcfunction
title @a title "3"
schedule function mypack:count2 1s
# data/mypack/function/count2.mcfunction
title @a title "2"
schedule function mypack:count1 1s
# data/mypack/function/count1.mcfunction
title @a title "1"
schedule function mypack:go 1s
# data/mypack/function/go.mcfunction
title @a title {"text":"スタート!","color":"green"}

それぞれのファンクションが数字を表示して、1秒後に次のファンクションを予約します。ゲームを始めるときは /function mypack:start を実行するだけです。

1人のプレイヤーだけ少し後に処理する

予約したファンクションは、だれが予約したかを覚えていません。先にタグで印を付けておきます。

# わなを踏んだときに実行
tag @s add trapped
schedule function mypack:release 5s
# data/mypack/function/release.mcfunction
tp @a[tag=trapped] 0 64 0
tag @a remove trapped

5秒以内に別の人もわなを踏むと、初期設定の replace によってタイマーがやり直しになり、2人まとめて解放されます。1人ずつ別々に時間を計りたいときは、スコアボードでティック数を数える方法を使います。

統合版との違い

統合版にも /function と /schedule はありますが、統合版の /schedule は書き方がまったく違い、もともとは「エリアが読み込まれたときに実行する」ための機能です。この記事の書き方は統合版では使えません。統合版で時間をおいて実行するときは、スコアボードでティックを数える方法が確実です。

動かないときの確認ポイント

よくある質問

コマンドを直接予約できますか?

できません。/schedule で予約できるのはファンクション(またはファンクションのタグ)だけです。

ゲームを一時停止すると時間も止まりますか?

ゲーム内の時間で数えるので、シングルプレイで一時停止している間は進みません。

昼夜の進行を止めるgameruleを使うと止まりますか?

止まりません。doDaylightCycle(1.21.11以降は advance_time)で昼夜を止めても、/schedule はゲームのティックで数えるので予定どおり実行されます。

コマンドを確認する

エラーが出たときは、コマンドエラー診断にコマンドと版を入れると、Java版・統合版の書き方の違いやIDの間違いなど、確認する場所がわかります。

関連ページ

データパックの基本

ファンクションの作り方です。

executeコマンドの基本

予約したファンクションでプレイヤーを対象にする方法です。

tickコマンドの使い方

ゲームの進む速さを変える方法です。

コマンド辞典

基本構文とコマンド別の使い方を確認できます。