マルチプレイなら『シン・VPS』がおすすめ!

コマンドブロックに入力するとテレポートできない理由【マイクラ】

コマンドブロックに入力するとテレポートできない理由【マイクラ】

この記事では、Minecraft Java Edition(バージョン1.18.1)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。

コマンドブロックにtpコマンドを入力してもテレポートしないマインクラフター
「手打ちでは機能したのに、コマンドブロックにtpコマンドを入力したらテレポートしなくなった! 何でコマンドブロックだと使えないの?」

こんな疑問を解決します!

本記事の内容
  • コマンドブロックの@sはコマンドブロックを指示している
  • executeコマンドで@sが示すものを指定する

こんにちは! マインクラフターのなつめ(@natsume_717b)です。

なつめ

マイクラ歴は5年程で、最近は脱出マップを配布・制作しています!
→配布マップ・ダウンロードページ

この記事では、手打ちでは使えたtpコマンドがコマンドブロックで実行しようとしたら使えないという悩みを解決していきます。

コマンドに慣れていない人には馴染みがないかもしれませんが、この疑問には「コマンドの実行者」というものが鍵になります。

要するに、誰がコマンドを実行しているのかということですね。
その説明を行うほか、コマンドブロックでもtpコマンドが使えるようになる方法などについても解説しています。

それでは、さっそく見ていきましょう!



コマンドブロックの@sはコマンドブロックを指示している

コマンドブロックに@sを入力してコマンドを実行すると、基本的にはコマンドブロックそのものを対象にすることになります。

なので、コマンドブロックにtpコマンドを入力して@sを使用した場合、コマンドブロックをテレポートさせようとしてしまいます。
(なので、テレポートされることなくコマンドの実行に失敗する)

  • コマンドブロックをテレポートさせようとしてしまっているコマンド例
/tp @s 10 10 10

また、同様の例としてgiveコマンドで@sを使用している場合にも起こり得ます。
ブロックにアイテムを付与することができないので、これも失敗します。

  • コマンドブロックにアイテムを付与させようとしてしまっているコマンド例
/give @s minecraft:diamond

なので、コマンドブロックで@sを使うのはなるべく避けましょう。
@sではなく@pを使うのが無難ですね。

@pのメリットとしては、手打ちの場合コマンドを実行させたプレイヤー自身が対象になるほか、コマンドブロックに打ち込んで使った場合でも、最も近いプレイヤーを指定することになる点です。

なので、基本的にはボタンやレバーなどでコマンドブロックに赤石信号を送ったプレイヤーが対象になります。

また、絶対に自分だけを対象にしたい場合はプレイヤーIDでプレイヤーを指定してしまっても良いです。
ターゲットセレクターを入力する箇所では、プレイヤーIDは候補として現れるので、入力の手間もありません。

@pとプレイヤーIDのどちらを使うのかは、状況に応じて決めればOKです。
様々なプレイヤーにコマンドを実行させたいのならば@pを使って、そうでないならプレイヤーIDで指定してもいいと思います。

というわけで、コマンドブロックに@sはNGとは言いませんが、若干癖があるので気をつけましょう。

executeコマンドで@sが示すものを指定する

コマンドブロックに@sは不向きだという話をしましたが、コマンドブロックでも@sを多用する場合も存在します。

それは、executeコマンドで@sの定義を決めた場合です。
executeコマンドでasを指定することで、その内容が@sになります。

例えば、Riceというタグを持っていて、かつeatというスコアボードの値が10以上のプレイヤーをasに指定します。

/execute as @a[tag=Rice,scores={eat=10..}] run give @s minecraft:diamond 1

実行されるコマンドは、コマンドの実行者に対してダイヤモンドを1つ付与するものです。
なので先述した通りコマンドブロックに入力して実行した場合には、コマンドブロックにダイヤモンドを付与しようとして、失敗してしまいます。

そこでasの部分です。
今回はtag=とscore=でコマンドの実行者を、Riceというタグを持ちつつeatというスコアボードの値が10以上のプレイヤー全員に変更しています。

なので、giveコマンドの@s部分はタグとスコアボード両方の条件を満たしているプレイヤー全員を意味しています。

run以降に入力するコマンドを変更すれば、それぞれのコマンドでasで指定した対象に対してコマンドを使うことができます。

今回のコマンドでは@sを一度しか使っていないので、giveコマンドの@s部分をasで指定した箇所と同じように入力しても同じことができます。

しかし、何度も@sを使用する場合には、はじめにasで定義しておいた方が楽です。
複雑なターゲットセレクターを入力することなく、@sの2文字で済みますからね。

何度も@sを使う例としては、atも指定する場合などでしょうか。
asはコマンドの実行者は変更しますが、コマンドが実行される座標は変更されていません。

なので、「~」や「^」といった座標を示す記号を使う際はat @sでコマンドの実行者がいる座標をコマンドが実行される座標に変更することがままあります。

at以外にも使用することがありますので、基本的にははじめに@sをasで決めておいた方が良いですね。

まとめ

というわけで、今回のまとめです。

今回使ったコマンドはこちら。

今回使ったコマンド
  • コマンドブロックに入力して使うとテレポートできないコマンド
    (@sがコマンドブロックを示すため)
/tp @s 10 10 10
  • @sにRiceというタグを持っており、eatというスコアボードの値が10以上のプレイヤー全員を指定しつつ、@sにダイヤモンドを1つ付与するコマンド
/execute as @a[tag=Rice,scores={eat=10..}] run give @s minecraft:diamond 1
ポイント
  • コマンドブロックに入力された@sは、基本的にコマンドブロックの事を指します。
  • @sの意味合いを変えるには、executeコマンドでasを使う必要があります。

この記事は以上になります。

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】