149 lines
4.3 KiB
Java
149 lines
4.3 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.EntityRendererProvider.Context;
|
|
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(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 pose,
|
|
VertexConsumer buffer,
|
|
float x1,
|
|
float z1,
|
|
int sectionY,
|
|
float x2,
|
|
float z2,
|
|
float red,
|
|
float green,
|
|
float blue,
|
|
float innerThickness,
|
|
float outerThickness,
|
|
boolean addThicknessLeftSideX,
|
|
boolean addThicknessLeftSideZ,
|
|
boolean addThicknessRightSideX,
|
|
boolean addThicknessRightSideZ
|
|
) {
|
|
buffer.addVertex(
|
|
pose,
|
|
x1 + (addThicknessLeftSideX ? outerThickness : -outerThickness),
|
|
(float)(sectionY * 16),
|
|
z1 + (addThicknessLeftSideZ ? outerThickness : -outerThickness)
|
|
)
|
|
.setColor(red, green, blue, 0.3F);
|
|
buffer.addVertex(
|
|
pose,
|
|
x2 + (addThicknessLeftSideX ? innerThickness : -innerThickness),
|
|
(float)((sectionY + 1) * 16),
|
|
z2 + (addThicknessLeftSideZ ? innerThickness : -innerThickness)
|
|
)
|
|
.setColor(red, green, blue, 0.3F);
|
|
buffer.addVertex(
|
|
pose,
|
|
x2 + (addThicknessRightSideX ? innerThickness : -innerThickness),
|
|
(float)((sectionY + 1) * 16),
|
|
z2 + (addThicknessRightSideZ ? innerThickness : -innerThickness)
|
|
)
|
|
.setColor(red, green, blue, 0.3F);
|
|
buffer.addVertex(
|
|
pose,
|
|
x1 + (addThicknessRightSideX ? outerThickness : -outerThickness),
|
|
(float)(sectionY * 16),
|
|
z1 + (addThicknessRightSideZ ? outerThickness : -outerThickness)
|
|
)
|
|
.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;
|
|
}
|
|
}
|