闲聊的村民

闲聊的村民

村民会在聊天中说出符合情境的台词,与生物群系、时间、天气、职业和情境相匹配,并彼此进行简短对话——此功能在服务器端运行,因此你的朋友无需安装任何东西。

闲聊村民

终于有话可说的村民。

村民会在聊天中说出与情境相关的台词——格式为 名字:台词,并采用你选择的颜色——台词与他们的职业、生物群系、一天中的时间、天气和处境相匹配。两个站得很近的村民会互相进行简短的对话,台词也可以选择以说话气泡的形式显示在他们头顶。

该模组完全在服务器端运行。每位玩家都会看到相同的台词,包括未安装该模组的玩家——发送的是文本已完成的真实聊天消息,而非翻译键。原版客户端可以正确显示所有内容。


语言

内置英语和德语。默认语言为英语。 要切换语言,请编辑 config/chattingvillagers.json:

"language": "de_de"
- 或:
"language": "en_us"

然后运行 /chattingvillagers reload 或重启服务器。语言文件夹会在首次使用时自动创建。

因为发送给客户端的是已完成文本,所以语言是服务器设置,而非玩家个人设置——服务器上的所有玩家看到的台词相同。其他语言只需在 config/chattingvillagers/dialogue/ 下新建一个文件夹即可;无需修改代码,并且非常欢迎翻译贡献。


命令

命令 效果 权限
/chattingvillagers on off toggle
/chattingvillagers status 显示你自己的设置 所有人
/chattingvillagers frequency quiet normal busy
/chattingvillagers bubbles on off 全局开启/关闭说话气泡
/chattingvillagers chat on off 开启/关闭聊天输出(关闭 = 仅气泡)
/chattingvillagers reload 重载配置和文本目录 OP(2级)
/chattingvillagers debug 显示最近村民的情境信息 OP(2级)

任何玩家都可以使用 /chattingvillagers off 为自己屏蔽村民聊天——其他玩家仍会继续收到消息。该设置按玩家UUID存储,并在服务器重启后保留。


编辑和扩展台词——无需重新编译

整个文本目录以 JSON 形式提供,并在首次启动时写入 config/chattingvillagers/dialogue/<语言>/。你可以修改台词、删除台词、添加自己的台词,然后在游戏运行中用一条命令重载。你自己的文件永远不会被更新覆盖。

每种语言包含:

类别 条目数
独白台词 767
对话 238(616行)
反应 421
总计 1804句语音台词

格式刻意保持简单——一个条目、其条件、权重、文本:

{
  "id": "farmer_morning",
  "type": "solo",
  "conditions": {
    "profession": ["farmer"],
    "timeOfDay": ["morning"]
  },
  "weight": 1,
  "text": "Out in the field early - that's how I like it."
}

条件为空或缺失意味着“始终适用”。权重控制台词出现的频率:1 用于普通台词,0.2 或 0.1 用于稀有台词——这很方便用于目录中隐藏的引用和彩蛋。语言文件夹中任何额外的 .json 文件都会自动作为新的独白台词池加载。

/chattingvillagers debug 在此会很有帮助:它会显示最近村民的情境信息以及当前匹配的台词和对话数量。


情境感知台词

每句台词都可以带有条件;当有多个条件匹配时,会按权重随机抽取一句。考虑的因素包括:

  • 一天中的时间 —— 早晨、白天、傍晚、夜晚,以及用于起床和睡觉的更精细标记。
  • 村民位置的天气 —— 晴天、雨天、雷暴。在雨天区域中、屋顶下的村民仍会被视为处于雨中。
  • 职业 —— 所有13种原版职业,以及无职业村民、傻子村民和流浪商人。
  • 生物群系 —— 34个类别,从沙漠和针叶林到蘑菇岛、滴水石洞和深暗之域。
  • 维度与位置 —— 主世界、下界(有专门的绯红、诡异、灵魂沙和玄武岩台词)、末地。该模组还能区分地下与地表:在屋顶下室内站立仍算地表,而在深处无天空处则会触发洞穴台词。
  • 附近的传送门 —— 村民旁边的下界或末地传送门会被评论。
  • 状态 —— 生命值低、最近受伤、正在交易。

对话与反应

两个站得足够近的村民会开始简短交流:A说些什么,B在略微随机的延迟后回复,较长的对话可长达八行。名字通过占位符插入,因此他们确实会互相称呼对方。如果参与者死亡、更换维度或走开,对话会干净地结束,并且每对村民都有自己的冷却时间。

右键点击无职业村民或傻子村民——即原版中只会摇头的那种——他们会简短回应。摇头和声音效果仍会照常播放,而有职业的村民会像以前一样打开交易菜单。

说话气泡

可选地,说的台词也会显示在村民头顶。气泡面向玩家,随之移动,并自行消失。这也是服务器端的——所有玩家都能看到,无需客户端模组。气泡是非持久的,并会被一致地清理:到期、死亡、服务器关闭时都会清除,加载时也会移除孤立气泡。你的世界存档不会积累任何内容。

如果你更想保持聊天栏清爽,可以关闭聊天输出,以仅说话气泡模式运行模组。

反垃圾:聊天保持可读

村民只在玩家周围的配置半径内说话,检查按间隔进行而非每个tick,每个村民都有冷却时间,不会所有人都同时说话,每个玩家每分钟有硬性消息数量上限,同一句台词不会连续重复两次,夜晚默认更安静,并且睡觉的村民、小村民和僵尸村民保持沉默。

三个频率预设会一起更改所有相关数值:安静、普通和热闹——可在游戏中切换,无需编辑配置。


村民名字

显示的名字是村民的自定义名称——Serilum的村民名字(Villager Names) 模组会自动分配这些名字,与本模组配合得很好。该模组并非必需:如果没有自定义名称,本模组会回退到职业名称(农夫、图书管理员、流浪商人……),再不行就回退到“村民”。名字颜色和文本颜色分别配置。


配置

config/chattingvillagers.json,首次启动时随默认值创建。所有值都可以在游戏运行中通过 /chattingvillagers reload 应用。

设置 默认值 含义
masterEnabled true 总开关
language en_us 文本目录的语言文件夹
chatColor / nameColor white / gold 文本和名字的颜色
radius 16.0 玩家周围的听觉范围(以方块计)
speakIntervalTicks 100 检查间隔
speakChance 0.35 每个间隔的说话几率
villagerCooldownSeconds 45 每个村民的冷却时间
maxMessagesPerPlayerPerMinute 6 每个玩家的速率限制
chanceFactorMorning … Night 1.0 / 1.0 / 1.0 / 0.3 每天时段的几率系数
conversationsEnabled true 村民对话
conversationChance 0.15 触发对话的几率
conversationRadius 5.0 参与者之间的最大距离
pairCooldownSeconds 120 每对村民的冷却时间
conversationLineDelayTicks 40 台词之间的停顿
bubblesEnabled true 说话气泡
bubbleLifetimeTicks 60 气泡显示时长
chatMessagesEnabled true 聊天输出
reactionsEnabled true 右键点击反应
reactionCooldownTicks 30 反应之间的冷却时间
portalScanRadius 4 传送门检测范围(0 = 关闭)
frequencyPreset normal 当前启用的预设(仅显示)

兼容性

  • Minecraft 1.21.1,Fabric——需要 Fabric API,Java 21
  • 其他玩家不需要安装该模组;服务器端就足够了
  • 没有对原版行为进行 mixin:交易、职业、繁殖和闲聊均未改动
  • 不影响数据包和世界生成
  • 与Serilum的村民名字(Villager Names)完全兼容(可选,非必需)

计划中

  • 作为开/关命令替代方案的按键绑定
  • 对台词目录的可选数据包支持
  • 更多语言——欢迎贡献

许可证

MIT——自由使用、修改,放入你的整合包。若能注明出处,我们将不胜感激。