コマンド仕様が1.13から変更になってしまい、testforコマンドが無くなったので「近くにプレイヤーがいる場合に1回だけ実行する」方法がよくわからなくなくて。
調べても調べても、testforのやり方しか出てこない。
1.13以降ではどうすればいいのか…。
と思っていたのですがWikiを眺めていて解決しました!!うれしい!!
近くにプレイヤーがいる場合に1回のみコマンド実行する場合
プレイヤーが近くにいることを検知する方法
プレイヤーが近くにいることを検知するには、1.13までの間はtestforを使用していました。例えば範囲が10ブロック以内にプレイヤーがいるかどうかを検知するにはこんな感じ。
/testfor @a[r=10]
1.13以降ではexecuteを使用します。こんな感じ。
/execute if entity @a[distance=10]
これとコンパレーターを使います。
コンパレータを使用
あとは1.13より前の頃と同じです。
- 常時実行、リピートのコマンドブロック
- コンパレーター
- 動力が必要、インパルスのコマンドブロック
を使用します。
構成はこんな感じ。
コマンドブロックの向きは合わせなくても大丈夫ですが、コンパレーターの向きはこの通りにしないと動かないと思います。
上記のように設置したら、まずはリピートのコマンドブロック(紫のやつ)を設定。
続いてインパルスのコマンドブロック(茶色のやつ)
プレイヤーが近くに来たら、「誰かたすけて…」というように設定しました。
やってみます。
ちゃんと、近くに来た時に1回だけ実行されました!
何回も何回も表示されません!!やったー!!!
プレイヤーが離れたことを検知するのは?
さて逆にプレイヤーが離れたことを検知するには、リピートコマンドブロックのコマンドを以下のように変更するだけです。
/execute unless entity @a[distance=..10]
離れようとすると「行かないで!!」というようにしました。
この仕組みを使って、プレイヤーが近くに来たらボス敵を召喚、プレイヤーが離れるとボスをkillする というような仕組みを作ることもできますね。
コメント