Yap Yap 库

Yap Yap 库

一个简单的数据驱动库,提供了一种方法来实现任何实体的RPG风格多选对话。

YapYap API

YapYap API 是一个库模组,让你可以为任意实体赋予完整的对话。你可以构建一棵分支对话树,将其附加到一个 NPC 上,然后玩家就可以在自定义的游戏内界面中与该 NPC 交谈,界面包含立绘、打字机文本和可点击的回复选项。

它旨在供其他模组和数据包使用。单独使用时,它只会添加一条管理员命令和几个示例对话,仅此而已。

要求: NeoForge 21.1.190 或更新版本,Minecraft 1.21.1,Java 21。 侧: 需要在客户端和服务端都安装。 许可证: MIT。

功能

  • 分支对话树。每棵树是一组具名节点。一个节点有一页或多页文本以及一组回复。回复可以根据条件隐藏或显示,并可在被选择时执行动作。
  • 两种编写对话的方式,同一个运行时。数据包作者在数据包中编写 JSON 文件。模组开发者使用流式 Java 构建器或在运行时注册 JSON。两者产出相同的结果。
  • 服务端权威。客户端只发送“我选了第 3 个选项”。服务端在每一步都会重新检查所有条件,因此被修改的客户端无法跳过被锁定的选项。
  • 数据包友好。对话文件存放在数据包中,并可通过 /reload 命令重新加载。动作可以运行原版命令和函数,因此纯数据包无需任何 Java 即可驱动任务。
  • 可扩展。条件和动作关键字列表是开放的。模组可以注册自己的关键字,数据包随后即可按名称使用它们。
  • 自定义对话界面。不暂停游戏,绘制在世界之上。开箱即用,零纹理即可运行。如果你想自定义外观,每张纹理都是可选的,并按文件替换。
  • 立绘选项。显示绘制图像、NPC 的实时 3D 模型、任意实体类型的模型,或简单的绘制占位符。它会按该顺序自动回退。
  • NPC 行为。交谈时,NPC 停止移动并转身面向玩家。受到或造成伤害会结束对话。走得太远也会结束对话。
  • 保存进度。每个玩家都有具名标记以及他们访问过哪些节点的记录。这存储在玩家身上,并且死亡后仍然保留。
  • 事件。模组可以监听对话开始、节点变化、回复选择和对话结束。开始和选择事件可以被取消。

内置内容

条件:检查一个标记、某节点之前是否被访问过、一个进度、一个记分板分数、权限等级、手持物品、随机概率、潜行状态、当前维度,以及逻辑组合器 all of、any of 和 not。

动作:运行一条命令、运行一个函数、设置或添加一个标记、给予或拿取物品、授予一个进度、播放一个声音、发送聊天或动作栏消息、打开另一个对话、打开 NPC 交易界面、跳转到另一个节点,以及结束对话。

诸如玩家名称、NPC 名称和村民职业之类的文本占位符会在该行显示时被填充。

面向数据包作者

将对话文件放在 data/<namespace>/yapyap/dialogs/<name>.json。通过游戏内命令将对话绑定到一个生物,然后右键点击该生物。对话会随 /reload 重新加载。模组 jar 中包含一个完整可用的示例。

面向模组开发者

将该模组添加为依赖项并使用 YapYapAPI 类。你可以注册对话、注册自己的条件和动作类型、打开和关闭对话、将对话绑定到实体,以及读取或写入玩家标记。DialogBuilder 为你提供了一种可读的方式以代码定义对话树。

命令

所有 /yapyap 子命令都需要权限等级 2。

  • talk 为一个或多个玩家开始对话。
  • assign 和 unassign 在实体上绑定或解绑一个对话。
  • stop 强制关闭对话。
  • reset 清除玩家的访问历史。
  • flag 读取或编辑玩家标记。
  • list 显示每个已加载的对话 id。
  • demo 给你一个村民刷怪蛋用于快速测试。放置的村民会获得一个随机职业和一个示例对话,其中包含一个交易选项和一个小任务。
  • villager_on 为所有未绑定的成年村民开启一个通用问候。

最后一项默认关闭,也可在配置文件中编辑。

配置

配置文件 config/yapyap-common.toml 控制右键行为、自动关闭距离、是否允许命令动作以及自动对话开关。文件 config/yapyap-client.toml 控制打字机速度和背景变暗。两个文件都是纯文本,可安全手动编辑。

文档

完整文档以 wiki 形式提供。它涵盖了完整的 JSON 格式、每个条件及其字段、每个动作及其字段、Java API、事件列表、所有命令、所有配置键以及纹理规范。

打开 YapYap Wiki