ResourceManagerRegistryLoadTask.java

net.minecraft.resources.ResourceManagerRegistryLoadTask

信息

  • 全限定名:net.minecraft.resources.ResourceManagerRegistryLoadTask
  • 类型:public class
  • 包:net.minecraft.resources
  • 源码路径:src/main/java/net/minecraft/resources/ResourceManagerRegistryLoadTask.java
  • 起始行号:L23
  • 继承:RegistryLoadTask
  • 职责:

    TODO

字段/常量

  • REGISTRATION_INFO_CACHE

    • 类型: Function<Optional<KnownPack>,RegistrationInfo>
    • 修饰符: private static final
    • 源码定位: L24
    • 说明:

      TODO

  • resourceManager

    • 类型: ResourceManager
    • 修饰符: private final
    • 源码定位: L28
    • 说明:

      TODO

内部类/嵌套类型

构造器

public ResourceManagerRegistryLoadTask(RegistryDataLoader.RegistryData<T> data, Lifecycle lifecycle, Map<ResourceKey<?>,Exception> loadingErrors, ResourceManager resourceManager) @ L30

  • 构造器名:ResourceManagerRegistryLoadTask
  • 源码定位:L30
  • 修饰符:public

参数:

  • data: RegistryDataLoader.RegistryData
  • lifecycle: Lifecycle
  • loadingErrors: Map<ResourceKey<?>,Exception>
  • resourceManager: ResourceManager

说明:

TODO

方法

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

public CompletableFuture<?> load(RegistryOps.RegistryInfoLookup context, Executor executor) @ L37

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

参数:

  • context: RegistryOps.RegistryInfoLookup
  • executor: Executor

说明:

TODO

代码

public class ResourceManagerRegistryLoadTask<T> extends RegistryLoadTask<T> {
    private static final Function<Optional<KnownPack>, RegistrationInfo> REGISTRATION_INFO_CACHE = Util.memoize(knownPack -> {
        Lifecycle lifecycle = knownPack.map(KnownPack::isVanilla).map(info -> Lifecycle.stable()).orElse(Lifecycle.experimental());
        return new RegistrationInfo(knownPack, lifecycle);
    });
    private final ResourceManager resourceManager;
 
    public ResourceManagerRegistryLoadTask(
        RegistryDataLoader.RegistryData<T> data, Lifecycle lifecycle, Map<ResourceKey<?>, Exception> loadingErrors, ResourceManager resourceManager
    ) {
        super(data, lifecycle, loadingErrors);
        this.resourceManager = resourceManager;
    }
 
    @Override
    public CompletableFuture<?> load(RegistryOps.RegistryInfoLookup context, Executor executor) {
        FileToIdConverter lister = FileToIdConverter.registry(this.registryKey());
        return CompletableFuture.<Map<Identifier, Resource>>supplyAsync(() -> lister.listMatchingResources(this.resourceManager), executor)
            .thenCompose(
                registryResources -> {
                    RegistryOps<JsonElement> ops = RegistryOps.create(JsonOps.INSTANCE, context);
                    return ParallelMapTransform.schedule(
                        (Map<Identifier, Resource>)registryResources,
                        (resourceId, thunk) -> {
                            ResourceKey<T> elementKey = ResourceKey.create(this.registryKey(), lister.fileToId(resourceId));
                            RegistrationInfo registrationInfo = REGISTRATION_INFO_CACHE.apply(thunk.knownPackInfo());
                            return new RegistryLoadTask.PendingRegistration<>(
                                elementKey,
                                RegistryLoadTask.PendingRegistration.loadFromResource(this.data.elementCodec(), ops, elementKey, thunk),
                                registrationInfo
                            );
                        },
                        executor
                    );
                }
            )
            .thenAcceptAsync(
                loadedEntries -> {
                    this.registerElements(loadedEntries.entrySet().stream().sorted(Entry.comparingByKey()).map(Entry::getValue));
                    TagLoader.ElementLookup<Holder<T>> tagElementLookup = TagLoader.ElementLookup.fromGetters(
                        this.registryKey(), this.concurrentRegistrationGetter, this.readOnlyRegistry()
                    );
                    Map<TagKey<T>, List<Holder<T>>> pendingTags = TagLoader.loadTagsForRegistry(this.resourceManager, this.registryKey(), tagElementLookup);
                    this.registerTags(pendingTags);
                },
                executor
            );
    }
}

引用的其他类

  • RegistrationInfo

    • 引用位置: 字段/构造调用
    • 关联成员: RegistrationInfo()
  • FileToIdConverter

    • 引用位置: 方法调用
    • 关联成员: FileToIdConverter.registry()
  • RegistryDataLoader

    • 引用位置: 参数
  • RegistryLoadTask

    • 引用位置: 方法调用/继承
    • 关联成员: RegistryLoadTask.PendingRegistration.loadFromResource()
  • RegistryOps

    • 引用位置: 参数/方法调用
    • 关联成员: RegistryOps.create()
  • ResourceKey

    • 引用位置: 参数/方法调用
    • 关联成员: ResourceKey.create()
  • KnownPack

    • 引用位置: 字段
  • ResourceManager

    • 引用位置: 参数/字段
  • TagLoader

    • 引用位置: 方法调用
    • 关联成员: TagLoader.ElementLookup.fromGetters(), TagLoader.loadTagsForRegistry()
  • Util

    • 引用位置: 方法调用
    • 关联成员: Util.memoize()
  • ParallelMapTransform

    • 引用位置: 方法调用
    • 关联成员: ParallelMapTransform.schedule()