BlockModelRenderState.java

net.minecraft.client.renderer.block.BlockModelRenderState

信息

  • 全限定名:net.minecraft.client.renderer.block.BlockModelRenderState
  • 类型:public class
  • 包:net.minecraft.client.renderer.block
  • 源码路径:src/main/java/net/minecraft/client/renderer/block/BlockModelRenderState.java
  • 起始行号:L23
  • 职责:

    TODO

字段/常量

  • EMPTY_TINTS

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

      TODO

  • modelParts

    • 类型: List<BlockStateModelPart>
    • 修饰符: private
    • 源码定位: L25
    • 说明:

      TODO

  • transformation

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

      TODO

  • renderType

    • 类型: RenderType
    • 修饰符: private
    • 源码定位: L27
    • 说明:

      TODO

  • specialRenderer

    • 类型: SpecialModelRenderer<?>
    • 修饰符: private
    • 源码定位: L28
    • 说明:

      TODO

  • specialRendererTransformation

    • 类型: Matrix4fc
    • 修饰符: private
    • 源码定位: L29
    • 说明:

      TODO

  • tintLayers

    • 类型: IntList
    • 修饰符: private
    • 源码定位: L30
    • 说明:

      TODO

  • randomSource

    • 类型: RandomSource
    • 修饰符: private
    • 源码定位: L31
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

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

public void clear() @ L33

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

参数:

说明:

TODO

public IntList tintLayers() @ L44

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

参数:

说明:

TODO

public <T> void setupSpecialModel(SpecialModelRenderer<T> renderer, Matrix4fc transformation) @ L52

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

参数:

  • renderer: SpecialModelRenderer
  • transformation: Matrix4fc

说明:

TODO

public List<BlockStateModelPart> setupModel(Matrix4fc transformation, boolean hasTranslucency) @ L57

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

参数:

  • transformation: Matrix4fc
  • hasTranslucency: boolean

说明:

TODO

public void submit(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor) @ L69

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

参数:

  • poseStack: PoseStack
  • submitNodeCollector: SubmitNodeCollector
  • lightCoords: int
  • overlayCoords: int
  • outlineColor: int

说明:

TODO

private static Matrix4fc identityToNull(Matrix4fc transformation) @ L83

  • 方法名:identityToNull
  • 源码定位:L83
  • 返回类型:Matrix4fc
  • 修饰符:private static

参数:

  • transformation: Matrix4fc

说明:

TODO

private void submitModel(RenderType renderType, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor) @ L87

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

参数:

  • renderType: RenderType
  • poseStack: PoseStack
  • submitNodeCollector: SubmitNodeCollector
  • lightCoords: int
  • overlayCoords: int
  • outlineColor: int

说明:

TODO

private static void submitSpecialRenderer(SpecialModelRenderer<?> renderer, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor) @ L104

  • 方法名:submitSpecialRenderer
  • 源码定位:L104
  • 返回类型:void
  • 修饰符:private static

参数:

  • renderer: SpecialModelRenderer<?>
  • poseStack: PoseStack
  • submitNodeCollector: SubmitNodeCollector
  • lightCoords: int
  • overlayCoords: int
  • outlineColor: int

说明:

TODO

public void submitOnlyOutline(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor) @ L110

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

参数:

  • poseStack: PoseStack
  • submitNodeCollector: SubmitNodeCollector
  • lightCoords: int
  • overlayCoords: int
  • outlineColor: int

说明:

TODO

public void submitWithZOffset(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor) @ L114

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

参数:

  • poseStack: PoseStack
  • submitNodeCollector: SubmitNodeCollector
  • lightCoords: int
  • overlayCoords: int
  • outlineColor: int

说明:

TODO

public boolean isEmpty() @ L120

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

参数:

说明:

TODO

public RandomSource scratchRandomSource(long seed) @ L124

  • 方法名:scratchRandomSource
  • 源码定位:L124
  • 返回类型:RandomSource
  • 修饰符:public

参数:

  • seed: long

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class BlockModelRenderState {
    public static final int[] EMPTY_TINTS = new int[0];
    private @Nullable List<BlockStateModelPart> modelParts;
    private @Nullable Matrix4fc transformation;
    private @Nullable RenderType renderType;
    private @Nullable SpecialModelRenderer<?> specialRenderer;
    private @Nullable Matrix4fc specialRendererTransformation;
    private @Nullable IntList tintLayers;
    private @Nullable RandomSource randomSource;
 
    public void clear() {
        this.modelParts = null;
        this.transformation = null;
        this.renderType = null;
        this.specialRenderer = null;
        this.specialRendererTransformation = null;
        if (this.tintLayers != null) {
            this.tintLayers.clear();
        }
    }
 
    public IntList tintLayers() {
        if (this.tintLayers == null) {
            this.tintLayers = new IntArrayList();
        }
 
        return this.tintLayers;
    }
 
    public <T> void setupSpecialModel(SpecialModelRenderer<T> renderer, Matrix4fc transformation) {
        this.specialRenderer = renderer;
        this.specialRendererTransformation = identityToNull(transformation);
    }
 
    public List<BlockStateModelPart> setupModel(Matrix4fc transformation, boolean hasTranslucency) {
        this.transformation = identityToNull(transformation);
        this.renderType = hasTranslucency ? Sheets.translucentBlockSheet() : Sheets.cutoutBlockSheet();
        if (this.modelParts == null) {
            this.modelParts = new ObjectArrayList<>();
        } else {
            this.modelParts.clear();
        }
 
        return this.modelParts;
    }
 
    public void submit(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor) {
        this.submitModel(this.renderType, poseStack, submitNodeCollector, lightCoords, overlayCoords, outlineColor);
        if (this.specialRenderer != null) {
            if (this.specialRendererTransformation != null) {
                poseStack.pushPose();
                poseStack.mulPose(this.specialRendererTransformation);
                submitSpecialRenderer(this.specialRenderer, poseStack, submitNodeCollector, lightCoords, overlayCoords, outlineColor);
                poseStack.popPose();
            } else {
                submitSpecialRenderer(this.specialRenderer, poseStack, submitNodeCollector, lightCoords, overlayCoords, outlineColor);
            }
        }
    }
 
    private static @Nullable Matrix4fc identityToNull(Matrix4fc transformation) {
        return MatrixUtil.checkPropertyRaw(transformation, 4) ? null : transformation;
    }
 
    private void submitModel(
        RenderType renderType, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor
    ) {
        if (this.modelParts != null && !this.modelParts.isEmpty()) {
            List<BlockStateModelPart> modelPartsCopy = new ObjectArrayList<>(this.modelParts);
            int[] tints = this.tintLayers != null ? this.tintLayers.toArray(EMPTY_TINTS) : EMPTY_TINTS;
            if (this.transformation != null) {
                poseStack.pushPose();
                poseStack.mulPose(this.transformation);
                submitNodeCollector.submitBlockModel(poseStack, renderType, modelPartsCopy, tints, lightCoords, overlayCoords, outlineColor);
                poseStack.popPose();
            } else {
                submitNodeCollector.submitBlockModel(poseStack, renderType, modelPartsCopy, tints, lightCoords, overlayCoords, outlineColor);
            }
        }
    }
 
    private static void submitSpecialRenderer(
        SpecialModelRenderer<?> renderer, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor
    ) {
        renderer.submit(null, poseStack, submitNodeCollector, lightCoords, overlayCoords, false, outlineColor);
    }
 
    public void submitOnlyOutline(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor) {
        this.submitModel(RenderTypes.outline(TextureAtlas.LOCATION_BLOCKS), poseStack, submitNodeCollector, lightCoords, overlayCoords, outlineColor);
    }
 
    public void submitWithZOffset(PoseStack poseStack, SubmitNodeCollector submitNodeCollector, int lightCoords, int overlayCoords, int outlineColor) {
        this.submitModel(
            RenderTypes.entitySolidZOffsetForward(TextureAtlas.LOCATION_BLOCKS), poseStack, submitNodeCollector, lightCoords, overlayCoords, outlineColor
        );
    }
 
    public boolean isEmpty() {
        return this.modelParts == null && this.specialRenderer == null;
    }
 
    public RandomSource scratchRandomSource(long seed) {
        if (this.randomSource == null) {
            this.randomSource = RandomSource.create(seed);
        } else {
            this.randomSource.setSeed(seed);
        }
 
        return this.randomSource;
    }
}

引用的其他类

  • PoseStack

    • 引用位置: 参数
  • MatrixUtil

    • 引用位置: 方法调用
    • 关联成员: MatrixUtil.checkPropertyRaw()
  • Sheets

    • 引用位置: 方法调用
    • 关联成员: Sheets.cutoutBlockSheet(), Sheets.translucentBlockSheet()
  • SubmitNodeCollector

    • 引用位置: 参数
  • BlockStateModelPart

    • 引用位置: 字段/返回值
  • RenderType

    • 引用位置: 参数/字段
  • RenderTypes

    • 引用位置: 方法调用
    • 关联成员: RenderTypes.entitySolidZOffsetForward(), RenderTypes.outline()
  • SpecialModelRenderer

    • 引用位置: 参数/字段
  • RandomSource

    • 引用位置: 字段/方法调用/返回值
    • 关联成员: RandomSource.create()