更新日:
よくある原因
@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 で範囲を読み込んでおく方法があります。
表示されるメッセージで見分ける
| メッセージ | 意味 |
|---|---|
| 「エンティティが見つかりませんでした」(No entity was found) | Java版。@e や @s などで、条件に合うエンティティがいない |
| 「プレイヤーが見つかりませんでした」(No player was found) | Java版。@p・@a・プレイヤー名で、条件に合うプレイヤーがいない |
| 「セレクターに一致する対象がありません」 | 統合版。条件に合う対象がいない |
どのメッセージも「書き方は正しいが、対象がいない」という意味です。書き方そのものが間違っているときは、赤い文字の構文エラーになります。その場合は「不明または不完全なコマンド」の原因を確認します。
死んでいる・ログアウトしているプレイヤー
リスポーン画面にいるプレイヤーは、@p や @e では選ばれません(@a には含まれます)。ミニゲームで全員に何かをするときに一部の人だけ効かない場合は、死亡中の人がいないか確認します。サーバーにいないプレイヤーの名前を指定したときも、対象が見つからない扱いになります。
Java版と統合版の違い
統合版では distance ではなく r・rm、limit ではなく c を使います。Java版の解説のセレクターをそのまま統合版で使うと「構文エラー」になります。変換ツールで書き換えを確認できます。