ClientItemInfoLoader.java

net.minecraft.client.resources.model.ClientItemInfoLoader

信息

  • 全限定名:net.minecraft.client.resources.model.ClientItemInfoLoader
  • 类型:public class
  • 包:net.minecraft.client.resources.model
  • 源码路径:src/main/java/net/minecraft/client/resources/model/ClientItemInfoLoader.java
  • 起始行号:L30
  • 职责:

    TODO

字段/常量

  • LOGGER

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

      TODO

  • LISTER

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

      TODO

内部类/嵌套类型

  • net.minecraft.client.resources.model.ClientItemInfoLoader.LoadedClientInfos

    • 类型: record
    • 修饰符: public
    • 源码定位: L94
    • 说明:

      TODO

  • net.minecraft.client.resources.model.ClientItemInfoLoader.PendingLoad

    • 类型: record
    • 修饰符: private
    • 源码定位: L98
    • 说明:

      TODO

构造器

方法

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

public static CompletableFuture<ClientItemInfoLoader.LoadedClientInfos> scheduleLoad(ResourceManager manager, Executor executor) @ L34

  • 方法名:scheduleLoad
  • 源码定位:L34
  • 返回类型:CompletableFuture<ClientItemInfoLoader.LoadedClientInfos>
  • 修饰符:public static

参数:

  • manager: ResourceManager
  • executor: Executor

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ClientItemInfoLoader {
    private static final Logger LOGGER = LogUtils.getLogger();
    private static final FileToIdConverter LISTER = FileToIdConverter.json("items");
 
    public static CompletableFuture<ClientItemInfoLoader.LoadedClientInfos> scheduleLoad(ResourceManager manager, Executor executor) {
        RegistryAccess.Frozen staticRegistries = ClientRegistryLayer.createRegistryAccess().compositeAccess();
        return CompletableFuture.<Map<Identifier, Resource>>supplyAsync(() -> LISTER.listMatchingResources(manager), executor)
            .thenCompose(
                resources -> {
                    List<CompletableFuture<ClientItemInfoLoader.PendingLoad>> pendingLoads = new ArrayList<>(resources.size());
                    resources.forEach(
                        (resourceId, resource) -> pendingLoads.add(
                            CompletableFuture.supplyAsync(
                                () -> {
                                    Identifier modelId = LISTER.fileToId(resourceId);
 
                                    try {
                                        ClientItemInfoLoader.PendingLoad var8;
                                        try (Reader reader = resource.openAsReader()) {
                                            PlaceholderLookupProvider lookup = new PlaceholderLookupProvider(staticRegistries);
                                            DynamicOps<JsonElement> ops = lookup.createSerializationContext(JsonOps.INSTANCE);
                                            ClientItem parsedInfo = ClientItem.CODEC
                                                .parse(ops, StrictJsonParser.parse(reader))
                                                .ifError(
                                                    error -> LOGGER.error(
                                                        "Couldn't parse item model '{}' from pack '{}': {}", modelId, resource.sourcePackId(), error.message()
                                                    )
                                                )
                                                .result()
                                                .map(
                                                    clientItem -> lookup.hasRegisteredPlaceholders()
                                                        ? clientItem.withRegistrySwapper(lookup.createSwapper())
                                                        : clientItem
                                                )
                                                .orElse(null);
                                            var8 = new ClientItemInfoLoader.PendingLoad(modelId, parsedInfo);
                                        }
 
                                        return var8;
                                    } catch (Exception var11) {
                                        LOGGER.error("Failed to open item model {} from pack '{}'", resourceId, resource.sourcePackId(), var11);
                                        return new ClientItemInfoLoader.PendingLoad(modelId, null);
                                    }
                                },
                                executor
                            )
                        )
                    );
                    return Util.sequence(pendingLoads).thenApply(loads -> {
                        Map<Identifier, ClientItem> resultMap = new HashMap<>();
 
                        for (ClientItemInfoLoader.PendingLoad load : loads) {
                            if (load.clientItemInfo != null) {
                                resultMap.put(load.id, load.clientItemInfo);
                            }
                        }
 
                        return new ClientItemInfoLoader.LoadedClientInfos(resultMap);
                    });
                }
            );
    }
 
    @OnlyIn(Dist.CLIENT)
    public record LoadedClientInfos(Map<Identifier, ClientItem> contents) {
    }
 
    @OnlyIn(Dist.CLIENT)
    private record PendingLoad(Identifier id, @Nullable ClientItem clientItemInfo) {
    }
}

引用的其他类