222 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			222 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package net.minecraft.client.renderer;
 | |
| 
 | |
| 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.core.Direction;
 | |
| import net.minecraft.world.phys.AABB;
 | |
| import net.minecraft.world.phys.Vec3;
 | |
| import net.minecraft.world.phys.shapes.VoxelShape;
 | |
| import org.joml.Matrix4f;
 | |
| import org.joml.Vector3f;
 | |
| 
 | |
| @Environment(EnvType.CLIENT)
 | |
| public class ShapeRenderer {
 | |
| 	public static void renderShape(PoseStack poseStack, VertexConsumer buffer, VoxelShape shape, double x, double y, double z, int color) {
 | |
| 		PoseStack.Pose pose = poseStack.last();
 | |
| 		shape.forAllEdges((g, h, j, k, l, m) -> {
 | |
| 			Vector3f vector3f = new Vector3f((float)(k - g), (float)(l - h), (float)(m - j)).normalize();
 | |
| 			buffer.addVertex(pose, (float)(g + x), (float)(h + y), (float)(j + z)).setColor(color).setNormal(pose, vector3f);
 | |
| 			buffer.addVertex(pose, (float)(k + x), (float)(l + y), (float)(m + z)).setColor(color).setNormal(pose, vector3f);
 | |
| 		});
 | |
| 	}
 | |
| 
 | |
| 	public static void renderLineBox(PoseStack poseStack, VertexConsumer buffer, AABB box, float red, float green, float blue, float alpha) {
 | |
| 		renderLineBox(poseStack, buffer, box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ, red, green, blue, alpha, red, green, blue);
 | |
| 	}
 | |
| 
 | |
| 	public static void renderLineBox(
 | |
| 		PoseStack poseStack,
 | |
| 		VertexConsumer buffer,
 | |
| 		double minX,
 | |
| 		double minY,
 | |
| 		double minZ,
 | |
| 		double maxX,
 | |
| 		double maxY,
 | |
| 		double maxZ,
 | |
| 		float red,
 | |
| 		float green,
 | |
| 		float blue,
 | |
| 		float alpha
 | |
| 	) {
 | |
| 		renderLineBox(poseStack, buffer, minX, minY, minZ, maxX, maxY, maxZ, red, green, blue, alpha, red, green, blue);
 | |
| 	}
 | |
| 
 | |
| 	public static void renderLineBox(
 | |
| 		PoseStack poseStack,
 | |
| 		VertexConsumer buffer,
 | |
| 		double minX,
 | |
| 		double minY,
 | |
| 		double minZ,
 | |
| 		double maxX,
 | |
| 		double maxY,
 | |
| 		double maxZ,
 | |
| 		float red,
 | |
| 		float green,
 | |
| 		float blue,
 | |
| 		float alpha,
 | |
| 		float red2,
 | |
| 		float green2,
 | |
| 		float blue2
 | |
| 	) {
 | |
| 		PoseStack.Pose pose = poseStack.last();
 | |
| 		float f = (float)minX;
 | |
| 		float g = (float)minY;
 | |
| 		float h = (float)minZ;
 | |
| 		float i = (float)maxX;
 | |
| 		float j = (float)maxY;
 | |
| 		float k = (float)maxZ;
 | |
| 		buffer.addVertex(pose, f, g, h).setColor(red, green2, blue2, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, g, h).setColor(red, green2, blue2, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, f, g, h).setColor(red2, green, blue2, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, f, j, h).setColor(red2, green, blue2, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, f, g, h).setColor(red2, green2, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
 | |
| 		buffer.addVertex(pose, f, g, k).setColor(red2, green2, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
 | |
| 		buffer.addVertex(pose, i, g, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, j, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, j, h).setColor(red, green, blue, alpha).setNormal(pose, -1.0F, 0.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, f, j, h).setColor(red, green, blue, alpha).setNormal(pose, -1.0F, 0.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, f, j, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
 | |
| 		buffer.addVertex(pose, f, j, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
 | |
| 		buffer.addVertex(pose, f, j, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, -1.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, f, g, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, -1.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, f, g, k).setColor(red, green, blue, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, g, k).setColor(red, green, blue, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, g, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, -1.0F);
 | |
| 		buffer.addVertex(pose, i, g, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, -1.0F);
 | |
| 		buffer.addVertex(pose, f, j, k).setColor(red, green, blue, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, j, k).setColor(red, green, blue, alpha).setNormal(pose, 1.0F, 0.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, g, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, j, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 1.0F, 0.0F);
 | |
| 		buffer.addVertex(pose, i, j, h).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
 | |
| 		buffer.addVertex(pose, i, j, k).setColor(red, green, blue, alpha).setNormal(pose, 0.0F, 0.0F, 1.0F);
 | |
| 	}
 | |
| 
 | |
| 	public static void addChainedFilledBoxVertices(
 | |
| 		PoseStack poseStack,
 | |
| 		VertexConsumer buffer,
 | |
| 		double minX,
 | |
| 		double minY,
 | |
| 		double minZ,
 | |
| 		double maxX,
 | |
| 		double maxY,
 | |
| 		double maxZ,
 | |
| 		float red,
 | |
| 		float green,
 | |
| 		float blue,
 | |
| 		float alpha
 | |
| 	) {
 | |
| 		addChainedFilledBoxVertices(poseStack, buffer, (float)minX, (float)minY, (float)minZ, (float)maxX, (float)maxY, (float)maxZ, red, green, blue, alpha);
 | |
| 	}
 | |
| 
 | |
| 	public static void addChainedFilledBoxVertices(
 | |
| 		PoseStack poseStack,
 | |
| 		VertexConsumer buffer,
 | |
| 		float minX,
 | |
| 		float minY,
 | |
| 		float minZ,
 | |
| 		float maxX,
 | |
| 		float maxY,
 | |
| 		float maxZ,
 | |
| 		float red,
 | |
| 		float green,
 | |
| 		float blue,
 | |
| 		float alpha
 | |
| 	) {
 | |
| 		Matrix4f matrix4f = poseStack.last().pose();
 | |
| 		buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, minY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, maxY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, maxY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, maxY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, minY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, minY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, minY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, minY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, maxY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, maxY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, minY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, maxY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, minY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, minY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, minY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, minY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, minY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, maxY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, maxY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, minX, maxY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, maxY, minZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
 | |
| 		buffer.addVertex(matrix4f, maxX, maxY, maxZ).setColor(red, green, blue, alpha);
 | |
| 	}
 | |
| 
 | |
| 	public static void renderFace(
 | |
| 		PoseStack poseStack,
 | |
| 		VertexConsumer buffer,
 | |
| 		Direction face,
 | |
| 		float x1,
 | |
| 		float y1,
 | |
| 		float z1,
 | |
| 		float x2,
 | |
| 		float y2,
 | |
| 		float z2,
 | |
| 		float red,
 | |
| 		float green,
 | |
| 		float blue,
 | |
| 		float alpha
 | |
| 	) {
 | |
| 		Matrix4f matrix4f = poseStack.last().pose();
 | |
| 		switch (face) {
 | |
| 			case DOWN:
 | |
| 				buffer.addVertex(matrix4f, x1, y1, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y1, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y1, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x1, y1, z2).setColor(red, green, blue, alpha);
 | |
| 				break;
 | |
| 			case UP:
 | |
| 				buffer.addVertex(matrix4f, x1, y2, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x1, y2, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y2, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y2, z1).setColor(red, green, blue, alpha);
 | |
| 				break;
 | |
| 			case NORTH:
 | |
| 				buffer.addVertex(matrix4f, x1, y1, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x1, y2, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y2, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y1, z1).setColor(red, green, blue, alpha);
 | |
| 				break;
 | |
| 			case SOUTH:
 | |
| 				buffer.addVertex(matrix4f, x1, y1, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y1, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y2, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x1, y2, z2).setColor(red, green, blue, alpha);
 | |
| 				break;
 | |
| 			case WEST:
 | |
| 				buffer.addVertex(matrix4f, x1, y1, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x1, y1, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x1, y2, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x1, y2, z1).setColor(red, green, blue, alpha);
 | |
| 				break;
 | |
| 			case EAST:
 | |
| 				buffer.addVertex(matrix4f, x2, y1, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y2, z1).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y2, z2).setColor(red, green, blue, alpha);
 | |
| 				buffer.addVertex(matrix4f, x2, y1, z2).setColor(red, green, blue, alpha);
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	public static void renderVector(PoseStack poseStack, VertexConsumer buffer, Vector3f startPos, Vec3 vector, int color) {
 | |
| 		PoseStack.Pose pose = poseStack.last();
 | |
| 		buffer.addVertex(pose, startPos).setColor(color).setNormal(pose, (float)vector.x, (float)vector.y, (float)vector.z);
 | |
| 		buffer.addVertex(pose, (float)(startPos.x() + vector.x), (float)(startPos.y() + vector.y), (float)(startPos.z() + vector.z))
 | |
| 			.setColor(color)
 | |
| 			.setNormal(pose, (float)vector.x, (float)vector.y, (float)vector.z);
 | |
| 	}
 | |
| }
 |