EndCrystalRenderer.java

net.minecraft.client.renderer.entity.EndCrystalRenderer

信息

  • 全限定名:net.minecraft.client.renderer.entity.EndCrystalRenderer
  • 类型:public class
  • 包:net.minecraft.client.renderer.entity
  • 源码路径:src/main/java/net/minecraft/client/renderer/entity/EndCrystalRenderer.java
  • 起始行号:L20
  • 继承:EntityRenderer<EndCrystal,EndCrystalRenderState>
  • 职责:

    TODO

字段/常量

  • END_CRYSTAL_LOCATION

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

      TODO

  • model

    • 类型: EndCrystalModel
    • 修饰符: private final
    • 源码定位: L22
    • 说明:

      TODO

内部类/嵌套类型

构造器

public EndCrystalRenderer(EntityRendererProvider.Context context) @ L24

  • 构造器名:EndCrystalRenderer
  • 源码定位:L24
  • 修饰符:public

参数:

  • context: EntityRendererProvider.Context

说明:

TODO

方法

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

public void submit(EndCrystalRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L30

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

参数:

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

说明:

TODO

public static float getY(float timeInTicks) @ L51

  • 方法名:getY
  • 源码定位:L51
  • 返回类型:float
  • 修饰符:public static

参数:

  • timeInTicks: float

说明:

TODO

public EndCrystalRenderState createRenderState() @ L57

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

参数:

说明:

TODO

public void extractRenderState(EndCrystal entity, EndCrystalRenderState state, float partialTicks) @ L61

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

参数:

  • entity: EndCrystal
  • state: EndCrystalRenderState
  • partialTicks: float

说明:

TODO

public boolean shouldRender(EndCrystal entity, Frustum culler, double camX, double camY, double camZ) @ L73

  • 方法名:shouldRender
  • 源码定位:L73
  • 返回类型:boolean
  • 修饰符:public

参数:

  • entity: EndCrystal
  • culler: Frustum
  • camX: double
  • camY: double
  • camZ: double

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class EndCrystalRenderer extends EntityRenderer<EndCrystal, EndCrystalRenderState> {
    private static final Identifier END_CRYSTAL_LOCATION = Identifier.withDefaultNamespace("textures/entity/end_crystal/end_crystal.png");
    private final EndCrystalModel model;
 
    public EndCrystalRenderer(EntityRendererProvider.Context context) {
        super(context);
        this.shadowRadius = 0.5F;
        this.model = new EndCrystalModel(context.bakeLayer(ModelLayers.END_CRYSTAL));
    }
 
    public void submit(EndCrystalRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
        poseStack.pushPose();
        poseStack.scale(2.0F, 2.0F, 2.0F);
        poseStack.translate(0.0F, -0.5F, 0.0F);
        submitNodeCollector.submitModel(
            this.model, state, poseStack, END_CRYSTAL_LOCATION, state.lightCoords, OverlayTexture.NO_OVERLAY, state.outlineColor, null
        );
        poseStack.popPose();
        Vec3 beamOffset = state.beamOffset;
        if (beamOffset != null) {
            float crystalY = getY(state.ageInTicks);
            float deltaX = (float)beamOffset.x;
            float deltaY = (float)beamOffset.y;
            float deltaZ = (float)beamOffset.z;
            poseStack.translate(beamOffset);
            EnderDragonRenderer.submitCrystalBeams(-deltaX, -deltaY + crystalY, -deltaZ, state.ageInTicks, poseStack, submitNodeCollector, state.lightCoords);
        }
 
        super.submit(state, poseStack, submitNodeCollector, camera);
    }
 
    public static float getY(float timeInTicks) {
        float hh = Mth.sin(timeInTicks * 0.2F) / 2.0F + 0.5F;
        hh = (hh * hh + hh) * 0.4F;
        return hh - 1.4F;
    }
 
    public EndCrystalRenderState createRenderState() {
        return new EndCrystalRenderState();
    }
 
    public void extractRenderState(EndCrystal entity, EndCrystalRenderState state, float partialTicks) {
        super.extractRenderState(entity, state, partialTicks);
        state.ageInTicks = entity.time + partialTicks;
        state.showsBottom = entity.showsBottom();
        BlockPos beamTarget = entity.getBeamTarget();
        if (beamTarget != null) {
            state.beamOffset = Vec3.atCenterOf(beamTarget).subtract(entity.getPosition(partialTicks));
        } else {
            state.beamOffset = null;
        }
    }
 
    public boolean shouldRender(EndCrystal entity, Frustum culler, double camX, double camY, double camZ) {
        return super.shouldRender(entity, culler, camX, camY, camZ) || entity.getBeamTarget() != null;
    }
}

引用的其他类