ModelGroupCollector.java
net.minecraft.client.resources.model.ModelGroupCollector
信息
- 全限定名:net.minecraft.client.resources.model.ModelGroupCollector
- 类型:public class
- 包:net.minecraft.client.resources.model
- 源码路径:src/main/java/net/minecraft/client/resources/model/ModelGroupCollector.java
- 起始行号:L21
- 职责:
TODO
字段/常量
-
SINGLETON_MODEL_GROUP- 类型:
int - 修饰符:
static final - 源码定位:
L22 - 说明:
TODO
- 类型:
-
INVISIBLE_MODEL_GROUP- 类型:
int - 修饰符:
private static final - 源码定位:
L23 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.resources.model.ModelGroupCollector.GroupKey- 类型:
record - 修饰符:
private - 源码定位:
L63 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static Object2IntMap<BlockState> build(BlockColors blockColors, BlockStateModelLoader.LoadedModels input) @ L25
- 方法名:build
- 源码定位:L25
- 返回类型:Object2IntMap
- 修饰符:public static
参数:
- blockColors: BlockColors
- input: BlockStateModelLoader.LoadedModels
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class ModelGroupCollector {
static final int SINGLETON_MODEL_GROUP = -1;
private static final int INVISIBLE_MODEL_GROUP = 0;
public static Object2IntMap<BlockState> build(BlockColors blockColors, BlockStateModelLoader.LoadedModels input) {
Map<Block, List<Property<?>>> coloringPropertiesCache = new HashMap<>();
Map<ModelGroupCollector.GroupKey, Set<BlockState>> modelGroups = new HashMap<>();
input.models()
.forEach(
(state, loadedModel) -> {
List<Property<?>> coloringProperties = coloringPropertiesCache.computeIfAbsent(
state.getBlock(), block -> List.copyOf(blockColors.getColoringProperties(block))
);
ModelGroupCollector.GroupKey key = ModelGroupCollector.GroupKey.create(state, loadedModel, coloringProperties);
modelGroups.computeIfAbsent(key, k -> Sets.newIdentityHashSet()).add(state);
}
);
int nextModelGroup = 1;
Object2IntMap<BlockState> result = new Object2IntOpenHashMap<>();
result.defaultReturnValue(-1);
for (Set<BlockState> states : modelGroups.values()) {
Iterator<BlockState> it = states.iterator();
while (it.hasNext()) {
BlockState state = it.next();
if (state.getRenderShape() != RenderShape.MODEL) {
it.remove();
result.put(state, 0);
}
}
if (states.size() > 1) {
int modelGroup = nextModelGroup++;
states.forEach(blockState -> result.put(blockState, modelGroup));
}
}
return result;
}
@OnlyIn(Dist.CLIENT)
private record GroupKey(Object equalityGroup, List<Object> coloringValues) {
public static ModelGroupCollector.GroupKey create(BlockState state, BlockStateModel.UnbakedRoot model, List<Property<?>> coloringProperties) {
List<Object> coloringValues = getColoringValues(state, coloringProperties);
Object equalityGroup = model.visualEqualityGroup(state);
return new ModelGroupCollector.GroupKey(equalityGroup, coloringValues);
}
private static List<Object> getColoringValues(BlockState state, List<Property<?>> coloringProperties) {
Object[] coloringValues = new Object[coloringProperties.size()];
for (int i = 0; i < coloringProperties.size(); i++) {
coloringValues[i] = state.getValue(coloringProperties.get(i));
}
return List.of(coloringValues);
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置: