package com.thebrokenrail.energonrelics.client.block.entity.render; import com.mojang.blaze3d.systems.RenderSystem; import com.thebrokenrail.energonrelics.EnergonRelics; import com.thebrokenrail.energonrelics.block.HolographicSkyBlock; import com.thebrokenrail.energonrelics.block.entity.HolographicSkyBlockEntity; import com.thebrokenrail.energonrelics.mixin.RenderPhaseAccessor; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.block.entity.BlockEntity; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gl.Framebuffer; import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderPhase; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexFormats; import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.Matrix4f; @Environment(EnvType.CLIENT) public class HolographicSkyBlockEntityRenderer extends HighlightBlockEntityRenderer { @SuppressWarnings("deprecation") private static final RenderPhase.Texturing SKY_TEXTURING = new RenderPhase.Texturing(EnergonRelics.NAMESPACE + ":sky_texturing", () -> { RenderSystem.pushMatrix(); RenderSystem.enableTexture(); WorldWithSky worldWithSky = (WorldWithSky) MinecraftClient.getInstance().worldRenderer; worldWithSky.getSky().beginRead(); RenderSystem.pushMatrix(); RenderSystem.matrixMode(5890); RenderSystem.pushMatrix(); RenderSystem.loadIdentity(); RenderSystem.translatef(0.5F, 0.5F, 0f); RenderSystem.scalef(0.5F, 0.5F, 1f); RenderSystem.mulTextureByProjModelView(); RenderSystem.matrixMode(5888); RenderSystem.setupEndPortalTexGen(); }, () -> { RenderSystem.matrixMode(5890); RenderSystem.popMatrix(); RenderSystem.matrixMode(5888); RenderSystem.clearTexGen(); RenderSystem.popMatrix(); WorldWithSky worldWithSky = (WorldWithSky) MinecraftClient.getInstance().worldRenderer; worldWithSky.getSky().endRead(); RenderSystem.popMatrix(); }); public interface WorldWithSky { Framebuffer getSky(); } public HolographicSkyBlockEntityRenderer(BlockEntityRenderDispatcher dispatcher) { super(dispatcher); } private static RenderLayer getLayer() { return RenderLayer.of(EnergonRelics.NAMESPACE + ":holographic_sky", VertexFormats.POSITION_COLOR, 7, 256, false, false, RenderLayer.MultiPhaseParameters.builder().texturing(SKY_TEXTURING).cull(RenderPhaseAccessor.getENABLE_CULLING()).layering(RenderPhaseAccessor.getVIEW_OFFSET_Z_LAYERING()).build(false)); } private static final RenderLayer LAYER = getLayer(); @Override public void render(BlockEntity entity, float f, MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, int j) { if (entity instanceof HolographicSkyBlockEntity && entity.getCachedState().get(HolographicSkyBlock.POWERED)) { matrixStack.push(); Matrix4f matrix4f = matrixStack.peek().getModel(); renderCuboid(entity, matrixStack, vertexConsumerProvider.getBuffer(LAYER)); matrixStack.pop(); } super.render(entity, f, matrixStack, vertexConsumerProvider, i, j); } }