Text Display Dialogue
Overview
Text Display Dialogue replaces the chat box of TypeWriter dialogue with Minecraft text_display entities. The speaker name and the lines of text float next to the NPC (or at a position you choose), type themselves out, and pop in and out with a short scale animation. Everything is sent with packets to the player in the dialogue: nothing is spawned in the world and other players see nothing.
The extension adds three dialogue entries and one cinematic entry. They behave like the regular TypeWriter dialogue entries (speaker, criteria, modifiers, triggers, typing duration, sound), so you can swap them into an existing conversation without changing the rest of your page.
Features
- Floating spoken dialogue — the speaker name and text appear above the speaker with a typing effect and a pop-in animation.
- Choice menu in the world — each option is a floating line; the player scrolls the hotbar to change the highlighted option and right-clicks to confirm.
- Player-relative menu — a variant that follows the player at a configurable offset, for speakers that have no position in the world.
- Cinematic subtitles — display text segments on a cinematic timeline with a delay and a typing animation.
- Full styling —
scale,textOpacity,viewRange,billboard, and separate background colours for the speaker, the text and the options. - Option timer — auto-cancel a choice after a delay and fire
cancelTriggers, with a live countdown placeholder. - Per-option logic — every option has its own
criteria,modifiersandtriggers, and an optional position. - Inventory lock — the player cannot open an inventory, drop an item or swap hands while a dialogue is shown.
Installation
- Install PlaceholderAPI if you want to use
%placeholders%in dialogue text (optional). - Obtain the extension from the stores (see the buttons above) and put the JAR in
plugins/Typewriter/extensions/. - Restart the server.
The extension needs no other plugin: text display entities are sent with the packet library bundled with TypeWriter. It runs on Paper only: Folia is not supported.
Getting started
Turn a simple greeting into a floating dialogue with a choice:
- In the TypeWriter web panel, open a sequence page that already has an NPC (a speaker) and an interaction trigger, or create one.
- Add a Spoken dialogue with Text Display entry. Set
speakerto your NPC and write thetext, for exampleWelcome, traveller!. Setdurationto2sto get a typing effect (zero shows the text at once). - Add a Option dialogue with Text Display entry, set the same
speaker, write the question intext, then add two or threeoptions. Give each option its owntriggers. - Link the
triggersof the spoken entry to the option entry so the conversation continues. - Optionally set
timeron the option entry to15sand linkcancelTriggersto a farewell entry. The text can show the countdown with%typewriter_textdisplaydialogue_timer%. - Publish the page and talk to the NPC. Right-click the floating text (or the air) to continue; on a choice, scroll the hotbar and right-click to confirm.
By default the text is placed one block above the speaker's position. If the speaker is not an NPC entity with a position, or you want a fixed spot, set position with the position capture tool. Use the player option variant when the menu should follow the player instead.
How it works
Every dialogue entry splits the text into one text_display per line, so long messages stack downwards. The typing effect uses the standard TypeWriter typing mode. Options appear one after the other (100 ms apart) after the text is complete, and can only be confirmed once all of them are visible.
Controls
| Dialogue | Continue or confirm | Change option |
|---|---|---|
| Spoken | The TypeWriter confirmation key, or right-click one of the floating texts. A first press completes the typing, a second one closes the dialogue. | Not applicable |
| Option and Player option | Right-click in the air or on one of the floating texts, once all options are shown. | Scroll the hotbar (the held slot never changes). Selection wraps around. |
Configuration
The dialogues have no configuration file. Every displayed text is a snippet, editable in plugins/Typewriter/snippets; the defaults reproduce the standard display. A <token> in a snippet is replaced by its value, and other <tags> stay MiniMessage. In a layout snippet (*.format), the speaker and the hint are shown only when their token is present, while the text and the options are always shown. An empty hint snippet shows no hint.
| Snippet | Used by | Role | Tokens |
|---|---|---|---|
textdisplay.option.format | Option, Player option | Layout | <speaker_name> <text> <options> <instruction> |
textdisplay.speaker.format | Option, Player option | Speaker name | <speaker_name> |
textdisplay.option.prefix.selected | Option, Player option | Prefix of the selected option | - |
textdisplay.option.prefix.unselected | Option, Player option | Prefix of the other options | - |
textdisplay.option.selected | Option, Player option | Selected option line | <prefix> <option_number> <option_text> |
textdisplay.option.unselected | Option, Player option | Other option lines | <prefix> <option_number> <option_text> |
textdisplay.instruction | Option, Player option | Hint | - |
textdisplay.spoken.format | Spoken | Layout | <speaker_name> <text> <instruction> |
textdisplay.spoken.speaker.format | Spoken | Speaker name | <speaker_name> |
textdisplay.spoken.text.format | Spoken | Line of text | <text> |
textdisplay.spoken.instruction | Spoken | Hint | - |
textdisplay.spoken.continue | Spoken | Continue hint (confirmation key) | <key> |
textdisplay.cinematic.spoken.format | Cinematic | Layout | <speaker_name> <text> <instruction> |
textdisplay.cinematic.spoken.speaker.format | Cinematic | Speaker name | <speaker_name> |
textdisplay.cinematic.spoken.instruction | Cinematic | Hint | - |
textdisplay.inventory.blocked | All dialogues | Message when a player tries to open an inventory (empty: no message) | - |
textdisplay.error.init | All dialogues | Message when the display cannot start (empty: no message) | - |
The Player option dialogue uses the same snippets as the Option dialogue.
Placeholders
| Placeholder | Returns |
|---|---|
%typewriter_textdisplaydialogue_timer% | Seconds left on the timer of the current option dialogue, 0 when no timer is running. |
The placeholder is registered in PlaceholderAPI (Typewriter expansion), so it also works elsewhere (scoreboards, chat, other plugins) and returns 0 when no timer is running. The extension also replaces it itself in the text of the option dialogues, in the text of each option and in the speaker name, so it works there without PlaceholderAPI. Other PlaceholderAPI placeholders work in these texts when PlaceholderAPI is installed.
Entries
4 entries, generated from the extension source.
Dialogues3
- Textdisplay OptionOption dialogue with Text Display
- Textdisplay Player OptionPlayer Option dialogue with Text Display(relative position)
- Textdisplay SpokenSpoken dialogue with Text Display
Cinematics1
- Textdisplay Spoken CinematicDisplay a spoken dialogue using TextDisplay during a cinematic
Troubleshooting
Nothing appears and the player sees a red "Dialog initialization error". The extension caught an error while spawning the displays. Read the server log for the line starting with TextDisplay initialization error for the cause, and check that position, when set, is a valid position in an existing world.
The text appears at the player's feet or in the wrong place. The text is anchored to the position of the speaker entity. If speaker is empty, or is not an NPC instance that is visible to the player, the player location (plus one block up) is used. Set position to place it exactly.
The option menu cannot be confirmed. The right-click is only accepted after the typing finished and every option has appeared. With a long duration and many options, wait for the full menu. Options whose criteria do not match are not shown at all; if none match, nothing can be selected.
Scrolling does not change the option. Scroll events are throttled to one every 150 ms, so very fast scrolling is ignored. The held hotbar slot never changes during the dialogue, this is expected.
The countdown shows %typewriter_textdisplaydialogue_timer% as is. Without PlaceholderAPI, the placeholder is only replaced in the option dialogues, and only when timer is above zero. Install PlaceholderAPI to use it in a spoken dialogue or elsewhere.
The player complains that the inventory is locked. While a dialogue is shown, opening an inventory, clicking in it, dropping items and swapping hands are cancelled. This is by design and ends with the dialogue.
Related extensions
- BetterModel — animated model NPCs that can be the speaker of a floating dialogue.