HangingSignRenderer.java
net.minecraft.client.renderer.blockentity.HangingSignRenderer
信息
- 全限定名:net.minecraft.client.renderer.blockentity.HangingSignRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.blockentity
- 源码路径:src/main/java/net/minecraft/client/renderer/blockentity/HangingSignRenderer.java
- 起始行号:L42
- 继承:AbstractSignRenderer
- 职责:
TODO
字段/常量
-
PLANK- 类型:
String - 修饰符:
private static final - 源码定位:
L43 - 说明:
TODO
- 类型:
-
V_CHAINS- 类型:
String - 修饰符:
private static final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
NORMAL_CHAINS- 类型:
String - 修饰符:
private static final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
CHAIN_L_1- 类型:
String - 修饰符:
private static final - 源码定位:
L46 - 说明:
TODO
- 类型:
-
CHAIN_L_2- 类型:
String - 修饰符:
private static final - 源码定位:
L47 - 说明:
TODO
- 类型:
-
CHAIN_R_1- 类型:
String - 修饰符:
private static final - 源码定位:
L48 - 说明:
TODO
- 类型:
-
CHAIN_R_2- 类型:
String - 修饰符:
private static final - 源码定位:
L49 - 说明:
TODO
- 类型:
-
BOARD- 类型:
String - 修饰符:
private static final - 源码定位:
L50 - 说明:
TODO
- 类型:
-
MODEL_RENDER_SCALE- 类型:
float - 修饰符:
private static final - 源码定位:
L51 - 说明:
TODO
- 类型:
-
TEXT_RENDER_SCALE- 类型:
float - 修饰符:
private static final - 源码定位:
L52 - 说明:
TODO
- 类型:
-
TEXT_OFFSET- 类型:
Vector3fc - 修饰符:
private static final - 源码定位:
L53 - 说明:
TODO
- 类型:
-
TRANSFORMATIONS- 类型:
WallAndGroundTransformations<SignRenderState.SignTransformations> - 修饰符:
public static final - 源码定位:
L54 - 说明:
TODO
- 类型:
-
signModels- 类型:
Map<WoodType,HangingSignRenderer.Models> - 修饰符:
private final - 源码定位:
L57 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.renderer.blockentity.HangingSignRenderer.Models- 类型:
record - 修饰符:
private - 源码定位:
L183 - 说明:
TODO
- 类型:
构造器
public HangingSignRenderer(BlockEntityRendererProvider.Context context) @ L59
- 构造器名:HangingSignRenderer
- 源码定位:L59
- 修饰符:public
参数:
- context: BlockEntityRendererProvider.Context
说明:
TODO
方法
下面的方法块按源码顺序生成。
public HangingSignRenderState createRenderState() @ L65
- 方法名:createRenderState
- 源码定位:L65
- 返回类型:HangingSignRenderState
- 修饰符:public
参数:
- 无
说明:
TODO
public void extractRenderState(SignBlockEntity blockEntity, HangingSignRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L69
- 方法名:extractRenderState
- 源码定位:L69
- 返回类型:void
- 修饰符:public
参数:
- blockEntity: SignBlockEntity
- state: HangingSignRenderState
- partialTicks: float
- cameraPosition: Vec3
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
public static Model.Simple createSignModel(EntityModelSet entityModelSet, WoodType woodType, HangingSignBlock.Attachment attachmentType) @ L86
- 方法名:createSignModel
- 源码定位:L86
- 返回类型:Model.Simple
- 修饰符:public static
参数:
- entityModelSet: EntityModelSet
- woodType: WoodType
- attachmentType: HangingSignBlock.Attachment
说明:
TODO
private static Matrix4f baseTransformation(float angle) @ L90
- 方法名:baseTransformation
- 源码定位:L90
- 返回类型:Matrix4f
- 修饰符:private static
参数:
- angle: float
说明:
TODO
private static Transformation bodyTransformation(float angle) @ L94
- 方法名:bodyTransformation
- 源码定位:L94
- 返回类型:Transformation
- 修饰符:private static
参数:
- angle: float
说明:
TODO
private static Transformation textTransformation(float angle, boolean isFrontText) @ L98
- 方法名:textTransformation
- 源码定位:L98
- 返回类型:Transformation
- 修饰符:private static
参数:
- angle: float
- isFrontText: boolean
说明:
TODO
private static SignRenderState.SignTransformations createTransformations(float angle) @ L110
- 方法名:createTransformations
- 源码定位:L110
- 返回类型:SignRenderState.SignTransformations
- 修饰符:private static
参数:
- angle: float
说明:
TODO
private static SignRenderState.SignTransformations createGroundTransformation(int segment) @ L114
- 方法名:createGroundTransformation
- 源码定位:L114
- 返回类型:SignRenderState.SignTransformations
- 修饰符:private static
参数:
- segment: int
说明:
TODO
private static SignRenderState.SignTransformations createWallTransformation(Direction direction) @ L118
- 方法名:createWallTransformation
- 源码定位:L118
- 返回类型:SignRenderState.SignTransformations
- 修饰符:private static
参数:
- direction: Direction
说明:
TODO
protected Model.Simple getSignModel(HangingSignRenderState state) @ L122
- 方法名:getSignModel
- 源码定位:L122
- 返回类型:Model.Simple
- 修饰符:protected
参数:
- state: HangingSignRenderState
说明:
TODO
protected SpriteId getSignSprite(WoodType type) @ L126
- 方法名:getSignSprite
- 源码定位:L126
- 返回类型:SpriteId
- 修饰符:protected
参数:
- type: WoodType
说明:
TODO
public static void submitSpecial(SpriteGetter sprites, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, Model.Simple model, SpriteId sprite) @ L131
- 方法名:submitSpecial
- 源码定位:L131
- 返回类型:void
- 修饰符:public static
参数:
- sprites: SpriteGetter
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- overlayCoords: int
- model: Model.Simple
- sprite: SpriteId
说明:
TODO
public static LayerDefinition createHangingSignLayer(HangingSignBlock.Attachment type) @ L143
- 方法名:createHangingSignLayer
- 源码定位:L143
- 返回类型:LayerDefinition
- 修饰符:public static
参数:
- type: HangingSignBlock.Attachment
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class HangingSignRenderer extends AbstractSignRenderer<HangingSignRenderState> {
private static final String PLANK = "plank";
private static final String V_CHAINS = "vChains";
private static final String NORMAL_CHAINS = "normalChains";
private static final String CHAIN_L_1 = "chainL1";
private static final String CHAIN_L_2 = "chainL2";
private static final String CHAIN_R_1 = "chainR1";
private static final String CHAIN_R_2 = "chainR2";
private static final String BOARD = "board";
private static final float MODEL_RENDER_SCALE = 1.0F;
private static final float TEXT_RENDER_SCALE = 0.9F;
private static final Vector3fc TEXT_OFFSET = new Vector3f(0.0F, -0.32F, 0.073F);
public static final WallAndGroundTransformations<SignRenderState.SignTransformations> TRANSFORMATIONS = new WallAndGroundTransformations<>(
HangingSignRenderer::createWallTransformation, HangingSignRenderer::createGroundTransformation, 16
);
private final Map<WoodType, HangingSignRenderer.Models> signModels;
public HangingSignRenderer(BlockEntityRendererProvider.Context context) {
super(context);
this.signModels = WoodType.values()
.collect(ImmutableMap.toImmutableMap(type -> (WoodType)type, type -> HangingSignRenderer.Models.create(context, type)));
}
public HangingSignRenderState createRenderState() {
return new HangingSignRenderState();
}
public void extractRenderState(
SignBlockEntity blockEntity,
HangingSignRenderState state,
float partialTicks,
Vec3 cameraPosition,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
BlockState blockState = blockEntity.getBlockState();
state.attachmentType = HangingSignBlock.getAttachmentPoint(blockState);
if (blockState.getBlock() instanceof WallHangingSignBlock) {
state.transformations = TRANSFORMATIONS.wallTransformation(blockState.getValue(WallHangingSignBlock.FACING));
} else {
state.transformations = TRANSFORMATIONS.freeTransformations(blockState.getValue(CeilingHangingSignBlock.ROTATION));
}
}
public static Model.Simple createSignModel(EntityModelSet entityModelSet, WoodType woodType, HangingSignBlock.Attachment attachmentType) {
return new Model.Simple(entityModelSet.bakeLayer(ModelLayers.createHangingSignModelName(woodType, attachmentType)), RenderTypes::entityCutout);
}
private static Matrix4f baseTransformation(float angle) {
return new Matrix4f().translation(0.5F, 0.9375F, 0.5F).rotate(Axis.YP.rotationDegrees(-angle)).translate(0.0F, -0.3125F, 0.0F);
}
private static Transformation bodyTransformation(float angle) {
return new Transformation(baseTransformation(angle).scale(1.0F, -1.0F, -1.0F));
}
private static Transformation textTransformation(float angle, boolean isFrontText) {
Matrix4f result = baseTransformation(angle);
if (!isFrontText) {
result.rotate(Axis.YP.rotationDegrees(180.0F));
}
float s = 0.0140625F;
result.translate(TEXT_OFFSET);
result.scale(0.0140625F, -0.0140625F, 0.0140625F);
return new Transformation(result);
}
private static SignRenderState.SignTransformations createTransformations(float angle) {
return new SignRenderState.SignTransformations(bodyTransformation(angle), textTransformation(angle, true), textTransformation(angle, false));
}
private static SignRenderState.SignTransformations createGroundTransformation(int segment) {
return createTransformations(RotationSegment.convertToDegrees(segment));
}
private static SignRenderState.SignTransformations createWallTransformation(Direction direction) {
return createTransformations(direction.toYRot());
}
protected Model.Simple getSignModel(HangingSignRenderState state) {
return this.signModels.get(state.woodType).get(state.attachmentType);
}
@Override
protected SpriteId getSignSprite(WoodType type) {
return Sheets.getHangingSignSprite(type);
}
public static void submitSpecial(
SpriteGetter sprites,
PoseStack poseStack,
SubmitNodeCollector submitNodeCollector,
int lightCoords,
int overlayCoords,
Model.Simple model,
SpriteId sprite
) {
submitNodeCollector.submitModel(model, Unit.INSTANCE, poseStack, lightCoords, overlayCoords, -1, sprite, sprites, 0, null);
}
public static LayerDefinition createHangingSignLayer(HangingSignBlock.Attachment type) {
MeshDefinition mesh = new MeshDefinition();
PartDefinition root = mesh.getRoot();
root.addOrReplaceChild("board", CubeListBuilder.create().texOffs(0, 12).addBox(-7.0F, 0.0F, -1.0F, 14.0F, 10.0F, 2.0F), PartPose.ZERO);
if (type == HangingSignBlock.Attachment.WALL) {
root.addOrReplaceChild("plank", CubeListBuilder.create().texOffs(0, 0).addBox(-8.0F, -6.0F, -2.0F, 16.0F, 2.0F, 4.0F), PartPose.ZERO);
}
if (type == HangingSignBlock.Attachment.WALL || type == HangingSignBlock.Attachment.CEILING) {
PartDefinition normalChains = root.addOrReplaceChild("normalChains", CubeListBuilder.create(), PartPose.ZERO);
normalChains.addOrReplaceChild(
"chainL1",
CubeListBuilder.create().texOffs(0, 6).addBox(-1.5F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F),
PartPose.offsetAndRotation(-5.0F, -6.0F, 0.0F, 0.0F, (float) (-Math.PI / 4), 0.0F)
);
normalChains.addOrReplaceChild(
"chainL2",
CubeListBuilder.create().texOffs(6, 6).addBox(-1.5F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F),
PartPose.offsetAndRotation(-5.0F, -6.0F, 0.0F, 0.0F, (float) (Math.PI / 4), 0.0F)
);
normalChains.addOrReplaceChild(
"chainR1",
CubeListBuilder.create().texOffs(0, 6).addBox(-1.5F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F),
PartPose.offsetAndRotation(5.0F, -6.0F, 0.0F, 0.0F, (float) (-Math.PI / 4), 0.0F)
);
normalChains.addOrReplaceChild(
"chainR2",
CubeListBuilder.create().texOffs(6, 6).addBox(-1.5F, 0.0F, 0.0F, 3.0F, 6.0F, 0.0F),
PartPose.offsetAndRotation(5.0F, -6.0F, 0.0F, 0.0F, (float) (Math.PI / 4), 0.0F)
);
}
if (type == HangingSignBlock.Attachment.CEILING_MIDDLE) {
root.addOrReplaceChild("vChains", CubeListBuilder.create().texOffs(14, 6).addBox(-6.0F, -6.0F, 0.0F, 12.0F, 6.0F, 0.0F), PartPose.ZERO);
}
return LayerDefinition.create(mesh, 64, 32);
}
@OnlyIn(Dist.CLIENT)
private record Models(Model.Simple ceiling, Model.Simple ceilingMiddle, Model.Simple wall) {
public static HangingSignRenderer.Models create(BlockEntityRendererProvider.Context context, WoodType type) {
return new HangingSignRenderer.Models(
HangingSignRenderer.createSignModel(context.entityModelSet(), type, HangingSignBlock.Attachment.CEILING),
HangingSignRenderer.createSignModel(context.entityModelSet(), type, HangingSignBlock.Attachment.CEILING_MIDDLE),
HangingSignRenderer.createSignModel(context.entityModelSet(), type, HangingSignBlock.Attachment.WALL)
);
}
public Model.Simple get(HangingSignBlock.Attachment attachmentType) {
return switch (attachmentType) {
case CEILING -> this.ceiling;
case CEILING_MIDDLE -> this.ceilingMiddle;
case WALL -> this.wall;
};
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
构造调用/返回值 - 关联成员:
Transformation()
- 引用位置:
-
- 引用位置:
参数/方法调用/构造调用/返回值 - 关联成员:
Model.Simple(), Simple()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ModelLayers.createHangingSignModelName()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PartPose.offsetAndRotation()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
CubeListBuilder.create()
- 引用位置:
-
- 引用位置:
方法调用/返回值 - 关联成员:
LayerDefinition.create()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
MeshDefinition()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Sheets.getHangingSignSprite()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
HangingSignRenderState()
- 引用位置:
-
- 引用位置:
字段/方法调用/构造调用/返回值 - 关联成员:
SignRenderState.SignTransformations(), SignTransformations()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
HangingSignBlock.getAttachmentPoint()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RotationSegment.convertToDegrees()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
WoodType.values()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: