CustomHeadLayer.java
net.minecraft.client.renderer.entity.layers.CustomHeadLayer
信息
- 全限定名:net.minecraft.client.renderer.entity.layers.CustomHeadLayer
- 类型:public class
- 包:net.minecraft.client.renderer.entity.layers
- 源码路径:src/main/java/net/minecraft/client/renderer/entity/layers/CustomHeadLayer.java
- 起始行号:L24
- 继承:RenderLayer<S,M>
- 职责:
TODO
字段/常量
-
ITEM_SCALE- 类型:
float - 修饰符:
private static final - 源码定位:
L25 - 说明:
TODO
- 类型:
-
SKULL_SCALE- 类型:
float - 修饰符:
private static final - 源码定位:
L26 - 说明:
TODO
- 类型:
-
transforms- 类型:
CustomHeadLayer.Transforms - 修饰符:
private final - 源码定位:
L27 - 说明:
TODO
- 类型:
-
skullModels- 类型:
Function<SkullBlock.Type,SkullModelBase> - 修饰符:
private final - 源码定位:
L28 - 说明:
TODO
- 类型:
-
playerSkinRenderCache- 类型:
PlayerSkinRenderCache - 修饰符:
private final - 源码定位:
L29 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.renderer.entity.layers.CustomHeadLayer.Transforms- 类型:
record - 修饰符:
public - 源码定位:
L87 - 说明:
TODO
- 类型:
构造器
public CustomHeadLayer(RenderLayerParent<S,M> renderer, EntityModelSet modelSet, PlayerSkinRenderCache playerSkinRenderCache) @ L31
- 构造器名:CustomHeadLayer
- 源码定位:L31
- 修饰符:public
参数:
- renderer: RenderLayerParent<S,M>
- modelSet: EntityModelSet
- playerSkinRenderCache: PlayerSkinRenderCache
说明:
TODO
public CustomHeadLayer(RenderLayerParent<S,M> renderer, EntityModelSet modelSet, PlayerSkinRenderCache playerSkinRenderCache, CustomHeadLayer.Transforms transforms) @ L35
- 构造器名:CustomHeadLayer
- 源码定位:L35
- 修饰符:public
参数:
- renderer: RenderLayerParent<S,M>
- modelSet: EntityModelSet
- playerSkinRenderCache: PlayerSkinRenderCache
- transforms: CustomHeadLayer.Transforms
说明:
TODO
方法
下面的方法块按源码顺序生成。
public void submit(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, S state, float yRot, float xRot) @ L44
- 方法名:submit
- 源码定位:L44
- 返回类型:void
- 修饰符:public
参数:
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- state: S
- yRot: float
- xRot: float
说明:
TODO
private RenderType resolveSkullRenderType(LivingEntityRenderState state, SkullBlock.Type type) @ L69
- 方法名:resolveSkullRenderType
- 源码定位:L69
- 返回类型:RenderType
- 修饰符:private
参数:
- state: LivingEntityRenderState
- type: SkullBlock.Type
说明:
TODO
public static void translateToHead(PoseStack poseStack, CustomHeadLayer.Transforms transforms) @ L80
- 方法名:translateToHead
- 源码定位:L80
- 返回类型:void
- 修饰符:public static
参数:
- poseStack: PoseStack
- transforms: CustomHeadLayer.Transforms
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class CustomHeadLayer<S extends LivingEntityRenderState, M extends EntityModel<S> & HeadedModel> extends RenderLayer<S, M> {
private static final float ITEM_SCALE = 0.625F;
private static final float SKULL_SCALE = 1.1875F;
private final CustomHeadLayer.Transforms transforms;
private final Function<SkullBlock.Type, SkullModelBase> skullModels;
private final PlayerSkinRenderCache playerSkinRenderCache;
public CustomHeadLayer(RenderLayerParent<S, M> renderer, EntityModelSet modelSet, PlayerSkinRenderCache playerSkinRenderCache) {
this(renderer, modelSet, playerSkinRenderCache, CustomHeadLayer.Transforms.DEFAULT);
}
public CustomHeadLayer(
RenderLayerParent<S, M> renderer, EntityModelSet modelSet, PlayerSkinRenderCache playerSkinRenderCache, CustomHeadLayer.Transforms transforms
) {
super(renderer);
this.transforms = transforms;
this.skullModels = Util.memoize(type -> SkullBlockRenderer.createModel(modelSet, type));
this.playerSkinRenderCache = playerSkinRenderCache;
}
public void submit(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, S state, float yRot, float xRot) {
if (!state.headItem.isEmpty() || state.wornHeadType != null) {
poseStack.pushPose();
poseStack.scale(this.transforms.horizontalScale(), 1.0F, this.transforms.horizontalScale());
M parentModel = this.getParentModel();
parentModel.root().translateAndRotate(poseStack);
parentModel.translateToHead(poseStack);
if (state.wornHeadType != null) {
poseStack.translate(0.0F, this.transforms.skullYOffset(), 0.0F);
poseStack.scale(1.1875F, 1.1875F, 1.1875F);
SkullBlock.Type type = state.wornHeadType;
SkullModelBase skullModel = this.skullModels.apply(type);
RenderType renderType = this.resolveSkullRenderType(state, type);
SkullBlockRenderer.submitSkull(
state.wornHeadAnimationPos, poseStack, submitNodeCollector, lightCoords, skullModel, renderType, state.outlineColor, null
);
} else {
translateToHead(poseStack, this.transforms);
state.headItem.submit(poseStack, submitNodeCollector, lightCoords, OverlayTexture.NO_OVERLAY, state.outlineColor);
}
poseStack.popPose();
}
}
private RenderType resolveSkullRenderType(LivingEntityRenderState state, SkullBlock.Type type) {
if (type == SkullBlock.Types.PLAYER) {
ResolvableProfile profile = state.wornHeadProfile;
if (profile != null) {
return this.playerSkinRenderCache.getOrDefault(profile).renderType();
}
}
return SkullBlockRenderer.getSkullRenderType(type, null);
}
public static void translateToHead(PoseStack poseStack, CustomHeadLayer.Transforms transforms) {
poseStack.translate(0.0F, -0.25F + transforms.yOffset(), 0.0F);
poseStack.mulPose(Axis.YP.rotationDegrees(180.0F));
poseStack.scale(0.625F, -0.625F, -0.625F);
}
@OnlyIn(Dist.CLIENT)
public record Transforms(float yOffset, float skullYOffset, float horizontalScale) {
public static final CustomHeadLayer.Transforms DEFAULT = new CustomHeadLayer.Transforms(0.0F, 0.0F, 1.0F);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SkullBlockRenderer.createModel(), SkullBlockRenderer.getSkullRenderType(), SkullBlockRenderer.submitSkull()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.memoize()
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: