LightningBoltRenderer.java

net.minecraft.client.renderer.entity.LightningBoltRenderer

信息

  • 全限定名:net.minecraft.client.renderer.entity.LightningBoltRenderer
  • 类型:public class
  • 包:net.minecraft.client.renderer.entity
  • 源码路径:src/main/java/net/minecraft/client/renderer/entity/LightningBoltRenderer.java
  • 起始行号:L16
  • 继承:EntityRenderer<LightningBolt,LightningBoltRenderState>
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

public LightningBoltRenderer(EntityRendererProvider.Context context) @ L17

  • 构造器名:LightningBoltRenderer
  • 源码定位:L17
  • 修饰符:public

参数:

  • context: EntityRendererProvider.Context

说明:

TODO

方法

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

public void submit(LightningBoltRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) @ L21

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

参数:

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

说明:

TODO

private static void quad(Matrix4fc pose, VertexConsumer buffer, float xo0, float zo0, int h, float xo1, float zo1, float boltRed, float boltGreen, float boltBlue, float rr1, float rr2, boolean px1, boolean pz1, boolean px2, boolean pz2) @ L92

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

参数:

  • pose: Matrix4fc
  • buffer: VertexConsumer
  • xo0: float
  • zo0: float
  • h: int
  • xo1: float
  • zo1: float
  • boltRed: float
  • boltGreen: float
  • boltBlue: float
  • rr1: float
  • rr2: float
  • px1: boolean
  • pz1: boolean
  • px2: boolean
  • pz2: boolean

说明:

TODO

public LightningBoltRenderState createRenderState() @ L116

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

参数:

说明:

TODO

public void extractRenderState(LightningBolt entity, LightningBoltRenderState state, float partialTicks) @ L120

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

参数:

  • entity: LightningBolt
  • state: LightningBoltRenderState
  • partialTicks: float

说明:

TODO

protected boolean affectedByCulling(LightningBolt entity) @ L125

  • 方法名:affectedByCulling
  • 源码定位:L125
  • 返回类型:boolean
  • 修饰符:protected

参数:

  • entity: LightningBolt

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class LightningBoltRenderer extends EntityRenderer<LightningBolt, LightningBoltRenderState> {
    public LightningBoltRenderer(EntityRendererProvider.Context context) {
        super(context);
    }
 
    public void submit(LightningBoltRenderState state, PoseStack poseStack, SubmitNodeCollector submitNodeCollector, CameraRenderState camera) {
        float[] xOffs = new float[8];
        float[] zOffs = new float[8];
        float xOff = 0.0F;
        float zOff = 0.0F;
        RandomSource random = RandomSource.createThreadLocalInstance(state.seed);
 
        for (int h = 7; h >= 0; h--) {
            xOffs[h] = xOff;
            zOffs[h] = zOff;
            xOff += random.nextInt(11) - 5;
            zOff += random.nextInt(11) - 5;
        }
 
        float finalXOff = xOff;
        float finalZOff = zOff;
        submitNodeCollector.submitCustomGeometry(poseStack, RenderTypes.lightning(), (pose, buffer) -> {
            Matrix4fc poseMatrix = pose.pose();
 
            for (int r = 0; r < 4; r++) {
                RandomSource randomx = RandomSource.createThreadLocalInstance(state.seed);
 
                for (int p = 0; p < 3; p++) {
                    int hs = 7;
                    int ht = 0;
                    if (p > 0) {
                        hs = 7 - p;
                    }
 
                    if (p > 0) {
                        ht = hs - 2;
                    }
 
                    float xo0 = xOffs[hs] - finalXOff;
                    float zo0 = zOffs[hs] - finalZOff;
 
                    for (int h = hs; h >= ht; h--) {
                        float xo1 = xo0;
                        float zo1 = zo0;
                        if (p == 0) {
                            xo0 += randomx.nextInt(11) - 5;
                            zo0 += randomx.nextInt(11) - 5;
                        } else {
                            xo0 += randomx.nextInt(31) - 15;
                            zo0 += randomx.nextInt(31) - 15;
                        }
 
                        float br = 0.5F;
                        float boltRed = 0.45F;
                        float boltGreen = 0.45F;
                        float boltBlue = 0.5F;
                        float rr1 = 0.1F + r * 0.2F;
                        if (p == 0) {
                            rr1 *= h * 0.1F + 1.0F;
                        }
 
                        float rr2 = 0.1F + r * 0.2F;
                        if (p == 0) {
                            rr2 *= (h - 1.0F) * 0.1F + 1.0F;
                        }
 
                        quad(poseMatrix, buffer, xo0, zo0, h, xo1, zo1, 0.45F, 0.45F, 0.5F, rr1, rr2, false, false, true, false);
                        quad(poseMatrix, buffer, xo0, zo0, h, xo1, zo1, 0.45F, 0.45F, 0.5F, rr1, rr2, true, false, true, true);
                        quad(poseMatrix, buffer, xo0, zo0, h, xo1, zo1, 0.45F, 0.45F, 0.5F, rr1, rr2, true, true, false, true);
                        quad(poseMatrix, buffer, xo0, zo0, h, xo1, zo1, 0.45F, 0.45F, 0.5F, rr1, rr2, false, true, false, false);
                    }
                }
            }
        });
    }
 
    private static void quad(
        Matrix4fc pose,
        VertexConsumer buffer,
        float xo0,
        float zo0,
        int h,
        float xo1,
        float zo1,
        float boltRed,
        float boltGreen,
        float boltBlue,
        float rr1,
        float rr2,
        boolean px1,
        boolean pz1,
        boolean px2,
        boolean pz2
    ) {
        buffer.addVertex(pose, xo0 + (px1 ? rr2 : -rr2), (float)(h * 16), zo0 + (pz1 ? rr2 : -rr2)).setColor(boltRed, boltGreen, boltBlue, 0.3F);
        buffer.addVertex(pose, xo1 + (px1 ? rr1 : -rr1), (float)((h + 1) * 16), zo1 + (pz1 ? rr1 : -rr1)).setColor(boltRed, boltGreen, boltBlue, 0.3F);
        buffer.addVertex(pose, xo1 + (px2 ? rr1 : -rr1), (float)((h + 1) * 16), zo1 + (pz2 ? rr1 : -rr1)).setColor(boltRed, boltGreen, boltBlue, 0.3F);
        buffer.addVertex(pose, xo0 + (px2 ? rr2 : -rr2), (float)(h * 16), zo0 + (pz2 ? rr2 : -rr2)).setColor(boltRed, boltGreen, boltBlue, 0.3F);
    }
 
    public LightningBoltRenderState createRenderState() {
        return new LightningBoltRenderState();
    }
 
    public void extractRenderState(LightningBolt entity, LightningBoltRenderState state, float partialTicks) {
        super.extractRenderState(entity, state, partialTicks);
        state.seed = entity.seed;
    }
 
    protected boolean affectedByCulling(LightningBolt entity) {
        return false;
    }
}

引用的其他类