EnchantTableRenderer.java

net.minecraft.client.renderer.blockentity.EnchantTableRenderer

信息

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

    TODO

字段/常量

  • BOOK_TEXTURE

    • 类型: SpriteId
    • 修饰符: public static final
    • 源码定位: L24
    • 说明:

      TODO

  • sprites

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

      TODO

  • bookModel

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

      TODO

内部类/嵌套类型

构造器

public EnchantTableRenderer(BlockEntityRendererProvider.Context context) @ L28

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

参数:

  • context: BlockEntityRendererProvider.Context

说明:

TODO

方法

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

public EnchantTableRenderState createRenderState() @ L33

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

参数:

说明:

TODO

public void extractRenderState(EnchantingTableBlockEntity blockEntity, EnchantTableRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L37

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

参数:

  • blockEntity: EnchantingTableBlockEntity
  • state: EnchantTableRenderState
  • partialTicks: float
  • cameraPosition: Vec3
  • breakProgress: ModelFeatureRenderer.CrumblingOverlay

说明:

TODO

public void submit(EnchantTableRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L61

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

参数:

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

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class EnchantTableRenderer implements BlockEntityRenderer<EnchantingTableBlockEntity, EnchantTableRenderState> {
    public static final SpriteId BOOK_TEXTURE = Sheets.BLOCK_ENTITIES_MAPPER.defaultNamespaceApply("enchantment/enchanting_table_book");
    private final SpriteGetter sprites;
    private final BookModel bookModel;
 
    public EnchantTableRenderer(BlockEntityRendererProvider.Context context) {
        this.sprites = context.sprites();
        this.bookModel = new BookModel(context.bakeLayer(ModelLayers.BOOK));
    }
 
    public EnchantTableRenderState createRenderState() {
        return new EnchantTableRenderState();
    }
 
    public void extractRenderState(
        EnchantingTableBlockEntity blockEntity,
        EnchantTableRenderState state,
        float partialTicks,
        Vec3 cameraPosition,
        ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
    ) {
        BlockEntityRenderer.super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
        state.flip = Mth.lerp(partialTicks, blockEntity.oFlip, blockEntity.flip);
        state.open = Mth.lerp(partialTicks, blockEntity.oOpen, blockEntity.open);
        state.time = blockEntity.time + partialTicks;
        float or = blockEntity.rot - blockEntity.oRot;
 
        while (or >= (float) Math.PI) {
            or -= (float) (Math.PI * 2);
        }
 
        while (or < (float) -Math.PI) {
            or += (float) (Math.PI * 2);
        }
 
        state.yRot = blockEntity.oRot + or * partialTicks;
    }
 
    public void submit(EnchantTableRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
        poseStack.pushPose();
        poseStack.translate(0.5F, 0.75F, 0.5F);
        poseStack.translate(0.0F, 0.1F + Mth.sin(state.time * 0.1F) * 0.01F, 0.0F);
        float yRot = state.yRot;
        poseStack.mulPose(Axis.YP.rotation(-yRot));
        poseStack.mulPose(Axis.ZP.rotationDegrees(80.0F));
        float ff1 = Mth.frac(state.flip + 0.25F) * 1.6F - 0.3F;
        float ff2 = Mth.frac(state.flip + 0.75F) * 1.6F - 0.3F;
        BookModel.State bookState = BookModel.State.forAnimation(state.time, Mth.clamp(ff1, 0.0F, 1.0F), Mth.clamp(ff2, 0.0F, 1.0F), state.open);
        submitNodeCollector.submitModel(
            this.bookModel, bookState, poseStack, state.lightCoords, OverlayTexture.NO_OVERLAY, -1, BOOK_TEXTURE, this.sprites, 0, state.breakProgress
        );
        poseStack.popPose();
    }
}

引用的其他类