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) {
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
ClientRegistryLayer.createRegistryAccess()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
FileToIdConverter.json()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
PlaceholderLookupProvider()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
StrictJsonParser.parse()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.sequence()
- 引用位置: