AdvancementProvider.java

net.minecraft.data.advancements.AdvancementProvider

信息

  • 全限定名:net.minecraft.data.advancements.AdvancementProvider
  • 类型:public class
  • 包:net.minecraft.data.advancements
  • 源码路径:src/main/java/net/minecraft/data/advancements/AdvancementProvider.java
  • 起始行号:L19
  • 实现:DataProvider
  • 职责:

    TODO

字段/常量

  • pathProvider

    • 类型: PackOutput.PathProvider
    • 修饰符: private final
    • 源码定位: L20
    • 说明:

      TODO

  • subProviders

    • 类型: List<AdvancementSubProvider>
    • 修饰符: private final
    • 源码定位: L21
    • 说明:

      TODO

  • registries

    • 类型: CompletableFuture<HolderLookup.Provider>
    • 修饰符: private final
    • 源码定位: L22
    • 说明:

      TODO

内部类/嵌套类型

构造器

public AdvancementProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> registries, List<AdvancementSubProvider> subProviders) @ L24

  • 构造器名:AdvancementProvider
  • 源码定位:L24
  • 修饰符:public

参数:

  • output: PackOutput
  • registries: CompletableFuture<HolderLookup.Provider>
  • subProviders: List

说明:

TODO

方法

下面的方法块按源码顺序生成。

public CompletableFuture<?> run(CachedOutput cache) @ L30

  • 方法名:run
  • 源码定位:L30
  • 返回类型:CompletableFuture<?>
  • 修饰符:public

参数:

  • cache: CachedOutput

说明:

TODO

public final String getName() @ L52

  • 方法名:getName
  • 源码定位:L52
  • 返回类型:String
  • 修饰符:public final

参数:

说明:

TODO

代码

public class AdvancementProvider implements DataProvider {
    private final PackOutput.PathProvider pathProvider;
    private final List<AdvancementSubProvider> subProviders;
    private final CompletableFuture<HolderLookup.Provider> registries;
 
    public AdvancementProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> registries, List<AdvancementSubProvider> subProviders) {
        this.pathProvider = output.createRegistryElementsPathProvider(Registries.ADVANCEMENT);
        this.subProviders = subProviders;
        this.registries = registries;
    }
 
    @Override
    public CompletableFuture<?> run(CachedOutput cache) {
        return this.registries.thenCompose(lookup -> {
            Set<Identifier> allAdvancements = new HashSet<>();
            List<CompletableFuture<?>> tasks = new ArrayList<>();
            Consumer<AdvancementHolder> consumer = holder -> {
                if (!allAdvancements.add(holder.id())) {
                    throw new IllegalStateException("Duplicate advancement " + holder.id());
                } else {
                    Path path = this.pathProvider.json(holder.id());
                    tasks.add(DataProvider.saveStable(cache, lookup, Advancement.CODEC, holder.value(), path));
                }
            };
 
            for (AdvancementSubProvider subProvider : this.subProviders) {
                subProvider.generate(lookup, consumer);
            }
 
            return CompletableFuture.allOf(tasks.toArray(CompletableFuture[]::new));
        });
    }
 
    @Override
    public final String getName() {
        return "Advancements";
    }
}

引用的其他类