This repository has been archived on 2023-11-26. You can view files and clone it, but cannot push or open issues or pull requests.
EnergonRelics/src/main/java/com/thebrokenrail/energonrelics/client/block/entity/render/HolographicSkyBlockEntityRe...

75 lines
3.3 KiB
Java

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);
}
}