梅巴赫尔RPG - 村民任务与同伴

梅巴赫尔RPG - 村民任务与同伴

Mebahel的RPG:村民任务与同伴为你的世界增添了故事驱动的村民任务、分支选择、具名敌人、传闻、任务追踪、同伴招募以及RPG风格的通知。

Mebahel的RPG:村民任务与伙伴

让每个村庄都成为新冒险的起点,其中充满了待发掘的故事、待做出的抉择,以及沿途遇到的意想不到的盟友。

Mebahel的RPG:村民任务与伙伴 增加了剧情驱动的村民任务、传闻、有名字的敌人、分支选择、任务追踪、RPG风格通知和可招募的伙伴。村民不再只是站在钟旁边的交易者。他们会寻求帮助、警告你附近的威胁、指引你前往奇异的结构、通过传闻揭示隐藏的故事,或让你卷入改变后续发展的选择中。

任务板通过不断变化的任务合同、挑战和奖励,为村庄带来更多生机,满足玩家寻找下一次冒险的需求。

有些任务只是简单的村庄工作。另一些则演变成包含调查、道德抉择、伏击、袭击、隐藏后续、有名字的目标,以及可能并不该死在你斧下的敌人的完整故事线。

如果你喜欢原版Minecraft,但希望村庄能给你更多探索、保护、质疑和返回的理由,那么这个模组就是为此而生的。


依赖项

Forge / NeoForge

Fabric


兼容模组

以下兼容性已由模组作者确认或由玩家测试:

  • Guard Villagers — 通过专用配置文件支持,安装该模组后可让守卫提供选定的任务。
  • Villagers Reborn — 已确认兼容。其村民模型和交互改动可与本模组的任务系统一同使用。
  • Epic Villages — 已由玩家测试并确认可与任务系统配合使用。
  • Luki's Grand Capitals — 已由玩家测试并确认可与任务系统配合使用。
  • Villager Retaliation — 两个模组可以同时使用。它们的任务系统保持独立,但核心功能可以共存。

村庄改造类模组通常都是兼容的,因为任务可以被分配给原版和模组村庄或结构中的村民。


本模组新增内容

  • 包含超过50个任务,围绕村庄、道路、矿井、袭击、废弃传送门、女巫、袭击者、骷髅、亡灵士兵、假冒英雄、神秘幸存者和隐藏契约展开。
  • 分支式故事线,其中击杀、饶恕、揭露、保卫、护送、交付或调查可能导致不同的后续任务。
  • 有名字的任务目标,配有自定义对话、装备、位置、生命值、坐骑、掉落物、伏击和饶恕/攻击选项。
  • 可招募的伙伴,来自特定的饶恕路线,包括后来能与你并肩作战的改造敌人。
  • 村民传闻,循序渐进地解锁隐藏任务,而不是第一天就把所有故事倾倒给玩家。
  • 任务日志和HUD追踪,用于追踪激活目标、坐标、结构、目的地和威胁目标。
  • RPG风格任务通知,在任务开始、更新或完成时播放自定义音效。
  • 多种目标类型:击杀、收集、交付、阅读、护送、带回、到达某结构、破坏方块、放置方块、引爆TNT、进入或离开下界、抵御袭击、等待时间流逝、与实体对话,以及返回任务发布者处。
  • 数据包和模组支持,创作者可以通过JSON文件添加任务和传闻。

任务板与动态契约

任务板提供可重复的冒险,随着你完成契约并建立声望而不断演变。从多种难度级别的契约中选择。

已接受的契约会直接出现在任务日志中,方便与模组的剧情任务一同追踪。


游戏体验

你到达一个村庄。一位农夫听到旧传送门附近有动静。一位铁匠记得矿井下方有烟。有人说某位备受赞誉的英雄可能穿着偷来的荣耀。村庄外的女巫可能是威胁,也可能她是唯一说真话的人。

你交谈、选择回应、接受任务、在日志中追踪、跟随坐标或结构线索,然后返回领取奖励。有些目标会立即战斗。有些会先交谈。有些可以被饶恕。有时仁慈会开启更长的道路。有时它会将危险带回村庄。

目标是让村庄感觉像是有记忆、有后果、有未了之事的地方。


包含的故事线

武装亡灵

调查由阿拉里克·阿什沃德爵士看守的废弃传送门,他是一个保留了士兵记忆碎片的武装僵尸。杀死他以封印不安分的传送门,或饶恕他并帮助找回被亡灵诅咒掩埋的身份。仁慈路线可以导向一个可招募的伙伴。

无旗卫道士

鲁里克,一个没有旗帜的卫道士,站在常规袭击者秩序之外。他是在狩猎、哀悼、躲藏,还是试图逃离他曾效忠的东西?你的选择可以结束他的故事,或推动他走向一场可能将敌人变为盟友的试炼。

假冒英雄

一位村庄冠军可能因其本属于别人的勇气而受到赞誉。跟随证据,找到最后的证人,并决定是埋葬真相还是揭露这位一直受到村庄赞扬的人。

小屋里的女巫

村庄害怕一个女巫。简单的答案是杀了她。更难的答案是倾听。饶恕她可以揭示一个涉及诅咒、袭击者、亡灵代理人和一个将危险推向村庄的唤魔者的更大阴谋。

村庄防御与寂静账本

为村庄遭受攻击做好准备,提升铁傀儡,在袭击中幸存,并赢得声望。但名声也有代价。钟声敲响后,一个隐藏的后续任务可能会引来寂静账本的刺客。

冷锻炉

关于冷锻炉的传闻引向一条更黑暗的线索,涉及一位铁匠、一座旧矿井和一个与锻炉最后作品相关的诅咒。

灰烬法庭

追踪带有灰烬标记的骷髅进入下界,发现村庄下方的古老契约,找回书面证据,并决定是打破还是重新谈判一项可能保护了村庄太久的债务。


传闻与发现

并非每个任务都以相同的方式出现。

有些村民可以直接提供工作。其他人可能只给你一条传闻。听到正确的传闻可以解锁隐藏内容,例如旧矿井下方的烟雾、死者中的陌生人,或只在村庄已经幸存于一次袭击后出现的麻烦。

这让世界随着你的游玩逐渐揭示故事。


伙伴

某些被饶恕的角色最终可以成为永久伙伴。

伙伴的设计目的是在不让村庄陷入混乱的情况下提供帮助。他们跟随你的领导,专注于敌对威胁,并避免随机攻击和平的村民、铁傀儡或被动动物。

一些伙伴还通过伙伴物品栏界面支持装备交互。


任务日志与HUD

默认按 J 键打开任务日志。

日志和追踪器通过上下文标签帮助你追踪激活目标,例如:

  • 威胁位置:用于有名字的敌人目标。
  • 目的地:用于护送任务。
  • 结构位置:用于探索目标。
  • 目标位置:当没有更具体的标签适用时使用。

日志中的坐标默认可点击,激活目标可通过HUD追踪器追踪。坐标点击可在配置中禁用。


配置

服务器/世界配置文件:

config/mebahelrpgrquest.json

当前可配置的值:

{
  "villagerQuestChance": 0.20,
  "villagerRumorChance": 0.33,
  "disableQuestCoordinateClick": false,
  "shareQuestsBetweenPlayers": false,
  "inventoryJournalButtonPosition": "left",
  "hideInventoryJournalButton": false
}
  • villagerQuestChance 是新加载村民的任务分配权重。
  • villagerRumorChance 是新加载村民的传闻分配权重。
  • 这两个值在一次掷骰中竞争。剩下的任何权重直到 1.0 意味着不分配任务或传闻。
  • 值被限制在 0.0 和 1.0 之间。如果它们的总和超过 1.0,任务和传闻会相互归一化,没有空结果。
  • disableQuestCoordinateClick 控制任务日志中的坐标交互。保持为 false 可让玩家点击任务坐标,或设置为 true 以禁用坐标点击。
  • shareQuestsBetweenPlayers 控制多人游戏任务共享。保持为 false 表示每个玩家有独立的任务进度,或设置为 true 以在服务器的所有玩家之间共享任务进度、失败、完成、已领取奖励和任务特质。
  • inventoryJournalButtonPosition 控制物品栏任务日志按钮出现的位置。使用 left 为默认左侧,或 right 将其移动到右侧。无效值回退到 left。
  • hideInventoryJournalButton 设置为 true 时隐藏物品栏任务日志按钮。默认为 false。

额外任务配置文件

  • 守卫村民任务: 一个专用配置文件允许你在安装了 Guard Villagers 模组时向守卫分配任务。
  • 移除任务: 一个专用配置文件允许你列出应从可用任务池中移除的任务ID。用它来禁用包含的任务,而无需编辑模组文件。

数据包与模组创作者文档:剧情任务与传闻

任何人都可以通过数据包或模组中的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 命名空间替换为你自己的命名空间。
  4. 更改对话、实体、结构、目标、奖励和关联的任务ID。
  5. 重新加载数据包并在开发或备份世界中测试该任务。

JSON不允许注释或尾随逗号。始终使用完整标识符,如 minecraft:zombie,并且在文件互相引用时使用完整任务ID,如 my_quests:old_well。

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

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

当没有匹配的翻译可用时,会显示 fallback 值,因此独立的语言文件是可选的。


任务示例

每个示例都放在独立的可展开部分中。复制最接近的模板,只调整你的任务需要的部分。

带有攻击或饶恕分支的有名字威胁

生成一个有名字的敌人,让玩家与它对话,然后根据目标是攻击还是饶恕,继续进入不同的任务。

 

使用此模板制作一个生成有名字威胁、让玩家与它对话、然后在攻击或饶恕上分支的任务。#### 第一个任务
{
  "title": "任务标题",
  "summary": "面向村民的摘要,在接受前显示。",

"flow": { "on_kill": "modid:kill_branch_2", "on_spare": "modid:spare_branch_2" },

"goals": [ { "id": "talk_to_threat", "talk": "minecraft:zombie", "amount": 1, "name": "有名字的威胁" }, { "id": "kill_threat", "kill": "minecraft:zombie", "amount": 1, "attack_only": true, "from_threats": true } ],

"threat": { "entity": "minecraft:zombie", "name": "有名字的威胁", "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": "描述威胁的任务发布者台词。", "target": "威胁说的初始台词。", "talk": [ ["玩家问题一?", "威胁回答一。"], ["玩家问题二?", "威胁回答二。"] ] },

"choice": { "attack": { "label": "攻击选项标签。", "traits": ["trait_from_attack"], "return": "目标被击杀后任务发布者的台词。" }, "spare": { "label": "饶恕选项标签。", "line": "饶恕目标后立即出现的台词。", "post": "饶恕后显示的后续台词。", "villager": "饶恕后任务发布者的台词。", "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": "备用伏击名称", "count": 5, "ambush_max_health": 50, "ambush_equipment": { "helmet": "minecraft:leather_helmet" }, "line": "被饶恕目标提供下一个任务时使用的台词。", "ambush_line": "如果仁慈触发伏击时使用的台词。", "nothing": "如果没有后续发生时使用的台词。" } } },

"dialogue": { "return": "击杀后任务发布者的台词。", "reward": "任务发布者的奖励台词。", "done": "任务发布者已经完成的台词。" },

"rewards": { "xp": 260, "items": { "minecraft:emerald": 10 } } }

对于启用饶恕的威胁对决,优先使用上面显示的 talk 加 attack_only 击杀模式。第一次交互打开对话而不会完成阶段;只有在玩家明确选择攻击或饶恕后,阶段才会完成。#### 击杀分支
{
"title": "击杀分支标题",
"summary": "玩家选择攻击后的后续摘要。",

"dialogue": { "intro": "开场台词。", "offer": [ ["玩家问题?", "任务发布者回答。"] ], "return": "返回台词。", "reward": "奖励台词。", "done": "已完成台词。" },

"goals": ["kill 3 minecraft:zombified_piglin"],

"threats": [ { "entity": "minecraft:zombified_piglin", "name": "分支威胁", "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": "饶恕分支标题",
"summary": "玩家选择饶恕后的后续摘要。",

"flow": { "next": "modid:spare_branch_3" },

"dialogue": { "intro": "来自被饶恕目标或任务发布者的开场台词。", "offer": [ ["玩家问题?", "回答。"] ], "return": "返回台词。", "reward": "奖励台词。", "done": "已完成台词。" },

"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": "矿井下的笔记"
  },
  "summary": {
    "translate": "quest.example.mine_demolition.summary",
    "fallback": "找到一座封闭的矿井,找回工头的笔记,并摧毁标记的刷怪笼。"
  },
  "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": "工头的笔记"
        },
        "author": {
          "translate": "quest.example.mine_demolition.book.author",
          "fallback": "矿井工头"
        },
        "pages": [
          {
            "translate": "quest.example.mine_demolition.book.page.0",
            "fallback": "刷怪笼再次苏醒后,我们封闭了下层巷道。如果有人返回,请将炸药放置在笼子附近,而不是巷道口。"
          }
        ]
      },
      "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": "幽匿冠者"
      },
      "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": "