TheBrokenRail
45e7a86674
All checks were successful
EnergonRelics/pipeline/head This commit looks good
95 lines
4.8 KiB
Java
95 lines
4.8 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.VertexConsumer;
|
|
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.Direction;
|
|
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();
|
|
renderLayer((HolographicSkyBlockEntity) entity, matrix4f, vertexConsumerProvider.getBuffer(LAYER));
|
|
matrixStack.pop();
|
|
}
|
|
super.render(entity, f, matrixStack, vertexConsumerProvider, i, j);
|
|
}
|
|
|
|
private void renderLayer(HolographicSkyBlockEntity entity, Matrix4f matrix4f, VertexConsumer vertexConsumer) {
|
|
renderSide(entity, matrix4f, vertexConsumer, 0f, 1f, 0f, 1f, 1f, 1f, 1f, 1f, Direction.SOUTH);
|
|
renderSide(entity, matrix4f, vertexConsumer, 0f, 1f, 1f, 0f, 0f, 0f, 0f, 0f, Direction.NORTH);
|
|
renderSide(entity, matrix4f, vertexConsumer, 1f, 1f, 1f, 0f, 0f, 1f, 1f, 0f, Direction.EAST);
|
|
renderSide(entity, matrix4f, vertexConsumer, 0f, 0f, 0f, 1f, 0f, 1f, 1f, 0f, Direction.WEST);
|
|
renderSide(entity, matrix4f, vertexConsumer, 0f, 1f, 0f, 0f, 0f, 0f, 1f, 1f, Direction.DOWN);
|
|
renderSide(entity, matrix4f, vertexConsumer, 0f, 1f, 1f, 1f, 1f, 1f, 0f, 0f, Direction.UP);
|
|
}
|
|
|
|
private void renderSide(HolographicSkyBlockEntity entity, Matrix4f matrix4f, VertexConsumer vertexConsumer, float f, float g, float h, float i, float j, float k, float l, float m, Direction side) {
|
|
if (shouldDrawSide(entity, side)) {
|
|
vertexConsumer.vertex(matrix4f, f, h, j).color(1f, 1f, 1f, 1f).next();
|
|
vertexConsumer.vertex(matrix4f, g, h, k).color(1f, 1f, 1f, 1f).next();
|
|
vertexConsumer.vertex(matrix4f, g, i, l).color(1f, 1f, 1f, 1f).next();
|
|
vertexConsumer.vertex(matrix4f, f, i, m).color(1f, 1f, 1f, 1f).next();
|
|
}
|
|
}
|
|
} |