NetworkRegistryLoadTask.java

net.minecraft.resources.NetworkRegistryLoadTask

信息

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

    TODO

字段/常量

  • NETWORK_REGISTRATION_INFO

    • 类型: RegistrationInfo
    • 修饰符: private static final
    • 源码定位: L24
    • 说明:

      TODO

  • entries

    • 类型: Map<ResourceKey<?extends Registry<?>>,RegistryDataLoader.NetworkedRegistryData>
    • 修饰符: private final
    • 源码定位: L25
    • 说明:

      TODO

  • knownDataSource

    • 类型: ResourceProvider
    • 修饰符: private final
    • 源码定位: L26
    • 说明:

      TODO

内部类/嵌套类型

构造器

public NetworkRegistryLoadTask(RegistryDataLoader.RegistryData<T> data, Lifecycle lifecycle, Map<ResourceKey<?>,Exception> loadingErrors, Map<ResourceKey<?extends Registry<?>>,RegistryDataLoader.NetworkedRegistryData> entries, ResourceProvider knownDataSource) @ L28

  • 构造器名:NetworkRegistryLoadTask
  • 源码定位:L28
  • 修饰符:public

参数:

  • data: RegistryDataLoader.RegistryData
  • lifecycle: Lifecycle
  • loadingErrors: Map<ResourceKey<?>,Exception>
  • entries: Map<ResourceKey>,RegistryDataLoader.NetworkedRegistryData>
  • knownDataSource: ResourceProvider

说明:

TODO

方法

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

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

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

参数:

  • context: RegistryOps.RegistryInfoLookup
  • executor: Executor

说明:

TODO

代码

public class NetworkRegistryLoadTask<T> extends RegistryLoadTask<T> {
    private static final RegistrationInfo NETWORK_REGISTRATION_INFO = new RegistrationInfo(Optional.empty(), Lifecycle.experimental());
    private final Map<ResourceKey<? extends Registry<?>>, RegistryDataLoader.NetworkedRegistryData> entries;
    private final ResourceProvider knownDataSource;
 
    public NetworkRegistryLoadTask(
        RegistryDataLoader.RegistryData<T> data,
        Lifecycle lifecycle,
        Map<ResourceKey<?>, Exception> loadingErrors,
        Map<ResourceKey<? extends Registry<?>>, RegistryDataLoader.NetworkedRegistryData> entries,
        ResourceProvider knownDataSource
    ) {
        super(data, lifecycle, loadingErrors);
        this.entries = entries;
        this.knownDataSource = knownDataSource;
    }
 
    @Override
    public CompletableFuture<?> load(RegistryOps.RegistryInfoLookup context, Executor executor) {
        RegistryDataLoader.NetworkedRegistryData registryEntries = this.entries.get(this.registryKey());
        if (registryEntries == null) {
            return CompletableFuture.completedFuture(null);
        } else {
            RegistryOps<Tag> nbtOps = RegistryOps.create(NbtOps.INSTANCE, context);
            RegistryOps<JsonElement> jsonOps = RegistryOps.create(JsonOps.INSTANCE, context);
            FileToIdConverter knownDataPathConverter = FileToIdConverter.registry(this.registryKey());
            List<CompletableFuture<RegistryLoadTask.PendingRegistration<T>>> elements = new ArrayList<>(registryEntries.elements().size());
 
            for (RegistrySynchronization.PackedRegistryEntry entry : registryEntries.elements()) {
                ResourceKey<T> elementKey = ResourceKey.create(this.registryKey(), entry.id());
                Optional<Tag> networkContents = entry.data();
                if (networkContents.isPresent()) {
                    elements.add(
                        CompletableFuture.supplyAsync(
                            () -> new RegistryLoadTask.PendingRegistration<>(
                                elementKey,
                                RegistryLoadTask.PendingRegistration.loadFromNetwork(this.data.elementCodec(), nbtOps, elementKey, networkContents.get()),
                                NETWORK_REGISTRATION_INFO
                            ),
                            executor
                        )
                    );
                } else {
                    elements.add(
                        CompletableFuture.supplyAsync(
                            () -> new RegistryLoadTask.PendingRegistration<>(
                                elementKey,
                                RegistryLoadTask.PendingRegistration.findAndLoadFromResource(
                                    this.data.elementCodec(), jsonOps, elementKey, knownDataPathConverter, this.knownDataSource
                                ),
                                NETWORK_REGISTRATION_INFO
                            ),
                            executor
                        )
                    );
                }
            }
 
            return Util.sequence(elements).thenAcceptAsync(pendingRegistrations -> {
                this.registerElements(pendingRegistrations.stream());
                Map<TagKey<T>, List<Holder<T>>> pendingTags = TagLoader.loadTagsFromNetwork(registryEntries.tags(), this.readOnlyRegistry());
                this.registerTags(pendingTags);
            }, executor);
        }
    }
}

引用的其他类

  • RegistrationInfo

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

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

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

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

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

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

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

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

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

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