SpecialModelWrapper.java
net.minecraft.client.renderer.item.SpecialModelWrapper
信息
- 全限定名:net.minecraft.client.renderer.item.SpecialModelWrapper
- 类型:public class
- 包:net.minecraft.client.renderer.item
- 源码路径:src/main/java/net/minecraft/client/renderer/item/SpecialModelWrapper.java
- 起始行号:L29
- 实现:ItemModel
- 职责:
TODO
字段/常量
-
specialRenderer- 类型:
SpecialModelRenderer<T> - 修饰符:
private final - 源码定位:
L30 - 说明:
TODO
- 类型:
-
properties- 类型:
ModelRenderProperties - 修饰符:
private final - 源码定位:
L31 - 说明:
TODO
- 类型:
-
extents- 类型:
Supplier<Vector3fc[]> - 修饰符:
private final - 源码定位:
L32 - 说明:
TODO
- 类型:
-
transformation- 类型:
Matrix4fc - 修饰符:
private final - 源码定位:
L33 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.renderer.item.SpecialModelWrapper.Unbaked- 类型:
record - 修饰符:
public - 源码定位:
L77 - 说明:
TODO
- 类型:
构造器
public SpecialModelWrapper(SpecialModelRenderer<T> specialRenderer, ModelRenderProperties properties, Matrix4fc transformation) @ L35
- 构造器名:SpecialModelWrapper
- 源码定位:L35
- 修饰符:public
参数:
- specialRenderer: SpecialModelRenderer
- properties: ModelRenderProperties
- transformation: Matrix4fc
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void update(ItemStackRenderState output, ItemStack item, ItemModelResolver resolver, ItemDisplayContext displayContext, ClientLevel level, ItemOwner owner, int seed) @ L46
- 方法名:update
- 源码定位:L46
- 返回类型:void
- 修饰符:public
参数:
- output: ItemStackRenderState
- item: ItemStack
- resolver: ItemModelResolver
- displayContext: ItemDisplayContext
- level: ClientLevel
- owner: ItemOwner
- seed: int
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class SpecialModelWrapper<T> implements ItemModel {
private final SpecialModelRenderer<T> specialRenderer;
private final ModelRenderProperties properties;
private final Supplier<Vector3fc[]> extents;
private final Matrix4fc transformation;
public SpecialModelWrapper(SpecialModelRenderer<T> specialRenderer, ModelRenderProperties properties, Matrix4fc transformation) {
this.specialRenderer = specialRenderer;
this.properties = properties;
this.extents = Suppliers.memoize(() -> {
Set<Vector3fc> results = new HashSet<>();
specialRenderer.getExtents(results::add);
return results.toArray(new Vector3fc[0]);
});
this.transformation = transformation;
}
@Override
public void update(
ItemStackRenderState output,
ItemStack item,
ItemModelResolver resolver,
ItemDisplayContext displayContext,
@Nullable ClientLevel level,
@Nullable ItemOwner owner,
int seed
) {
output.appendModelIdentityElement(this);
ItemStackRenderState.LayerRenderState layer = output.newLayer();
if (item.hasFoil()) {
ItemStackRenderState.FoilType foilType = ItemStackRenderState.FoilType.STANDARD;
layer.setFoilType(foilType);
output.setAnimated();
output.appendModelIdentityElement(foilType);
}
T argument = this.specialRenderer.extractArgument(item);
layer.setExtents(this.extents);
layer.setLocalTransform(this.transformation);
layer.setupSpecialModel(this.specialRenderer, argument);
if (argument != null) {
output.appendModelIdentityElement(argument);
}
this.properties.applyToLayer(layer, displayContext);
}
@OnlyIn(Dist.CLIENT)
public record Unbaked(Identifier base, Optional<Transformation> transformation, SpecialModelRenderer.Unbaked<?> specialModel) implements ItemModel.Unbaked {
public static final MapCodec<SpecialModelWrapper.Unbaked> MAP_CODEC = RecordCodecBuilder.mapCodec(
i -> i.group(
Identifier.CODEC.fieldOf("base").forGetter(SpecialModelWrapper.Unbaked::base),
Transformation.EXTENDED_CODEC.optionalFieldOf("transformation").forGetter(SpecialModelWrapper.Unbaked::transformation),
SpecialModelRenderers.CODEC.fieldOf("model").forGetter(SpecialModelWrapper.Unbaked::specialModel)
)
.apply(i, SpecialModelWrapper.Unbaked::new)
);
@Override
public void resolveDependencies(ResolvableModel.Resolver resolver) {
resolver.markDependency(this.base);
}
@Override
public ItemModel bake(ItemModel.BakingContext context, Matrix4fc transformation) {
Matrix4fc modelTransform = Transformation.compose(transformation, this.transformation);
SpecialModelRenderer<?> bakedSpecialModel = this.specialModel.bake(context);
if (bakedSpecialModel == null) {
return context.missingItemModel(modelTransform);
} else {
ModelRenderProperties properties = this.getProperties(context);
return new SpecialModelWrapper<>(bakedSpecialModel, properties, modelTransform);
}
}
private ModelRenderProperties getProperties(ItemModel.BakingContext context) {
ModelBaker baker = context.blockModelBaker();
ResolvedModel model = baker.getModel(this.base);
TextureSlots textureSlots = model.getTopTextureSlots();
return ModelRenderProperties.fromResolvedModel(baker, model, textureSlots);
}
@Override
public MapCodec<SpecialModelWrapper.Unbaked> type() {
return MAP_CODEC;
}
}
}引用的其他类
-
- 引用位置:
方法调用 - 关联成员:
Transformation.compose()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
ModelRenderProperties.fromResolvedModel()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: