VertexMultiConsumer.java

com.mojang.blaze3d.vertex.VertexMultiConsumer

信息

  • 全限定名:com.mojang.blaze3d.vertex.VertexMultiConsumer
  • 类型:public class
  • 包:com.mojang.blaze3d.vertex
  • 源码路径:src/main/java/com/mojang/blaze3d/vertex/VertexMultiConsumer.java
  • 起始行号:L8
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

  • com.mojang.blaze3d.vertex.VertexMultiConsumer.Double

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

      TODO

  • com.mojang.blaze3d.vertex.VertexMultiConsumer.Multiple

    • 类型: record
    • 修饰符: private
    • 源码定位: L103
    • 说明:

      TODO

构造器

方法

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

public static VertexConsumer create() @ L9

  • 方法名:create
  • 源码定位:L9
  • 返回类型:VertexConsumer
  • 修饰符:public static

参数:

说明:

TODO

public static VertexConsumer create(VertexConsumer consumer) @ L13

  • 方法名:create
  • 源码定位:L13
  • 返回类型:VertexConsumer
  • 修饰符:public static

参数:

  • consumer: VertexConsumer

说明:

TODO

public static VertexConsumer create(VertexConsumer first, VertexConsumer second) @ L17

  • 方法名:create
  • 源码定位:L17
  • 返回类型:VertexConsumer
  • 修饰符:public static

参数:

  • first: VertexConsumer
  • second: VertexConsumer

说明:

TODO

public static VertexConsumer create(VertexConsumer... consumers) @ L21

  • 方法名:create
  • 源码定位:L21
  • 返回类型:VertexConsumer
  • 修饰符:public static

参数:

  • consumers: VertexConsumer…

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class VertexMultiConsumer {
    public static VertexConsumer create() {
        throw new IllegalArgumentException();
    }
 
    public static VertexConsumer create(VertexConsumer consumer) {
        return consumer;
    }
 
    public static VertexConsumer create(VertexConsumer first, VertexConsumer second) {
        return new VertexMultiConsumer.Double(first, second);
    }
 
    public static VertexConsumer create(VertexConsumer... consumers) {
        return new VertexMultiConsumer.Multiple(consumers);
    }
 
    @OnlyIn(Dist.CLIENT)
    private static class Double implements VertexConsumer {
        private final VertexConsumer first;
        private final VertexConsumer second;
 
        public Double(VertexConsumer first, VertexConsumer second) {
            if (first == second) {
                throw new IllegalArgumentException("Duplicate delegates");
            } else {
                this.first = first;
                this.second = second;
            }
        }
 
        @Override
        public VertexConsumer addVertex(float x, float y, float z) {
            this.first.addVertex(x, y, z);
            this.second.addVertex(x, y, z);
            return this;
        }
 
        @Override
        public VertexConsumer setColor(int r, int g, int b, int a) {
            this.first.setColor(r, g, b, a);
            this.second.setColor(r, g, b, a);
            return this;
        }
 
        @Override
        public VertexConsumer setColor(int color) {
            this.first.setColor(color);
            this.second.setColor(color);
            return this;
        }
 
        @Override
        public VertexConsumer setUv(float u, float v) {
            this.first.setUv(u, v);
            this.second.setUv(u, v);
            return this;
        }
 
        @Override
        public VertexConsumer setUv1(int u, int v) {
            this.first.setUv1(u, v);
            this.second.setUv1(u, v);
            return this;
        }
 
        @Override
        public VertexConsumer setUv2(int u, int v) {
            this.first.setUv2(u, v);
            this.second.setUv2(u, v);
            return this;
        }
 
        @Override
        public VertexConsumer setNormal(float x, float y, float z) {
            this.first.setNormal(x, y, z);
            this.second.setNormal(x, y, z);
            return this;
        }
 
        @Override
        public VertexConsumer setLineWidth(float width) {
            this.first.setLineWidth(width);
            this.second.setLineWidth(width);
            return this;
        }
 
        @Override
        public void addVertex(float x, float y, float z, int color, float u, float v, int overlayCoords, int lightCoords, float nx, float ny, float nz) {
            this.first.addVertex(x, y, z, color, u, v, overlayCoords, lightCoords, nx, ny, nz);
            this.second.addVertex(x, y, z, color, u, v, overlayCoords, lightCoords, nx, ny, nz);
        }
    }
 
    @OnlyIn(Dist.CLIENT)
    private record Multiple(VertexConsumer[] delegates) implements VertexConsumer {
        private Multiple(VertexConsumer[] delegates) {
            for (int i = 0; i < delegates.length; i++) {
                for (int j = i + 1; j < delegates.length; j++) {
                    if (delegates[i] == delegates[j]) {
                        throw new IllegalArgumentException("Duplicate delegates");
                    }
                }
            }
 
            this.delegates = delegates;
        }
 
        private void forEach(Consumer<VertexConsumer> out) {
            for (VertexConsumer delegate : this.delegates) {
                out.accept(delegate);
            }
        }
 
        @Override
        public VertexConsumer addVertex(float x, float y, float z) {
            this.forEach(d -> d.addVertex(x, y, z));
            return this;
        }
 
        @Override
        public VertexConsumer setColor(int r, int g, int b, int a) {
            this.forEach(d -> d.setColor(r, g, b, a));
            return this;
        }
 
        @Override
        public VertexConsumer setColor(int color) {
            this.forEach(d -> d.setColor(color));
            return this;
        }
 
        @Override
        public VertexConsumer setUv(float u, float v) {
            this.forEach(d -> d.setUv(u, v));
            return this;
        }
 
        @Override
        public VertexConsumer setUv1(int u, int v) {
            this.forEach(d -> d.setUv1(u, v));
            return this;
        }
 
        @Override
        public VertexConsumer setUv2(int u, int v) {
            this.forEach(d -> d.setUv2(u, v));
            return this;
        }
 
        @Override
        public VertexConsumer setNormal(float x, float y, float z) {
            this.forEach(d -> d.setNormal(x, y, z));
            return this;
        }
 
        @Override
        public VertexConsumer setLineWidth(float width) {
            this.forEach(d -> d.setLineWidth(width));
            return this;
        }
 
        @Override
        public void addVertex(float x, float y, float z, int color, float u, float v, int overlayCoords, int lightCoords, float nx, float ny, float nz) {
            this.forEach(d -> d.addVertex(x, y, z, color, u, v, overlayCoords, lightCoords, nx, ny, nz));
        }
    }
}

引用的其他类