BlockStateModel.java
net.minecraft.client.renderer.block.dispatch.BlockStateModel
信息
- 全限定名:net.minecraft.client.renderer.block.dispatch.BlockStateModel
- 类型:public interface
- 包:net.minecraft.client.renderer.block.dispatch
- 源码路径:src/main/java/net/minecraft/client/renderer/block/dispatch/BlockStateModel.java
- 起始行号:L24
- 职责:
TODO
字段/常量
- 无
内部类/嵌套类型
-
net.minecraft.client.renderer.block.dispatch.BlockStateModel.SimpleCachedUnbakedRoot- 类型:
class - 修饰符:
public static - 源码定位:
L37 - 说明:
TODO
- 类型:
-
net.minecraft.client.renderer.block.dispatch.BlockStateModel.Unbaked- 类型:
interface - 修饰符:
public - 源码定位:
L70 - 说明:
TODO
- 类型:
-
net.minecraft.client.renderer.block.dispatch.BlockStateModel.UnbakedRoot- 类型:
interface - 修饰符:
public - 源码定位:
L110 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
void collectParts(RandomSource random, List<BlockStateModelPart> output) @ L25
- 方法名:collectParts
- 源码定位:L25
- 返回类型:void
- 修饰符:package-private
参数:
- random: RandomSource
- output: List
说明:
TODO
Material.Baked particleMaterial() @ L27
- 方法名:particleMaterial
- 源码定位:L27
- 返回类型:Material.Baked
- 修饰符:package-private
参数:
- 无
说明:
TODO
int materialFlags() @ L29
- 方法名:materialFlags
- 源码定位:L29
- 返回类型:int
- 修饰符:package-private
参数:
- 无
说明:
TODO
default boolean hasMaterialFlag(int flag) @ L32
- 方法名:hasMaterialFlag
- 源码定位:L32
- 返回类型:boolean
- 修饰符:default
参数:
- flag: int
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public interface BlockStateModel {
void collectParts(RandomSource random, List<BlockStateModelPart> output);
Material.Baked particleMaterial();
@BakedQuad.MaterialFlags
int materialFlags();
default boolean hasMaterialFlag(@BakedQuad.MaterialFlags int flag) {
return (this.materialFlags() & flag) != 0;
}
@OnlyIn(Dist.CLIENT)
public static class SimpleCachedUnbakedRoot implements BlockStateModel.UnbakedRoot {
private final BlockStateModel.Unbaked contents;
private final ModelBaker.SharedOperationKey<BlockStateModel> bakingKey = new ModelBaker.SharedOperationKey<BlockStateModel>() {
{
Objects.requireNonNull(SimpleCachedUnbakedRoot.this);
}
public BlockStateModel compute(ModelBaker modelBakery) {
return SimpleCachedUnbakedRoot.this.contents.bake(modelBakery);
}
};
public SimpleCachedUnbakedRoot(BlockStateModel.Unbaked contents) {
this.contents = contents;
}
@Override
public void resolveDependencies(ResolvableModel.Resolver resolver) {
this.contents.resolveDependencies(resolver);
}
@Override
public BlockStateModel bake(BlockState blockState, ModelBaker modelBakery) {
return modelBakery.compute(this.bakingKey);
}
@Override
public Object visualEqualityGroup(BlockState blockState) {
return this;
}
}
@OnlyIn(Dist.CLIENT)
public interface Unbaked extends ResolvableModel {
Codec<Weighted<Variant>> ELEMENT_CODEC = RecordCodecBuilder.create(
i -> i.group(Variant.MAP_CODEC.forGetter(Weighted::value), ExtraCodecs.POSITIVE_INT.optionalFieldOf("weight", 1).forGetter(Weighted::weight))
.apply(i, Weighted::new)
);
Codec<WeightedVariants.Unbaked> HARDCODED_WEIGHTED_CODEC = ExtraCodecs.nonEmptyList(ELEMENT_CODEC.listOf())
.flatComapMap(
w -> new WeightedVariants.Unbaked(WeightedList.of(Lists.transform((List<Weighted<Variant>>)w, e -> e.map(SingleVariant.Unbaked::new)))),
unbaked -> {
List<Weighted<BlockStateModel.Unbaked>> entries = unbaked.entries().unwrap();
List<Weighted<Variant>> result = new ArrayList<>(entries.size());
for (Weighted<BlockStateModel.Unbaked> entry : entries) {
if (!(entry.value() instanceof SingleVariant.Unbaked singleVariant)) {
return DataResult.error(() -> "Only single variants are supported");
}
result.add(new Weighted<>(singleVariant.variant(), entry.weight()));
}
return DataResult.success(result);
}
);
Codec<BlockStateModel.Unbaked> CODEC = Codec.either(HARDCODED_WEIGHTED_CODEC, SingleVariant.Unbaked.CODEC)
.flatComapMap(v -> v.map(l -> l, r -> r), o -> {
return switch (o) {
case SingleVariant.Unbaked single -> DataResult.success(Either.right(single));
case WeightedVariants.Unbaked multiple -> DataResult.success(Either.left(multiple));
default -> DataResult.error(() -> "Only a single variant or a list of variants are supported");
};
});
BlockStateModel bake(ModelBaker modelBakery);
default BlockStateModel.UnbakedRoot asRoot() {
return new BlockStateModel.SimpleCachedUnbakedRoot(this);
}
}
@OnlyIn(Dist.CLIENT)
public interface UnbakedRoot extends ResolvableModel {
BlockStateModel bake(BlockState blockState, ModelBaker modelBakery);
Object visualEqualityGroup(BlockState blockState);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用/构造调用 - 关联成员:
Unbaked(), WeightedVariants.Unbaked()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ExtraCodecs.nonEmptyList()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
WeightedList.of()
- 引用位置: