2020-07-26 16:14:51 +00:00
|
|
|
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;
|
2020-07-31 22:53:51 +00:00
|
|
|
import com.thebrokenrail.energonrelics.mixin.RenderPhaseAccessor;
|
2020-07-26 16:14:51 +00:00
|
|
|
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")
|
2020-07-31 22:53:51 +00:00
|
|
|
private static final RenderPhase.Texturing SKY_TEXTURING = new RenderPhase.Texturing(EnergonRelics.NAMESPACE + ":sky_texturing", () -> {
|
2020-07-26 16:14:51 +00:00
|
|
|
RenderSystem.pushMatrix();
|
|
|
|
RenderSystem.enableTexture();
|
|
|
|
WorldWithSky worldWithSky = (WorldWithSky) MinecraftClient.getInstance().worldRenderer;
|
|
|
|
worldWithSky.getSky().beginRead();
|
2020-07-31 22:53:51 +00:00
|
|
|
|
2020-07-26 16:14:51 +00:00
|
|
|
RenderSystem.pushMatrix();
|
|
|
|
RenderSystem.matrixMode(5890);
|
|
|
|
RenderSystem.pushMatrix();
|
|
|
|
RenderSystem.loadIdentity();
|
2020-07-31 22:53:51 +00:00
|
|
|
RenderSystem.translatef(0.5F, 0.5F, 0f);
|
|
|
|
RenderSystem.scalef(0.5F, 0.5F, 1f);
|
2020-07-26 16:14:51 +00:00
|
|
|
RenderSystem.mulTextureByProjModelView();
|
|
|
|
RenderSystem.matrixMode(5888);
|
|
|
|
RenderSystem.setupEndPortalTexGen();
|
|
|
|
}, () -> {
|
|
|
|
RenderSystem.matrixMode(5890);
|
|
|
|
RenderSystem.popMatrix();
|
|
|
|
RenderSystem.matrixMode(5888);
|
|
|
|
RenderSystem.clearTexGen();
|
|
|
|
RenderSystem.popMatrix();
|
2020-07-31 22:53:51 +00:00
|
|
|
|
|
|
|
WorldWithSky worldWithSky = (WorldWithSky) MinecraftClient.getInstance().worldRenderer;
|
|
|
|
worldWithSky.getSky().endRead();
|
|
|
|
RenderSystem.popMatrix();
|
2020-07-26 16:14:51 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
public interface WorldWithSky {
|
|
|
|
Framebuffer getSky();
|
|
|
|
}
|
|
|
|
|
|
|
|
public HolographicSkyBlockEntityRenderer(BlockEntityRenderDispatcher dispatcher) {
|
|
|
|
super(dispatcher);
|
|
|
|
}
|
|
|
|
|
|
|
|
private static RenderLayer getLayer() {
|
2020-07-31 22:53:51 +00:00
|
|
|
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));
|
2020-07-26 16:14:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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();
|
2020-08-20 20:02:09 +00:00
|
|
|
renderCuboid(entity, matrixStack, vertexConsumerProvider.getBuffer(LAYER));
|
2020-07-26 16:14:51 +00:00
|
|
|
matrixStack.pop();
|
|
|
|
}
|
|
|
|
super.render(entity, f, matrixStack, vertexConsumerProvider, i, j);
|
|
|
|
}
|
|
|
|
}
|