Text Display Dialogue
概要
Text Display Dialogue は、TypeWriter のダイアログのチャットボックスを、Minecraft の text_display エンティティに置き換えます。話し手の名前とテキストの行は、NPC の隣(または指定した位置)に浮かび、自動的にタイピングされるように表示され、短いスケールアニメーションとともに現れたり消えたりします。すべてはパケットで、ダイアログ中のプレイヤーにのみ送信されます。ワールドには何も生成されず、他のプレイヤーには何も見えません。
このエクステンションは、3 つのダイアログエントリーと 1 つのシネマティックエントリーを追加します。これらは、通常の TypeWriter ダイアログエントリーと同じように動作する(スピーカー、criteria、modifiers、triggers、タイピングの duration、sound)ため、ページの他の部分を変更せずに、既存の会話に差し替えられます。
機能
- 浮かぶ会話ダイアログ — 話し手の名前とテキストが、タイピングエフェクトとポップインアニメーションとともに、話し手の上に表示されます。
- ワールド内の選択肢メニュー — 各選択肢は浮かぶ 1 行です。プレイヤーはホットバーをスクロールしてハイライトする選択肢を変更し、右クリックで確定します。
- プレイヤー基準のメニュー — ワールド内に位置を持たない話し手のために、設定可能なオフセットでプレイヤーに追従するバリアント。
- シネマティックの字幕 — シネマティックのタイムライン上に、遅延とタイピングアニメーション付きでテキストセグメントを表示します。
- 細かなスタイル設定 —
scale、textOpacity、viewRange、billboard、そして、話し手、テキスト、選択肢ごとの個別の背景色。 - 選択肢のタイマー — 一定時間後に選択を自動的にキャンセルして
cancelTriggersを発火し、カウントダウンのプレースホルダーでリアルタイムに表示します。 - 選択肢ごとのロジック — すべての選択肢が、独自の
criteria、modifiers、triggers、任意の位置を持ちます。 - インベントリのロック — ダイアログが表示されている間、プレイヤーはインベントリを開く、アイテムをドロップする、手を持ち替えるといった操作ができません。
インストール
- ダイアログのテキストで
%placeholders%を使いたい場合は、PlaceholderAPI をインストールします(任意)。 - ストアからエクステンションを入手し(上のボタンを参照)、JAR を
plugins/Typewriter/extensions/に配置します。 - サーバーを再起動します。
このエクステンションに、他のプラグインは必要ありません。テキストディスプレイエンティティは、TypeWriter に同梱されているパケットライブラリで送信されます。 Paper のみで動作します。Folia には対応していません。
はじめに
シンプルな挨拶を、選択肢付きの浮かぶダイアログに変えます。
- TypeWriter の Web パネルで、NPC(スピーカー)とインタラクショントリガーがすでにあるシーケンスページを開くか、新しく作成します。
- Spoken dialogue with Text Display エントリーを追加します。
speakerに NPC を設定し、textにWelcome, traveller!などのテキストを入力します。タイピングエフェクトを得るにはdurationを2sに設定します(ゼロだとテキストが一度に表示されます)。 - Option dialogue with Text Display エントリーを追加し、同じ
speakerを設定して、textに質問を書き、optionsを 2 つか 3 つ追加します。各選択肢に、それぞれのtriggersを設定します。 - 会話が続くように、Spoken エントリーの
triggersを Option エントリーにリンクします。 - 必要に応じて、Option エントリーの
timerを15sに設定し、cancelTriggersを別れの挨拶のエントリーにリンクします。テキストには、%typewriter_textdisplaydialogue_timer%でカウントダウンを表示できます。 - ページを Publish して、NPC に話しかけます。続けるには、浮かんでいるテキスト(または空中)を右クリックします。選択肢では、ホットバーをスクロールして、右クリックで確定します。
デフォルトでは、テキストは話し手の位置の 1 ブロック上に置かれます。話し手が位置を持つ NPC エンティティでない場合や、固定の場所に置きたい場合は、位置キャプチャツールで position を設定してください。メニューをプレイヤーに追従させたい場合は、プレイヤー選択肢バリアントを使用します。
仕組み
各ダイアログエントリーは、テキストを 1 行につき 1 つの text_display に分割するため、長いメッセージは下に向かって積み重なります。typing エフェクトには、標準の TypeWriter のタイピングモードが使われます。選択肢は、テキストが完了した後、100 ミリ秒間隔で 1 つずつ表示され、すべてが表示されてからでないと確定できません。
操作
| ダイアログ | 続行または確定 | 選択肢の変更 |
|---|---|---|
| Spoken | TypeWriter の確認キー、または浮かんでいるテキストのいずれかを右クリック。1 回目の押下でタイピングが完了し、2 回目でダイアログが閉じます。 | 該当なし |
| Option と Player option | すべての選択肢が表示された後に、空中または浮かんでいるテキストのいずれかを右クリック。 | ホットバーをスクロール(手に持つスロットは変わりません)。選択は端で折り返します。 |
設定
ダイアログには設定ファイルがありません。表示されるテキストはすべて snippet で、plugins/Typewriter/snippets で編集できます。既定値は標準の表示を再現します。スニペット内の <token> はその値に置き換えられ、それ以外の <タグ> は MiniMessage のままです。レイアウトのスニペット(*.format)では、話し手とヒントはトークンがある場合にのみ表示され、テキストと選択肢は常に表示されます。ヒントのスニペットが空の場合、ヒントは表示されません。
| スニペット | 使用先 | 役割 | トークン |
|---|---|---|---|
textdisplay.option.format | Option、Player option | レイアウト | <speaker_name> <text> <options> <instruction> |
textdisplay.speaker.format | Option、Player option | 話し手の名前 | <speaker_name> |
textdisplay.option.prefix.selected | Option、Player option | 選択中の選択肢のプレフィックス | - |
textdisplay.option.prefix.unselected | Option、Player option | その他の選択肢のプレフィックス | - |
textdisplay.option.selected | Option、Player option | 選択中の選択肢の行 | <prefix> <option_number> <option_text> |
textdisplay.option.unselected | Option、Player option | その他の選択肢の行 | <prefix> <option_number> <option_text> |
textdisplay.instruction | Option、Player option | ヒント | - |
textdisplay.spoken.format | Spoken | レイアウト | <speaker_name> <text> <instruction> |
textdisplay.spoken.speaker.format | Spoken | 話し手の名前 | <speaker_name> |
textdisplay.spoken.text.format | Spoken | テキストの行 | <text> |
textdisplay.spoken.instruction | Spoken | ヒント | - |
textdisplay.spoken.continue | Spoken | 続行のヒント(確定キー) | <key> |
textdisplay.cinematic.spoken.format | シネマティック | レイアウト | <speaker_name> <text> <instruction> |
textdisplay.cinematic.spoken.speaker.format | シネマティック | 話し手の名前 | <speaker_name> |
textdisplay.cinematic.spoken.instruction | シネマティック | ヒント | - |
textdisplay.inventory.blocked | すべてのダイアログ | プレイヤーがインベントリを開こうとしたときのメッセージ(空:メッセージなし) | - |
textdisplay.error.init | すべてのダイアログ | 表示を開始できなかったときのメッセージ(空:メッセージなし) | - |
Player option ダイアログは Option ダイアログと同じスニペットを使います。
プレースホルダー
| プレースホルダー | 戻り値 |
|---|---|
%typewriter_textdisplaydialogue_timer% | 現在の Option ダイアログの timer の残り秒数。タイマーが動いていないときは 0。 |
このプレースホルダーは PlaceholderAPI(Typewriter エクスパンション)に登録されているため、ほかの場所(スコアボード、チャット、他のプラグイン)でも使え、タイマーが動いていないときは 0 を返します。拡張機能は選択肢ダイアログの text、各選択肢のテキスト、話し手の名前でも自分で置き換えるため、そこでは PlaceholderAPI がなくても動作します。PlaceholderAPI がインストールされていれば、これらのテキストでは他の PlaceholderAPI プレースホルダーも使えます。
エントリー
4 件のエントリー(拡張機能のソースから生成)。
ダイアログ3
- Textdisplay OptionOption dialogue with Text Display
- Textdisplay Player OptionPlayer Option dialogue with Text Display(relative position)
- Textdisplay SpokenSpoken dialogue with Text Display
シネマティック1
- Textdisplay Spoken CinematicDisplay a spoken dialogue using TextDisplay during a cinematic
トラブルシューティング
何も表示されず、プレイヤーに赤い "Dialog initialization error" が表示される。 ディスプレイを生成する際に、エクステンションがエラーを捕捉しました。原因については、サーバーログの TextDisplay initialization error で始まる行を確認し、position を設定している場合は、それが存在するワールド内の有効な位置であることを確認してください。
テキストがプレイヤーの足元や、間違った場所に表示される。 テキストは、話し手エンティティの位置を基準にしています。speaker が空か、プレイヤーに見える NPC インスタンスでない場合は、プレイヤーの位置(に 1 ブロック上を加えた位置)が使われます。正確な位置に置くには、position を設定してください。
選択肢メニューを確定できない。 右クリックは、タイピングが終わり、すべての選択肢が表示された後にのみ受け付けられます。duration が長く、選択肢が多い場合は、メニューがすべて表示されるまで待ってください。criteria に一致しない選択肢はまったく表示されず、どれも一致しない場合は、何も選択できません。
スクロールしても選択肢が変わらない。 スクロールイベントは 150 ミリ秒に 1 回に制限されているため、非常に速いスクロールは無視されます。ダイアログ中、手に持つホットバースロットが変わらないのは、想定された動作です。
カウントダウンに %typewriter_textdisplaydialogue_timer% がそのまま表示される。 PlaceholderAPI がない場合、プレースホルダーは選択肢ダイアログでのみ、かつ timer が 0 より大きいときにのみ置き換えられます。通常のダイアログやほかの場所で使うには、PlaceholderAPI をインストールしてください。
プレイヤーが、インベントリがロックされていると訴える。 ダイアログが表示されている間は、インベントリを開く、中でクリックする、アイテムをドロップする、手を持ち替える、といった操作がキャンセルされます。これは仕様で、ダイアログの終了とともに解除されます。
関連エクステンション
- BetterModel — 浮かぶダイアログの話し手になれる、アニメーション付きのモデル NPC。