この記事では、Minecraft Java Edition(バージョン1.19.2)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
コマンドを使って座標を知りたいマインクラフター
「コマンドを使って座標を知りたいな。どうやってやればいいの?」
こんな疑問を解決します!
- dataコマンドで座標をstorageに保存する
こんにちは! マインクラフターのなつめ(@natsume_717b)です。
マイクラ歴は5年程で、最近は脱出マップやミニゲームを制作しています!
→ダウンロードページ
この記事では、コマンドを使って座標の値を取得する方法について解説していきます。
初めに紹介する方法は2つのコマンドで保存した座標を表示することができますが、1点だけ欠点があります。
なので、その欠点を補ったやり方も解説しました。
少々ボリュームのある記事になってしまいましたが、ぜひ参考にしてくださいね。
それでは、見ていきましょう!
dataコマンドで座標をstorageに保存する
dataコマンドを使うことで、座標を取得することができます。
具体的には、dataコマンドを使ってstorageに座標を保存します。
というわけで、そのためのコマンドが以下のものです。
/data modify storage position 001 set from entity @p Pos
このコマンドを実行することで、positionというstorageの001という項目にコマンドの実行場所から最も近いプレイヤーの座標のデータを保存します。
storageは自分で作ることができますが、今回は座標を保存していることが分かるように位置を意味するpositionという単語を使用しました。
このコマンドは、実行した時点での座標を保存しますので座標の変化を常に追いたい場合はリピートするなど常時実行しておく必要があります。
座標の取得自体はこれで完了しており、これを活用する例を今から見ていきます。
今回はtellrawコマンドで保存した座標を表示してみましょう。
以下のコマンドを使います。
tellraw @a [{"text":"プレイヤーAは"},{"nbt":"001","storage":"position"},{"text":"にいます"}]
このコマンドは全てのプレイヤーに対して、「プレイヤーAは{保存されている座標}にいます」というメッセージを表示します。
例えばXYZが100の座標でデータを保存していた場合は、「プレイヤーAは[100d,100d,100d]にいます」というメッセージが表示されるわけですね。
実際はもっと細かい値まで表示されるうえに角括弧などの存在で、かなり見にくいのが実状ですが、これで座標の取得と呼び出しができました。
小数点以下を切り捨てたい場合
上記で紹介したコマンドを実行すると、思いの外数字の桁数が多くてびっくりすると思います。
そして何より、桁数が多すぎて扱いづらいと思うはず。
そんな時は、スコアボードに座標の値を投入して整数部分だけを取り出します。
というわけで、以下のコマンドを使います。
/scoreboard objectives add PosX dummy
/scoreboard objectives add PosY dummy
/scoreboard objectives add PosZ dummy
スコアボードを3つ作成し、それぞれにX、Y、Zの値を入れていきます。
というわけで、以下の3つのコマンドがX、Y、Zの値を入れていくコマンドです。
/execute as @a store result score @s PosX run data get entity @s Pos[0]
/execute as @a store result score @s PosY run data get entity @s Pos[1]
/execute as @a store result score @s PosZ run data get entity @s Pos[2]
上からX、Y、Zの順です。
そして、鍵となるのが文末の[]の内側の数字です。
これらはPosの0番目の値、1番目の値、2番目の値を得るように指示しています。
Pos[0]ならば、Posの0番目にある情報というわけですね。
X座標の値はPos[0]にあるので、それをスコアボードに反映させればX座標を抜き出せているということになります。
同様に[1]でY座標の値、[2]でZ座標の値を、それぞれのスコアボードに投入しています。
Posは座標に関する項目でXYZ順に並んでいます。
実行しているコマンド自体は、dataコマンドでPosの情報を得ているだけです。
しかしstore resultでscoreを指定しているので、得た値がスコアボードに投入されるようになっています。
これで座標の抜き出しはOKです。
これをメッセージに表示させるには、tellrawコマンドで少しだけ複雑なコマンドを書いていけばOKです。
以下のコマンドを使えば、コマンドの実行場所から最も近いプレイヤーの座標をメッセージとして表示させられます。
/execute as @p run tellraw @a ["",{"text":"プレイヤーAはX="},{"score":{"name":"@s","objective":"PosX"}},{"text":"、Y="},{"score":{"name":"@s","objective":"PosY"}},{"text":"、Z="},{"score":{"name":"@s","objective":"PosZ"}},{"text":"にいます"}]
なおこのコマンドを実行するときは、プレイヤーAという表記は変えておきましょう。
今回はあくまでも例として出したので、雑に設定しました。
また、as @pの部分を変更することで、座標が表示されるプレイヤーを変更することができます。
タグなどをうまく組み合わせてプレイヤーを判別するのが良いですね。
まとめ
というわけで、今回のまとめです。
今回使ったコマンドはこちら。
- storageに座標の情報を保存して、メッセージとして表示させる方法
《座標の情報をstorageに保存するコマンド》
/data modify storage position 001 set from entity @p Pos
《storageに保存した値を呼び出しつつ、メッセージとして表示させるコマンド》
tellraw @a [{"text":"プレイヤーAは"},{"nbt":"001","storage":"position"},{"text":"にいます"}]
- スコアボードに座標の値を投入して、メッセージとして表示させる方法
《X、Y、Zそれぞれの値を格納するためのスコアボードを作成するコマンド》
/scoreboard objectives add PosX dummy
/scoreboard objectives add PosY dummy
/scoreboard objectives add PosX dummy
《作成したスコアボードに座標の値を投入するコマンド》
/execute as @a store result score @s PosX run data get entity @s Pos[0]
/execute as @a store result score @s PosY run data get entity @s Pos[1]
/execute as @a store result score @s PosZ run data get entity @s Pos[2]
《スコアボードの値を抜き出してメッセージに表示させるコマンド》
/execute as @p run tellraw @a ["",{"text":"プレイヤーAはX="},{"score":{"name":"@s","objective":"PosX"}},{"text":"、Y="},{"score":{"name":"@s","objective":"PosY"}},{"text":"、Z="},{"score":{"name":"@s","objective":"PosZ"}},{"text":"にいます"}]
- どのような方法を使うにしても、まずは座標の値をコマンドで扱えるようにすることが大事です。
この記事は以上になります。