ルッキーのコマンドメモ

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

(マイクラ コマンド・データパック ) プレイヤがチェストや樽を開けたことを調べる方法

プレイヤがチェストや樽を開けたことを調べる方法

今回はプレイヤがチェストを開けたことを調べる方法を紹介します

目次

スコアを使ってプレイヤがチェストを開いたことを検知する

以下のようにチェストや樽を開けた回数を記録するスコアを利用することにより、プレイヤがチェストを開けたかを調べることができます。

#チェストを開けた回数を記録するスコア

scoreboard objectives add open minecraft.custom:minecraft.open_chest

あとは、スコアが1以上のプレイヤに対して操作を実行すれば、チェストを開けたプレイヤに対して操作を行えます。

# チェストを開けたプレイヤにopenとチャットに表示させる
execute as @a if score @s open matches 1.. run say open

# スコアをリセット
scoreboard players reset @a open

特定の位置にある樽が開かれているかを調べる

チェストには開かれていることを検知するためのnbtやblockstateがないので特定の地点にあるチェストが開かれているかを厳密に検知することはできません。

一方、樽はblockstateを利用して開かれていることを調べられるため、特定の位置の樽が開かれているかを調べられます。

以下のように、execute コマンドを利用することで調べられます。

#コマンドの実行地点にあるブロックが開いている樽であればopenと表示する
execute if block ~ ~ ~ barrel[open=true] run say open

これはblockstateのopenを利用しています。

特定の樽が閉じられたことを調べる

逆に特定の樽が閉じられたことを調べる方法を紹介します

以下のような樽を毎tick実行します

# 樽が開かれたらtestスコアを1に設定
execute if score @s test matches 0 if block ~ ~ ~ barrel[open=true] run scoreboard players set @s test 1

# testスコアが1で樽が閉じられていたらcloseとチャットに表示
execute if score @s test matches 1 if block ~ ~ ~ barrel[open=false] run say close
# testスコアを0にする
execute if score @s test matches 1 if block ~ ~ ~ barrel[open=false] run scoreboard players set @s test 0

これは、以下のような流れで樽が閉じられたことを検知しています

  • testスコアが1の時に樽が開かれればtestスコアを1にする

  • testスコアが1の時に樽が閉じられているならばこの瞬間タルが閉じられたとみなし、チャットに表示する

  • testスコアが1の時に樽が閉じられていればtestスコアを0に戻す

今回はコマンドの実行地点にある樽を調べましたが、例えば樽の座標に特定のタグをつけた防具立てを置いておけば、以下のようにして一度に複数の樽が閉じられたかを調べることもできます。

# testというタグがついた防具たての座標にある樽が空いているかを調べ、空いていればtestスコアを1に
execute as @e[type=armor_stand,tag=test] at @s if score @s test matches 0 if block ~ ~ ~ barrel[open=true] run scoreboard players set @s test 1

# 各防具立ての地点でtestスコアが1で樽が閉じられていたらチャットに表示
execute as @e[type=armor_stand,tag=test] at @s if score @s test matches 1 if block ~ ~ ~ barrel[open=false] run say close

# testスコアを0に
execute as @e[type=armor_stand,tag=test] at @s if score @s test matches 1 if block ~ ~ ~ barrel[open=false] run scoreboard players set @s test 0

まとめ

スコアボードのcustom:open_chestやcustom:open_barrelを利用してチェストや樽を開いたプレイヤに対しコマンドを実行することができます。

また、樽限定にはなりますがblockstateのopenを利用することにより、特定の位置の樽が開かれているかを調べることもできます。