更新日:
1. 丸い範囲で調べる(distance)
/execute positioned 100 64 200 as @a[distance=..5] run title @s actionbar "広場にいます"
positioned で決めた場所から5ブロック以内にいる人が選ばれます。distance=..5 は「5以下」という意味です。コマンドブロックに入れるときは positioned を書かずに、コマンドブロックの場所から数えることもできます。
2. 四角い範囲で調べる(dx・dy・dz)
/execute as @a[x=100,y=60,z=200,dx=10,dy=5,dz=10] run title @s actionbar "部屋にいます"
x・y・z が範囲の角、dx・dy・dz がそこから広げる大きさです。この例では x が100〜110、y が60〜65、z が200〜210 の箱の中にいる人が選ばれます。体の一部でも箱にかかっていれば当てはまります。
2つの角の座標が分かっているときは、大きいほうから小さいほうを引いた数が dx などになります。座標は F3 キーの画面で確かめます。x・y・z を書き忘れると、コマンドを実行した場所が角になってしまうので注意します。
3. 入った瞬間に1回だけ動かす(くり返し)
/execute as @a[x=100,y=60,z=200,dx=10,dy=5,dz=10,tag=!in_room] run title @s title "ようこそ"
/tag @a[x=100,y=60,z=200,dx=10,dy=5,dz=10,tag=!in_room] add in_room
1行目をくり返しコマンドブロック(常時実行)に、2行目をチェーンに入れます。範囲の中にいて、まだ in_room タグが付いていない人にだけタイトルを出し、すぐタグを付けます。タグが付いている間は1行目に当てはまらないので、タイトルは入った瞬間に1回だけ出ます。
4. 出た瞬間を調べる(くり返し)
/execute as @a[tag=in_room] unless entity @s[x=100,y=60,z=200,dx=10,dy=5,dz=10] run title @s actionbar "部屋から出ました"
/execute as @a[tag=in_room] unless entity @s[x=100,y=60,z=200,dx=10,dy=5,dz=10] run tag @s remove in_room
3の後ろにチェーンでつなげます。タグが付いているのに範囲の外にいる人は「今出た人」です。メッセージを出してからタグを外すので、次にまた入ったときに3が動きます。
5. 例:安全地帯を作る(くり返し)
/effect give @a[x=100,y=60,z=200,dx=10,dy=5,dz=10] resistance 1 4 true
/effect give @a[x=100,y=60,z=200,dx=10,dy=5,dz=10] regeneration 1 1 true
範囲の中にいる間だけ、ダメージをほとんど受けなくなり、体力も回復します。効果の時間を1秒にしておくと、範囲を出たあとすぐに切れます。ロビーやお店の中に使えます。
6. 目印で範囲を置く
/summon marker ~ ~ ~ {Tags:["zone"]}
/execute at @e[type=marker,tag=zone] as @a[distance=..6] run effect give @s glowing 1 0 true
座標を毎回書く代わりに、範囲の真ん中に目印(marker)を置き、そこから distance で数えます。目印を何か所にも置けば、1つのコマンドでいくつもの場所に同じしくみを作れます。場所を変えたいときは目印を動かすだけです。
うまくいかないときの確認ポイント
- 誰も選ばれない:
x・y・zの座標が範囲の角になっているか、dyが小さすぎないか確認します。 - 範囲の外でも動く:
dxなどは「そこからの大きさ」です。もう片方の角の座標を書いていないか確認します。 - タイトルが何度も出る:3の2行目でタグを付けているか確認します。
- 統合版で作りたい:統合版も
x・dxなどやtag=!の書き方は同じです。
よくある質問
範囲にいる人の数を数えられますか?
execute store result score #room count if entity @a[x=100,y=60,z=200,dx=10,dy=5,dz=10] のように書くと、人数をスコアに入れられます。
プレイヤー以外のモブも調べられますか?
@a を @e[type=zombie] などに変えると、範囲に入ったモブを調べられます。
高さは関係なく調べたいときは?
dy を大きな数(たとえば 400)にして、y を世界の一番下にすると、高さに関係なく調べられます。