PistonHeadRenderer.java

net.minecraft.client.renderer.blockentity.PistonHeadRenderer

信息

  • 全限定名:net.minecraft.client.renderer.blockentity.PistonHeadRenderer
  • 类型:public class
  • 包:net.minecraft.client.renderer.blockentity
  • 源码路径:src/main/java/net/minecraft/client/renderer/blockentity/PistonHeadRenderer.java
  • 起始行号:L25
  • 实现:BlockEntityRenderer<PistonMovingBlockEntity,PistonHeadRenderState>
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public PistonHeadRenderState createRenderState() @ L26

  • 方法名:createRenderState
  • 源码定位:L26
  • 返回类型:PistonHeadRenderState
  • 修饰符:public

参数:

说明:

TODO

public void extractRenderState(PistonMovingBlockEntity blockEntity, PistonHeadRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L30

  • 方法名:extractRenderState
  • 源码定位:L30
  • 返回类型:void
  • 修饰符:public

参数:

  • blockEntity: PistonMovingBlockEntity
  • state: PistonHeadRenderState
  • partialTicks: float
  • cameraPosition: Vec3
  • breakProgress: ModelFeatureRenderer.CrumblingOverlay

说明:

TODO

public void submit(PistonHeadRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L67

  • 方法名:submit
  • 源码定位:L67
  • 返回类型:void
  • 修饰符:public

参数:

  • state: PistonHeadRenderState
  • poseStack: PoseStack
  • submitNodeCollector: SubmitNodeCollector
  • camera: CameraRenderState

说明:

TODO

private static MovingBlockRenderState createMovingBlock(BlockPos pos, BlockState blockState, Holder<Biome> biome, ClientLevel level) @ L79

  • 方法名:createMovingBlock
  • 源码定位:L79
  • 返回类型:MovingBlockRenderState
  • 修饰符:private static

参数:

  • pos: BlockPos
  • blockState: BlockState
  • biome: Holder
  • level: ClientLevel

说明:

TODO

public int getViewDistance() @ L90

  • 方法名:getViewDistance
  • 源码定位:L90
  • 返回类型:int
  • 修饰符:public

参数:

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class PistonHeadRenderer implements BlockEntityRenderer<PistonMovingBlockEntity, PistonHeadRenderState> {
    public PistonHeadRenderState createRenderState() {
        return new PistonHeadRenderState();
    }
 
    public void extractRenderState(
        PistonMovingBlockEntity blockEntity,
        PistonHeadRenderState state,
        float partialTicks,
        Vec3 cameraPosition,
        ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
    ) {
        BlockEntityRenderer.super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
        state.xOffset = blockEntity.getXOff(partialTicks);
        state.yOffset = blockEntity.getYOff(partialTicks);
        state.zOffset = blockEntity.getZOff(partialTicks);
        state.block = null;
        state.base = null;
        BlockState blockState = blockEntity.getMovedState();
        if (blockEntity.getLevel() instanceof ClientLevel level && !blockState.isAir()) {
            BlockPos pos = blockEntity.getBlockPos().relative(blockEntity.getMovementDirection().getOpposite());
            Holder<Biome> biome = level.getBiome(pos);
            if (blockState.is(Blocks.PISTON_HEAD) && blockEntity.getProgress(partialTicks) <= 4.0F) {
                blockState = blockState.setValue(PistonHeadBlock.SHORT, blockEntity.getProgress(partialTicks) <= 0.5F);
                state.block = createMovingBlock(pos, blockState, biome, level);
            } else if (blockEntity.isSourcePiston() && !blockEntity.isExtending()) {
                PistonType value = blockState.is(Blocks.STICKY_PISTON) ? PistonType.STICKY : PistonType.DEFAULT;
                BlockState pistonHeadState = Blocks.PISTON_HEAD
                    .defaultBlockState()
                    .setValue(PistonHeadBlock.TYPE, value)
                    .setValue(PistonHeadBlock.FACING, blockState.getValue(PistonBaseBlock.FACING));
                pistonHeadState = pistonHeadState.setValue(PistonHeadBlock.SHORT, blockEntity.getProgress(partialTicks) >= 0.5F);
                state.block = createMovingBlock(pos, pistonHeadState, biome, level);
                BlockPos basePos = pos.relative(blockEntity.getMovementDirection());
                blockState = blockState.setValue(PistonBaseBlock.EXTENDED, true);
                state.base = createMovingBlock(basePos, blockState, biome, level);
            } else {
                state.block = createMovingBlock(pos, blockState, biome, level);
            }
        }
    }
 
    public void submit(PistonHeadRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
        if (state.block != null) {
            poseStack.pushPose();
            poseStack.translate(state.xOffset, state.yOffset, state.zOffset);
            submitNodeCollector.submitMovingBlock(poseStack, state.block);
            poseStack.popPose();
            if (state.base != null) {
                submitNodeCollector.submitMovingBlock(poseStack, state.base);
            }
        }
    }
 
    private static MovingBlockRenderState createMovingBlock(BlockPos pos, BlockState blockState, Holder<Biome> biome, ClientLevel level) {
        MovingBlockRenderState movingBlockRenderState = new MovingBlockRenderState();
        movingBlockRenderState.randomSeedPos = pos;
        movingBlockRenderState.blockPos = pos;
        movingBlockRenderState.blockState = blockState;
        movingBlockRenderState.biome = biome;
        movingBlockRenderState.cardinalLighting = level.cardinalLighting();
        movingBlockRenderState.lightEngine = level.getLightEngine();
        return movingBlockRenderState;
    }
 
    @Override
    public int getViewDistance() {
        return 68;
    }
}

引用的其他类