文字表示に関するマイクラのコマンドまとめ

執筆開始:2023-01-31 07:44:23

# 目的
Minecraftにおいて画面上に文字を表示するためのコマンドはいくつか選択肢があるので特徴をまとめます。

# 目次
- [目的](#目的)
- [目次](#目次)
- [特徴早見表](#特徴早見表)
- [厳密なJSON形式](#厳密なjson形式)
    - [/title](#title)
        - [特徴](#特徴)
        - [使いどころ](#使いどころ)
    - [/tellraw](#tellraw)
        - [特徴](#特徴-1)
        - [使いどころ](#使いどころ-1)
    - [/bossbar](#bossbar)
        - [特徴](#特徴-2)
        - [使いどころ](#使いどころ-2)
    - [本、アイテム名](#本アイテム名)
        - [特徴](#特徴-3)
        - [使いどころ](#使いどころ-3)
    - [看板・エンティティ名](#看板エンティティ名)
        - [特徴](#特徴-4)
        - [使いどころ](#使いどころ-4)
- [その他](#その他)
    - [/scoreboad](#scoreboad)
        - [特徴](#特徴-5)
        - [リストと名前下表示](#リストと名前下表示)
        - [使いどころ](#使いどころ-5)
        - [サイドバー](#サイドバー)
        - [使いどころ](#使いどころ-6)
    - [/say等](#say等)
        - [特徴](#特徴-6)
- [最後に](#最後に)


# 特徴早見表
| コマンド | 表示位置           | 表示できるもの                      | プレイヤーの特定                                                              | クリックイベント                                         |
| -------- | ------------------ | -------------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------- |
| 説明     | どこに表示されるか | 厳密なJSON形式が必要なら〇 | 特定のプレイヤーのみに限定して表示できるか(工夫すれば出来なくもないものには△) | op(実行にop必須)、〇(実行にop不要)、×(なし)、-(JSON不可) |

| コマンド                                               | 表示位置                       |        表示できるもの        | プレイヤーの特定 |   クリックイベント    |
| ------------------------------------------------------ | ------------------------------ | :--------------------------: | :--------------: | :-------------------: |
| ``/title .. title``                                    | 画面中央                       |        厳密なJSON形式        |        〇        |           ×           |
| ``/title .. actionbar``                                | 画面中央下(経験値バーの少し上) |        厳密なJSON形式        |        〇        |           ×           |
| ``/tellraw``                                           | チャット欄                     |        厳密なJSON形式        |        〇        |          op           |
| ``/bossbar``                                           | 画面上部                       |        厳密なJSON形式        |        〇        |           ×           |
| エンティティの``CustomName``、看板                     | 特定の三次元座標               |        厳密なJSON形式        |        △         | 看板のみ〇、それ以外× |
| アイテムの``display.Name``もしくは``display.Lore``、本 | インベントリ内                 |        厳密なJSON形式        |        △         |  本のみop、それ以外×  |
| ``/scoreboard .. sidebar``                             | 画面右                         | プレイヤーと数値の組み合わせ |        △         |           -           |
| ``/scoreboard .. belowname``                           | プレイヤーの下                 | プレイヤーと数値の組み合わせ |        ×         |           -           |
| ``/scoreboard .. list``                                | TAB表示                        | プレイヤーと数値の組み合わせ |        ×         |           -           |
| ``/say``など                                           | チャット欄                     |         任意の文字列         |        ×         |           -           |


# 厳密なJSON形式
**厳密な**JSON形式とは、マイクラ文字表示に使われている形式です。正直何がどう厳密なのかはわかっていませんが、一定のルールが存在します。
この形式を使うことで、色付け、太字、イタリック、クリックイベントなどさまざまな装飾が可能になります。コマンドの引数に含まれない変数(スコアや、nbtなど)を表示する時にはほぼ必須となるものです。

詳細は赤石愛氏のこちらの記事を参考にするとわかりやすいかと→https://ai-akaishi.hatenablog.jp/entry/ar857358

以下、厳密なJSON形式を使ったコマンドを紹介します。

## /title
### 特徴
タイトルコマンドは、画面に中央ぞろえで文字を表示します。
![title/subtitle](https://cdn.discordapp.com/attachments/926481922857783316/1069767007370739802/2023-01-31_08.49.19.png)
![actionbar](https://cdn.discordapp.com/attachments/926481922857783316/1069767007114899495/2023-01-31_08.51.35.png)

表示のみ可能なのでクリックイベントやホバーイベントは利用できません。
また、一定時間(変更可)で画面から消えます。マルチプレイの場合、**特定のプレイヤーのみに表示**ができます。

### 使いどころ
タイトルや、サブタイトルは文字通り大きな文字で表示させます。
対してアクションバーは小さめに文字を置いてくれるので非常に様々な場面で使えます。
この三つはどれにしろ画面に表示できる文字量は多くないので**文字数が少ないほうが良い**です。
その特徴から、RPGに例えると
-   一時的な出来事(マップ移動時のエリア名紹介・・)
-  緊急性の高い出来事(イベントが発生したときの警告メッセージ・・)

に向いています。

## /tellraw
### 特徴
このコマンドは、テキスト装飾を施して時系列順にチャット欄に表示させます。
クリックイベントや、ホバーイベントに対応しています※op必須。
ただし、チャット欄はプレイヤーがF3+Dで消すことができるほか、リログをすると消えます。
**特定のプレイヤーのみ**に表示することもできます。

### 使いどころ

tellrawはその特徴からRPGに例えると
-   再現可能な出来事(NPCとの会話、看板の内容のコピー)
-   緊急性の低い通知(後からでも見られるメールのような)

に向いています。消すことができるので、意外と**大事な情報を残す**のには向いていません。

## /bossbar
### 特徴
ボスバーは画面上部に置くことのできるグラフです。
![bossbar](https://cdn.discordapp.com/attachments/926481922857783316/1069788197233635388/2023-01-31_10.16.10.png)

かならず**グラフとセット**で使います。複数個表示も可能です。
クリックイベントや、ホバーイベントには対応していません。
このグラフは、右端を100%とした割合表示グラフです。
**特定のプレイヤーのみ**に表示することもできます。
一度表示したら、非表示にするまで常に表示し続けられます。

### 使いどころ
グラフとセットで利用しなければならないですが、逆に言えば一番どこでも使うことが出来ると言えます。
その特徴から、RPGに例えると
-   時間付の現在のイベント、現状の説明(クエストの表示、進捗状況)
-   敵の体力表示、敵の状況説明(怯んでいる、など)

に向いています。アクションバーと特徴が似ていますが、用途は全く異なると思います。

## 本、アイテム名
### 特徴
すべてアイテムは、``display.Name``という要素で、さらに本は``Pages``の中にリスト形式として表示させることができます。
本のみクリックイベントや、ホバーイベントに対応しています。この時クリックイベントはopが必要となります。
これらはプレイヤーが意図して消すことができません。

### 使いどころ
その特徴からRPGに例えると
-   再現不可能な過去の出来事の記録(NPCとの会話の要所を残しておく、進捗の表示)
などに向いています。
チャット欄と上手く使い分けると見やすくなるのかなと思いますが、アイテムの数があまり多いとわかりづらくなるので適度にまとめられていると良いと思います。

## 看板・エンティティ名
### 特徴
エンティティの``display.Name``という要素か看板は``Text1～Text4``の要素で文字を表示させることができます。
全てのプレイヤーに見える状態となり、看板のみクリックイベントやホバーイベントに対応しています。このクリックイベントは**opがなくても実行できる**ので、置き場所に気を付ける必要があります。
これらは特定の座標に残しておくことができます。ある場所に来たときにわかる情報として利用出来ます。

### 使いどころ
その特徴からRPGに例えると
-   随時更新の情報源(掲示板等)
-   テレポートポイント表示
-   チュートリアル表示

などに向いています。座標に依存しているというのがとても便利なので、多少多くても見辛くはならないと思います。
逆に、プレイヤーに焦点を充てた表示も出来なくはないものの、そういう用途で使うには他の方法の方が便利だと言えます。

# その他
厳密なJSON形式を用いない文字列の表示方法です。

## /scoreboad
### 特徴
数値とプレイヤーを組み合わせて紐づける機能です。
サイドバー、リスト、名前下表示と3つの表示先があります。
### リストと名前下表示
リスト、名前表示はシングルプレイでは利用できません。
また、リスト、名前表示はどちらも**任意の文字列の表示ができません**。プレイヤーと数値の紐づけのみ可能です。
体力の場合、ハート表記に切り替えることが出来ます。

### 使いどころ
数値の表示に特化しています。数値とプレイヤーを紐づける機能がデフォルトでついているので、これを活かします。
特に、体力の表示にはハートを使うことができるのとRPGであればMPのような要素にも向いているとも思います。

### サイドバー 
サイドバーはシングルプレイでも利用可能な表示先です。
![sidebar](https://cdn.discordapp.com/attachments/926481922857783316/1069801830516789379/image.png)

リストや名前下表示と同様にプレイヤーと数値を紐づける用途としても利用できるほか、ダミープレイヤーを任意の文字列として表示に利用することが可能です。
マルチプレイの場合どの方法でもチームごとに表示させることができるものの、**特定のプレイヤーに表示することはできません**。
そのため、基本的には全員にサイドバーを表示することになります。ただしチームサイドバーが表示可能な場合は上書きされて表示されます。
(ただし、スコアボードオブジェクトの表示名には厳密なJSON形式を用いて任意の文字列を表示できます)

### 使いどころ
リスト名前下表示と同様に数値の表示に特化しています。
また、縦に降順にならぶ特徴を活かして、得点をあるボーダーより下か、上かをわかりやすく表示する順位表示表として使うことも便利な方法と言えます。
残り時間等をここに表示することもありますが、ボスバーの方が向いていると思います。

## /say等
### 特徴
これらは人のチャット欄に送信するものです。
コマンドは以下存在します。
-   /teammsg /tm
-   /say
-   /tell
-   /msg /message
-   /me

> 多いな・・
> 筆者の記憶ではtellraw以外のコマンドは基本的にマイクラ非推奨となってた気がしました。(少し前のlog4j2関連)ただソースが行方不明・・・

tellrawとは違い、これらは構文が若干違うものの、指定の文字列をそのまま返してくれます。基本的にデバッグ時想定外の動作をしているところを突き止めるのに使います。

# 最後に
UIの利用性に結構関わるところになると思います。見やすい記事かはちょっとわからないけど、まとめておきたかったので参考になれば良いなと思います。
なにか疑問点があれば、りっとーまでお知らせください
https://twitter.com/Lit_to_

執筆終わり2023-01-31 11:35:36