StandingSignRenderer.java
net.minecraft.client.renderer.blockentity.StandingSignRenderer
信息
- 全限定名:net.minecraft.client.renderer.blockentity.StandingSignRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.blockentity
- 源码路径:src/main/java/net/minecraft/client/renderer/blockentity/StandingSignRenderer.java
- 起始行号:L43
- 继承:AbstractSignRenderer
- 职责:
TODO
字段/常量
-
RENDER_SCALE- 类型:
float - 修饰符:
private static final - 源码定位:
L44 - 说明:
TODO
- 类型:
-
TEXT_OFFSET- 类型:
Vector3fc - 修饰符:
private static final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
TRANSFORMATIONS- 类型:
WallAndGroundTransformations<SignRenderState.SignTransformations> - 修饰符:
public static final - 源码定位:
L46 - 说明:
TODO
- 类型:
-
signModels- 类型:
Map<WoodType,StandingSignRenderer.Models> - 修饰符:
private final - 源码定位:
L49 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.renderer.blockentity.StandingSignRenderer.Models- 类型:
record - 修饰符:
private - 源码定位:
L156 - 说明:
TODO
- 类型:
构造器
public StandingSignRenderer(BlockEntityRendererProvider.Context context) @ L51
- 构造器名:StandingSignRenderer
- 源码定位:L51
- 修饰符:public
参数:
- context: BlockEntityRendererProvider.Context
说明:
TODO
方法
下面的方法块按源码顺序生成。
public StandingSignRenderState createRenderState() @ L57
- 方法名:createRenderState
- 源码定位:L57
- 返回类型:StandingSignRenderState
- 修饰符:public
参数:
- 无
说明:
TODO
public void extractRenderState(SignBlockEntity blockEntity, StandingSignRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L61
- 方法名:extractRenderState
- 源码定位:L61
- 返回类型:void
- 修饰符:public
参数:
- blockEntity: SignBlockEntity
- state: StandingSignRenderState
- partialTicks: float
- cameraPosition: Vec3
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
protected Model.Simple getSignModel(StandingSignRenderState state) @ L78
- 方法名:getSignModel
- 源码定位:L78
- 返回类型:Model.Simple
- 修饰符:protected
参数:
- state: StandingSignRenderState
说明:
TODO
protected SpriteId getSignSprite(WoodType type) @ L82
- 方法名:getSignSprite
- 源码定位:L82
- 返回类型:SpriteId
- 修饰符:protected
参数:
- type: WoodType
说明:
TODO
private static Matrix4f baseTransformation(float angle, PlainSignBlock.Attachment attachmentType) @ L87
- 方法名:baseTransformation
- 源码定位:L87
- 返回类型:Matrix4f
- 修饰符:private static
参数:
- angle: float
- attachmentType: PlainSignBlock.Attachment
说明:
TODO
private static Transformation bodyTransformation(PlainSignBlock.Attachment attachmentType, float angle) @ L96
- 方法名:bodyTransformation
- 源码定位:L96
- 返回类型:Transformation
- 修饰符:private static
参数:
- attachmentType: PlainSignBlock.Attachment
- angle: float
说明:
TODO
private static Transformation textTransformation(PlainSignBlock.Attachment attachmentType, float angle, boolean isFrontText) @ L100
- 方法名:textTransformation
- 源码定位:L100
- 返回类型:Transformation
- 修饰符:private static
参数:
- attachmentType: PlainSignBlock.Attachment
- angle: float
- isFrontText: boolean
说明:
TODO
private static SignRenderState.SignTransformations createTransformations(PlainSignBlock.Attachment attachmentType, float angle) @ L110
- 方法名:createTransformations
- 源码定位:L110
- 返回类型:SignRenderState.SignTransformations
- 修饰符:private static
参数:
- attachmentType: PlainSignBlock.Attachment
- angle: float
说明:
TODO
private static SignRenderState.SignTransformations createGroundTransformation(int segment) @ L116
- 方法名:createGroundTransformation
- 源码定位:L116
- 返回类型:SignRenderState.SignTransformations
- 修饰符:private static
参数:
- segment: int
说明:
TODO
private static SignRenderState.SignTransformations createWallTransformation(Direction direction) @ L120
- 方法名:createWallTransformation
- 源码定位:L120
- 返回类型:SignRenderState.SignTransformations
- 修饰符:private static
参数:
- direction: Direction
说明:
TODO
public static void submitSpecial(SpriteGetter sprites, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, Model.Simple model, SpriteId sprite) @ L124
- 方法名:submitSpecial
- 源码定位:L124
- 返回类型:void
- 修饰符:public static
参数:
- sprites: SpriteGetter
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- overlayCoords: int
- model: Model.Simple
- sprite: SpriteId
说明:
TODO
public static Model.Simple createSignModel(EntityModelSet entityModelSet, WoodType woodType, PlainSignBlock.Attachment attachment) @ L136
- 方法名:createSignModel
- 源码定位:L136
- 返回类型:Model.Simple
- 修饰符:public static
参数:
- entityModelSet: EntityModelSet
- woodType: WoodType
- attachment: PlainSignBlock.Attachment
说明:
TODO
public static LayerDefinition createSignLayer(boolean standing) @ L144
- 方法名:createSignLayer
- 源码定位:L144
- 返回类型:LayerDefinition
- 修饰符:public static
参数:
- standing: boolean
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class StandingSignRenderer extends AbstractSignRenderer<StandingSignRenderState> {
private static final float RENDER_SCALE = 0.6666667F;
private static final Vector3fc TEXT_OFFSET = new Vector3f(0.0F, 0.33333334F, 0.046666667F);
public static final WallAndGroundTransformations<SignRenderState.SignTransformations> TRANSFORMATIONS = new WallAndGroundTransformations<>(
StandingSignRenderer::createWallTransformation, StandingSignRenderer::createGroundTransformation, 16
);
private final Map<WoodType, StandingSignRenderer.Models> signModels;
public StandingSignRenderer(BlockEntityRendererProvider.Context context) {
super(context);
this.signModels = WoodType.values()
.collect(ImmutableMap.toImmutableMap(type -> (WoodType)type, type -> StandingSignRenderer.Models.create(context, type)));
}
public StandingSignRenderState createRenderState() {
return new StandingSignRenderState();
}
public void extractRenderState(
SignBlockEntity blockEntity,
StandingSignRenderState state,
float partialTicks,
Vec3 cameraPosition,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
BlockState blockState = blockEntity.getBlockState();
state.attachmentType = PlainSignBlock.getAttachmentPoint(blockState);
if (blockState.getBlock() instanceof WallSignBlock) {
state.transformations = TRANSFORMATIONS.wallTransformation(blockState.getValue(WallSignBlock.FACING));
} else {
state.transformations = TRANSFORMATIONS.freeTransformations(blockState.getValue(StandingSignBlock.ROTATION));
}
}
protected Model.Simple getSignModel(StandingSignRenderState state) {
return this.signModels.get(state.woodType).get(state.attachmentType);
}
@Override
protected SpriteId getSignSprite(WoodType type) {
return Sheets.getSignSprite(type);
}
private static Matrix4f baseTransformation(float angle, PlainSignBlock.Attachment attachmentType) {
Matrix4f result = new Matrix4f().translate(0.5F, 0.5F, 0.5F).rotate(Axis.YP.rotationDegrees(-angle));
if (attachmentType == PlainSignBlock.Attachment.WALL) {
result.translate(0.0F, -0.3125F, -0.4375F);
}
return result;
}
private static Transformation bodyTransformation(PlainSignBlock.Attachment attachmentType, float angle) {
return new Transformation(baseTransformation(angle, attachmentType).scale(0.6666667F, -0.6666667F, -0.6666667F));
}
private static Transformation textTransformation(PlainSignBlock.Attachment attachmentType, float angle, boolean isFrontText) {
Matrix4f result = baseTransformation(angle, attachmentType);
if (!isFrontText) {
result.rotate(Axis.YP.rotationDegrees(180.0F));
}
float s = 0.010416667F;
return new Transformation(result.translate(TEXT_OFFSET).scale(0.010416667F, -0.010416667F, 0.010416667F));
}
private static SignRenderState.SignTransformations createTransformations(PlainSignBlock.Attachment attachmentType, float angle) {
return new SignRenderState.SignTransformations(
bodyTransformation(attachmentType, angle), textTransformation(attachmentType, angle, true), textTransformation(attachmentType, angle, false)
);
}
private static SignRenderState.SignTransformations createGroundTransformation(int segment) {
return createTransformations(PlainSignBlock.Attachment.GROUND, RotationSegment.convertToDegrees(segment));
}
private static SignRenderState.SignTransformations createWallTransformation(Direction direction) {
return createTransformations(PlainSignBlock.Attachment.WALL, direction.toYRot());
}
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 Model.Simple createSignModel(EntityModelSet entityModelSet, WoodType woodType, PlainSignBlock.Attachment attachment) {
ModelLayerLocation layer = switch (attachment) {
case GROUND -> ModelLayers.createStandingSignModelName(woodType);
case WALL -> ModelLayers.createWallSignModelName(woodType);
};
return new Model.Simple(entityModelSet.bakeLayer(layer), RenderTypes::entityCutout);
}
public static LayerDefinition createSignLayer(boolean standing) {
MeshDefinition mesh = new MeshDefinition();
PartDefinition root = mesh.getRoot();
root.addOrReplaceChild("sign", CubeListBuilder.create().texOffs(0, 0).addBox(-12.0F, -14.0F, -1.0F, 24.0F, 12.0F, 2.0F), PartPose.ZERO);
if (standing) {
root.addOrReplaceChild("stick", CubeListBuilder.create().texOffs(0, 14).addBox(-1.0F, -2.0F, -1.0F, 2.0F, 14.0F, 2.0F), PartPose.ZERO);
}
return LayerDefinition.create(mesh, 64, 32);
}
@OnlyIn(Dist.CLIENT)
private record Models(Model.Simple standing, Model.Simple wall) {
public static StandingSignRenderer.Models create(BlockEntityRendererProvider.Context context, WoodType type) {
return new StandingSignRenderer.Models(
StandingSignRenderer.createSignModel(context.entityModelSet(), type, PlainSignBlock.Attachment.GROUND),
StandingSignRenderer.createSignModel(context.entityModelSet(), type, PlainSignBlock.Attachment.WALL)
);
}
public Model.Simple get(PlainSignBlock.Attachment attachmentType) {
return switch (attachmentType) {
case GROUND -> this.standing;
case WALL -> this.wall;
};
}
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
构造调用/返回值 - 关联成员:
Transformation()
- 引用位置:
-
- 引用位置:
参数/方法调用/构造调用/返回值 - 关联成员:
Model.Simple(), Simple()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ModelLayers.createStandingSignModelName(), ModelLayers.createWallSignModelName()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
CubeListBuilder.create()
- 引用位置:
-
- 引用位置:
方法调用/返回值 - 关联成员:
LayerDefinition.create()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
MeshDefinition()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Sheets.getSignSprite()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
字段/方法调用/构造调用/返回值 - 关联成员:
SignRenderState.SignTransformations(), SignTransformations()
- 引用位置:
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
StandingSignRenderState()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
PlainSignBlock.getAttachmentPoint()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
RotationSegment.convertToDegrees()
- 引用位置:
-
- 引用位置:
参数/字段/方法调用 - 关联成员:
WoodType.values()
- 引用位置:
-
- 引用位置:
参数
- 引用位置: