|
19 | 19 | import mekanism.client.render.armor.ISpecialGear; |
20 | 20 | import mekanism.client.render.armor.MekaSuitArmor; |
21 | 21 | import mekanism.client.render.hud.RadiationOverlay; |
| 22 | +import mekanism.client.render.lib.Quad; |
| 23 | +import mekanism.client.render.lib.QuadUtils; |
22 | 24 | import mekanism.client.render.lib.Vertex; |
23 | 25 | import mekanism.client.render.lib.effect.BoltRenderer; |
24 | 26 | import mekanism.client.render.tileentity.IWireFrameRenderer; |
|
54 | 56 | import net.minecraft.client.renderer.MultiBufferSource; |
55 | 57 | import net.minecraft.client.renderer.RenderType; |
56 | 58 | import net.minecraft.client.renderer.Sheets; |
57 | | -import net.minecraft.client.renderer.block.model.BakedQuad; |
58 | 59 | import net.minecraft.client.renderer.blockentity.BlockEntityRenderer; |
59 | 60 | import net.minecraft.client.renderer.entity.player.PlayerRenderer; |
60 | 61 | import net.minecraft.client.renderer.texture.OverlayTexture; |
@@ -479,19 +480,54 @@ public void onBlockHover(RenderHighlightEvent.Block event) { |
479 | 480 | } |
480 | 481 |
|
481 | 482 | private void renderQuadsWireFrame(BlockState state, VertexConsumer buffer, PoseStack matrix, RandomSource rand, int red, int green, int blue, int alpha) { |
482 | | - //TODO: Eventually we may want to add support for Model data and maybe render type |
483 | | - ModelData modelData = ModelData.EMPTY; |
484 | | - BakedModel bakedModel = Minecraft.getInstance().getBlockRenderer().getBlockModel(state); |
485 | | - for (Direction direction : EnumUtils.DIRECTIONS) { |
486 | | - for (BakedQuad quad : bakedModel.getQuads(state, direction, rand, modelData, null)) { |
487 | | - buffer.putBulkData(matrix.last(), quad, red, green, blue, alpha, 0, OverlayTexture.NO_OVERLAY, false); |
| 483 | + List<Vertex[]> vertices = cachedWireFrames.get(state); |
| 484 | + if (vertices == null) { |
| 485 | + BakedModel bakedModel = Minecraft.getInstance().getBlockRenderer().getBlockModel(state); |
| 486 | + //TODO: Eventually we may want to add support for Model data and maybe render type |
| 487 | + ModelData modelData = ModelData.EMPTY; |
| 488 | + vertices = new ArrayList<>(); |
| 489 | + for (Direction direction : EnumUtils.DIRECTIONS) { |
| 490 | + for (Quad quad : QuadUtils.unpack(bakedModel.getQuads(state, direction, rand, modelData, null))) { |
| 491 | + vertices.add(quad.getVertices()); |
| 492 | + } |
| 493 | + } |
| 494 | + for (Quad quad : QuadUtils.unpack(bakedModel.getQuads(state, null, rand, modelData, null))) { |
| 495 | + vertices.add(quad.getVertices()); |
488 | 496 | } |
| 497 | + cachedWireFrames.put(state, vertices); |
489 | 498 | } |
490 | | - for (BakedQuad quad : bakedModel.getQuads(state, null, rand, modelData, null)) { |
491 | | - buffer.putBulkData(matrix.last(), quad, red, green, blue, alpha, 0, OverlayTexture.NO_OVERLAY, false); |
| 499 | + renderVertexWireFrame(vertices, buffer, matrix.last().pose(), red, green, blue, alpha); |
| 500 | + } |
| 501 | + |
| 502 | + public static void renderVertexWireFrame(List<Vertex[]> allVertices, VertexConsumer buffer, Matrix4f matrix, int red, int green, int blue, int alpha) { |
| 503 | + for (Vertex[] vertices : allVertices) { |
| 504 | + Vector4f vertex = getVertex(matrix, vertices[0]); |
| 505 | + Vector3f normal = vertices[0].getNormal(); |
| 506 | + Vector4f vertex2 = getVertex(matrix, vertices[1]); |
| 507 | + Vector3f normal2 = vertices[1].getNormal(); |
| 508 | + Vector4f vertex3 = getVertex(matrix, vertices[2]); |
| 509 | + Vector3f normal3 = vertices[2].getNormal(); |
| 510 | + Vector4f vertex4 = getVertex(matrix, vertices[3]); |
| 511 | + Vector3f normal4 = vertices[3].getNormal(); |
| 512 | + buffer.vertex(vertex.x(), vertex.y(), vertex.z()).color(red, green, blue, alpha).normal(normal.x(), normal.y(), normal.z()).endVertex(); |
| 513 | + buffer.vertex(vertex2.x(), vertex2.y(), vertex2.z()).color(red, green, blue, alpha).normal(normal2.x(), normal2.y(), normal2.z()).endVertex(); |
| 514 | + |
| 515 | + buffer.vertex(vertex3.x(), vertex3.y(), vertex3.z()).color(red, green, blue, alpha).normal(normal3.x(), normal3.y(), normal3.z()).endVertex(); |
| 516 | + buffer.vertex(vertex4.x(), vertex4.y(), vertex4.z()).color(red, green, blue, alpha).normal(normal4.x(), normal4.y(), normal4.z()).endVertex(); |
| 517 | + |
| 518 | + buffer.vertex(vertex2.x(), vertex2.y(), vertex2.z()).color(red, green, blue, alpha).normal(normal2.x(), normal2.y(), normal2.z()).endVertex(); |
| 519 | + buffer.vertex(vertex3.x(), vertex3.y(), vertex3.z()).color(red, green, blue, alpha).normal(normal3.x(), normal3.y(), normal3.z()).endVertex(); |
| 520 | + |
| 521 | + buffer.vertex(vertex.x(), vertex.y(), vertex.z()).color(red, green, blue, alpha).normal(normal.x(), normal.y(), normal.z()).endVertex(); |
| 522 | + buffer.vertex(vertex4.x(), vertex4.y(), vertex4.z()).color(red, green, blue, alpha).normal(normal4.x(), normal4.y(), normal4.z()).endVertex(); |
492 | 523 | } |
493 | 524 | } |
494 | 525 |
|
| 526 | + private static Vector4f getVertex(Matrix4f matrix4f, Vertex vertex) { |
| 527 | + Vector4f vector4f = new Vector4f((float) vertex.getPos().x(), (float) vertex.getPos().y(), (float) vertex.getPos().z(), 1); |
| 528 | + return vector4f.mul(matrix4f); |
| 529 | + } |
| 530 | + |
495 | 531 | private void renderJetpackSmoke(Level world, Vec3 pos, Vec3 motion) { |
496 | 532 | world.addParticle(MekanismParticleTypes.JETPACK_FLAME.get(), pos.x, pos.y, pos.z, motion.x, motion.y, motion.z); |
497 | 533 | world.addParticle(MekanismParticleTypes.JETPACK_SMOKE.get(), pos.x, pos.y, pos.z, motion.x, motion.y, motion.z); |
|
0 commit comments