From 867f14dd0c6c616a1dc4891b18e6e5d9a3fcc19c Mon Sep 17 00:00:00 2001 From: Sollace Date: Thu, 28 Nov 2019 21:02:42 +0200 Subject: [PATCH] Fixed horns and horn glows --- .../model/entity/race/ModelUnicorn.java | 17 ++++++++++++--- .../client/model/part/UnicornHorn.java | 13 +++++++++--- .../client/render/LevitatingItemRenderer.java | 9 ++------ .../client/render/MagicGlow.java | 21 +++++++++++++++++++ 4 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 src/main/java/com/minelittlepony/client/render/MagicGlow.java diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/ModelUnicorn.java b/src/main/java/com/minelittlepony/client/model/entity/race/ModelUnicorn.java index d93a6fbf..5214acfe 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/ModelUnicorn.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/ModelUnicorn.java @@ -1,6 +1,7 @@ package com.minelittlepony.client.model.entity.race; import com.minelittlepony.client.model.part.UnicornHorn; +import com.minelittlepony.model.BodyPart; import com.minelittlepony.model.IUnicorn; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.model.MsonPart; @@ -94,9 +95,19 @@ public class ModelUnicorn extends ModelEarthPony impl if (hasHorn()) { head.rotate(stack); horn.renderPart(stack, vertices, overlayUv, lightUv, red, green, blue, alpha, attributes.interpolatorId); - if (canCast() && isCasting()) { - horn.renderMagic(stack, getMagicColor()); - } + } + } + + @Override + public void render(MatrixStack stack, VertexConsumer vertices, int overlayUv, int lightUv, float red, float green, float blue, float alpha) { + super.render(stack, vertices, overlayUv, lightUv, red, green, blue, alpha); + + if (hasHorn() && canCast() && isCasting()) { + stack.push(); + head.rotate(stack); + transform(BodyPart.HEAD, stack); + horn.renderMagic(stack, vertices, getMagicColor()); + stack.pop(); } } diff --git a/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java b/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java index dbd29eab..089dca3c 100644 --- a/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java +++ b/src/main/java/com/minelittlepony/client/model/part/UnicornHorn.java @@ -4,9 +4,15 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.model.ModelPart; import net.minecraft.client.render.OverlayTexture; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumer; +import net.minecraft.client.render.VertexFormats; +import net.minecraft.client.render.VertexConsumerProvider.Immediate; import net.minecraft.client.util.math.MatrixStack; +import org.lwjgl.opengl.GL11; + +import com.minelittlepony.client.render.MagicGlow; import com.minelittlepony.model.IPart; import com.minelittlepony.mson.api.ModelContext; import com.minelittlepony.mson.api.MsonModel; @@ -36,11 +42,12 @@ public class UnicornHorn implements IPart, MsonModel { } } - public void renderMagic(MatrixStack stack, int tint) { + public void renderMagic(MatrixStack stack, VertexConsumer verts, int tint) { if (visible) { - horn.rotate(stack); + Immediate immediate = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers(); + + VertexConsumer vertices = immediate.getBuffer(MagicGlow.getRenderLayer()); - VertexConsumer vertices = MinecraftClient.getInstance().getBufferBuilders().getEntityVertexConsumers().getBuffer(RenderLayer.getTranslucentNoCrumbling()); glow.render(stack, vertices, OverlayTexture.DEFAULT_UV, 0x0F00F0, Color.r(tint), Color.g(tint), Color.b(tint), 0.4F); } } diff --git a/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java b/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java index 191091f1..4d052eb4 100644 --- a/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/LevitatingItemRenderer.java @@ -23,8 +23,6 @@ import net.minecraft.util.Arm; import net.minecraft.util.UseAction; import net.minecraft.world.World; -import static com.mojang.blaze3d.systems.RenderSystem.*; - public class LevitatingItemRenderer { private static boolean usingTransparency; @@ -61,11 +59,11 @@ public class LevitatingItemRenderer { } private void setColor(int glowColor) { - GL14.glBlendColor(Color.r(glowColor), Color.g(glowColor), Color.b(glowColor), 0.2F); + //GL14.glBlendColor(Color.r(glowColor), Color.g(glowColor), Color.b(glowColor), 0.2F); } private void unsetColor() { - GL14.glBlendColor(255, 255, 255, 1); + //GL14.glBlendColor(255, 255, 255, 1); } /** @@ -87,8 +85,6 @@ public class LevitatingItemRenderer { itemRenderer.method_23177(entity, stack, transform, left, matrix, renderContext, world, lightUv, OverlayTexture.DEFAULT_UV); if (doMagic) { - disableLighting(); - usingTransparency = true; setColor(pony.getMetadata().getGlowColor()); @@ -103,7 +99,6 @@ public class LevitatingItemRenderer { usingTransparency = false; unsetColor(); - enableLighting(); } matrix.pop(); diff --git a/src/main/java/com/minelittlepony/client/render/MagicGlow.java b/src/main/java/com/minelittlepony/client/render/MagicGlow.java new file mode 100644 index 00000000..99b752ff --- /dev/null +++ b/src/main/java/com/minelittlepony/client/render/MagicGlow.java @@ -0,0 +1,21 @@ +package com.minelittlepony.client.render; + +import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.RenderPhase; +import net.minecraft.client.render.VertexFormats; + +public class MagicGlow extends RenderPhase { + + public MagicGlow(String name, Runnable beginAction, Runnable endAction) { + super(name, beginAction, endAction); + } + + public static RenderLayer getRenderLayer() { + return RenderLayer.method_24048("mlp_magic_glow", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, 7, 256, RenderLayer.MultiPhaseData.builder() + .texture(NO_TEXTURE) + .transparency(TRANSLUCENT_TRANSPARENCY) + .lightmap(DISABLE_LIGHTMAP) + .cull(DISABLE_CULLING) + .build(false)); + } +}