
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、事件列表、所有命令、所有配置键以及纹理规范。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。