ShulkerRenderer.java

net.minecraft.client.renderer.entity.ShulkerRenderer

信息

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

    TODO

字段/常量

  • DEFAULT_TEXTURE_LOCATION

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

      TODO

  • TEXTURE_LOCATION

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

      TODO

内部类/嵌套类型

构造器

public ShulkerRenderer(EntityRendererProvider.Context context) @ L28

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

参数:

  • context: EntityRendererProvider.Context

说明:

TODO

方法

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

public Vec3 getRenderOffset(ShulkerRenderState state) @ L32

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

参数:

  • state: ShulkerRenderState

说明:

TODO

public boolean shouldRender(Shulker entity, Frustum culler, double camX, double camY, double camZ) @ L36

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

参数:

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

说明:

TODO

public Identifier getTextureLocation(ShulkerRenderState state) @ L56

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

参数:

  • state: ShulkerRenderState

说明:

TODO

public ShulkerRenderState createRenderState() @ L60

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

参数:

说明:

TODO

public void extractRenderState(Shulker entity, ShulkerRenderState state, float partialTicks) @ L64

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

参数:

  • entity: Shulker
  • state: ShulkerRenderState
  • partialTicks: float

说明:

TODO

public static Identifier getTextureLocation(DyeColor color) @ L74

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

参数:

  • color: DyeColor

说明:

TODO

protected void setupRotations(ShulkerRenderState state, PoseStack poseStack, float bodyRot, float entityScale) @ L78

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

参数:

  • state: ShulkerRenderState
  • poseStack: PoseStack
  • bodyRot: float
  • entityScale: float

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ShulkerRenderer extends MobRenderer<Shulker, ShulkerRenderState, ShulkerModel> {
    private static final Identifier DEFAULT_TEXTURE_LOCATION = Sheets.DEFAULT_SHULKER_TEXTURE_LOCATION.texture().withPath(path -> "textures/" + path + ".png");
    private static final Identifier[] TEXTURE_LOCATION = Sheets.SHULKER_TEXTURE_LOCATION
        .stream()
        .map(location -> location.texture().withPath(path -> "textures/" + path + ".png"))
        .toArray(Identifier[]::new);
 
    public ShulkerRenderer(EntityRendererProvider.Context context) {
        super(context, new ShulkerModel(context.bakeLayer(ModelLayers.SHULKER)), 0.0F);
    }
 
    public Vec3 getRenderOffset(ShulkerRenderState state) {
        return state.renderOffset;
    }
 
    public boolean shouldRender(Shulker entity, Frustum culler, double camX, double camY, double camZ) {
        if (super.shouldRender(entity, culler, camX, camY, camZ)) {
            return true;
        } else {
            Vec3 startPos = entity.getRenderPosition(0.0F);
            if (startPos == null) {
                return false;
            } else {
                EntityType<?> type = entity.getType();
                float halfHeight = type.getHeight() / 2.0F;
                float halfWidth = type.getWidth() / 2.0F;
                Vec3 targetPos = Vec3.atBottomCenterOf(entity.blockPosition());
                return culler.isVisible(
                    new AABB(startPos.x, startPos.y + halfHeight, startPos.z, targetPos.x, targetPos.y + halfHeight, targetPos.z)
                        .inflate(halfWidth, halfHeight, halfWidth)
                );
            }
        }
    }
 
    public Identifier getTextureLocation(ShulkerRenderState state) {
        return getTextureLocation(state.color);
    }
 
    public ShulkerRenderState createRenderState() {
        return new ShulkerRenderState();
    }
 
    public void extractRenderState(Shulker entity, ShulkerRenderState state, float partialTicks) {
        super.extractRenderState(entity, state, partialTicks);
        state.renderOffset = Objects.requireNonNullElse(entity.getRenderPosition(partialTicks), Vec3.ZERO);
        state.color = entity.getColor();
        state.peekAmount = entity.getClientPeekAmount(partialTicks);
        state.yHeadRot = entity.yHeadRot;
        state.yBodyRot = entity.yBodyRot;
        state.attachFace = entity.getAttachFace();
    }
 
    public static Identifier getTextureLocation(@Nullable DyeColor color) {
        return color == null ? DEFAULT_TEXTURE_LOCATION : TEXTURE_LOCATION[color.getId()];
    }
 
    protected void setupRotations(ShulkerRenderState state, PoseStack poseStack, float bodyRot, float entityScale) {
        super.setupRotations(state, poseStack, bodyRot + 180.0F, entityScale);
        poseStack.rotateAround(state.attachFace.getOpposite().getRotation(), 0.0F, 0.5F, 0.0F);
    }
}

引用的其他类