AbstractSignRenderer.java
net.minecraft.client.renderer.blockentity.AbstractSignRenderer
信息
- 全限定名:net.minecraft.client.renderer.blockentity.AbstractSignRenderer
- 类型:public abstract class
- 包:net.minecraft.client.renderer.blockentity
- 源码路径:src/main/java/net/minecraft/client/renderer/blockentity/AbstractSignRenderer.java
- 起始行号:L33
- 实现:BlockEntityRenderer<SignBlockEntity,S>
- 职责:
TODO
字段/常量
-
BLACK_TEXT_OUTLINE_COLOR- 类型:
int - 修饰符:
private static final - 源码定位:
L34 - 说明:
TODO
- 类型:
-
OUTLINE_RENDER_DISTANCE- 类型:
int - 修饰符:
private static final - 源码定位:
L35 - 说明:
TODO
- 类型:
-
font- 类型:
Font - 修饰符:
private final - 源码定位:
L36 - 说明:
TODO
- 类型:
-
sprites- 类型:
SpriteGetter - 修饰符:
private final - 源码定位:
L37 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public AbstractSignRenderer(BlockEntityRendererProvider.Context context) @ L39
- 构造器名:AbstractSignRenderer
- 源码定位:L39
- 修饰符:public
参数:
- context: BlockEntityRendererProvider.Context
说明:
TODO
方法
下面的方法块按源码顺序生成。
protected abstract Model.Simple getSignModel(S state) @ L44
- 方法名:getSignModel
- 源码定位:L44
- 返回类型:Model.Simple
- 修饰符:protected abstract
参数:
- state: S
说明:
TODO
protected abstract SpriteId getSignSprite(WoodType type) @ L46
- 方法名:getSignSprite
- 源码定位:L46
- 返回类型:SpriteId
- 修饰符:protected abstract
参数:
- type: WoodType
说明:
TODO
public void submit(S state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L48
- 方法名:submit
- 源码定位:L48
- 返回类型:void
- 修饰符:public
参数:
- state: S
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- camera: CameraRenderState
说明:
TODO
private void submitSignWithText(S state, PoseStack poseStack, ModelFeatureRenderer.CrumblingOverlay breakProgress, SubmitNodeCollector submitNodeCollector) @ L52
- 方法名:submitSignWithText
- 源码定位:L52
- 返回类型:void
- 修饰符:private
参数:
- state: S
- poseStack: PoseStack
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
- submitNodeCollector: SubmitNodeCollector
说明:
TODO
protected void submitSign(PoseStack poseStack, int lightCoords, WoodType type, Model.Simple signModel, ModelFeatureRenderer.CrumblingOverlay breakProgress, SubmitNodeCollector submitNodeCollector) @ L75
- 方法名:submitSign
- 源码定位:L75
- 返回类型:void
- 修饰符:protected
参数:
- poseStack: PoseStack
- lightCoords: int
- type: WoodType
- signModel: Model.Simple
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
- submitNodeCollector: SubmitNodeCollector
说明:
TODO
private void submitSignText(S state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, SignText signText) @ L87
- 方法名:submitSignText
- 源码定位:L87
- 返回类型:void
- 修饰符:private
参数:
- state: S
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- signText: SignText
说明:
TODO
private static boolean isOutlineVisible(BlockPos pos) @ L125
- 方法名:isOutlineVisible
- 源码定位:L125
- 返回类型:boolean
- 修饰符:private static
参数:
- pos: BlockPos
说明:
TODO
public static int getDarkColor(SignText signText) @ L136
- 方法名:getDarkColor
- 源码定位:L136
- 返回类型:int
- 修饰符:public static
参数:
- signText: SignText
说明:
TODO
public void extractRenderState(SignBlockEntity blockEntity, S state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L141
- 方法名:extractRenderState
- 源码定位:L141
- 返回类型:void
- 修饰符:public
参数:
- blockEntity: SignBlockEntity
- state: S
- partialTicks: float
- cameraPosition: Vec3
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public abstract class AbstractSignRenderer<S extends SignRenderState> implements BlockEntityRenderer<SignBlockEntity, S> {
private static final int BLACK_TEXT_OUTLINE_COLOR = -988212;
private static final int OUTLINE_RENDER_DISTANCE = Mth.square(16);
private final Font font;
private final SpriteGetter sprites;
public AbstractSignRenderer(BlockEntityRendererProvider.Context context) {
this.font = context.font();
this.sprites = context.sprites();
}
protected abstract Model.Simple getSignModel(S state);
protected abstract SpriteId getSignSprite(WoodType type);
public void submit(S state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
this.submitSignWithText(state, poseStack, state.breakProgress, submitNodeCollector);
}
private void submitSignWithText(
S state, PoseStack poseStack, ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress, SubmitNodeCollector submitNodeCollector
) {
Model.Simple bodyModel = this.getSignModel(state);
poseStack.pushPose();
poseStack.mulPose(state.transformations.body());
this.submitSign(poseStack, state.lightCoords, state.woodType, bodyModel, breakProgress, submitNodeCollector);
poseStack.popPose();
if (state.frontText != null) {
poseStack.pushPose();
poseStack.mulPose(state.transformations.frontText());
this.submitSignText(state, poseStack, submitNodeCollector, state.frontText);
poseStack.popPose();
}
if (state.backText != null) {
poseStack.pushPose();
poseStack.mulPose(state.transformations.backText());
this.submitSignText(state, poseStack, submitNodeCollector, state.backText);
poseStack.popPose();
}
}
protected void submitSign(
PoseStack poseStack,
int lightCoords,
WoodType type,
Model.Simple signModel,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress,
SubmitNodeCollector submitNodeCollector
) {
SpriteId sprite = this.getSignSprite(type);
submitNodeCollector.submitModel(signModel, Unit.INSTANCE, poseStack, lightCoords, OverlayTexture.NO_OVERLAY, -1, sprite, this.sprites, 0, breakProgress);
}
private void submitSignText(S state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, SignText signText) {
int darkColor = getDarkColor(signText);
int signMidpoint = 4 * state.textLineHeight / 2;
FormattedCharSequence[] formattedLines = signText.getRenderMessages(state.isTextFilteringEnabled, input -> {
List<FormattedCharSequence> components = this.font.split(input, state.maxTextLineWidth);
return components.isEmpty() ? FormattedCharSequence.EMPTY : components.get(0);
});
int textColor;
boolean drawOutline;
int lightVal;
if (signText.hasGlowingText()) {
textColor = signText.getColor().getTextColor();
drawOutline = textColor == DyeColor.BLACK.getTextColor() || state.drawOutline;
lightVal = 15728880;
} else {
textColor = darkColor;
drawOutline = false;
lightVal = state.lightCoords;
}
for (int i = 0; i < 4; i++) {
FormattedCharSequence actualLine = formattedLines[i];
float x1 = -this.font.width(actualLine) / 2;
submitNodeCollector.submitText(
poseStack,
x1,
i * state.textLineHeight - signMidpoint,
actualLine,
false,
Font.DisplayMode.POLYGON_OFFSET,
lightVal,
textColor,
0,
drawOutline ? darkColor : 0
);
}
}
private static boolean isOutlineVisible(BlockPos pos) {
Minecraft minecraft = Minecraft.getInstance();
LocalPlayer player = minecraft.player;
if (player != null && minecraft.options.getCameraType().isFirstPerson() && player.isScoping()) {
return true;
} else {
Entity camera = minecraft.getCameraEntity();
return camera != null && camera.distanceToSqr(Vec3.atCenterOf(pos)) < OUTLINE_RENDER_DISTANCE;
}
}
public static int getDarkColor(SignText signText) {
int color = signText.getColor().getTextColor();
return color == DyeColor.BLACK.getTextColor() && signText.hasGlowingText() ? -988212 : ARGB.scaleRGB(color, 0.4F);
}
public void extractRenderState(
SignBlockEntity blockEntity, S state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
BlockEntityRenderer.super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
state.maxTextLineWidth = blockEntity.getMaxTextLineWidth();
state.textLineHeight = blockEntity.getTextLineHeight();
state.frontText = blockEntity.getFrontText();
state.backText = blockEntity.getBackText();
state.isTextFilteringEnabled = Minecraft.getInstance().isTextFilteringEnabled();
state.drawOutline = isOutlineVisible(blockEntity.getBlockPos());
state.woodType = SignBlock.getWoodType(blockEntity.getBlockState().getBlock());
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Minecraft.getInstance()
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ARGB.scaleRGB()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Mth.square()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
SignBlock.getWoodType()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/方法调用 - 关联成员:
Vec3.atCenterOf()
- 引用位置: