CampfireRenderer.java

net.minecraft.client.renderer.blockentity.CampfireRenderer

信息

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

    TODO

字段/常量

  • SIZE

    • 类型: float
    • 修饰符: private static final
    • 源码定位: L25
    • 说明:

      TODO

  • itemModelResolver

    • 类型: ItemModelResolver
    • 修饰符: private final
    • 源码定位: L26
    • 说明:

      TODO

内部类/嵌套类型

构造器

public CampfireRenderer(BlockEntityRendererProvider.Context context) @ L28

  • 构造器名:CampfireRenderer
  • 源码定位:L28
  • 修饰符:public

参数:

  • context: BlockEntityRendererProvider.Context

说明:

TODO

方法

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

public CampfireRenderState createRenderState() @ L32

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

参数:

说明:

TODO

public void extractRenderState(CampfireBlockEntity blockEntity, CampfireRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L36

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

参数:

  • blockEntity: CampfireBlockEntity
  • state: CampfireRenderState
  • partialTicks: float
  • cameraPosition: Vec3
  • breakProgress: ModelFeatureRenderer.CrumblingOverlay

说明:

TODO

public void submit(CampfireRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L56

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

参数:

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

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class CampfireRenderer implements BlockEntityRenderer<CampfireBlockEntity, CampfireRenderState> {
    private static final float SIZE = 0.375F;
    private final ItemModelResolver itemModelResolver;
 
    public CampfireRenderer(BlockEntityRendererProvider.Context context) {
        this.itemModelResolver = context.itemModelResolver();
    }
 
    public CampfireRenderState createRenderState() {
        return new CampfireRenderState();
    }
 
    public void extractRenderState(
        CampfireBlockEntity blockEntity,
        CampfireRenderState state,
        float partialTicks,
        Vec3 cameraPosition,
        ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
    ) {
        BlockEntityRenderer.super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
        state.facing = blockEntity.getBlockState().getValue(CampfireBlock.FACING);
        int seed = (int)blockEntity.getBlockPos().asLong();
        state.items = new ArrayList<>();
 
        for (int slot = 0; slot < blockEntity.getItems().size(); slot++) {
            ItemStackRenderState itemState = new ItemStackRenderState();
            this.itemModelResolver
                .updateForTopItem(itemState, blockEntity.getItems().get(slot), ItemDisplayContext.FIXED, blockEntity.getLevel(), null, seed + slot);
            state.items.add(itemState);
        }
    }
 
    public void submit(CampfireRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
        Direction facing = state.facing;
        List<ItemStackRenderState> items = state.items;
 
        for (int slot = 0; slot < items.size(); slot++) {
            ItemStackRenderState itemState = items.get(slot);
            if (!itemState.isEmpty()) {
                poseStack.pushPose();
                poseStack.translate(0.5F, 0.44921875F, 0.5F);
                Direction direction = Direction.from2DDataValue((slot + facing.get2DDataValue()) % 4);
                float angle = -direction.toYRot();
                poseStack.mulPose(Axis.YP.rotationDegrees(angle));
                poseStack.mulPose(Axis.XP.rotationDegrees(90.0F));
                poseStack.translate(-0.3125F, -0.3125F, 0.0F);
                poseStack.scale(0.375F, 0.375F, 0.375F);
                itemState.submit(poseStack, submitNodeCollector, state.lightCoords, OverlayTexture.NO_OVERLAY, 0);
                poseStack.popPose();
            }
        }
    }
}

引用的其他类