この記事では、Minecraft Java Edition(バージョン1.20.2)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
メッセージを表示させたいマインクラフター
「コマンドでメッセージを出したいんだけど、何のコマンドを使えばいいの? 長めのメッセージを表示させる場合にはどうすればいいのかな」
こんな疑問を解決します!
- メッセージを出すには、tellrawコマンド
- 複数行のメッセージを出す場合
こんにちは!
マインクラフターのナツメ(@natsume_717b)です。
2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!
今回はメッセージを表示するコマンドについて解説していきます。
メッセージを表示させるコマンドは複数ありますが、その中でもtellrawコマンドがおすすめです。
その理由や複数のメッセージを表示させるための方法を紹介。
さっそく見ていきましょう!
メッセージを出すには、tellrawコマンド
メッセージを表示させるコマンドは複数ありますが、その中でもtellrawコマンドがおすすめです。
sayコマンドやtellコマンドには、それぞれ以下の欠点があります。
- sayコマンド→コマンドを実行したプレイヤーのIDが表記される。
- tellコマンド→「実行者にささやかれました」と表記される。
このように余計な要素が含まれた状態で表示されてしまうので、どうしても扱いにくいです。
加えてtellrawコマンドは色付き文字や太字など様々な装飾文字にも対応しています。
これらを踏まえると、メッセージを表示させるにはtellrawコマンドが適しているわけですね。
tellrawコマンドの使い方
コマンドの書き方としては
/tellraw ターゲットセレクター "表示させたい文章"
とシンプルなものです。
基本的に全員に表示させるものなので、ターゲットセレクターの部分は@aになるかと思います。
もちろん、状況に応じて対象は変更してください。
先ほども紹介した装飾文字などを使用するには、決められた文字列を打ちこむ必要があります。
その場合、複雑な文字列を入力することになるので、手動ではまず無理です。
コマンド生成サイトを使うことをおすすめします。
ここから生成サイトへ!
直感的に使えるサイトですので、難しくはありません。
以下の画像を元に文章を作り、コマンドを生成しましょう。
というわけで、メッセージを表示させるにはtellrawコマンドを使えばOKです。
複数のメッセージを出す場合
メッセージを出すにはtellrawコマンドが適していることが分かりました。
そんなtellrawコマンドですが、1回で大量の文章を表示させるとその量に圧倒されてしまいます。
徐々に文章を表示させた方が読みやすいわけですね。
そのためにScoreboardコマンドと組み合わせていきます。
簡単にどんなことをしていくのかを説明していくと
- ゲーム内時間の進行をカウントするスコアボードを作成する
- スコアボードの値を検知して、tellrawコマンドを実行
- スコアボードを削除して誤作動を起こさないようにする
といった感じです。
それぞれの項目を詳しく解説していきます。
ゲーム内時間の進行をカウントするスコアボードを作成する
まずは時間経過をはかるスコアボードを作成します。
/scoreboard objectives add XXXX minecraft.custom:minecraft.play_time
XXXXの部分は分かりやすい名前を付ければOKです。
minecraft.custom:minecraft.play_timeを指示することで、経過時間をはかることを示しています。
また、作成した時点からカウントを始めるので、カウントを始めたいタイミングで上記のコマンドを実行されるようにしましょう。
スコアボードの値を検知して、tellrawコマンドを実行
次はスコアボードの値を検知します。
検知した時にtellrawコマンドが作動するようにすれば良いわけですね。
具体的には以下のようなコマンドを用意すればOKです。
(コマンドブロックにリピート、常時実行を設定します)
execute as @p[scores={XXXX=30}] if entity @s run tellraw @a "aiueo"
上記のコマンドは「XXXX」の値が30になった時に「tellraw @a “aiueo”」を起動するものです。
XXXXの値やtellrawコマンドの部分は各自調整してくださいね。
minecraft.custom:minecraft.play_timeは1秒に1カウントされるわけではありません。
(マイクラ内での時間換算ですので、20tickで1秒になります。上述の30なら1.5秒を指します)
実際に私が作った配布マップには、以下のようなコマンドブロックが置かれています。
execute as @a[scores={timecheck000=20}] if entity @s run tellraw @a "これは過去の話だ"
execute if @a[scores={timecheck000=60}] if entity @s run tellraw @a "私が体験した昔話"
execute if @a[scores={timecheck000=120}] if entity @s run tellraw @a "数年経った今でも現実味がなかったが"
あまり多く並べてもややこしいだけですので、3つだけです
「こんな感じだよ」というのが分かっていただけたらなと思います。
また、スコアの間隔は基本的に60程度がおすすめです。
メッセージが長かったり、困惑など反応に困っている様子を表現したいなら80。
逆にメッセージが短かったり、勢いを表現したいなら40とか50でもいいと思います。
このあたりは各自で調整してみてください。
スコアボードを削除して誤作動を起こさないようにする
最後に大事なのが、スコアボードを消す作業です。
それに付随して、場合に応じて「スコアボードを作成するコマンド」を消しておくことも重要です。
スコアボードを削除する理由は、余計な負荷をかけないためです。
役目を終えたスコアボードを残しておく必要はありません。
また、「スコアボードを作成するコマンド」を消す理由は、繰り返し同じメッセージを表示させないようにするためです。
コマンドブロックを使用している場合は、該当するコマンドブロックそのものを消せばOKです。
何度も発生させて良いメッセージならば削除する必要はありません。
スコアボードを削除するコマンド
今回の場合は「XXXX」というスコアボードにしているので、
/scoreboard objectives remove XXXX
というコマンドを実行すれば、スコアボードを削除することができます。
このコマンドを使う際は、メッセージの表示が終わった時に作動するようにしましょう。
方法としては、スコアボードの値が一定の値以上になった時に上記のような削除するコマンドを実行する。
チェーンコマンドで最後のtellrawコマンドが成功したことを検知して、実行させても良いですね。
例:XXXXのスコアが100以上の値を検知するとXXXXのスコアボードを消すコマンド
execute as @p[scores={XXXX=100..}] if entity @s run scoreboard objectives remove XXXX
まとめ
今回のまとめです。
- tellrawコマンドでメッセージを表示させる
- 生成サイトを利用するのがおすすめ
- scoreboardコマンドと組み合わせて時間経過を元にメッセージを表示させることが可能
この記事は以上になります。