• Forge论坛

导航页

  • 主页
  • 向文档做出贡献
  • 入门
    • 概述
    • 模组文件
    • 规划你的模组结构
    • 版本号
  • 核心概念
    • 注册表
    • 端位(Sides)
    • 事件
    • 模组生命周期
    • 资源
    • 国际化与本地化
  • 方块
    • 概述
    • 方块状态
  • 物品
    • 概述
    • BlockEntityWithoutLevelRenderer
  • 网络
    • 概述
    • SimpleImpl
    • 实体的同步
  • 方块实体
    • 概述
    • BlockEntityRenderer
  • 游戏特效
    • 粒子效果
    • 音效
  • 数据储存
    • Capabilities
    • Saved Data
    • 编解码器(Codecs)
  • 图形用户界面
    • 菜单(Menus)
    • 屏幕(Screens)
  • 渲染
    • 模型扩展
      • 概述
      • 根变换
      • 渲染类型
      • 部分可见度
      • 面数据
    • 模型加载器
      • 概述
      • 烘焙模型
      • 变换
      • 物品重载
  • 资源
    • 客户端资源(Assets)
      • 概述
      • 模型
        • 概述
        • 纹理色调
        • 物品属性
    • 服务端数据(Data)
      • 概述
      • 配方
        • 概述
        • 自定义配方
        • 原料
        • 非数据包配方
      • 战利品表
      • 全局战利品修改器
      • 标签
      • 进度
      • 条件性加载数据
  • 数据生成
    • 概述
    • 客户端资源(Assets)
      • 模型提供者
      • 语言提供者
      • 音效提供者
    • 服务端数据(Data)
      • 配方提供者
      • 战利品表提供者
      • 标签提供者
      • 进度提供者
        • ForgeAdvancementProvider$AdvancementGenerator
        • Advancement$Builder
      • 全局战利品修改器提供者
      • 数据包注册表对象提供者
  • 杂项功能
    • 配置
    • 键盘布局
    • 游戏测试
    • Forge更新检查器
    • 调试分析器
  • 进阶主题
    • 访问转换器
  • 向Forge做出贡献
    • 概述
    • Pull Request准则
  • 旧版本
    • 概述
    • 移植到当前版本

进度生成

可以通过构建新的AdvancementProvider并提供AdvancementSubProvider来为模组生成进度。进度既可以手动创建和提供,也可以为方便起见,使用Advancement$Builder创建。该提供者必须被添加到DataGenerator中。

注意

Forge为AdvancementProvider提供了一个名为ForgeAdvancementProvider的扩展,它可以更好地集成以生成进度。因此,本文档将使用ForgeAdvancementProvider和子提供者接口ForgeAdvancementProvider$AdvancementGenerator。

// 在模组事件总线上
@SubscribeEvent
public void gatherData(GatherDataEvent event) {
    event.getGenerator().addProvider(
        // 告诉生成器仅在生成服务端资源时运行
        event.includeServer(),
        output -> new ForgeAdvancementProvider(
          output,
          event.getLookupProvider(),
          event.getExistingFileHelper(),
          // 生成进度的子提供者
          List.of(subProvider1, subProvider2, /*...*/)
        )
    );
}

ForgeAdvancementProvider$AdvancementGenerator

ForgeAdvancementProvider$AdvancementGenerator负责生成进度,包含一个接受注册表查找的方法、写入器(Consumer<Advancement>)和现有文件助手..

// 在ForgeAdvancementProvider$AdvancementGenerator的某个子类中,或作为一个lambda引用

@Override
public void generate(HolderLookup.Provider registries, Consumer<Advancement> writer, ExistingFileHelper existingFileHelper) {
  // 在此处构建进度
}

Advancement$Builder

Advancement$Builder是一个方便的实现,用于创建要生成的Advancement。它允许定义父级进度、显示信息、进度完成时的奖励以及解锁进度的要求。只需指定要求即可创建Advancement。

尽管不是必需的,但有许多方法很重要:

方法 描述
parent 设置此进度直接链接到的进度。可以指定进度的名称,也可以指定进度本身(如果它是由模组开发者生成的)。
display 设置要显示在聊天、toast和进度屏幕上的信息。
rewards 设置此进度完成时获得的奖励。
addCriterion 为此进度添加一个条件。
requirements 指定是所有条件都必须返回true,还是至少有一个条件必须返回true。可以使用额外的重载来混合和匹配这些操作。

一旦准备好构建Advancement$Builder,就应该调用#save方法,该方法接受写入器、进度的注册表名以及用于检查提供的父级是否存在的文件助手。

// 在某个ForgeAdvancementProvider$AdvancementGenerator#generate(registries, writer, existingFileHelper)中
Advancement example = Advancement.Builder.advancement()
  .addCriterion("example_criterion", triggerInstance) // 该进度如何解锁
  .save(writer, name, existingFileHelper); // 将数据加入生成器
Built with MkDocs using a custom theme. Hosted by Read the Docs.
Enable Dark Theme