124 lines
3.8 KiB
Java
124 lines
3.8 KiB
Java
package net.minecraft.client.renderer.entity;
|
|
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
|
import com.mojang.blaze3d.vertex.VertexConsumer;
|
|
import net.fabricmc.api.EnvType;
|
|
import net.fabricmc.api.Environment;
|
|
import net.minecraft.client.renderer.MultiBufferSource;
|
|
import net.minecraft.client.renderer.RenderType;
|
|
import net.minecraft.client.renderer.entity.state.LightningBoltRenderState;
|
|
import net.minecraft.util.RandomSource;
|
|
import net.minecraft.world.entity.LightningBolt;
|
|
import org.joml.Matrix4f;
|
|
|
|
@Environment(EnvType.CLIENT)
|
|
public class LightningBoltRenderer extends EntityRenderer<LightningBolt, LightningBoltRenderState> {
|
|
public LightningBoltRenderer(EntityRendererProvider.Context context) {
|
|
super(context);
|
|
}
|
|
|
|
public void render(LightningBoltRenderState lightningBoltRenderState, PoseStack poseStack, MultiBufferSource multiBufferSource, int i) {
|
|
float[] fs = new float[8];
|
|
float[] gs = new float[8];
|
|
float f = 0.0F;
|
|
float g = 0.0F;
|
|
RandomSource randomSource = RandomSource.create(lightningBoltRenderState.seed);
|
|
|
|
for (int j = 7; j >= 0; j--) {
|
|
fs[j] = f;
|
|
gs[j] = g;
|
|
f += randomSource.nextInt(11) - 5;
|
|
g += randomSource.nextInt(11) - 5;
|
|
}
|
|
|
|
VertexConsumer vertexConsumer = multiBufferSource.getBuffer(RenderType.lightning());
|
|
Matrix4f matrix4f = poseStack.last().pose();
|
|
|
|
for (int k = 0; k < 4; k++) {
|
|
RandomSource randomSource2 = RandomSource.create(lightningBoltRenderState.seed);
|
|
|
|
for (int l = 0; l < 3; l++) {
|
|
int m = 7;
|
|
int n = 0;
|
|
if (l > 0) {
|
|
m = 7 - l;
|
|
}
|
|
|
|
if (l > 0) {
|
|
n = m - 2;
|
|
}
|
|
|
|
float h = fs[m] - f;
|
|
float o = gs[m] - g;
|
|
|
|
for (int p = m; p >= n; p--) {
|
|
float q = h;
|
|
float r = o;
|
|
if (l == 0) {
|
|
h += randomSource2.nextInt(11) - 5;
|
|
o += randomSource2.nextInt(11) - 5;
|
|
} else {
|
|
h += randomSource2.nextInt(31) - 15;
|
|
o += randomSource2.nextInt(31) - 15;
|
|
}
|
|
|
|
float s = 0.5F;
|
|
float t = 0.45F;
|
|
float u = 0.45F;
|
|
float v = 0.5F;
|
|
float w = 0.1F + k * 0.2F;
|
|
if (l == 0) {
|
|
w *= p * 0.1F + 1.0F;
|
|
}
|
|
|
|
float x = 0.1F + k * 0.2F;
|
|
if (l == 0) {
|
|
x *= (p - 1.0F) * 0.1F + 1.0F;
|
|
}
|
|
|
|
quad(matrix4f, vertexConsumer, h, o, p, q, r, 0.45F, 0.45F, 0.5F, w, x, false, false, true, false);
|
|
quad(matrix4f, vertexConsumer, h, o, p, q, r, 0.45F, 0.45F, 0.5F, w, x, true, false, true, true);
|
|
quad(matrix4f, vertexConsumer, h, o, p, q, r, 0.45F, 0.45F, 0.5F, w, x, true, true, false, true);
|
|
quad(matrix4f, vertexConsumer, h, o, p, q, r, 0.45F, 0.45F, 0.5F, w, x, false, true, false, false);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void quad(
|
|
Matrix4f matrix,
|
|
VertexConsumer consumer,
|
|
float x1,
|
|
float z1,
|
|
int index,
|
|
float x2,
|
|
float z2,
|
|
float red,
|
|
float green,
|
|
float blue,
|
|
float f,
|
|
float g,
|
|
boolean bl,
|
|
boolean bl2,
|
|
boolean bl3,
|
|
boolean bl4
|
|
) {
|
|
consumer.addVertex(matrix, x1 + (bl ? g : -g), (float)(index * 16), z1 + (bl2 ? g : -g)).setColor(red, green, blue, 0.3F);
|
|
consumer.addVertex(matrix, x2 + (bl ? f : -f), (float)((index + 1) * 16), z2 + (bl2 ? f : -f)).setColor(red, green, blue, 0.3F);
|
|
consumer.addVertex(matrix, x2 + (bl3 ? f : -f), (float)((index + 1) * 16), z2 + (bl4 ? f : -f)).setColor(red, green, blue, 0.3F);
|
|
consumer.addVertex(matrix, x1 + (bl3 ? g : -g), (float)(index * 16), z1 + (bl4 ? g : -g)).setColor(red, green, blue, 0.3F);
|
|
}
|
|
|
|
public LightningBoltRenderState createRenderState() {
|
|
return new LightningBoltRenderState();
|
|
}
|
|
|
|
public void extractRenderState(LightningBolt lightningBolt, LightningBoltRenderState lightningBoltRenderState, float f) {
|
|
super.extractRenderState(lightningBolt, lightningBoltRenderState, f);
|
|
lightningBoltRenderState.seed = lightningBolt.seed;
|
|
}
|
|
|
|
protected boolean affectedByCulling(LightningBolt lightningBolt) {
|
|
return false;
|
|
}
|
|
}
|