ルッキーのコマンドメモ

主にマイクラのコマンドやデータパックに関することを書いていきます。

(マイクラ データパック) 現在の天候を調べてコマンドを実行する

現在の天候を調べる

今回は現在の天候を調べてコマンドを実行する方法について紹介します。

目次

天候の調べ方

データパック限定の手段にはなりますが、predicateのweather_checkを利用することで現在の天候を調べることができます。

雨が降っているか調べる

データパックのdata/<名前空間>/predicates内に<好きな名前>.jsonという名前のファイルを作成し、以下のように記述します。

rain.json

{
  "condition": "minecraft:weather_check",
  "raining": true
}

そして、function内でexecute if predicateなどを利用することにより、天候を検知してコマンドを呼び出せます。

# 雨が降っている時、rainingとチャットに表示する。
execute if predicate <名前空間>:rain run say raining

晴れているかを調べる

json内の"raining"をfalseにするだけで検知できます。

sunny.json

{
  "condition": "minecraft:weather_check",
  "raining": false
}

雷雨の時のみを調べる

json内で"raining"ではなく、"thundering"を指定することで検知できます。

{
  "condition": "minecraft:weather_check",
  "thundering": true
}

応用例

次に天候の検知を応用したコマンドを紹介します。

雨に当たっているプレイヤをkillする

地表にいるプレイヤを検知するでも紹介しましたが、雨が降っていることの検知と、プレイヤの頭上にブロックがないことを検知することにより、雨に当たっているプレイヤを検知することができます。 functionはこんな感じ。

# 雨に当たっているプレイヤに風邪をひいてしまったと発言させる。
execute as @a at @s positioned over world_surface if entity @s[dy=0] if predicate test:rain run say は雨に当たって風邪をひいてしまった。

# 雨に当たっているプレイヤをkill
execute as @a at @s positioned over world_surface if entity @s[dy=0] if predicate test:rain run kill @s

雨が降っている時に走ったプレイヤをkillする

走っていることは事前に/scoreboard objectives add running minecraft.custom:minecraft.sprint_one_cmで走った距離を検知するスコアボードを作っておくことで調べられます。

コマンドの実装はこのようになります。

# 雨に当たっており、走った距離を検知するスコアが1以上なら滑って転んでしまったと発言させる
execute as @a if score @s runnning matches 1.. if predicate test:rain run say は滑って転んでしまった。

# そのプレイヤをkill
execute as @a if score @s runnning matches 1.. if predicate test:rain run kill @s

# 走ったことを検知するスコアをリセット
scoreboard players reset @a running

まとめ

天候を調べるときはpredicateのweather_checkを利用することで調べることができます。