ユキミ大福のマイクラBE生活

Minecraft統合版で遊んだりゲーム作ったりするブログ

コマンド解説番外編-rawtext編-

  投稿日:2021/09/19

最終更新日:2021/09/19

 

どうも、ユキミ大福です。

今回はMinecraft統合版のコマンドで用いる要素の1つである『 rawtext 』について解説をしていきます。

ここで解説するコマンド等は、解説する注意事項等をよく読み、個人でより詳しく調べた上で、個人の責任において使用して下さい。コマンド等の使用によって如何なる損害が発生しても、筆者であり当ブログの管理者でもあるわたくしユキミ大福は一切の責任を負いかねますので、ご了承下さい。

  

今回の内容は?

今回は『 rawtext (ローテキスト)』についての解説です。rawtext は、より自由に文章を記述したり文字を装飾できるというものです。

rawtext は /fill や /replaceitem で使用できるコンポーネントと同じくjson形式で記述します。そんな rawtext が使用できるコマンド・アイテムは以下の通りです。

  • 看板
  • 本と羽ペン
  • /tellraw
  • /titleraw

これらのコマンドそのものの解説は ↓ のページをご覧下さい。

 

また、同じくjsonを用いるコンポーネントについては ↓ の記事をご覧下さい。

 

rawtextの概要

rawtext は /tellraw か /titleraw で使用することができます。この rawtext を用いれば、/scoreboardで保存したスコアの表示や、イクラ内のデフォルト文章の呼び出しもできます。

さて、ここで少し /tellraw と /titleraw の構文を思い出してみましょう。

 

/tellraw <セレクター> <rawtext>

 

/titleraw <セレクター> <表示場所> <rawtext>

 

どちらも一番最後に<rawtext>とありますね。これが今回解説する rawtext を記述する位置です。

看板や本と羽ペンでは、<rawtext>を直接入力します。

 

rawtextの記述法

rawtextは以下の様に記述します。

 

{"rawtext":[<コンポーネントオブジェクト>]}

 

現在(v1.17.11)時点で使用できるrawtextのコンポーネントオブジェクトは以下の4種類です。

1. text

通常の文章を表示するものです。↓ の記事で紹介している装飾コードも使用できますが、/tell 等とは異なりテキストにターゲットセレクターを使うことができないのでその点は注意しましょう。なお rawtext にはその代替機能がありますのでご安心下さい。

また、json形式での記述なので ↓ のエスケープ文字も使用できます。なお" (ダブルクォーテーション)」と「\ (バックスラッシュ)」を表示したい場合はエスケープ文字を用いなければエラーになってしまうので注意しましょう。

  • \":" (ダブルクォーテーション)
    ダブルクォーテーションを表示する。
  • \\:\ (バックスラッシュ)
    バックスラッシュを表示する。
  • \n:(改行/キャリジリターン)
    改行する。
  • \uXXXX:(4桁の16進数で表記されたUniCode文字)
    ”XXXX”の部分に16進数を入力することでその値に対応するUniCode文字を表示する。

 

構文は以下の通りです。

 

{"text":"<テキスト>"}

 

<テキスト>に入力した文字を表示します。なお装飾コードを用いると、その後に表示される文字("text"以外のコンポーネントオブジェクトによるものも含む)にも適用されます。

 

2. translate

基本的には"text"と同様で、装飾コードとエスケープ文字が使用可能・ターゲットセレクターが使用不可能な点も共通しています。"translate"では"text"でできることにプラスして、言語ファイルからの文章の呼び出し”with”を用いた任意の文字列の挿入ができるようになっています。ただし、言語ファイルから文章を呼び出す場合はその他のテキスト・装飾コード・エスケープ文字は同じコンポーネントオブジェクト内で使用することはできません。共存させたい場合はコンポーネントオブジェクトをわけると良いでしょう。

例えば「(プレイヤー名)は落下の衝撃で力尽きた」というお馴染みの落下死した時のメッセージがありますが、それをこの"translate"で呼び出すことができます。さらに"with"を用いれば、状況によって変化する部分( ↑ の例の場合は(プレイヤー名)の部分)に任意の文字列を入れることもできます

構文は以下の通りです。

 

{"translate":"<テキスト>"}

 

{"translate":"<テキスト>","with":[<要素1>,<要素2>,…<要素n>]}

 

{"translate":"<識別子>"}

 

{"translate":"<識別子>","with":[<要素1>,<要素2>,…<要素n>]}

 

言語ファイルから文章を呼び出す時はそれに対応する<識別子>を入力します。例えば「(プレイヤー名)は落下の衝撃で力尽きた」の場合は「death.attack.fall」がそれに該当します。この<識別子>とデフォルト文章の対応関係や<識別子>そのものは、リソースパック内の「texts」フォルダにある「ja_JP.lang」というファイルを覗くことで確認できます。

最新のバニラリソースパックはMinecraft公式HPより無料でDLできます。PC等でこのzipファイルをDL後、解凍すれば中身を見ることができますので、ぜひお試しあれ。

 

また、<識別子>を用いて文章を呼び出す際に文字列を置き換えられる部分は「ja.JP_lang」ファイル内では「%n$s ("n"は1以上の自然数)」と記述されています。"with"で置き換える時にはこれが重要になります。

そして、<テキスト>内に置き換えたいポイントを作る場合は「%%n ("n"は1以上の自然数)」と入力しましょう。なお"n"は左から順に1, 2, 3…でなければなりません。

 

%n$s」や「%%n」が存在する場合に"with"を用いることで文字列を置き換えることができます。「%1$s」「%%1」と<要素1>が対応して、「%2$s」「%%2」と<要素2>が対応して…という形になっていますので、置換ポイントの数と同じになるように<要素n>を増やす必要があります。

 

3. score

/scoreboard で保存したスコアを表示するものです。”score”内の"name"ではターゲットセレクターを使用することもできるので、コマンドの組み合わせによってはコマンド実行者のスコアを表示することもできます。また"name"では /scoreboard で作成したダミープレイヤーも指定することが可能です。

ただし、このコンポーネントオブジェクトはコマンドでしか使用できないので注意しましょう。

構文は以下の通りです。

 

{"score":{"name":"<エンティティ名>","objective":"<objective>"}}

 

”name”では「* (アスタリスク)」も使用することができます。その場合には、その文章を見る人のスコアを表示するようになります。例えば、以下のコマンドを実行するとしましょう。

 

/tellraw @a {"rawtext":[{"score":{"name":"*","objective":"pNum"}}]}

 

このコマンドはワールド内に居る全てのプレイヤーに対して適用されますが、その時表示されるスコアは、そのプレイヤーの「pNum」オブジェクティブのスコアになります。仮に、YukimiD1999のpNumが3で、PolarisA1200のpNumが1だったとすると、YukimiD1999のチャット欄には「3」、PolarisA1200のチャット欄には「1」と表示されるようになります。/titleraw でもこれは同様です。

 

また"name"ではターゲットセレクターを使うこともできますがこの時、引数も使うことができます。記述方法はコマンドで使う時と何も変わりません。そして、セレクタや引数によっては"name"の対象が複数になる場合がありますが、この場合は基準座標から1番近い(「c」引数が負の値の場合は1番遠い)プレイヤーから順にスコアが「, (カンマ)」で区切られて表示されます。

 

4. selector

"text"や"translate"では /tell 等とは異なり、テキスト中にターゲットセレクターを使うことができませんが、この"selector"がそれの代替機能となります。

ただし、このコンポーネントオブジェクトはコマンドでしか使用できないので注意しましょう。

構文は以下の通りです。

 

{"selector":"<セレクター>"}

 

<セレクター>では引数も使うことができます。記述方法はコマンドで使う時と何も変わりません。対象が複数存在する場合の挙動も変わりません。

 

コンポーネントオブジェクトの共存

これらのコンポーネントオブジェクトは全て共存することができます。その場合は以下の例のように記述します(例では"text"と"score"を共存させている)。

 

{"rawtext":[{"text":"Test Words"},{"score":{"name":"@p","objective":"pNum"}}]}

 

また rawtext は ↓ で解説したコンポーネントとは異なり、コンポーネントオブジェクトをいくらでも連結することが可能です。

 

json記述を見やすくする

↑ の回の解説でもやりましたが「 { } 」とか「 [ ] 」が沢山並んでいると頭がこんがらがりますよね。そのため、わかりやすくする方法をお教えします。

ズバリ、インテンドを付けて整理してみましょう。

 

YD-GameCraft#09より制作中のゲーム「TNT Survival」で使用したコマンドより、一例を挙げてみたいと思います。

 

{

 "rawtext":[

  {

   "text":"§l残り時間 [§e0"

  },

  {

   "score":{

    "name":"min",

    "objective":"timer"

   }

  },

  {

   "text":":"

  },

  {

   "score":{

    "name":"sec",

    "objective":"timer"

   }

  },

  {

   "text":"§r§l]"

  }

 ]

}

 

こうしてみると、それぞれの「 { } 」や「 [ ] 」の役割がわかりやすいのではないでしょうか。最初はこのようにインテンドを付けてメモしておいて、実際にコマンドとして入力する時には空白と改行を消す、とするとミスが減ると思います。

ちなみにゲーム中では以下のコマンドとして利用しています。

 

/titleraw @a actionbar {"rawtext":[{"text":"§l残り時間 [§e0"},{"score":{"name":"min","objective":"timer"}},{"text":":"},{"score":{"name":"sec","objective":"timer"}},{"text":"§r§l]"}]}

 

コマンドの形にするとどこか1ヶ所「{」が足りなくても中々気づけなさそうですよね。そして実行すると以下のようになります。

f:id:YukimiD1999:20210918161803p:plain

actionbarの部分にタイマーが現れた

実際には"sec"と"min"がタイマー回路によって変化します。もちろん頑張れば /title を使って( rawtext を使わずに)同様の動作を実現することもできますが、労力がヤバすぎてわたくしは絶対にやりたくないです。その点 rawtext を用いれば ↑ のコマンド+ちょこっとで完結してしまいますから、慣れれば滅茶苦茶楽ちんです。

 

実行例

例1)

コマンド:/tellraw @p {"rawtext":[{"text":"Test Text"}]}

実行結果:基準座標から1番近いプレイヤーのチャット欄に以下の様に文章を表示する。

f:id:YukimiD1999:20210919063950p:plain

例1の実行結果

 

例2)

コマンド:/titleraw @a title {"rawtext":[{"translate":"Please select a stage.\n%%1\n%%2","with":["§eStage1:NORMAL§r","§9Stage2:LABYRINTH"§r]}]}

実行結果:全てのプレイヤーの画面に以下の様に文章を表示する。

f:id:YukimiD1999:20210919064053p:plain

例2の実行結果

 

例3)

コマンド:/tellraw @p {"rawtext":[{"selector":"@p"},{"text":" のpNumは "},{"score":{"name":"@p","objective":"pNum"}},{"text":" です"}]}

実行結果:基準座標から1番近いプレイヤーのチャット欄に以下の様に文章を表示する("selector"及び"name"の対象は基準座標から1番近いプレイヤー)。

f:id:YukimiD1999:20210919064126p:plain

例3の実行結果

 

例4)

コマンド:/titleraw @a title {"rawtext":[{"translate":"§e§o"},{"translate":"death.fell.killer","with":["世界"]}]}

実行結果:全てのプレイヤーの画面に以下の様に文章を表示する。

f:id:YukimiD1999:20210919064153p:plain

例4の実行結果

 

rawtextの強み・使い道

ゲーム制作においては /tellraw や /titleraw にて、/tell や /title では実現不可能な文章の表示に用いられます。記述が少々大変ですが、慣れればそれぞれ /tell・/title の完全上位互換として機能します。強み・使い道は以下が考えられます。

1. text

基本的には"translate"の下位互換ですが、<識別子>に引っ掛かりそうな文字列をそのまま表示したい時などにはこちらを使います。

 

2. translate

"text"と同じく文章を表示するものですが、<識別子>を入力することでマイクラのデフォルト文章を呼び出すことができます。また通常の文章の場合でも"with"を用いることで、頻繫に変更する部分を明示化できるのが便利です(実行例2がその一例)

 

3. score

/tell や /title では絶対にできない一番の強みです。プレイヤーのスコア表示はもちろん、より見やすく簡単に作れるタイマーにも応用可能です。ただし、今のところ看板や本と羽ペンでは使用できません。

 

4. selector

/tell や /title ではできた、テキスト内でのセレクターの使用の代わりになる機能です。"text"や"translate"内にセレクターを直接記述できないのでこの"selector"を使う必要がありますが、逆に言えばこれがあるおかげで /tellraw・/titleraw が /tell・/title の完全上位互換と言えるようになっています。ただし、今のところ看板や本と羽ペンでは使用できません。

 

これらはあくまで一例ですので、各自で色々な使い方を考えてみて下さい。他のコマンド等と組み合わせれば、さらにできることが増えるはずです。

 

今回のまとめ

  • 『 rawtext 』はjson形式の文章を作成するもの!
  • 『 rawtext 』はコマンドだけでなく一部のアイテムにも使える!
  • "translate"を用いればマイクラに存在するデフォルト文章を呼び出すこともできる!
  • "score"を用いれば /scoreboard で保存したスコアを呼び出すことができる!

 

関連記事

  • コマンド解説番外編-スポーンイベント編-
  • コマンド解説番外編-パーティクル編-
  • コマンド解説番外編-アニメーション編-

 

当記事及び当ブログへのご意見・ご質問はいつでも受け付けております。

お気軽にコメント欄までどうぞ!

↓良ければポチッとお願いします。