よくある原因
@e[type=...]のIDが間違っているdistance=..5などの範囲が狭すぎる- コマンドブロックの実行位置から対象が遠い
@sをコマンドブロック内で使い、想定と違う実行者になっている
切り分け例
/say test
/execute if entity @e[type=minecraft:zombie] run say zombie found
/execute if entity @e[distance=..10] run say nearby entity found最初は条件を緩くして、対象が拾えるか確認します。拾えたらtype、distance、nameなどを一つずつ追加します。
@sに注意
@sは「今そのコマンドを実行している主体」です。プレイヤーがチャット欄で実行する場合と、コマンドブロックやexecute内で実行する場合では意味が変わります。
セレクター引数の見直しポイント
- type:
type=zombieとtype=minecraft:zombieはどちらも使えますが、type=Zombieのような大文字や日本語名は使えません。 - name:名前にスペースが含まれる場合は
name="ボス ゾンビ"のように引用符で囲みます。 - tag:
tag=bossは /tag で付けたタグだけが対象です。付け忘れや綴り違いに注意します。 - scores:スコアを一度もsetしていないプレイヤーは、
scores={money=0}にも一致しません。 - limit と sort:
@e[limit=1]は並び順の既定値(Java版では @e は任意順)で選ばれます。一番近い対象がほしいときはsort=nearestを付けます。
読み込まれていない場所の対象
遠くにいるMobや、読み込まれていないチャンクにいるエンティティは、セレクターで選べません。スポーン地点付近の常時読み込みを利用したい場合は、Java版では /forceload で範囲を読み込んでおく方法があります。
Java版と統合版の違い
統合版では distance ではなく r・rm、limit ではなく c を使います。Java版の解説のセレクターをそのまま統合版で使うと「構文エラー」になります。変換ツールで書き換えを確認できます。