跳到主要内容

Text Display Dialogue

以悬浮的 text_display 实体显示对话、选项菜单和过场字幕。

付费v2.4任务与剧情
依赖TypeWriter0.9PlaceholderAPI可选

概览​

Text Display Dialogue 用 Minecraft 的 text_display 实体取代 TypeWriter 对话的聊天框。说话者的名称和文本行会悬浮在 NPC 旁边(或你选择的位置),逐字打出,并带有简短的缩放动画淡入淡出。所有内容都通过数据包发送给参与对话的玩家:世界中不会生成任何东西,其他玩家也看不到。

该扩展添加了三个对话条目和一个过场动画条目。它们的行为与常规的 TypeWriter 对话条目相同(说话者、criteria、modifiers、triggers、打字 duration、sound),因此你可以在不改动页面其余部分的情况下,将它们替换进现有对话中。

功能​

  • 悬浮的说话对话 — 说话者名称和文本以打字效果和弹出动画显示在说话者上方。
  • 世界中的选项菜单 — 每个选项是一行悬浮文字;玩家滚动快捷栏来切换高亮的选项,并右键确认。
  • 相对玩家的菜单 — 一种以可配置偏移跟随玩家的变体,适用于在世界中没有位置的说话者。
  • 过场动画字幕 — 在过场动画时间轴上显示带延迟和打字动画的文本片段。
  • 完整的样式 — scale、textOpacity、viewRange、billboard,以及说话者、文本和选项各自独立的背景颜色。
  • 选项计时器 — 一段延迟后自动取消选择并触发 cancelTriggers,并提供实时倒计时占位符。
  • 按选项设置逻辑 — 每个选项都有自己的 criteria、modifiers 和 triggers,以及可选的位置。
  • 物品栏锁定 — 在显示对话期间,玩家无法打开物品栏、丢弃物品或交换手持物。

安装​

  1. 如果你想在对话文本中使用 %placeholders%,请安装 PlaceholderAPI(可选)。
  2. 从商店获取该扩展(见上方按钮),并将 JAR 放入 plugins/Typewriter/extensions/。
  3. 重启服务器。

该扩展不需要任何其他插件:文本展示实体通过 TypeWriter 自带的数据包库发送。 仅支持 Paper,不支持 Folia。

快速上手​

将一句简单的问候变成带选项的悬浮对话:

  1. 在 TypeWriter 网页面板中,打开一个已有 NPC(说话者)和交互触发器的**序列(sequence)**页面,或者新建一个。
  2. 添加一个 Spoken dialogue with Text Display 条目。将 speaker 设为你的 NPC,并编写 text,例如 Welcome, traveller!。将 duration 设为 2s 以获得打字效果(为零则一次性显示文本)。
  3. 添加一个 Option dialogue with Text Display 条目,设置相同的 speaker,在 text 中写下问题,然后添加两到三个 options。为每个选项设置各自的 triggers。
  4. 将说话条目的 triggers 链接到选项条目,使对话得以继续。
  5. 可选:将选项条目上的 timer 设为 15s,并将 cancelTriggers 链接到一个告别条目。文本中可以使用 %typewriter_textdisplaydialogue_timer% 显示倒计时。
  6. 发布该页面并与 NPC 交谈。右键点击悬浮文字(或空气)以继续;遇到选项时,滚动快捷栏并右键确认。
位置

默认情况下,文本放置在说话者位置上方一格处。如果说话者不是带有位置的 NPC 实体,或者你想要固定的位置,请使用位置捕获工具设置 position。当菜单应当跟随玩家时,请使用 player option 变体。

工作原理​

每个对话条目都会把文本拆分为每行一个 text_display,因此较长的消息会向下堆叠。typing 效果使用标准的 TypeWriter 打字模式。选项会在文本完成后依次出现(间隔 100 毫秒),并且只有在全部可见之后才能确认。

操作​

对话继续或确认切换选项
SpokenTypeWriter 的确认键,或右键点击其中一段悬浮文字。第一次按下会完成打字,第二次则关闭对话。不适用
Option 和 Player option在所有选项都显示后,在空气中或某段悬浮文字上右键点击。滚动快捷栏(手持的槽位始终不会改变)。选择会循环。

配置​

对话没有配置文件。显示的每段文本都是一个 snippet,可在 plugins/Typewriter/snippets 中编辑;默认值与标准显示一致。片段中的 <token> 会被替换为对应的值,其他 <标签> 仍是 MiniMessage。在布局片段(*.format)中,说话者和提示仅在包含对应 token 时才显示,而文本和选项始终显示。提示片段为空时不显示提示。

片段使用者作用Token
textdisplay.option.formatOption、Player option布局<speaker_name> <text> <options> <instruction>
textdisplay.speaker.formatOption、Player option说话者名称<speaker_name>
textdisplay.option.prefix.selectedOption、Player option选中选项的前缀-
textdisplay.option.prefix.unselectedOption、Player option其他选项的前缀-
textdisplay.option.selectedOption、Player option选中选项的行<prefix> <option_number> <option_text>
textdisplay.option.unselectedOption、Player option其他选项的行<prefix> <option_number> <option_text>
textdisplay.instructionOption、Player option提示-
textdisplay.spoken.formatSpoken布局<speaker_name> <text> <instruction>
textdisplay.spoken.speaker.formatSpoken说话者名称<speaker_name>
textdisplay.spoken.text.formatSpoken文本行<text>
textdisplay.spoken.instructionSpoken提示-
textdisplay.spoken.continueSpoken继续提示(确认键)<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%当前选项对话 timer 的剩余秒数,没有计时器运行时为 0。

该占位符已在 PlaceholderAPI(Typewriter 扩展)中注册,因此在其他地方(计分板、聊天、其他插件)也能使用,没有计时器运行时返回 0。扩展还会在选项对话的 text、每个选项的文本和说话者名称中自行替换它,因此在这些位置无需 PlaceholderAPI 也能使用。安装 PlaceholderAPI 后,这些文本中也可使用其他 PlaceholderAPI 占位符。

条目​

4 个条目,由扩展源码生成。

对话3
过场动画1

故障排查​

什么都没有出现,并且玩家看到红色的 "Dialog initialization error"。 扩展在生成展示实体时捕获到了错误。请在服务器日志中查找以 TextDisplay initialization error 开头的那一行以了解原因,并检查设置的 position 是否是一个存在的世界中的有效位置。

文本出现在玩家脚下或错误的位置。 文本锚定在说话者实体的位置。如果 speaker 为空,或者不是对玩家可见的 NPC 实例,则会使用玩家的位置(再向上一格)。请设置 position 以精确放置。

选项菜单无法确认。 只有在打字完成且所有选项都已出现之后,才会接受右键点击。在 duration 较长且选项较多时,请等待完整的菜单出现。criteria 不匹配的选项根本不会显示;如果全都不匹配,则无法选择任何内容。

滚动不会切换选项。 滚动事件被限制为每 150 毫秒一次,因此过快的滚动会被忽略。对话期间手持的快捷栏槽位始终不会改变,这是预期行为。

倒计时原样显示 %typewriter_textdisplaydialogue_timer%。 没有 PlaceholderAPI 时,占位符只会在选项对话中被替换,且仅当 timer 大于零时。请安装 PlaceholderAPI,以便在普通对话或其他地方使用它。

玩家抱怨物品栏被锁定。 在显示对话期间,打开物品栏、在其中点击、丢弃物品和交换手持物都会被取消。这是有意设计的,并会在对话结束时解除。

相关扩展​

  • BetterModel — 带动画的模型 NPC,可以作为悬浮对话的说话者。