From 15d2d981deabe9aea17fd4d1fbc4b0a0b44f0c6f Mon Sep 17 00:00:00 2001 From: Aleksey Date: Thu, 3 Dec 2020 10:47:31 +0300 Subject: [PATCH] Eteranl pedestal light beam render fix --- .../entities/render/PedestalItemRenderer.java | 8 +-- .../betterend/client/render/BeamRenderer.java | 63 ++++++++++--------- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java b/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java index ea153d3a..5c3bbe50 100644 --- a/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java +++ b/src/main/java/ru/betterend/blocks/entities/render/PedestalItemRenderer.java @@ -5,8 +5,6 @@ import net.fabricmc.api.Environment; import net.minecraft.block.BlockState; import net.minecraft.client.MinecraftClient; -import net.minecraft.client.render.RenderLayer; -import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.render.block.entity.BlockEntityRenderer; @@ -17,7 +15,6 @@ import net.minecraft.client.util.math.Vector3f; import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; import net.minecraft.item.Items; -import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import ru.betterend.blocks.EternalPedestal; @@ -31,7 +28,6 @@ import ru.betterend.registry.EndItems; @Environment(EnvType.CLIENT) public class PedestalItemRenderer extends BlockEntityRenderer { - private static final Identifier BEAM_TEXTURE = new Identifier("textures/entity/end_gateway_beam.png"); public PedestalItemRenderer(BlockEntityRenderDispatcher dispatcher) { super(dispatcher); @@ -63,8 +59,8 @@ public class PedestalItemRenderer extends BlockEn if (state.isOf(EndBlocks.ETERNAL_PEDESTAL) && state.get(EternalPedestal.ACTIVATED)) { float[] colors = EternalCrystalRenderer.colors(age); int y = blockEntity.getPos().getY(); - VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getBeaconBeam(BEAM_TEXTURE, true)); - BeamRenderer.renderLightBeam(matrices, vertexConsumer, age, tickDelta, -y, 1024 - y, colors, 0.25F, 0.15F, 0.18F); + + BeamRenderer.renderLightBeam(matrices, vertexConsumers, age, tickDelta, -y, 1024 - y, colors, 0.25F, 0.13F, 0.16F); float altitude = MathHelper.sin((blockEntity.getAge() + tickDelta) / 10.0F) * 0.1F + 0.1F; matrices.translate(0.0D, altitude, 0.0D); } diff --git a/src/main/java/ru/betterend/client/render/BeamRenderer.java b/src/main/java/ru/betterend/client/render/BeamRenderer.java index acfcc5ab..f8fa4047 100644 --- a/src/main/java/ru/betterend/client/render/BeamRenderer.java +++ b/src/main/java/ru/betterend/client/render/BeamRenderer.java @@ -1,58 +1,59 @@ package ru.betterend.client.render; import net.minecraft.client.render.OverlayTexture; +import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.Vector3f; +import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.Matrix3f; import net.minecraft.util.math.Matrix4f; public class BeamRenderer { - public static void renderLightBeam(MatrixStack matrixStack, VertexConsumer vertexConsumer, int age, float tick, int minY, int maxY, float[] colors, float alpha, float h, float k) { - int m = minY + maxY; - - float delta = maxY < 0 ? tick : -tick; - float p = MathHelper.fractionalPart(delta * 0.2F - (float) MathHelper.floor(delta * 0.1F)); + private static final Identifier BEAM_TEXTURE = new Identifier("textures/entity/end_gateway_beam.png"); + + public static void renderLightBeam(MatrixStack matrices, VertexConsumerProvider vertexConsumers, int age, float tick, int minY, int maxY, float[] colors, float alpha, float beamIn, float beamOut) { float red = colors[0]; float green = colors[1]; float blue = colors[2]; - float af = 0.0F; - float aj = -h; - float ap = p - 1.0F; - float aq = (float) maxY * (0.5F / h) + ap; - + int maxBY = minY + maxY; + float delta = maxY < 0 ? tick : -tick; + float fractDelta = MathHelper.fractionalPart(delta * 0.2F - (float) MathHelper.floor(delta * 0.1F)); + float xIn = -beamIn; + float minV = MathHelper.clamp(fractDelta - 1.0F, 0.0F, 1.0F); + float maxV = (float) maxY * (0.5F / beamIn) + minV; float rotation = (age + tick) / 25.0F + 6.0F; - matrixStack.push(); - matrixStack.push(); - matrixStack.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion(-rotation)); - renderBeam(matrixStack, vertexConsumer, red, green, blue, alpha, minY, m, 0.0F, h, h, 0.0F, aj, 0.0F, 0.0F, aj, 0.0F, 1.0F, aq, ap); - matrixStack.pop(); + VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getBeaconBeam(BEAM_TEXTURE, true)); - af = -k; - aq = (float) maxY + ap; - matrixStack.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion(-rotation)); - renderBeam(matrixStack, vertexConsumer, red, green, blue, alpha, minY, m, af, af, k, af, af, k, k, k, 0.0F, 1.0F, aq, ap); - matrixStack.pop(); + matrices.push(); + matrices.multiply(Vector3f.POSITIVE_Y.getRadialQuaternion(-rotation)); + renderBeam(matrices, vertexConsumer, red, green, blue, alpha, minY, maxBY, beamIn, 0.0F, 0.0F, beamIn, 0.0F, xIn, xIn, 0.0F, 0.0F, 1.0F, minV, maxV); + + float xOut = -beamOut; + maxV = (float) maxY + minV; + renderBeam(matrices, vertexConsumer, red, green, blue, alpha, minY, maxBY, xOut, xOut, beamOut, xOut, xOut, beamOut, beamOut, beamOut, 0.0F, 1.0F, minV, maxV); + matrices.pop(); } - private static void renderBeam(MatrixStack matrixStack, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, int j, int k, float l, float m, float n, float o, float p, float q, float r, float s, float t, float u, float v, float w) { - MatrixStack.Entry entry = matrixStack.peek(); + private static void renderBeam(MatrixStack matrices, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, int minY, int maxY, float x1, float d1, float x2, float d2, float x3, float d3, float x4, float d4, float minU, float maxU, float minV, float maxV) { + MatrixStack.Entry entry = matrices.peek(); Matrix4f matrix4f = entry.getModel(); Matrix3f matrix3f = entry.getNormal(); - renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, k, l, m, n, o, t, u, v, w); - renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, k, r, s, p, q, t, u, v, w); - renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, k, n, o, r, s, t, u, v, w); - renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, j, k, p, q, l, m, t, u, v, w); + renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxY, minY, x1, d1, x2, d2, minU, maxU, minV, maxV); + renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxY, minY, x4, d4, x3, d3, minU, maxU, minV, maxV); + renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxY, minY, x2, d2, x4, d4, minU, maxU, minV, maxV); + renderBeam(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxY, minY, x3, d3, x1, d1, minU, maxU, minV, maxV); } - private static void renderBeam(Matrix4f matrix4f, Matrix3f matrix3f, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, int maxY, int minY, float maxX, float m, float minX, float o, float minU, float maxU, float minV, float maxV) { - addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxX, minY, m, maxU, minV); - addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxX, maxY, m, maxU, maxV); - addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, minX, maxY, o, minU, maxV); - addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, minX, minY, o, minU, minV); + private static void renderBeam(Matrix4f matrix4f, Matrix3f matrix3f, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, int minY, int maxY, float minX, float minD, float maxX, float maxD, float minU, float maxU, float minV, float maxV) { + addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxX, minY, maxD, maxU, minV); + addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, maxX, maxY, maxD, maxU, maxV); + addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, minX, maxY, minD, minU, maxV); + addVertex(matrix4f, matrix3f, vertexConsumer, red, green, blue, alpha, minX, minY, minD, minU, minV); } private static void addVertex(Matrix4f matrix4f, Matrix3f matrix3f, VertexConsumer vertexConsumer, float red, float green, float blue, float alpha, float x, float y, float d, float u, float v) {