148 lines
		
	
	
	
		
			4.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
	
		
			4.2 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 renderState, PoseStack poseStack, MultiBufferSource bufferSource, int packedLight) {
 | |
| 		float[] fs = new float[8];
 | |
| 		float[] gs = new float[8];
 | |
| 		float f = 0.0F;
 | |
| 		float g = 0.0F;
 | |
| 		RandomSource randomSource = RandomSource.create(renderState.seed);
 | |
| 
 | |
| 		for (int i = 7; i >= 0; i--) {
 | |
| 			fs[i] = f;
 | |
| 			gs[i] = g;
 | |
| 			f += randomSource.nextInt(11) - 5;
 | |
| 			g += randomSource.nextInt(11) - 5;
 | |
| 		}
 | |
| 
 | |
| 		VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderType.lightning());
 | |
| 		Matrix4f matrix4f = poseStack.last().pose();
 | |
| 
 | |
| 		for (int j = 0; j < 4; j++) {
 | |
| 			RandomSource randomSource2 = RandomSource.create(renderState.seed);
 | |
| 
 | |
| 			for (int k = 0; k < 3; k++) {
 | |
| 				int l = 7;
 | |
| 				int m = 0;
 | |
| 				if (k > 0) {
 | |
| 					l = 7 - k;
 | |
| 				}
 | |
| 
 | |
| 				if (k > 0) {
 | |
| 					m = l - 2;
 | |
| 				}
 | |
| 
 | |
| 				float h = fs[l] - f;
 | |
| 				float n = gs[l] - g;
 | |
| 
 | |
| 				for (int o = l; o >= m; o--) {
 | |
| 					float p = h;
 | |
| 					float q = n;
 | |
| 					if (k == 0) {
 | |
| 						h += randomSource2.nextInt(11) - 5;
 | |
| 						n += randomSource2.nextInt(11) - 5;
 | |
| 					} else {
 | |
| 						h += randomSource2.nextInt(31) - 15;
 | |
| 						n += randomSource2.nextInt(31) - 15;
 | |
| 					}
 | |
| 
 | |
| 					float r = 0.5F;
 | |
| 					float s = 0.45F;
 | |
| 					float t = 0.45F;
 | |
| 					float u = 0.5F;
 | |
| 					float v = 0.1F + j * 0.2F;
 | |
| 					if (k == 0) {
 | |
| 						v *= o * 0.1F + 1.0F;
 | |
| 					}
 | |
| 
 | |
| 					float w = 0.1F + j * 0.2F;
 | |
| 					if (k == 0) {
 | |
| 						w *= (o - 1.0F) * 0.1F + 1.0F;
 | |
| 					}
 | |
| 
 | |
| 					quad(matrix4f, vertexConsumer, h, n, o, p, q, 0.45F, 0.45F, 0.5F, v, w, false, false, true, false);
 | |
| 					quad(matrix4f, vertexConsumer, h, n, o, p, q, 0.45F, 0.45F, 0.5F, v, w, true, false, true, true);
 | |
| 					quad(matrix4f, vertexConsumer, h, n, o, p, q, 0.45F, 0.45F, 0.5F, v, w, true, true, false, true);
 | |
| 					quad(matrix4f, vertexConsumer, h, n, o, p, q, 0.45F, 0.45F, 0.5F, v, w, 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 entity, LightningBoltRenderState reusedState, float partialTick) {
 | |
| 		super.extractRenderState(entity, reusedState, partialTick);
 | |
| 		reusedState.seed = entity.seed;
 | |
| 	}
 | |
| 
 | |
| 	protected boolean affectedByCulling(LightningBolt display) {
 | |
| 		return false;
 | |
| 	}
 | |
| }
 |