この記事では、Minecraft Java Edition(バージョン1.19)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
コマンドの対象に悩んでいるマインクラフター
「2番目に近いプレイヤーを対象にする方法ってないのかな? プレイヤーじゃなくて2番目に近いmobだけを対象にする方法も知りたいな」
こんな疑問を解決します!
- 2番目に近いプレイヤーを対象にする方法
- プレイヤー以外を対象にしたい場合
こんにちは! マインクラフターのなつめ(@natsume_717b)です。
マイクラ歴は5年程で、最近は脱出マップやミニゲームを制作しています!
→ダウンロードページ
この記事では、2番目に近いプレイヤーを対象としてコマンドを実行する方法について解説していきます。
通常、@pを使うことで最も近いプレイヤーを対象とすることができますが、2番目に近いプレイヤーを対象とするためのターゲットセレクターは存在しません。
そこで、コマンドを駆使して2番目に近いプレイヤーを指示する方法を紹介していきます。
またプレイヤー以外でも可能なので、そのことも後半にお話しています。
それでは、さっそく見ていきましょう!
2番目に近いプレイヤーを対象にする方法
2番目に近いプレイヤーを対象にするには、複数のコマンドを使う必要があります。
というのも、@pのようにターゲットセレクターで簡単に指定する方法が存在しないからですね。
というわけで、以下の4つのコマンドを駆使して2番目に近いプレイヤーだけを対象にします。
- コマンドの実行場所から近い2人を対象にタグを付与する。
- 最も近いプレイヤーのタグを消す。
- タグを持っているのが2番目に近いプレイヤーだけになるので、付与したタグを指定しつつコマンドを実行する。
- 付与したタグを消す。
今回は2番目に近いプレイヤーにダイヤモンドを1つ付与したいという体で具体例を出していきます。
①近い2人にタグを付与する
tag @a[sort=nearest,limit=2] add 2nd
上記のコマンドで、コマンドの実行場所から近い2人のプレイヤーに2ndというタグを付与します。
sort=nearestでコマンドの実行場所から近い順に対象にすることを指示し、limit=で2人までを対象にするようにしています。
もしコマンドの実行場所を指定したいという場合は、executeコマンドでatを指示する必要があります。
詳しくは以下の記事をどうぞ。
②最も近いプレイヤーから付与したタグを消す
tag @p remove 2nd
コマンドの実行場所から最も近いプレイヤーをコマンドの対象にしないようにするために、最も近いプレイヤーから先ほど付与したタグを消します。
このコマンドがあるおかげで、2番目に近いプレイヤーだけにタグが付いている状態にすることができるわけですね。
また①の段階でコマンドの実行場所を指定している場合には、このコマンドも同じように指定しなければいけません。
指定しないと基準となる座標がばらけてしまうので、正確に動作しなくなってしまいます。
③タグを持っているプレイヤーを対象にコマンドを実行する
give @p[tag=2nd] minecraft:diamond 1
上記のコマンドで2ndのタグを持っているプレイヤーだけを対象にダイヤモンドを付与します。
①、②で2ndのタグを持っているプレイヤーは2番目に近いプレイヤーだけに絞ったので、これで2番目に近いプレイヤーだけを対象にコマンドを実行できましたね。
giveコマンドでなくても、他のコマンドでターゲットセレクターを指定する箇所に同じくtag=2ndを指示することで、2番目に近いプレイヤーだけを対象にすることができます。
④タグを消す
tag @p[tag=2nd] remove 2nd
上記のコマンドで、2番目に近いプレイヤーがまだ持っている2ndのタグを消します。
このコマンドは一見「要らないのでは?」と思うかもしれませんが、何度も2番目に近いプレイヤーを指定したい場合に必要となります。
というのも、タグを消さないでおくと2ndのタグを持っているプレイヤーが多数存在することとなってしまい、コマンドの対象が正しく選ばれない可能性が出てくるからです。
なので、1度使い終わったタグを消して、なるべく誤作動を起こさないようにしています。
またこのコマンドもexecuteコマンドでコマンドの実行場所を指示している場合は、同じように指示しましょう。
ここまで4つのコマンドを紹介しましたが、基本的にはfunctionコマンドで一気に起動してしまうのが簡単かと思います。
しかし、functionコマンドはファイルを作成する必要があるので慣れないうちは難しいです。
コマンドにまだ慣れておらずfunctionコマンドなんかわからないという方は、代用案としてコマンドブロックで再現することも可能となっています。
まず①のコマンドを入力したコマンドブロックはインパルス、無条件、動力が必要にして、②③④のコマンドに関してはチェーンコマンドブロックに条件付き、常時実行にすればOKです。
①のコマンドを内蔵しているコマンドブロックにボタンでも取り付けて、ボタンを押すことで2番目に近いプレイヤーを対象としたコマンドを実行できます。
自動でコマンドを実行させたいという場合は、executeコマンドで条件を付与しつつ①のコマンドブロックをリピート、無条件、常時実行に変更する必要があります。
functionコマンドについては、コマンドをまとめて負荷軽減!functionコマンドの準備とやり方解説!【Java版】から知ることができます!
プレイヤー以外を対象にしたい場合
前項ではプレイヤーだけを対象に解説しましたが、プレイヤー以外でも対応することが可能です。
というのも、タグを付けられるのはプレイヤーのみならず動物やゾンビなどといったmobも対応しているからです。
例えば2番目に近いヒツジを対象にしたいとします。
その場合は以下のようにコマンドを打ちこんでいきましょう。
(ヒツジにダイヤを付与することはできないので、代わりにeffectコマンドで光らせるようにしています)
tag @e[type=minecraft:sheep,sort=nearest,limit=2] add 2nd
tag @e[type=minecraft:sheep,sort=nearest,limit=1] remove 2nd
effect give @e[type=minecraft:sheep,tag=2nd] minecraft:glowing 10 0 true
tag @e[type=minecraft:sheep,tag=2nd] remove 2nd
このようにターゲットセレクターを上手く使うことで、プレイヤー以外も指定することができます。
まとめ
というわけで、今回のまとめです。
今回使ったコマンドはこちら。
tag @a[sort=nearest,limit=2] add 2nd
tag @p remove 2nd
give @p[tag=2nd] minecraft:diamond 1
tag @p[tag=2nd] remove 2nd
この記事は以上になります。