BrushableBlockRenderer.java
net.minecraft.client.renderer.blockentity.BrushableBlockRenderer
信息
- 全限定名:net.minecraft.client.renderer.blockentity.BrushableBlockRenderer
- 类型:public class
- 包:net.minecraft.client.renderer.blockentity
- 源码路径:src/main/java/net/minecraft/client/renderer/blockentity/BrushableBlockRenderer.java
- 起始行号:L22
- 实现:BlockEntityRenderer<BrushableBlockEntity,BrushableBlockRenderState>
- 职责:
TODO
字段/常量
itemModelResolver- 类型:
ItemModelResolver - 修饰符:
private final - 源码定位:
L23 - 说明:
TODO
- 类型:
内部类/嵌套类型
- 无
构造器
public BrushableBlockRenderer(BlockEntityRendererProvider.Context context) @ L25
- 构造器名:BrushableBlockRenderer
- 源码定位:L25
- 修饰符:public
参数:
- context: BlockEntityRendererProvider.Context
说明:
TODO
方法
下面的方法块按源码顺序生成。
public BrushableBlockRenderState createRenderState() @ L29
- 方法名:createRenderState
- 源码定位:L29
- 返回类型:BrushableBlockRenderState
- 修饰符:public
参数:
- 无
说明:
TODO
public void extractRenderState(BrushableBlockEntity blockEntity, BrushableBlockRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L33
- 方法名:extractRenderState
- 源码定位:L33
- 返回类型:void
- 修饰符:public
参数:
- blockEntity: BrushableBlockEntity
- state: BrushableBlockRenderState
- partialTicks: float
- cameraPosition: Vec3
- breakProgress: ModelFeatureRenderer.CrumblingOverlay
说明:
TODO
public void submit(BrushableBlockRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L55
- 方法名:submit
- 源码定位:L55
- 返回类型:void
- 修饰符:public
参数:
- state: BrushableBlockRenderState
- poseStack: PoseStack
- submitNodeCollector: SubmitNodeCollector
- camera: CameraRenderState
说明:
TODO
private float[] translations(Direction direction, int completionState) @ L70
- 方法名:translations
- 源码定位:L70
- 返回类型:float[]
- 修饰符:private
参数:
- direction: Direction
- completionState: int
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class BrushableBlockRenderer implements BlockEntityRenderer<BrushableBlockEntity, BrushableBlockRenderState> {
private final ItemModelResolver itemModelResolver;
public BrushableBlockRenderer(BlockEntityRendererProvider.Context context) {
this.itemModelResolver = context.itemModelResolver();
}
public BrushableBlockRenderState createRenderState() {
return new BrushableBlockRenderState();
}
public void extractRenderState(
BrushableBlockEntity blockEntity,
BrushableBlockRenderState state,
float partialTicks,
Vec3 cameraPosition,
ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
) {
BlockEntityRenderer.super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
state.hitDirection = blockEntity.getHitDirection();
state.dustProgress = blockEntity.getBlockState().getValue(BlockStateProperties.DUSTED);
if (blockEntity.getLevel() != null && blockEntity.getHitDirection() != null) {
state.lightCoords = LevelRenderer.getLightCoords(
LevelRenderer.BrightnessGetter.DEFAULT,
blockEntity.getLevel(),
blockEntity.getBlockState(),
blockEntity.getBlockPos().relative(blockEntity.getHitDirection())
);
}
this.itemModelResolver.updateForTopItem(state.itemState, blockEntity.getItem(), ItemDisplayContext.FIXED, blockEntity.getLevel(), null, 0);
}
public void submit(BrushableBlockRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
if (state.dustProgress > 0 && state.hitDirection != null && !state.itemState.isEmpty()) {
poseStack.pushPose();
poseStack.translate(0.0F, 0.5F, 0.0F);
float[] translations = this.translations(state.hitDirection, state.dustProgress);
poseStack.translate(translations[0], translations[1], translations[2]);
poseStack.mulPose(Axis.YP.rotationDegrees(75.0F));
boolean eastWest = state.hitDirection == Direction.EAST || state.hitDirection == Direction.WEST;
poseStack.mulPose(Axis.YP.rotationDegrees((eastWest ? 90 : 0) + 11));
poseStack.scale(0.5F, 0.5F, 0.5F);
state.itemState.submit(poseStack, submitNodeCollector, state.lightCoords, OverlayTexture.NO_OVERLAY, 0);
poseStack.popPose();
}
}
private float[] translations(Direction direction, int completionState) {
float[] xyzTranslations = new float[]{0.5F, 0.0F, 0.5F};
float completionOffset = completionState / 10.0F * 0.75F;
switch (direction) {
case EAST:
xyzTranslations[0] = 0.73F + completionOffset;
break;
case WEST:
xyzTranslations[0] = 0.25F - completionOffset;
break;
case UP:
xyzTranslations[1] = 0.25F + completionOffset;
break;
case DOWN:
xyzTranslations[1] = -0.23F - completionOffset;
break;
case NORTH:
xyzTranslations[2] = 0.25F - completionOffset;
break;
case SOUTH:
xyzTranslations[2] = 0.73F + completionOffset;
}
return xyzTranslations;
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
LevelRenderer.getLightCoords()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
实现
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/构造调用/返回值 - 关联成员:
BrushableBlockRenderState()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
字段
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置: