UnbakedCuboidGeometry.java

net.minecraft.client.resources.model.cuboid.UnbakedCuboidGeometry

信息

  • 全限定名:net.minecraft.client.resources.model.cuboid.UnbakedCuboidGeometry
  • 类型:public record
  • 包:net.minecraft.client.resources.model.cuboid
  • 源码路径:src/main/java/net/minecraft/client/resources/model/cuboid/UnbakedCuboidGeometry.java
  • 起始行号:L19
  • 实现:UnbakedGeometry
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

方法

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

public QuadCollection bake(TextureSlots textures, ModelBaker modelBaker, ModelState modelState, ModelDebugName name) @ L20

  • 方法名:bake
  • 源码定位:L20
  • 返回类型:QuadCollection
  • 修饰符:public

参数:

  • textures: TextureSlots
  • modelBaker: ModelBaker
  • modelState: ModelState
  • name: ModelDebugName

说明:

TODO

public static QuadCollection bake(List<CuboidModelElement> elements, TextureSlots textures, ModelBaker modelBaker, ModelState modelState, ModelDebugName name) @ L25

  • 方法名:bake
  • 源码定位:L25
  • 返回类型:QuadCollection
  • 修饰符:public static

参数:

  • elements: List
  • textures: TextureSlots
  • modelBaker: ModelBaker
  • modelState: ModelState
  • name: ModelDebugName

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public record UnbakedCuboidGeometry(List<CuboidModelElement> elements) implements UnbakedGeometry {
    @Override
    public QuadCollection bake(TextureSlots textures, ModelBaker modelBaker, ModelState modelState, ModelDebugName name) {
        return bake(this.elements, textures, modelBaker, modelState, name);
    }
 
    public static QuadCollection bake(
        List<CuboidModelElement> elements, TextureSlots textures, ModelBaker modelBaker, ModelState modelState, ModelDebugName name
    ) {
        QuadCollection.Builder builder = new QuadCollection.Builder();
 
        for (CuboidModelElement element : elements) {
            boolean drawXFaces = true;
            boolean drawYFaces = true;
            boolean drawZFaces = true;
            Vector3fc from = element.from();
            Vector3fc to = element.to();
            if (from.x() == to.x()) {
                drawYFaces = false;
                drawZFaces = false;
            }
 
            if (from.y() == to.y()) {
                drawXFaces = false;
                drawZFaces = false;
            }
 
            if (from.z() == to.z()) {
                drawXFaces = false;
                drawYFaces = false;
            }
 
            if (drawXFaces || drawYFaces || drawZFaces) {
                for (Entry<Direction, CuboidFace> entry : element.faces().entrySet()) {
                    Direction facing = entry.getKey();
                    CuboidFace face = entry.getValue();
 
                    boolean shouldDrawFace = switch (facing.getAxis()) {
                        case X -> drawXFaces;
                        case Y -> drawYFaces;
                        case Z -> drawZFaces;
                    };
                    if (shouldDrawFace) {
                        Material.Baked material = modelBaker.materials().resolveSlot(textures, face.texture(), name);
                        BakedQuad quad = FaceBakery.bakeQuad(
                            modelBaker, from, to, face, material, facing, modelState, element.rotation(), element.shade(), element.lightEmission()
                        );
                        if (face.cullForDirection() == null) {
                            builder.addUnculledFace(quad);
                        } else {
                            builder.addCulledFace(Direction.rotate(modelState.transformation().getMatrix(), face.cullForDirection()), quad);
                        }
                    }
                }
            }
        }
 
        return builder.build();
    }
}

引用的其他类