ShulkerBoxRenderer.java

net.minecraft.client.renderer.blockentity.ShulkerBoxRenderer

信息

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

    TODO

字段/常量

  • TRANSFORMATIONS

    • 类型: Map<Direction,Transformation>
    • 修饰符: private static final
    • 源码定位: L35
    • 说明:

      TODO

  • sprites

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

      TODO

  • model

    • 类型: ShulkerBoxRenderer.ShulkerBoxModel
    • 修饰符: private final
    • 源码定位: L37
    • 说明:

      TODO

内部类/嵌套类型

  • net.minecraft.client.renderer.blockentity.ShulkerBoxRenderer.ShulkerBoxModel
    • 类型: class
    • 修饰符: private static
    • 源码定位: L137
    • 说明:

      TODO

构造器

public ShulkerBoxRenderer(BlockEntityRendererProvider.Context context) @ L39

  • 构造器名:ShulkerBoxRenderer
  • 源码定位:L39
  • 修饰符:public

参数:

  • context: BlockEntityRendererProvider.Context

说明:

TODO

public ShulkerBoxRenderer(SpecialModelRenderer.BakingContext context) @ L43

  • 构造器名:ShulkerBoxRenderer
  • 源码定位:L43
  • 修饰符:public

参数:

  • context: SpecialModelRenderer.BakingContext

说明:

TODO

public ShulkerBoxRenderer(EntityModelSet context, SpriteGetter sprites) @ L47

  • 构造器名:ShulkerBoxRenderer
  • 源码定位:L47
  • 修饰符:public

参数:

  • context: EntityModelSet
  • sprites: SpriteGetter

说明:

TODO

方法

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

public ShulkerBoxRenderState createRenderState() @ L52

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

参数:

说明:

TODO

public void extractRenderState(ShulkerBoxBlockEntity blockEntity, ShulkerBoxRenderState state, float partialTicks, Vec3 cameraPosition, ModelFeatureRenderer.CrumblingOverlay breakProgress) @ L56

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

参数:

  • blockEntity: ShulkerBoxBlockEntity
  • state: ShulkerBoxRenderState
  • partialTicks: float
  • cameraPosition: Vec3
  • breakProgress: ModelFeatureRenderer.CrumblingOverlay

说明:

TODO

public void submit(ShulkerBoxRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L69

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

参数:

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

说明:

TODO

private void submit(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, Direction direction, float progress, ModelFeatureRenderer.CrumblingOverlay breakProgress, SpriteId sprite, int outlineColor) @ L83

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

参数:

  • poseStack: PoseStack
  • submitNodeCollector: SubmitNodeCollector
  • lightCoords: int
  • overlayCoords: int
  • direction: Direction
  • progress: float
  • breakProgress: ModelFeatureRenderer.CrumblingOverlay
  • sprite: SpriteId
  • outlineColor: int

说明:

TODO

public void submit(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, float progress, ModelFeatureRenderer.CrumblingOverlay breakProgress, SpriteId sprite, int outlineColor) @ L100

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

参数:

  • poseStack: PoseStack
  • submitNodeCollector: SubmitNodeCollector
  • lightCoords: int
  • overlayCoords: int
  • progress: float
  • breakProgress: ModelFeatureRenderer.CrumblingOverlay
  • sprite: SpriteId
  • outlineColor: int

说明:

TODO

private static Transformation createModelTransform(Direction direction) @ L114

  • 方法名:createModelTransform
  • 源码定位:L114
  • 返回类型:Transformation
  • 修饰符:private static

参数:

  • direction: Direction

说明:

TODO

public static Transformation modelTransform(Direction direction) @ L126

  • 方法名:modelTransform
  • 源码定位:L126
  • 返回类型:Transformation
  • 修饰符:public static

参数:

  • direction: Direction

说明:

TODO

public void getExtents(float progress, Consumer<Vector3fc> output) @ L130

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

参数:

  • progress: float
  • output: Consumer

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class ShulkerBoxRenderer implements BlockEntityRenderer<ShulkerBoxBlockEntity, ShulkerBoxRenderState> {
    private static final Map<Direction, Transformation> TRANSFORMATIONS = Util.makeEnumMap(Direction.class, ShulkerBoxRenderer::createModelTransform);
    private final SpriteGetter sprites;
    private final ShulkerBoxRenderer.ShulkerBoxModel model;
 
    public ShulkerBoxRenderer(BlockEntityRendererProvider.Context context) {
        this(context.entityModelSet(), context.sprites());
    }
 
    public ShulkerBoxRenderer(SpecialModelRenderer.BakingContext context) {
        this(context.entityModelSet(), context.sprites());
    }
 
    public ShulkerBoxRenderer(EntityModelSet context, SpriteGetter sprites) {
        this.sprites = sprites;
        this.model = new ShulkerBoxRenderer.ShulkerBoxModel(context.bakeLayer(ModelLayers.SHULKER_BOX));
    }
 
    public ShulkerBoxRenderState createRenderState() {
        return new ShulkerBoxRenderState();
    }
 
    public void extractRenderState(
        ShulkerBoxBlockEntity blockEntity,
        ShulkerBoxRenderState state,
        float partialTicks,
        Vec3 cameraPosition,
        ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress
    ) {
        BlockEntityRenderer.super.extractRenderState(blockEntity, state, partialTicks, cameraPosition, breakProgress);
        state.direction = blockEntity.getBlockState().getValueOrElse(ShulkerBoxBlock.FACING, Direction.UP);
        state.color = blockEntity.getColor();
        state.progress = blockEntity.getProgress(partialTicks);
    }
 
    public void submit(ShulkerBoxRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
        DyeColor color = state.color;
        SpriteId sprite;
        if (color == null) {
            sprite = Sheets.DEFAULT_SHULKER_TEXTURE_LOCATION;
        } else {
            sprite = Sheets.getShulkerBoxSprite(color);
        }
 
        this.submit(
            poseStack, submitNodeCollector, state.lightCoords, OverlayTexture.NO_OVERLAY, state.direction, state.progress, state.breakProgress, sprite, 0
        );
    }
 
    private void submit(
        PoseStack poseStack,
        SubmitNodeCollector submitNodeCollector,
        int lightCoords,
        int overlayCoords,
        Direction direction,
        float progress,
        ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress,
        SpriteId sprite,
        int outlineColor
    ) {
        poseStack.pushPose();
        poseStack.mulPose(modelTransform(direction));
        this.submit(poseStack, submitNodeCollector, lightCoords, overlayCoords, progress, breakProgress, sprite, outlineColor);
        poseStack.popPose();
    }
 
    public void submit(
        PoseStack poseStack,
        SubmitNodeCollector submitNodeCollector,
        int lightCoords,
        int overlayCoords,
        float progress,
        ModelFeatureRenderer.@Nullable CrumblingOverlay breakProgress,
        SpriteId sprite,
        int outlineColor
    ) {
        this.model.setupAnim(progress);
        submitNodeCollector.submitModel(this.model, progress, poseStack, lightCoords, overlayCoords, -1, sprite, this.sprites, outlineColor, breakProgress);
    }
 
    private static Transformation createModelTransform(Direction direction) {
        float scale = 0.9995F;
        return new Transformation(
            new Matrix4f()
                .translation(0.5F, 0.5F, 0.5F)
                .scale(0.9995F, 0.9995F, 0.9995F)
                .rotate(direction.getRotation())
                .scale(1.0F, -1.0F, -1.0F)
                .translate(0.0F, -1.0F, 0.0F)
        );
    }
 
    public static Transformation modelTransform(Direction direction) {
        return TRANSFORMATIONS.get(direction);
    }
 
    public void getExtents(float progress, Consumer<Vector3fc> output) {
        PoseStack poseStack = new PoseStack();
        this.model.setupAnim(progress);
        this.model.root().getExtentsForGui(poseStack, output);
    }
 
    @OnlyIn(Dist.CLIENT)
    private static class ShulkerBoxModel extends Model<Float> {
        private final ModelPart lid;
 
        public ShulkerBoxModel(ModelPart root) {
            super(root, RenderTypes::entityCutout);
            this.lid = root.getChild("lid");
        }
 
        public void setupAnim(Float progress) {
            super.setupAnim(progress);
            this.lid.setPos(0.0F, 24.0F - progress * 0.5F * 16.0F, 0.0F);
            this.lid.yRot = 270.0F * progress * (float) (Math.PI / 180.0);
        }
    }
}

引用的其他类