BlockStateModelLoader.java
net.minecraft.client.resources.model.BlockStateModelLoader
信息
- 全限定名:net.minecraft.client.resources.model.BlockStateModelLoader
- 类型:public class
- 包:net.minecraft.client.resources.model
- 源码路径:src/main/java/net/minecraft/client/resources/model/BlockStateModelLoader.java
- 起始行号:L32
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L33 - 说明:
TODO
- 类型:
-
BLOCKSTATE_LISTER- 类型:
FileToIdConverter - 修饰符:
private static final - 源码定位:
L34 - 说明:
TODO
- 类型:
内部类/嵌套类型
-
net.minecraft.client.resources.model.BlockStateModelLoader.LoadedBlockStateModelDispatcher- 类型:
record - 修饰符:
private - 源码定位:
L113 - 说明:
TODO
- 类型:
-
net.minecraft.client.resources.model.BlockStateModelLoader.LoadedModels- 类型:
record - 修饰符:
public - 源码定位:
L117 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static CompletableFuture<BlockStateModelLoader.LoadedModels> loadBlockStates(ResourceManager manager, Executor executor) @ L36
- 方法名:loadBlockStates
- 源码定位:L36
- 返回类型:CompletableFuture<BlockStateModelLoader.LoadedModels>
- 修饰符:public static
参数:
- manager: ResourceManager
- executor: Executor
说明:
TODO
private static BlockStateModelLoader.LoadedModels loadBlockStateDefinitionStack(Identifier stateDefinitionId, StateDefinition<Block,BlockState> stateDefinition, List<BlockStateModelLoader.LoadedBlockStateModelDispatcher> definitionStack) @ L98
- 方法名:loadBlockStateDefinitionStack
- 源码定位:L98
- 返回类型:BlockStateModelLoader.LoadedModels
- 修饰符:private static
参数:
- stateDefinitionId: Identifier
- stateDefinition: StateDefinition<Block,BlockState>
- definitionStack: List<BlockStateModelLoader.LoadedBlockStateModelDispatcher>
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class BlockStateModelLoader {
private static final Logger LOGGER = LogUtils.getLogger();
private static final FileToIdConverter BLOCKSTATE_LISTER = FileToIdConverter.json("blockstates");
public static CompletableFuture<BlockStateModelLoader.LoadedModels> loadBlockStates(ResourceManager manager, Executor executor) {
Function<Identifier, StateDefinition<Block, BlockState>> definitionToBlockState = BlockStateDefinitions.definitionLocationToBlockStateMapper();
return CompletableFuture.<Map<Identifier, List<Resource>>>supplyAsync(() -> BLOCKSTATE_LISTER.listMatchingResourceStacks(manager), executor)
.thenCompose(
resources -> {
List<CompletableFuture<BlockStateModelLoader.LoadedModels>> result = new ArrayList<>(resources.size());
for (Entry<Identifier, List<Resource>> resourceStack : resources.entrySet()) {
result.add(
CompletableFuture.supplyAsync(
() -> {
Identifier stateDefinitionId = BLOCKSTATE_LISTER.fileToId(resourceStack.getKey());
StateDefinition<Block, BlockState> stateDefinition = definitionToBlockState.apply(stateDefinitionId);
if (stateDefinition == null) {
LOGGER.debug("Discovered unknown block state definition {}, ignoring", stateDefinitionId);
return null;
} else {
List<Resource> stack = resourceStack.getValue();
List<BlockStateModelLoader.LoadedBlockStateModelDispatcher> loadedStack = new ArrayList<>(stack.size());
for (Resource resource : stack) {
try (Reader reader = resource.openAsReader()) {
JsonElement element = StrictJsonParser.parse(reader);
BlockStateModelDispatcher definition = BlockStateModelDispatcher.CODEC
.parse(JsonOps.INSTANCE, element)
.getOrThrow(JsonParseException::new);
loadedStack.add(new BlockStateModelLoader.LoadedBlockStateModelDispatcher(resource.sourcePackId(), definition));
} catch (Exception var14) {
LOGGER.error(
"Failed to load blockstate definition {} from pack {}", stateDefinitionId, resource.sourcePackId(), var14
);
}
}
try {
return loadBlockStateDefinitionStack(stateDefinitionId, stateDefinition, loadedStack);
} catch (Exception var11) {
LOGGER.error("Failed to load blockstate definition {}", stateDefinitionId, var11);
return null;
}
}
},
executor
)
);
}
return Util.sequence(result).thenApply(partialMaps -> {
Map<BlockState, BlockStateModel.UnbakedRoot> fullMap = new IdentityHashMap<>();
for (BlockStateModelLoader.LoadedModels partialMap : partialMaps) {
if (partialMap != null) {
fullMap.putAll(partialMap.models());
}
}
return new BlockStateModelLoader.LoadedModels(fullMap);
});
}
);
}
private static BlockStateModelLoader.LoadedModels loadBlockStateDefinitionStack(
Identifier stateDefinitionId,
StateDefinition<Block, BlockState> stateDefinition,
List<BlockStateModelLoader.LoadedBlockStateModelDispatcher> definitionStack
) {
Map<BlockState, BlockStateModel.UnbakedRoot> result = new IdentityHashMap<>();
for (BlockStateModelLoader.LoadedBlockStateModelDispatcher definition : definitionStack) {
result.putAll(definition.contents.instantiate(stateDefinition, () -> stateDefinitionId + "/" + definition.source));
}
return new BlockStateModelLoader.LoadedModels(result);
}
@OnlyIn(Dist.CLIENT)
private record LoadedBlockStateModelDispatcher(String source, BlockStateModelDispatcher contents) {
}
@OnlyIn(Dist.CLIENT)
public record LoadedModels(Map<BlockState, BlockStateModel.UnbakedRoot> models) {
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
BlockStateDefinitions.definitionLocationToBlockStateMapper()
- 引用位置:
-
- 引用位置:
字段/方法调用 - 关联成员:
FileToIdConverter.json()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
StrictJsonParser.parse()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.sequence()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: