BedRenderer.java
net.minecraft.client.renderer.blockentity.BedRenderer
信息
- 全限定名:net.minecraft.client.renderer.blockentity.BedRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.blockentity
- 源码路径:src/main/java/net/minecraft/client/renderer/blockentity/BedRenderer.java
- 起始行号:L44
- 实现:BlockEntityRenderer<BedBlockEntity,BedRenderState>
- 职责:
TODO
字段/常量
-
TRANSFORMATIONS- 类型:
Map<Direction,Transformation> - 修饰符:
private static final - 源码定位:
L45 - 说明:
TODO
- 类型:
-
VISIBLE_LEG_FACES- 类型:
Set<Direction> - 修饰符:
private static final - 源码定位:
L46 - 说明:
TODO
- 类型:
-
sprites- 类型:
SpriteGetter - 修饰符:
private final - 源码定位:
L47 - 说明:
TODO
- 类型:
-
headModel- 类型:
Model.Simple - 修饰符:
private final - 源码定位:
L48 - 说明:
TODO
- 类型:
-
footModel- 类型:
Model.Simple - 修饰符:
private final - 源码定位:
L49 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public BedRenderer(BlockEntityRendererProvider.Context context) @ L51
- 构造器名:BedRenderer
- 源码定位:L51
- 修饰符:public
参数:
- context: BlockEntityRendererProvider.Context
说明:
TODO
public BedRenderer(SpecialModelRenderer.BakingContext context) @ L55
- 构造器名:BedRenderer
- 源码定位:L55
- 修饰符:public
参数:
- context: SpecialModelRenderer.BakingContext
说明:
TODO
public BedRenderer(SpriteGetter sprites, EntityModelSet entityModelSet) @ L59
- 构造器名:BedRenderer
- 源码定位:L59
- 修饰符:public
参数:
- sprites: SpriteGetter
- entityModelSet: EntityModelSet
说明:
TODO
方法
下面的方法块按源码顺序生成。
public static LayerDefinition createHeadLayer() @ L65
- 方法名:createHeadLayer
- 源码定位:L65
- 返回类型:LayerDefinition
- 修饰符:public static
参数:
- 无
说明:
TODO
public static LayerDefinition createFootLayer() @ L83
- 方法名:createFootLayer
- 源码定位:L83
- 返回类型:LayerDefinition
- 修饰符:public static
参数:
- 无
说明:
TODO
public BedRenderState createRenderState() @ L101
- 方法名:createRenderState
- 源码定位:L101
- 返回类型:BedRenderState
- 修饰符:public
参数:
- 无
说明:
TODO
public void extractRenderState(BedBlockEntity blockEntity, BedRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L105
- 方法名:extractRenderState
- 源码定位:L105
- 返回类型:void
- 修饰符:public
参数:
- blockEntity: BedBlockEntity
- state: BedRenderState
- partialTicks: float
- cameraPosition: Vec3
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
public void submit(BedRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L131
- 方法名:submit
- 源码定位:L131
- 返回类型:void
- 修饰符:public
参数:
- state: BedRenderState
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- camera: CameraRenderState
说明:
TODO
public void submitPiece(BedPart part, SpriteId sprite, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, ModelFeatureRenderer.CrumblingOverlay breakProgress, int outlineColor) @ L139
- 方法名:submitPiece
- 源码定位:L139
- 返回类型:void
- 修饰符:public
参数:
- part: BedPart
- sprite: SpriteId
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- lightCoords: int
- overlayCoords: int
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
- outlineColor: int
说明:
TODO
private Model.Simple getPieceModel(BedPart part) @ L153
- 方法名:getPieceModel
- 源码定位:L153
- 返回类型:Model.Simple
- 修饰符:private
参数:
- part: BedPart
说明:
TODO
private static Transformation createModelTransform(Direction direction) @ L160
- 方法名:createModelTransform
- 源码定位:L160
- 返回类型:Transformation
- 修饰符:private static
参数:
- direction: Direction
说明:
TODO
public static Transformation modelTransform(Direction direction) @ L169
- 方法名:modelTransform
- 源码定位:L169
- 返回类型:Transformation
- 修饰符:public static
参数:
- direction: Direction
说明:
TODO
public void getExtents(BedPart part, Consumer<Vector3fc> output) @ L173
- 方法名:getExtents
- 源码定位:L173
- 返回类型:void
- 修饰符:public
参数:
- part: BedPart
- output: Consumer
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class BedRenderer implements BlockEntityRenderer<BedBlockEntity, BedRenderState> {
private static final Map<Direction, Transformation> TRANSFORMATIONS = Util.makeEnumMap(Direction.class, BedRenderer::createModelTransform);
private static final Set<Direction> VISIBLE_LEG_FACES = Util.allOfEnumExcept(Direction.DOWN);
private final SpriteGetter sprites;
private final Model.Simple headModel;
private final Model.Simple footModel;
public BedRenderer(BlockEntityRendererProvider.Context context) {
this(context.sprites(), context.entityModelSet());
}
public BedRenderer(SpecialModelRenderer.BakingContext context) {
this(context.sprites(), context.entityModelSet());
}
public BedRenderer(SpriteGetter sprites, EntityModelSet entityModelSet) {
this.sprites = sprites;
this.headModel = new Model.Simple(entityModelSet.bakeLayer(ModelLayers.BED_HEAD), RenderTypes::entitySolid);
this.footModel = new Model.Simple(entityModelSet.bakeLayer(ModelLayers.BED_FOOT), RenderTypes::entitySolid);
}
public static LayerDefinition createHeadLayer() {
MeshDefinition mesh = new MeshDefinition();
PartDefinition root = mesh.getRoot();
Set<Direction> visibleBodyFaces = Util.allOfEnumExcept(Direction.UP);
root.addOrReplaceChild("main", CubeListBuilder.create().texOffs(0, 0).addBox(0.0F, 0.0F, 0.0F, 16.0F, 16.0F, 6.0F, visibleBodyFaces), PartPose.ZERO);
root.addOrReplaceChild(
"left_leg",
CubeListBuilder.create().texOffs(50, 6).addBox(0.0F, 6.0F, 0.0F, 3.0F, 3.0F, 3.0F, VISIBLE_LEG_FACES),
PartPose.rotation((float) (Math.PI / 2), 0.0F, (float) (Math.PI / 2))
);
root.addOrReplaceChild(
"right_leg",
CubeListBuilder.create().texOffs(50, 18).addBox(-16.0F, 6.0F, 0.0F, 3.0F, 3.0F, 3.0F, VISIBLE_LEG_FACES),
PartPose.rotation((float) (Math.PI / 2), 0.0F, (float) Math.PI)
);
return LayerDefinition.create(mesh, 64, 64);
}
public static LayerDefinition createFootLayer() {
MeshDefinition mesh = new MeshDefinition();
PartDefinition root = mesh.getRoot();
Set<Direction> visibleBodyFaces = Util.allOfEnumExcept(Direction.DOWN);
root.addOrReplaceChild("main", CubeListBuilder.create().texOffs(0, 22).addBox(0.0F, 0.0F, 0.0F, 16.0F, 16.0F, 6.0F, visibleBodyFaces), PartPose.ZERO);
root.addOrReplaceChild(
"left_leg",
CubeListBuilder.create().texOffs(50, 0).addBox(0.0F, 6.0F, -16.0F, 3.0F, 3.0F, 3.0F, VISIBLE_LEG_FACES),
PartPose.rotation((float) (Math.PI / 2), 0.0F, 0.0F)
);
root.addOrReplaceChild(
"right_leg",
CubeListBuilder.create().texOffs(50, 12).addBox(-16.0F, 6.0F, -16.0F, 3.0F, 3.0F, 3.0F, VISIBLE_LEG_FACES),
PartPose.rotation((float) (Math.PI / 2), 0.0F, (float) (Math.PI * 3.0 / 2.0))
);
return LayerDefinition.create(mesh, 64, 64);
}
public BedRenderState createRenderState() {
return new BedRenderState();
}
public void extractRenderState(
BedBlockEntity blockEntity,
BedRenderState state,
float partialTicks,
Vec3 cameraPosition,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
BlockEntityRenderer.super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
state.color = blockEntity.getColor();
state.facing = blockEntity.getBlockState().getValue(BedBlock.FACING);
state.part = blockEntity.getBlockState().getValue(BedBlock.PART);
if (blockEntity.getLevel() != null) {
DoubleBlockCombiner.NeighborCombineResult<? extends BedBlockEntity> combineResult = DoubleBlockCombiner.combineWithNeigbour(
BlockEntityType.BED,
BedBlock::getBlockType,
BedBlock::getConnectedDirection,
ChestBlock.FACING,
blockEntity.getBlockState(),
blockEntity.getLevel(),
blockEntity.getBlockPos(),
(levelAccessor, blockPos) -> false
);
state.lightCoords = combineResult.apply(new BrightnessCombiner<>()).get(state.lightCoords);
}
}
public void submit(BedRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
SpriteId sprite = Sheets.getBedSprite(state.color);
poseStack.pushPose();
poseStack.mulPose(modelTransform(state.facing));
this.submitPiece(state.part, sprite, poseStack, submitNodeCollector, state.lightCoords, OverlayTexture.NO_OVERLAY, state.breakProgress, 0);
poseStack.popPose();
}
public void submitPiece(
BedPart part,
SpriteId sprite,
PoseStack poseStack,
SubmitNodeCollector submitNodeCollector,
int lightCoords,
int overlayCoords,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress,
int outlineColor
) {
Model.Simple model = this.getPieceModel(part);
submitNodeCollector.submitModel(model, Unit.INSTANCE, poseStack, lightCoords, overlayCoords, -1, sprite, this.sprites, outlineColor, breakProgress);
}
private Model.Simple getPieceModel(BedPart part) {
return switch (part) {
case HEAD -> this.headModel;
case FOOT -> this.footModel;
};
}
private static Transformation createModelTransform(Direction direction) {
return new Transformation(
new Matrix4f()
.translation(0.0F, 0.5625F, 0.0F)
.rotate(Axis.XP.rotationDegrees(90.0F))
.rotateAround(Axis.ZP.rotationDegrees(180.0F + direction.toYRot()), 0.5F, 0.5F, 0.5F)
);
}
public static Transformation modelTransform(Direction direction) {
return TRANSFORMATIONS.get(direction);
}
public void getExtents(BedPart part, Consumer<Vector3fc> output) {
PoseStack poseStack = new PoseStack();
this.getPieceModel(part).root().getExtentsForGui(poseStack, output);
}
}引用的其他类
-
- 引用位置:
参数/构造调用 - 关联成员:
PoseStack()
- 引用位置:
-
- 引用位置:
字段/构造调用/返回值 - 关联成员:
Transformation()
- 引用位置:
-
- 引用位置:
字段/方法调用/构造调用/返回值 - 关联成员:
Model.Simple(), Simple()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
PartPose.rotation()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
CubeListBuilder.create()
- 引用位置:
-
- 引用位置:
方法调用/返回值 - 关联成员:
LayerDefinition.create()
- 引用位置:
-
- 引用位置:
构造调用 - 关联成员:
MeshDefinition()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Sheets.getBedSprite()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
BedRenderState()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
Util.allOfEnumExcept(), Util.makeEnumMap()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
DoubleBlockCombiner.combineWithNeigbour()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: