From d39c003c2e48e83cc6c98484c9b1ea2a324f1a2c Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 30 Aug 2023 21:33:13 +0100 Subject: [PATCH] Render a damage overlay on the crystal heart --- .../FloatingArtefactEntityRenderer.java | 37 ++++++++++++++----- .../unicopia/client/render/RenderLayers.java | 19 ++++++++++ 2 files changed, 47 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/FloatingArtefactEntityRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/FloatingArtefactEntityRenderer.java index e69c12e9..7fc85c60 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/FloatingArtefactEntityRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/FloatingArtefactEntityRenderer.java @@ -2,18 +2,22 @@ package com.minelittlepony.unicopia.client.render; import com.minelittlepony.unicopia.entity.FloatingArtefactEntity; import com.minelittlepony.unicopia.item.UItems; - +import net.minecraft.client.MinecraftClient; import net.minecraft.client.render.OverlayTexture; +import net.minecraft.client.render.OverlayVertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; +import net.minecraft.client.render.VertexConsumers; import net.minecraft.client.render.entity.EntityRenderer; import net.minecraft.client.render.entity.EntityRendererFactory; import net.minecraft.client.render.item.ItemRenderer; import net.minecraft.client.render.model.BakedModel; +import net.minecraft.client.render.model.ModelLoader; import net.minecraft.client.render.model.json.ModelTransformationMode; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.item.ItemStack; import net.minecraft.screen.PlayerScreenHandler; import net.minecraft.util.Identifier; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RotationAxis; public class FloatingArtefactEntityRenderer extends EntityRenderer { @@ -26,7 +30,7 @@ public class FloatingArtefactEntityRenderer extends EntityRenderer layer.hasCrumbling() ? VertexConsumers.union(destructionOverlay, vertices.getBuffer(layer)) : vertices.getBuffer(layer); + } } diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/RenderLayers.java b/src/main/java/com/minelittlepony/unicopia/client/render/RenderLayers.java index fb9d6cd0..80eeefd4 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/RenderLayers.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/RenderLayers.java @@ -1,5 +1,6 @@ package com.minelittlepony.unicopia.client.render; +import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; @@ -7,8 +8,10 @@ import com.minelittlepony.common.util.Color; import com.mojang.blaze3d.systems.RenderSystem; import net.minecraft.client.render.RenderLayer; +import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexFormat; import net.minecraft.client.render.VertexFormats; +import net.minecraft.client.render.model.ModelLoader; import net.minecraft.util.Identifier; import net.minecraft.util.Util; @@ -16,6 +19,18 @@ public final class RenderLayers extends RenderLayer { private RenderLayers() { super(null, null, null, 0, false, false, null, null); } + private static final List BLOCK_DESTRUCTION_STAGE_LAYERS = ModelLoader.BLOCK_DESTRUCTION_STAGE_TEXTURES.stream().map(texture -> { + RenderPhase.Texture texture2 = new RenderPhase.Texture(texture, false, false); + return (RenderLayer)RenderLayer.of("alpha_crumbling", VertexFormats.POSITION_COLOR_TEXTURE_LIGHT_NORMAL, VertexFormat.DrawMode.QUADS, 256, + MultiPhaseParameters.builder() + .program(CRUMBLING_PROGRAM) + .texture(texture2) + .writeMaskState(COLOR_MASK) + .cull(DISABLE_CULLING) + .depthTest(EQUAL_DEPTH_TEST) + .transparency(CRUMBLING_TRANSPARENCY) + .build(false)); + }).toList(); private static final RenderLayer MAGIC_NO_COLOR = of("magic_no_color", VertexFormats.POSITION_COLOR_TEXTURE_OVERLAY_LIGHT_NORMAL, VertexFormat.DrawMode.QUADS, 256, true, true, MultiPhaseParameters.builder() @@ -52,6 +67,10 @@ public final class RenderLayers extends RenderLayer { .build(false)); }); + public static RenderLayer getCrumbling(int stage) { + return BLOCK_DESTRUCTION_STAGE_LAYERS.get(stage); + } + public static RenderLayer getMagicNoColor() { return MAGIC_NO_COLOR; }