跳到正文

Mebahel’s RPG – Villager Quests and Companions

作者:Mebahel

将 Minecraft 村庄变成鲜活的 RPG 冒险:体验剧情驱动的村民任务、分支选择、可招募同伴、任务板委托和任务日志,还能在游戏中创建任务。

收藏

截图

介绍

介绍由机器翻译自 Modrinth 原页面,仅供参考。

Mebahel’s RPG: Villager Quests & Companions

将 Minecraft 村庄变成充满活力的 RPG 冒险世界。体验剧情驱动的村民任务、分支对话与有意义的选择、可招募的同伴、可重复完成的悬赏契约、任务日志,以及完整的游戏内任务创建工具。

适用于 Minecraft Java Edition 1.20.1 和 1.21.1

模组加载器:在支持的情况下,可通过 Sinytra Connector 使用 Fabric / Quilt / Forge / NeoForge

玩法:单人游戏、多人游戏、RPG 和冒险类整合包

内容:包含 89 个任务、可重复完成的村庄契约、11 个任务书故事、40 段村民日常对话场景

Join our Discord&nbsp&nbsp Support on Patreon&nbsp&nbsp Support on Ko-fi

让 Minecraft 村民拥有值得追寻的故事

村民不该只是交易站。Mebahel’s RPG: Villager Quests & Companions是一款Minecraft 村民任务与同伴模组,能将普通村庄变成角色们有难题待解决、有传闻可分享,且故事会随你的选择而改变的地方。

结识有名有姓的 NPC,调查废弃地点,守护村庄,在战斗与宽恕之间做出选择,并随着冒险推进解锁新的篇章。有些角色甚至可以成为永久同伴,拥有各自的装备、战斗行为和指令。

不同于需要另装整合包或自制任务文件的任务框架,本模组自带开箱即玩的冒险内容。安装后只需前往村庄,开始探索即可。创作者还可以使用内置的Narrative Quest Studio和 JSON 数据包系统,创作全新的故事线。

功能一览

| 功能 | 内容 |
| — | — |
| 包含 89 个任务 | 剧情任务线、调查、村庄工作、隐藏冒险及后续故事 |
| 分支对话与选择 | 关于信任、战斗或宽恕的决定,可能影响后续任务和对话 |
| 可招募的 NPC 同伴 | 跟随、等待、返回家园、守卫、装备物品并选择战斗姿态 |
| 可重复完成的村庄任务告示板 | 狩猎、运送、护送、防御契约、精英目标及五个难度等级 |
| RPG 任务日志与 HUD | 目标、奖励、任务历史、目的地指引,以及可选任务地图 |
| 游戏内任务创建 | 使用 Narrative Quest Studio 创建并发布自定义任务 |
| 自定义数据包支持 | 使用 JSON 创建新的对话、任务线、NPC 遭遇、传闻和契约 |
| 多人游戏与整合包 | 独立或共享的剧情进度、服务器配置及可选模组联动 |

Gameplay screenshot of Mebahel's RPG: Villager Quests & Companions


带有选择与后果的剧情驱动村民任务

简单的送货任务可能演变成一场调查。敌人也可能成为盟友。你在一个村庄做出的决定,或许会改变你接下来遇到的故事。

本模组包含89 个任务,包括剧情任务链、村庄活动、任务书谜题,以及通过传闻或前置条件解锁的故事。你的冒险可能包括:

  • 调查矿井、遗迹和奇异地点。
  • 护送 NPC,并向其他定居点运送资源。
  • 帮助村庄建设、重建并守卫重要地点。
  • 追捕有名有姓的敌人,并直面危险威胁。
  • 选择饶恕或攻击某些角色。
  • 从写有任务的书籍中发现线索和完整冒险。
  • 之后再回来,了解新的对话、决定所带来的后果或后续任务。

选择会产生影响:你做出的决定可以改变对话、后续任务、特质以及故事线的发展方向。有些后续内容要过一段时间才会出现,因此重访熟悉的角色,或许能了解更多他们的故事。

包含哪些类型的任务?

| 任务内容 | 示例 | 主要玩法 |
| — | — | — |
| 主要故事线 | 灰烬法庭、武装亡者、虚假英雄、黑棘庄园、疯狂科学家、最重要的奶牛、无旗者、村庄防卫、女巫、最后的余温 | 分支叙事、调查、战斗与抉择后果 |
| 村庄故事 | 抵达村庄、建造、交付物品、修建动物围栏以及应对当地威胁 | 建造、收集、保护与探索 |
| 任务书故事 | 11 个可发现的故事,包括延迟开启的后续内容 | 探索、线索、秘密与特殊目标 |
| 村庄委托 | 狩猎、交付物品、保护村庄、入侵事件、护送和精英目标 | 可重复推进、逐步升级的挑战与奖励 |
| 隐藏发现 | 传闻、前置条件和后续任务章节 | 探索与循序渐进的叙事 |


可招募同伴:让角色成为盟友

你的选择影响的不只是任务结局。有些最初是敌人或重要剧情 NPC 的角色,最终可以成为永久同伴。目前可招募的同伴包括Rusk 和 Merrin。

为同伴下达实用指令:

  • 跟随你一起冒险,或留守某个地点。
  • 返回家中或守卫指定区域,即使你处于离线状态也会如此。
  • 在被动、防御和攻击战斗行为之间切换。
  • 在专属同伴物品栏中管理武器和其他装备。
  • 与敌对生物战斗,并在你攻击敌人时提供协助。

招募同伴与故事进展息息相关,并非独立无关的系统。

A recruitable companion from Mebahel's RPG: Villager Quests & Companions

同伴装备与恢复

你可以通过同伴专属物品栏界面为他们配备武器和装备。他们脱离战斗 10 秒后,也会逐渐恢复生命值。

Companion inventory screen used to manage weapons and equipment


村庄任务板、悬赏与可重复委托

想在故事章节之间来场冒险时,可以找找村庄里的任务板。任务板会提供可重复完成的委托,其中包含目标、目的地、奖励,以及难度逐步提高的挑战。

委托包括猎杀怪物、猎杀生成的怪物群、交付物品、村庄防卫、入侵事件、护送和精英目标。

每块任务板都有自己的等级和声望。完成委托可以推进进度、提高刷出高难度委托的几率,并缩短刷新时间。

| 难度 | 评级 |
| — | — |
| 普通 | ★ |
| 危险 | ★★ |
| 致命 | ★★★ |
| 梦魇 | ★★★★ |
| 传奇 | ★★★★★ |

高难度委托可能会增强敌群、精英遭遇战、装备、效果和奖励。已接受的委托会直接显示在你的任务日志和 HUD中;无需让委托物品占用物品栏空间。

默认情况下,任务板上的委托对每位玩家分别生成,但任务板的声望和等级由所有玩家共享。服务器服主可以调整此行为。

Minecraft village quest board with repeatable bounty contracts and refresh timer


在 Minecraft 游戏内创建自己的任务

叙事任务工作室可让服务器管理员创建新的故事任务,无需手动编写每个 JSON 文件。

打开该工具/mebahelquestcreator即可创建和编辑任务信息、开场对话、阶段、目标、奖励及高级行为。编辑器支持分支选择、具名遭遇、装备和奖励配置。

你可以保存本地草稿、预览任务、将其发布到服务器,或从剪贴板导入完整的任务 JSON。如果你更喜欢通过文件进行全面控制,仍可使用JSON 数据包系统;完整的创建器参考指南见本页底部附近。

Narrative Quest Studio interface for creating custom Minecraft quests in-game


任务日志、HUD追踪器与分支任务地图

你的冒险内容会整理在专属的 RPG 界面中,而不是零散地显示在聊天消息里。

任务日志(J)

按下J即可打开可配置的任务日志,查看进行中、已完成和失败的任务,以及目标、奖励、进度和目的地。你正在追踪的目标也会显示在可配置的 HUD 覆盖层上。

服务器所有者可以禁用任务日志中可点击的坐标,以保留探索与发现的乐趣。

Quest journal displaying active objectives, rewards and tracked destination

任务地图(K)

按下K即可查看相互关联的故事分支概览,其中包括选择、前置条件、传闻、任务链、延迟后续剧情和概率触发的后续内容。

地图可以帮你了解冒险的发展脉络,而不会一开始就展示所有可能的路线。两个快捷键都可配置;服务器也可以按需禁用任务地图。

Branching quest map showing story connections and quest details


鲜活村庄:传闻、对话与信使

即使你当前没有在完成任务,村庄也会显得更加鲜活。有些对话会引出新的冒险,其他对话则展现村庄的日常生活,或反映你的决定所带来的后果。

村民传闻与隐藏任务书

村民会分享传闻,为你揭示线索并解锁隐藏任务。探索世界时,你还可能发现十一个任务书故事,其中包括独立谜团,以及带有延迟后续剧情的冒险。并非所有任务都会立即出现,让玩家有理由重访熟悉的地方,继续探索。

Discoverable quest books and hidden stories in Villager Quests & Companions

村民的环境对话与反应

该模组包含40段环境对话,内容涉及工作、作物、书籍、铁傀儡、村庄闲谈和日常生活。对话会以说话者头顶的文字、对话音效和说话动画呈现。村民也会对你已完成故事中的重大事件作出反应。

环境对话及游戏内支持的叙事文本会使用玩家所选且可用的语言。

Two Minecraft villagers having an ambient conversation in their village

信使送信与延迟剧情

有些任务只有在经过足够的游戏时间后才会继续。白天时,信使可能会在主世界的户外找到你,并送来引出后续故事的信件。如果有多封信待送,一名信使可以一次全部送达。

收到送来的任务书并不会自动开始下一个任务;何时继续由你决定。

Minecraft courier delivering a letter for a follow-up RPG quest


开始游玩:你的首次村庄冒险

无需外部任务整合包或自定义数据包。内置任务开箱即用。

  1. 前往 Minecraft 村庄并与村民交谈。并非每位村民都会提供任务;有些只会分享传闻。
  2. 找到任务公告板,查看可重复完成的委托和奖励。
  3. 探索世界,寻找任务书、线索和隐藏冒险。
  4. 按下J,即可在任务日志和 HUD 上追踪任务。
  5. 按下K,即可在任务地图上探索故事之间的联系。

Minecraft 版本、模组加载器与安装方式

| 要求 | 详情 |
| — | — |
| Minecraft 版本 | 1.20.1 和 1.21.1 |
| Fabric | 对应版本的 Fabric,并搭配匹配的 Fabric API |
| Quilt | 标注为受支持;请使用兼容 Fabric API 的相应配置 |
| Forge / NeoForge | 通过 Sinytra Connector 使用 Fabric 版本,并搭配 Forgified Fabric API;仅限这些组件支持所选版本和加载器的情况 |
| 游戏模式 | 单人游戏和多人游戏 |
| 任务内容 | 内置;数据包为可选内容 |

Fabric / Quilt:需要安装 Fabric API。

Forge / NeoForge(基于 Connector):需要安装 Sinytra Connector 和 Forgified Fabric API。安装前请确认 Connector 对对应版本的兼容性。这并不表示每个 Minecraft 版本都有原生 Forge/NeoForge 版本。

请务必下载与 Minecraft 版本匹配的 Villager Quests & Companions 版本及其所有依赖项。


与其他 Minecraft 模组的兼容性

Mebahel’s RPG 专为冒险、奇幻、村庄改造和 RPG 整合包设计。它与多种村庄和生物模组联动,让任务内容更加丰富多样。

| 模组 | 兼容性或可选联动 |
| — | — |
| MCA Reborn | 专门的交互处理机制会在任务交互后将控制权交还给 MCA。 |
| Ice and Fire CE | 可选的精英契约,涉及火焰、冰霜和闪电龙,并提供难度缩放和奖励。 |
| Saint’s Dragons | 可配置与龙相关的村庄袭击契约,包括 Varasuchus、Volitans、Nulljaw、Atroxiia、Raevyx、Ignivorus 和 Draconian Swarm。 |
| Guard Villagers | 可通过专门的配置控制守卫能够提供哪些任务。 |
| Villagers Reborn | 支持该模组的村民模型和交互改动。 |
| Epic Villages | 已与任务系统进行兼容性测试。 |
| Luki’s Grand Capitals | 已与任务系统进行兼容性测试。 |

任务目标可以指定原版或模组添加的地点。具体兼容性可能因 Minecraft 版本、加载器以及其他模组的改动而异。

Minecraft 世界中的 RPG 任务与生物联动


多人游戏、服务器与整合包

可以在整合包或多人游戏服务器中使用 Villager Quests & Companions。该模组默认支持玩家独立推进任务,也可配置共享进度、结果、奖励和故事特质。

任务公告板可以向玩家分别或集体提供契约。公告板声望和进度为共享状态。服务器和整合包作者可以配置任务生成、公告板放置、传闻、HUD 导航、契约、对话频率和受支持的联动。

在自定义整合包中,数据包可以添加涉及原版或模组生物、物品、结构、对话、目标和奖励的任务,而无需替换内置故事。

配置

主要配置文件:

config/mebahelrpgrquest/mebahelrpgrquest_config.json

配置内容包括任务和传闻分配、任务公告板生成、任务追踪、多人游戏共享设置以及环境对话。其他文件用于处理忽略的任务、Guard Villagers 和契约生成。

主要配置默认值

选项 默认值 用途
villagerQuestChance 0.15 故事任务分配权重
villagerRumorChance 0.15 传闻分配权重
disableQuestCoordinateClick false 禁用可点击的日志坐标
disableQuestMap false 禁用任务地图
shareQuestsBetweenPlayers false 共享故事进度、结果、奖励和特质
inventoryJournalButtonPosition left 物品栏日志按钮位置
hideInventoryJournalButton false 隐藏物品栏日志按钮
questTrackerPosition top_left HUD追踪器角落
questTrackerScale 1.0 HUD追踪器大小
questBoardVillageChance 1.0 任务板生成几率
individualBoardOffers true 个人任务板提供
questBoardStructures minecraft:village_plains、minecraft:village_desert、minecraft:village_savanna、minecraft:village_snowy、minecraft:village_taiga 符合条件的村庄
questBoardPreferMeetingPoint true 在集合点附近放置
questBoardPlacementSearchRadius 24 放置搜索半径
questBoardDropsOnBreak true 任务板物品掉落行为
questBoardMinimumPlacementDistance 48 任务板之间的最小距离
ambientDialoguesEnabled true 环境对话开/关
ambientDialogueCheckIntervalTicks 100 对话检查间隔
ambientDialogueChance 0.08 每次符合条件检查的对话几率
ambientDialogueActivityRadius 24.0 对话活动半径

语言与本地化

该模组包含以下语言的本地化:英语、法语、德语、波兰语、日语、韩语、俄语、简体中文、巴西葡萄牙语、西班牙语和墨西哥西班牙语。

游戏会使用你选择的语言来显示受支持的任务文本和村民环境对话。可用语言已包含在模组中;无需单独的翻译模组。


常见问题

这个模组会自动为Minecraft村民添加任务吗?

是的。它包含可直接游玩的的任务和村民传闻,因此你只需访问村庄就能发现故事线。任务分配和传闻几率均可配置。

这是一个任务模组,还是仅为整合包提供的任务框架?

既是可玩内容,也是创作者工具。它包含89个任务和可重复合同,同时还通过游戏内编辑器和JSON数据包支持自定义任务。

我可以在Minecraft中招募NPC作为同伴吗?

可以。某些任务结果允许你招募Rusk和Merrin,然后向他们下达跟随、等待、回家、守卫和战斗姿态命令。他们也可以装备物品。

任务选择真的会产生后果吗?

在选定的故事中,是的。你的决定可以改变后续任务、故事特质和对话。并非每个任务都会分支,有些后续内容会在之后出现。

它能在多人游戏或Minecraft整合包中运行吗?

是。 默认情况下,任务进度是个人独立的,也可以选择共享剧情进度。任务板、难度、世界生成和界面行为都有服务端配置选项。

我可以在不编辑 JSON 的情况下创建自定义任务吗?

可以。 服务器管理员可以使用 Narrative Quest Studio(/mebahelquestcreator)在游戏内创建和发布任务。也支持通过 JSON 数据包进行高级自定义。

它与 Ice and Fire、MCA Reborn 或其他村庄模组兼容吗?

它对上表兼容性列表中显示的模组有专门的集成和经过测试的兼容性。可用性和行为可能取决于所安装的版本。

它支持 Forge 和 NeoForge 吗?

在兼容的情况下,可通过 Sinytra Connector 支持,使用 Fabric 版本加 Forgified Fabric API。安装前请确认 Connector 支持你选择的 Minecraft 版本和加载器。

我需要另一个 Mebahel 模组才能游玩吗?

不需要。 Draugr Invasion 和 Dwarven Automatons 是独立的可选项目,不是 Villager Quests & Companions 的必需依赖。


继续冒险:Mebahel 的更多模组

如果你喜欢 RPG 冒险,这些独立的 Minecraft 模组可能也会让你感兴趣:

Mebahel’s Creatures: Draugr Invasion
探索北欧遗迹,与智能 Draugr 战斗,解决地牢挑战,找回 Golden Claw,并挑战 Draugr Overlord。

Mebahel’s Creatures: Dwarven Automatons
探索受 Dwemer 启发的古老遗迹,与机械构造体战斗,找回 Dwarven 科技,并召唤机械盟友。

CurseForge 上的所有 Mebahel Minecraft 模组


加入社区并支持开发

加入 Mebahel Discord,提出任务创意、为即将推出的功能投票、分享截图、报告漏洞、讨论伙伴和故事,或关注开发预览。

报告漏洞时,请附上你的 Minecraft 版本、加载器、模组版本、复现步骤,并在相关时附上日志或截图。

你可以通过上方的横幅或下方的直接链接,在 Patreon 或 Ko-fi 上支持未来的更新和独立模组开发。

支持完全是可选的。关注项目、创建数据包、报告问题和分享你的冒险同样有帮助。直接链接:Patreon · Ko-fi。

如果你想看到未来的更新,请在 CurseForge 上使用 Follow。


创作者文档:JSON 数据包参考

用 JSON 数据包构建你自己的故事。 添加对话、分支选择、传闻、目标、具名敌人、奖励和可重复合同。使用原版或模组内容,为你的世界或整合包量身定制冒险。

下面的参考部分包含任务和合同示例。展开最接近你想创建内容的部分。

剧情任务和传闻:设置

任何人都可以通过数据包或模组中的 JSON 文件为该模组创建新任务。你可以添加对话、目标、传闻、具名敌人、奖励、选择、伏击、袭击、运送、护送以及完整的分支任务线。

文件位置

将任务和传闻文件放入你自己的命名空间:

data/<namespace>/quests/<quest_file>.json

data/<namespace>/rumors/<rumor_file>.json

例如:

data/my_quests/quests/old_well.json

这会创建任务 ID:

my_quests:old_well

可以使用任务子文件夹,但它们不会成为任务 ID 的一部分。请确保命名空间内的每个任务文件名都唯一。

快速开始

  1. 选择下面最接近你想制作的任务的示例。
  2. 将其中的 JSON 复制到 data/<namespace>/quests/ 或 data/<namespace>/rumors/ 下的新文件中。
  3. 将 example 或 modid 中的命名空间替换为你自己的命名空间。
  4. 修改对话、实体、结构、目标、奖励和关联任务 ID。
  5. 重新加载数据包,并在开发世界或备份世界中测试任务。

JSON 不允许注释或尾随逗号。请始终使用完整标识符,例如 minecraft:zombie;一个文件引用另一个文件时,请使用完整任务 ID,例如 my_quests:old_well。

面向玩家显示的文本可以使用翻译对象:

{
"translate": "quest.my_quests.old_well.title",
"fallback": "The Old Well"
}

如果没有可用的匹配翻译,系统会显示 fallback 值,因此语言文件不是必需的。

带有攻击或放过分支的命名威胁

生成一名有名字的敌人,让玩家与其对话,然后根据目标是被攻击还是被放过,进入不同的后续任务。

首个任务

{

"title": "QUEST TITLE",
"summary": "Villager-facing summary shown before acceptance.",
"flow": {
"on_kill": "modid:kill_branch_2",
"on_spare": "modid:spare_branch_2"
},
"goals": [
{
"id": "talk_to_threat",
"talk": "minecraft:zombie",
"amount": 1,
"name": "NAMED THREAT"
},
{
"id": "kill_threat",
"kill": "minecraft:zombie",
"amount": 1,
"attack_only": true,
"from_threats": true
}
],
"threat": {
"entity": "minecraft:zombie",
"name": "NAMED THREAT",
"structure": "minecraft:ruined_portal",
"search_radius": 4000,
"spawn_on_accept": true,
"spawn_min_radius": 3,
"spawn_max_radius": 6,
"spare": true,
"glow": false,
"max_health": 150,
"equipment": {
"mainhand": "minecraft:diamond_sword",
"helmet": {
"item": "minecraft:iron_helmet",
"enchants": {
"minecraft:unbreaking": 3
}
}
},
"line": "Quest giver line that describes the threat.",
"target": "Initial line spoken by the threat.",
"talk": [
[
"Player question one?",
"Threat answer one."
],
[
"Player question two?",
"Threat answer two."
]
]
},
"choice": {
"attack": {
"label": "Attack choice label.",
"traits": [
"trait_from_attack"
],
"return": "Quest giver line after the target is killed."
},
"spare": {
"label": "Spare choice label.",
"line": "Immediate line after sparing the target.",
"post": "Follow-up line shown after the spare.",
"villager": "Quest giver line after spare.",
"traits": [
"trait_from_spare"
],
"rewards_from_giver": true,
"rewards": {
"xp": 160,
"items": {
"minecraft:iron_ingot": 4
}
},
"after": {
"offer_chance": 70,
"ambush_chance": 30,
"nothing_chance": 0,
"ambush": "minecraft:zombie",
"ambush_name": "Fallback Ambush Name",
"count": 5,
"ambush_max_health": 50,
"ambush_equipment": {
"helmet": "minecraft:leather_helmet"
},
"line": "Line used when the spared target offers the next quest.",
"ambush_line": "Line used if mercy triggers an ambush.",
"nothing": "Line used if no follow-up happens."
}
}
},
"dialogue": {
"return": "Quest giver line after kill.",
"reward": "任务发布者奖励行。",
"done": "任务发布者已完成行。"
},
"rewards": {
"xp": 260,
"items": {
"minecraft:emerald": 10
}
}
}

对于启用了宽恕的威胁对峙,优先使用上文展示的 talk 加 attack_only 击杀模式。第一次交互会打开对话,但不会完成阶段;只有玩家明确选择攻击或宽恕后,该阶段才会完成。

击杀分支

{
"title": "KILL BRANCH TITLE",
"summary": "Follow-up summary after the player chose attack.",
"dialogue": {
"intro": "Intro line.",
"offer": [
[
"Player question?",
"Quest giver answer."
]
],
"return": "Return line.",
"reward": "Reward line.",
"done": "Already completed line."
},
"goals": [
"kill 3 minecraft:zombified_piglin"
],
"threats": [
{
"entity": "minecraft:zombified_piglin",
"name": "Branch Threat",
"structure": "minecraft:ruined_portal",
"search_radius": 4000,
"spawn_on_accept": true,
"spare": false,
"max_health": 70,
"equipment": {
"mainhand": "minecraft:golden_sword"
}
}
],
"rewards": {
"xp": 360,
"items": {
"minecraft:emerald": 14
}
}
}

宽恕分支

{
"title": "SPARE BRANCH TITLE",
"summary": "Follow-up summary after the player chose spare.",
"flow": {
"next": "modid:spare_branch_3"
},
"dialogue": {
"intro": "Intro line from the spared target or quest giver.",
"offer": [
[
"Player question?",
"Answer."
]
],
"return": "Return line.",
"reward": "Reward line.",
"done": "Already completed line."
},
"goals": [
{
"collect": "minecraft:iron_ingot",
"amount": 4
}
],
"rewards": {
"xp": 240,
"items": {
"minecraft:emerald": 6
}
}
}

分阶段建造与防御

要求玩家先建造或收集物资,然后开始第二阶段,在任务发布者周围生成攻击者。

基于 questlines/village_build/village_pig_enclosure.json。

要点:

  • sequential_objectives: true 使阶段 0 在阶段 1 开始前完成。
  • 建造目标使用 place、bring、collect 或其他普通目标快捷方式。
  • 威胁可以分配给 stage: 1,并通过 spawn_origin: "quest_giver" 在任务发布者周围生成。
  • 当生成的具名/自定义威胁应被计入时,在击杀目标上使用 from_threats: true。
  • 为每个要生成的生物添加一个 threats 条目。威胁条目上不会读取 amount。
{

"title": {
"translate": "quest.example.first_pen_defense.title",
"fallback": "值得守护的畜栏"
},
"summary": {
"translate": "quest.example.first_pen_defense.summary",
"fallback": "建造一个小型畜栏,把牲畜带进去,然后抵御袭来的掠夺者。"
},
"sequential_objectives": true,
"dialogue": {
"intro": {
"translate": "quest.example.first_pen_defense.dialogue.intro",
"fallback": "村民指向农场附近一片光秃秃的草地。"
},
"offer": [
[
{
"translate": "quest.example.first_pen_defense.dialogue.offer.0.0",
"fallback": "你需要我建些什么?"
},
{
"translate": "quest.example.first_pen_defense.dialogue.offer.0.1",
"fallback": "一圈栅栏、一扇栅栏门、两支火把,还要留出足够的空间安置第一批牲畜。"
}
]
],
"return": {
"translate": "quest.example.first_pen_defense.dialogue.return",
"fallback": "畜栏守住了,你也撑住了。"
},
"reward": {
"translate": "quest.example.first_pen_defense.dialogue.reward",
"fallback": "拿着这个。守得住的农场,养活的不止一户人家。"
},
"done": {
"translate": "quest.example.first_pen_defense.dialogue.done",
"fallback": "动物还在畜栏里,掠夺者已经不见了。"
}
},
"goals": [
{
"id": "place_fences",
"place": "minecraft:oak_fence",
"amount": 12,
"stage": 0,
"range": 60
},
{
"id": "place_gate",
"place": "minecraft:oak_fence_gate",
"amount": 1,
"stage": 0,
"range": 60
},
{
"id": "place_torches",
"place": "minecraft:torch",
"amount": 2,
"stage": 0,
"range": 60,
"say": {
"translate": "quest.example.first_pen_defense.goals.place_torches.say",
"fallback": "畜栏亮起来了。待在附近。"
}
},
{
"id": "bring_animals",
"bring": "minecraft:pig",
"amount": 2,
"stage": 0,
"range": 60
},
{
"id": "kill_raiders",
"kill": "minecraft:pillager",
"amount": 3,
"stage": 1,
"from_threats": true
},
{
"id": "kill_raider_captain",
"kill": "minecraft:vindicator",
"amount": 1,
"stage": 1,
"from_threats": true
}
],
"threats": [
{
"entity": "minecraft:pillager",
"name": {
"translate": "quest.example.first_pen_defense.threats.0.name",
"fallback": "饿肚子的掠夺者"
},
"stage": 1,
"spawn_origin": "quest_giver",
"spawn_min_radius": 18,
"spawn_max_radius": 30,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": true
},
{
"entity": "minecraft:pillager",
"name": {
"translate": "quest.example.first_pen_defense.threats.1.name",
"fallback": "拆栅栏的掠夺者"
},
"stage": 1,
"spawn_origin": "quest_giver",
"spawn_min_radius": 18,
"spawn_max_radius": 30,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": true
},
{
"entity": "minecraft:pillager",
"name": {
"translate": "quest.example.first_pen_defense.threats.2.name",
"fallback": "踢火把的掠夺者"
},
"stage": 1,
"spawn_origin": "quest_giver",
"spawn_min_radius": 18,
"spawn_max_radius": 30,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": true
},
{
"entity": "minecraft:vindicator",
"name": {
"translate": "quest.example.first_pen_defense.threats.3.name",
"fallback": "破栅者"
},
"stage": 1,
"spawn_origin": "quest_giver",
"spawn_min_radius": 22,
"spawn_max_radius": 34,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": true,
"max_health": 40.0
}
],
"rewards": {
"xp": 180,
"items": {
"minecraft:emerald": 6,
"minecraft:wheat": 12
}
},
"traits": {
"complete": [
"farm_defender"
]
}
}

生成的容器、成书和TNT

将任务物品放入结构中的容器,让玩家阅读书面线索,然后完成爆破目标并生成敌人。

基于 questlines/sculk/sculk_mineshaft_investigation.json。

要点:

  • read_book目标必须包含 item: "minecraft:written_book"。
  • quest_book.title、quest_book.author 和 quest_book.pages 可以使用翻译对象。
  • 使用 in_chest: true 搭配 container,在生成的容器中生成目标物品。
  • 任务物品生成器会将生成的箱子/容器物品放入随机的空槽位。
  • detonate_tnt应使用 block指定爆炸附近的目标方块,而不是 TNT 方块本身。
  • force_place_block: true可在结构无法稳定生成目标方块时预先放置该方块。
{

"title": {
"translate": "quest.example.mine_demolition.title",
"fallback": "Notes Under the Mine"
},
"summary": {
"translate": "quest.example.mine_demolition.summary",
"fallback": "Find a sealed mineshaft, recover the foreman's notes, and destroy the marked spawner."
},
"sequential_objectives": true,
"goals": [
{
"id": "reach_old_mine",
"reach": "minecraft:mineshaft",
"structure": "minecraft:mineshaft",
"radius": 3200,
"range": 80,
"stage": 0,
"auto_advance": true
},
{
"id": "read_foreman_notes",
"type": "read_book",
"item": "minecraft:written_book",
"amount": 1,
"structure": "minecraft:mineshaft",
"container": "minecraft:barrel",
"stage": 1,
"radius": 3200,
"in_chest": true,
"auto_advance": true,
"tag": "example_foreman_notes",
"quest_book": {
"title": {
"translate": "quest.example.mine_demolition.book.title",
"fallback": "Foreman's Notes"
},
"author": {
"translate": "quest.example.mine_demolition.book.author",
"fallback": "Mine Foreman"
},
"pages": [
{
"translate": "quest.example.mine_demolition.book.page.0",
"fallback": "We sealed the lower drift after the spawner woke again. If anyone returns, place charges near the cage, not in the tunnel mouth."
}
]
},
"block_patch": {
"radius": 4,
"palette": [
"minecraft:sculk",
"minecraft:deepslate"
]
}
},
{
"id": "take_tnt_from_barrel",
"collect": "minecraft:tnt",
"amount": 3,
"mandatory": false,
"sequential": true,
"stage": 1,
"in_chest": true,
"structure": "minecraft:mineshaft",
"container": "minecraft:barrel"
},
{
"id": "place_demolition_charges",
"place": "minecraft:tnt",
"amount": 3,
"structure": "minecraft:mineshaft",
"stage": 2,
"range": 12
},
{
"id": "detonate_spawner",
"type": "detonate_tnt",
"block": "minecraft:spawner",
"required_mob": "minecraft:skeleton",
"structure": "minecraft:mineshaft",
"force_place_block": true,
"amount": 3,
"stage": 2,
"radius": 3200,
"range": 14,
"auto_advance": true,
"block_patch": {
"radius": 3,
"palette": [
"minecraft:sculk",
"minecraft:deepslate"
]
}
},
{
"id": "kill_what_crawls_out",
"kill": "minecraft:zombie",
"amount": 4,
"stage": 3,
"from_threats": true
}
],
"threats": [
{
"entity": "minecraft:zombie",
"name": {
"translate": "quest.example.mine_demolition.threats.0.name",
"fallback": "Sculk-Crowned Dead"
},
"stage": 3,
"spawn_origin": "player",
"spawn_min_radius": 8,
"spawn_max_radius": 16,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": true,
"equipment": {
"head": "minecraft:sculk"
}
},
{
"entity": "minecraft:zombie",
"name": {
"translate": "quest.example.mine_demolition.threats.1.name",
"fallback": "被幽匿标记的亡者"
},
"stage": 3,
"spawn_origin": "player",
"spawn_min_radius": 8,
"spawn_max_radius": 16,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": true,
"equipment": {
"head": "minecraft:sculk"
}
},
{
"entity": "minecraft:zombie",
"name": {
"translate": "quest.example.mine_demolition.threats.2.name",
"fallback": "被幽匿标记的亡者"
},
"stage": 3,
"spawn_origin": "player",
"spawn_min_radius": 8,
"spawn_max_radius": 16,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": true,
"equipment": {
"head": "minecraft:sculk"
}
},
{
"entity": "minecraft:zombie",
"name": {
"translate": "quest.example.mine_demolition.threats.3.name",
"fallback": "被幽匿标记的亡者"
},
"stage": 3,
"spawn_origin": "player",
"spawn_min_radius": 8,
"spawn_max_radius": 16,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": true,
"equipment": {
"head": "minecraft:sculk"
}
}
],
"rewards": {
"xp": 320,
"items": {
"minecraft:emerald": 10,
"minecraft:echo_shard": 1
}
}
}

向另一处建筑或村庄交付物品

收集物资,前往另一处建筑或村庄,将物品交给生成的目标,然后返回最初的任务发布者。

基于delivery_cobblestone_oak_log_other_village.json。

要点:

  • 交付目标在threat中配置。
  • delivery_objectives必须列出需要交付的目标 ID。
  • 目标对话任务通常应使用auto_advance: true。
  • 如果玩家必须回来报告,请在下一阶段添加一个最终的return: true任务。
  • min_structure_distance当目标不应生成在同一村庄时,
很有用。

"title": {
"translate": "quest.example.remote_delivery.title",
"fallback": "送往下一个村庄的石料"
},
"summary": {
"translate": "quest.example.remote_delivery.summary",
"fallback": "把物资送给正在另一个村庄等候的信使。"
},
"sequential_objectives": true,
"goals": [
{
"id": "delivery_cobblestone",
"collect": "minecraft:cobblestone",
"amount": 32,
"mandatory": true,
"stage": 0
},
{
"id": "delivery_oak_logs",
"collect": "minecraft:oak_log",
"amount": 16,
"mandatory": true,
"stage": 0
},
{
"id": "deliver_to_messenger",
"talk": "minecraft:villager",
"amount": 1,
"mandatory": true,
"stage": 0,
"auto_advance": true,
"name": {
"translate": "quest.example.remote_delivery.goals.deliver_to_messenger.name",
"fallback": "村庄信使"
},
"say": {
"translate": "quest.example.remote_delivery.goals.deliver_to_messenger.say",
"fallback": "信使收下了物资。回去找派你来的村民。"
}
},
{
"id": "return_to_sender",
"return": true,
"amount": 1,
"mandatory": true,
"stage": 1
}
],
"threat": {
"entity": "minecraft:villager",
"name": {
"translate": "quest.example.remote_delivery.threat.name",
"fallback": "村庄信使"
},
"structure": "minecraft:villages",
"search_radius": 4200,
"spawn_radius": 10,
"spawn_on_accept": true,
"spare_enabled": false,
"glow": false,
"target_line": {
"translate": "quest.example.remote_delivery.threat.target_line",
"fallback": "如果你带来了石料和橡木,就在墙塌之前把它们交给我。"
},
"delivery_objectives": [
"delivery_cobblestone",
"delivery_oak_logs"
],
"delivery_choice_label": {
"translate": "quest.example.remote_delivery.threat.delivery_choice_label",
"fallback": "交出物资"
},
"delivered_line": {
"translate": "quest.example.remote_delivery.threat.delivered_line",
"fallback": "这些足够撑住了。告诉他们,我们两座村庄之间的道路仍值得保持畅通。"
},
"depart_after_delivery": false,
"min_structure_distance": 700
},
"rewards": {
"xp": 180,
"items": {
"minecraft:emerald": 7,
"minecraft:bread": 6
}
}
}

村庄袭击防御

接受任务时开始一场普通的 Minecraft 袭击,并在村庄幸存后完成目标。

基于 questlines/village_defense/village_defense_chain_3_the_bell_and_the_raid.json。

要点:

  • 使用 type: "defend_raid"。
  • amount: 1 是单个袭击防御目标的常用值。
  • 此目标依赖 Minecraft 的常规袭击流程,因此应由正在防守的村庄内或附近的村民发布。
  • 如果希望袭击奖励别具特色,可以使用带有附魔物品的奖励。
{

"title": {
"translate": "quest.example.bell_raid.title",
"fallback": "钟声与袭击"
},
"summary": {
"translate": "quest.example.bell_raid.summary",
"fallback": "与村庄并肩作战,抵御袭击。"
},
"dialogue": {
"intro": {
"translate": "quest.example.bell_raid.dialogue.intro",
"fallback": "村民站在钟旁,一只手握着钟绳。"
},
"offer": [
[
{
"translate": "quest.example.bell_raid.dialogue.offer.0.0",
"fallback": "你觉得他们现在就要来了吗?"
},
{
"translate": "quest.example.bell_raid.dialogue.offer.0.1",
"fallback": "如果我们敲响钟声,他们就会知道我们已经做好战斗准备。"
}
]
],
"return": {
"translate": "quest.example.bell_raid.dialogue.return",
"fallback": "号角声已停,村庄依然屹立。"
},
"reward": {
"translate": "quest.example.bell_raid.dialogue.reward",
"fallback": "这是从袭击首领那里缴获的战利品。按战斗中的规矩,它归你了。"
},
"done": {
"translate": "quest.example.bell_raid.dialogue.done",
"fallback": "钟声再次响起,是为了警示,而非恐惧。"
}
},
"goals": [
{
"id": "defend_the_village",
"type": "defend_raid",
"amount": 1
}
],
"rewards": {
"xp": 650,
"items": {
"minecraft:emerald": 20,
"minecraft:crossbow": {
"count": 1,
"enchantments": [
{
"id": "minecraft:power",
"level": 3
},
{
"id": "minecraft:unbreaking",
"level": 2
},
{
"id": "minecraft:piercing",
"level": 1
}
]
}
}
},
"traits": {
"complete": [
"village_defender"
]
}
}

解锁隐藏任务的传闻

让任务保持不可用,直到玩家从村民那里听到正确的传闻。

基于 rumors/mine_smoke_below.json 和 blaze_mineshaft_threat.json。

要点:

  • 传闻文件位于 data/<namespace>/rumors/<rumor_id>.json。
  • unlock_quest 应该是完整的任务 ID。
  • 发现传闻后,玩家会获得特质 quest_discovered:<full quest id>。
  • 隐藏任务应要求拥有该特质。
  • 使用 conditions.not_completed_quests,这样任务完成后,这条传闻就不再有用了。
  • 传闻 line 和 discovered_line 目前都是普通字符串。

传闻文件

{

"id": "example_smoke_below",
"weight": 15,
"line": "矿工们发誓,封闭多年的矿井竖井里正冒出烟雾。",
"unlock_quest": "example:hidden_mineshaft_fire",
"conditions": {
"not_completed_quests": [
"example:hidden_mineshaft_fire"
]
},
"discovered_line": "发现传闻:有危险的灼热之物正在一条古老矿井中移动。"
}

隐藏任务文件

{
"title": {
"translate": "quest.example.hidden_mineshaft_fire.title",
"fallback": "Flame in the Mineshaft"
},
"summary": {
"translate": "quest.example.hidden_mineshaft_fire.summary",
"fallback": "A villager reports a blaze burning through an abandoned mineshaft."
},
"requires": {
"traits": [
"quest_discovered:example:hidden_mineshaft_fire"
]
},
"goals": [
{
"id": "kill_mine_blaze",
"kill": "minecraft:blaze",
"amount": 1
}
],
"threat": {
"entity": "minecraft:blaze",
"name": {
"translate": "quest.example.hidden_mineshaft_fire.threat.name",
"fallback": "Ignivar the Mineflame"
},
"structure": "minecraft:mineshaft",
"search_radius": 4000,
"spawn_on_accept": true,
"spare_enabled": false,
"max_health": 150.0,
"offer_line": {
"translate": "quest.example.hidden_mineshaft_fire.threat.offer_line",
"fallback": "Something from the Nether is burning through an old mineshaft."
},
"target_line": {
"translate": "quest.example.hidden_mineshaft_fire.threat.target_line",
"fallback": "The blaze crackles with hostile heat. There is no sign it understands mercy."
}
},
"rewards": {
"xp": 260,
"items": {
"minecraft:emerald": 12,
"minecraft:blaze_rod": 2
}
}
}

护送至建筑

护送任务实体前往已搜索到的建筑,并可配置搜索距离和完成范围。

基于 questlines/armed_zombie/armed_zombie_chain_spare_2_forgotten_road.json。

要点:

  • 使用 escort 快捷写法并指定建筑 ID。解析器会将其转换为 escort_entity。
  • radius 控制建筑搜索的最远距离。
  • range 控制被护送实体必须靠近目标建筑到什么程度。
  • 这很适合作为备用人员/招募分支后的后续任务。
{

"title": {
"translate": "quest.example.forgotten_road.title",
"fallback": "被遗忘的道路"
},
"summary": {
"translate": "quest.example.forgotten_road.summary",
"fallback": "护送一名被饶过的敌人,前往它记得的村庄道路。"
},
"flow": {
"next": "example:remembered_name"
},
"dialogue": {
"intro": {
"translate": "quest.example.forgotten_road.dialogue.intro",
"fallback": "被饶过的生物放低武器,望向道路。"
},
"offer": [
[
{
"translate": "quest.example.forgotten_road.dialogue.offer.0.0",
"fallback": "你还记得一个村庄?"
},
{
"translate": "quest.example.forgotten_road.dialogue.offer.0.1",
"fallback": "钟声。炊烟。一口石头开裂的井。带我去那里。"
}
]
],
"return": {
"translate": "quest.example.forgotten_road.dialogue.return",
"fallback": "钟声。我认得这个声音。"
},
"reward": {
"translate": "quest.example.forgotten_road.dialogue.reward",
"fallback": "我在井边的石头下面找到了这个。它曾经属于我。"
},
"done": {
"translate": "quest.example.forgotten_road.dialogue.done",
"fallback": "村庄的道路还记得我。"
}
},
"goals": [
{
"id": "escort_to_village",
"escort": "minecraft:village_plains",
"radius": 3500,
"range": 40
}
],
"rewards": {
"xp": 220,
"items": {
"minecraft:iron_ingot": 6,
"minecraft:emerald": 4
}
},
"traits": {
"complete": [
"escort_memory"
]
}
}

任务公告板合约:进度与数据包配置

任务公告板可以出现在已配置的村庄结构中,并独立于内置剧情任务生成可重复接取的合约。公告板会随时间刷新任务,可提供狩猎、递送、保护村庄和讨伐精英目标等任务。

打开公告板即可浏览当前合约、查看各项目标与奖励,并接取想做的任务。已接取的合约会直接加入常规任务日志和HUD:无需在物品栏中保留任何合约物品。每块公告板都有独立的共享声望和等级。完成该公告板的合约,会提高出现更高难度任务的几率,并缩短刷新时间。多人游戏中,可以将任务设为每位玩家单独领取,或由所有玩家共享领取。

合约分为五个难度等级:

难度 应用的数值调整
普通(1星) 群体生物数量:+0;每只群体生物生命值:+0 HP;精英数量:x1.00;每名精英生命值:+0 HP。
危险(2星) 群体生物数量:+1;每只群体生物生命值:+5 HP;精英数量:x1.15;每名精英生命值:+20 HP。
致命(3星) 群体生物数量:+2;每只群体生物生命值:+10 HP;精英数量:x1.35;每名精英生命值:+50 HP。
梦魇(4星) 群体生物数量:+4;每只群体生物生命值:+20 HP;精英数量:x1.60;每名精英生命值:+75 HP。
传奇(5星) 群体生物数量:+6;每只群体生物生命值:+40 HP;精英数量:x2.00;每名精英生命值:+150 HP。

应用倍率后,精英数量向上取整。特定精英可以选择不按倍率调整数量,方法是添加 "scale_count_with_difficulty": false;如果配置了 max_health,生命值加成仍会生效。

难度还会影响装备、状态效果、奖励以及获得的公告板声望。

数据包配置

任务公告板合约完全由数据驱动。数据包或模组可以添加原版或模组实体、物品、结构、装备和奖励,而无需替换内置文件。

请使用常规的数据包目录结构:

<datapack>/

pack.mcmeta
data/
<your_namespace>/
quest_board_contracts/

除非你有意覆盖相同资源路径的数据,否则不要将自定义文件放入 mebahelrpgrquest 命名空间。系统会发现并合并来自不同命名空间的契约定义。例如 example:raider_rewards 这样的引用会在被引用的命名空间内解析。

每种契约类型都有自己的定义文件和可选表格:

quest_board_contracts/kill/mobs.json
quest_board_contracts/kill/reward_tables/
quest_board_contracts/spawn_groups/groups.json
quest_board_contracts/spawn_groups/equipment_tables/
quest_board_contracts/spawn_groups/reward_tables/
quest_board_contracts/deliveries/deliveries.json
quest_board_contracts/deliveries/reward_tables/
quest_board_contracts/protection/protection.json
quest_board_contracts/protection/reward_tables/
quest_board_contracts/elites/elites.json
quest_board_contracts/elites/equipment_tables/
quest_board_contracts/elites/reward_tables/

如果定义所需的模组实体、物品或结构不可用,该定义会被安全忽略。无效条目会在日志中产生警告,但不会阻止其他有效契约加载。缺少自定义奖励表时,该契约类型会回退到内置的全局表;缺少装备表时,生物会保留其原有装备。

常规狩猎

kill/mobs.json包含一个 mobs 数组。这类契约会统计对所选实体的普通击杀次数:

{

"mobs": [
{
"id": "examplemod:mutant_zombie",
"min": 2,
"max": 5,
"reward_table": "example:mutant_hunt"
}
]
}

上方的可选奖励表应放在此处:

data/example/quest_board_contracts/kill/reward_tables/mutant_hunt.json

生成群体狩猎

spawn_groups/groups.json包含一个 groups 数组。每个被接受的群体契约都会定位一个已配置的结构,在那里生成一群目标,并且只追踪这些生成的目标。

最简群体条目格式如下:

{

"groups": [
{
"entities": [
{
"id": "minecraft:zombie",
"weight": 10
}
],
"min": 1,
"max": 2,
"structures": [
"minecraft:villages"
],
"equipment_table": "example:group_enemies",
"reward_table": "example:group_rewards",
"search_radius": 3000,
"ignore_current_structure": true,
"min_structure_distance": 128,
"spawn_min_radius": 8,
"spawn_max_radius": 32
}
]
}

entities 是一个加权池,会为群体中的每个成员分别抽取。structures 也是一个池:契约生成时会从中选出一个目的地。ignore_current_structure 会在告示板所在村庄以外搜索,而 min_structure_distance 用于设置排除距离。

物品交付

deliveries/deliveries.json包含一个 deliveries 数组。接受契约后,系统会定位目的地并生成一名有名字的收件人。玩家必须将物品带给该收件人;与其互动会消耗所需物品并完成契约。

{

"deliveries": [
{
"item": "examplemod:medical_supplies",
"min": 8,
"max": 20,
"structures": [
"minecraft:villages"
],
"reward_table": "example:medical_delivery",
"search_radius": 3000,
"ignore_current_structure": true,
"min_structure_distance": 128,
"spawn_min_radius": 0,
"spawn_max_radius": 24,
"recipient_name": "Village Quartermaster"
}
]
}

村庄防护

protection/protection.json包含一个 contracts 数组。内置支持的防护类型为 iron_golem 和 lighting。

{

"contracts": [
{
"type": "lighting",
"target": "minecraft:torch",
"min": 6,
"max": 12,
"structures": [
"minecraft:villages"
],
"search_radius": 5000,
"ignore_current_structure": false,
"completion_range": 96
}
]
}

将 ignore_current_structure 设为 false,即可保护告示板所在的村庄;也可以将其设为 true 并配合 min_structure_distance,将玩家送往另一个村庄。

精英悬赏

elites/elites.json包含一个 contracts 数组。每份悬赏可以包含多个精英条目,每个条目都可以单独设置数量、名称、生命值、效果和装备表。

{

"contracts": [
{
"structures": [
"minecraft:pillager_outpost"
],
"reward_table": "example:elite_rewards",
"search_radius": 3000,
"spawn_min_radius": 0,
"spawn_max_radius": 24,
"elites": [
{
"entity": "minecraft:vindicator",
"min": 1,
"max": 1,
"name": "The Iron Captain",
"max_health": 80,
"equipment_table": "example:elite_raiders",
"effects": [
{
"id": "minecraft:strength",
"duration_seconds": 3600,
"amplifier": 1
}
]
}
]
}
]
}

奖励表

奖励表存放在对应悬赏类别的 reward_tables 文件夹中:

{

"rolls": {
"min": 1,
"max": 2
},
"rewards": [
{
"type": "item",
"id": "minecraft:emerald",
"weight": 4,
"base_min": 1,
"base_max": 3,
"per_kill_min": 0.2,
"per_kill_max": 0.5
},
{
"type": "xp",
"weight": 2,
"base_min": 20,
"base_max": 40,
"per_kill_min": 8,
"per_kill_max": 12
}
]
}

rolls用于控制按权重抽取的条目数量。交付类奖励表可以使用 per_item_min 和 per_item_max 作为 per_kill_min 和 per_kill_max 的别名。

装备表

装备表采用与团队狩猎相同的加权槽位格式。例如:

{

"slots": {
"right_hand": [
{
"id": "minecraft:iron_hoe",
"weight": 1,
"enchantments": [
{
"id": "minecraft:knockback",
"min_level": 3,
"max_level": 3
}
]
}
],
"helmet": [
{
"id": "minecraft:sculk",
"weight": 1
}
]
}
}

支持的槽位名称包括 right_hand、left_hand、mainhand、offhand、helmet、chestplate、leggings 和 boots。每个已配置的槽位都会独立进行抽取。如果某个槽位有时应明确留空,请将 minecraft:air 用作加权条目。

悬赏生成设置

生成的服务器配置文件为:

config/mebahelrpgrquest/quest_board_contracts.json

其中的 contractTypeWeightsByBoardLevel 部分用于控制每个告示板等级下各类悬赏的出现频率。


作者:Mebahel。加入社区,或 浏览完整模组合集。

常见问题

Mebahel’s RPG – Villager Quests and Companions 支持哪些 Minecraft 版本?

Mebahel’s RPG – Villager Quests and Companions 支持 Minecraft Java 版 1.20–1.21.1,共 4 个版本,可用的加载器:Fabric / Forge / NeoForge / Quilt。下载时注意选择和你游戏版本一致的文件。

Mebahel’s RPG – Villager Quests and Companions 怎么安装?

先用 PCL2 或 HMCL 启动器安装对应版本的 Fabric / Forge / NeoForge / Quilt,再把下载的 .jar 文件放进游戏目录的 mods 文件夹,重新启动游戏即可。开启了版本隔离的,mods 文件夹在 versions/版本名 下面。运行环境:客户端和服务端都要装。

评论

登录后评论和评分

Mebahel 的其他作品

查看全部 →