IllusionerRenderer.java

net.minecraft.client.renderer.entity.IllusionerRenderer

信息

  • 全限定名:net.minecraft.client.renderer.entity.IllusionerRenderer
  • 类型:public class
  • 包:net.minecraft.client.renderer.entity
  • 源码路径:src/main/java/net/minecraft/client/renderer/entity/IllusionerRenderer.java
  • 起始行号:L21
  • 继承:IllagerRenderer<Illusioner,IllusionerRenderState>
  • 职责:

    TODO

字段/常量

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

      TODO

内部类/嵌套类型

构造器

public IllusionerRenderer(EntityRendererProvider.Context context) @ L24

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

参数:

  • context: EntityRendererProvider.Context

说明:

TODO

方法

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

public Identifier getTextureLocation(IllusionerRenderState state) @ L44

  • 方法名:getTextureLocation
  • 源码定位:L44
  • 返回类型:Identifier
  • 修饰符:public

参数:

  • state: IllusionerRenderState

说明:

TODO

public IllusionerRenderState createRenderState() @ L48

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

参数:

说明:

TODO

public void extractRenderState(Illusioner entity, IllusionerRenderState state, float partialTicks) @ L52

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

参数:

  • entity: Illusioner
  • state: IllusionerRenderState
  • partialTicks: float

说明:

TODO

public void submit(IllusionerRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L59

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

参数:

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

说明:

TODO

protected boolean isBodyVisible(IllusionerRenderState state) @ L78

  • 方法名:isBodyVisible
  • 源码定位:L78
  • 返回类型:boolean
  • 修饰符:protected

参数:

  • state: IllusionerRenderState

说明:

TODO

protected AABB getBoundingBoxForCulling(Illusioner entity) @ L82

  • 方法名:getBoundingBoxForCulling
  • 源码定位:L82
  • 返回类型:AABB
  • 修饰符:protected

参数:

  • entity: Illusioner

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class IllusionerRenderer extends IllagerRenderer<Illusioner, IllusionerRenderState> {
    private static final Identifier ILLUSIONER = Identifier.withDefaultNamespace("textures/entity/illager/illusioner.png");
 
    public IllusionerRenderer(EntityRendererProvider.Context context) {
        super(context, new IllagerModel<>(context.bakeLayer(ModelLayers.ILLUSIONER)), 0.5F);
        this.addLayer(
            new ItemInHandLayer<IllusionerRenderState, IllagerModel<IllusionerRenderState>>(this) {
                {
                    Objects.requireNonNull(IllusionerRenderer.this);
                }
 
                public void submit(
                    PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, IllusionerRenderState state, float yRot, float xRot
                ) {
                    if (state.isCastingSpell || state.isAggressive) {
                        super.submit(poseStack, submitNodeCollector, lightCoords, state, yRot, xRot);
                    }
                }
            }
        );
        this.model.getHat().visible = true;
    }
 
    public Identifier getTextureLocation(IllusionerRenderState state) {
        return ILLUSIONER;
    }
 
    public IllusionerRenderState createRenderState() {
        return new IllusionerRenderState();
    }
 
    public void extractRenderState(Illusioner entity, IllusionerRenderState state, float partialTicks) {
        super.extractRenderState(entity, state, partialTicks);
        Vec3[] illusionOffsets = entity.getIllusionOffsets(partialTicks);
        state.illusionOffsets = Arrays.copyOf(illusionOffsets, illusionOffsets.length);
        state.isCastingSpell = entity.isCastingSpell();
    }
 
    public void submit(IllusionerRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
        if (state.isInvisible) {
            Vec3[] offsets = state.illusionOffsets;
 
            for (int i = 0; i < offsets.length; i++) {
                poseStack.pushPose();
                poseStack.translate(
                    offsets[i].x + Mth.cos(i + state.ageInTicks * 0.5F) * 0.025,
                    offsets[i].y + Mth.cos(i + state.ageInTicks * 0.75F) * 0.0125,
                    offsets[i].z + Mth.cos(i + state.ageInTicks * 0.7F) * 0.025
                );
                super.submit(state, poseStack, submitNodeCollector, camera);
                poseStack.popPose();
            }
        } else {
            super.submit(state, poseStack, submitNodeCollector, camera);
        }
    }
 
    protected boolean isBodyVisible(IllusionerRenderState state) {
        return true;
    }
 
    protected AABB getBoundingBoxForCulling(Illusioner entity) {
        return super.getBoundingBoxForCulling(entity).inflate(3.0, 0.0, 3.0);
    }
}

引用的其他类