2020-04-16 04:42:42 +02:00
|
|
|
package de.ellpeck.prettypipes.pipe;
|
2020-04-14 17:14:24 +02:00
|
|
|
|
2021-12-02 14:44:26 +01:00
|
|
|
import com.mojang.blaze3d.vertex.PoseStack;
|
2021-12-02 22:00:00 +01:00
|
|
|
import net.minecraft.client.Minecraft;
|
|
|
|
import net.minecraft.client.renderer.ItemBlockRenderTypes;
|
2021-12-02 14:44:26 +01:00
|
|
|
import net.minecraft.client.renderer.MultiBufferSource;
|
2021-12-02 22:00:00 +01:00
|
|
|
import net.minecraft.client.renderer.RenderType;
|
2021-12-02 14:44:26 +01:00
|
|
|
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
|
2021-12-02 16:55:04 +01:00
|
|
|
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
|
2022-06-27 13:57:06 +02:00
|
|
|
import net.minecraft.util.RandomSource;
|
2020-10-17 00:58:31 +02:00
|
|
|
import net.minecraftforge.client.ForgeHooksClient;
|
2022-06-27 13:57:06 +02:00
|
|
|
import net.minecraftforge.client.model.data.EmptyModelData;
|
2021-12-02 14:44:26 +01:00
|
|
|
import net.minecraftforge.client.model.pipeline.ForgeBlockModelRenderer;
|
2020-04-14 18:51:43 +02:00
|
|
|
|
|
|
|
import java.util.Random;
|
2020-04-14 17:14:24 +02:00
|
|
|
|
2021-12-02 14:44:26 +01:00
|
|
|
public class PipeRenderer implements BlockEntityRenderer<PipeBlockEntity> {
|
2020-04-14 17:14:24 +02:00
|
|
|
|
2020-04-14 18:51:43 +02:00
|
|
|
private final Random random = new Random();
|
|
|
|
|
2021-12-02 16:55:04 +01:00
|
|
|
public PipeRenderer(BlockEntityRendererProvider.Context ctx) {
|
|
|
|
}
|
|
|
|
|
2020-04-14 17:14:24 +02:00
|
|
|
@Override
|
2021-12-02 14:44:26 +01:00
|
|
|
public void render(PipeBlockEntity tile, float partialTicks, PoseStack matrixStack, MultiBufferSource source, int light, int overlay) {
|
2020-10-17 00:58:31 +02:00
|
|
|
if (!tile.getItems().isEmpty()) {
|
2021-12-02 14:44:26 +01:00
|
|
|
matrixStack.pushPose();
|
2021-12-02 17:46:56 +01:00
|
|
|
var tilePos = tile.getBlockPos();
|
2020-10-17 00:58:31 +02:00
|
|
|
matrixStack.translate(-tilePos.getX(), -tilePos.getY(), -tilePos.getZ());
|
2021-12-02 17:46:56 +01:00
|
|
|
for (var item : tile.getItems()) {
|
2021-12-02 14:44:26 +01:00
|
|
|
matrixStack.pushPose();
|
2021-12-02 16:55:04 +01:00
|
|
|
item.render(tile, matrixStack, this.random, partialTicks, light, overlay, source);
|
2021-12-02 14:44:26 +01:00
|
|
|
matrixStack.popPose();
|
2020-10-17 00:58:31 +02:00
|
|
|
}
|
2021-12-02 14:44:26 +01:00
|
|
|
matrixStack.popPose();
|
2020-10-17 00:58:31 +02:00
|
|
|
}
|
|
|
|
if (tile.cover != null) {
|
2021-12-02 14:44:26 +01:00
|
|
|
matrixStack.pushPose();
|
|
|
|
ForgeBlockModelRenderer.enableCaching();
|
2021-12-02 22:00:00 +01:00
|
|
|
var renderer = Minecraft.getInstance().getBlockRenderer();
|
|
|
|
for (var layer : RenderType.chunkBufferLayers()) {
|
|
|
|
if (!ItemBlockRenderTypes.canRenderInLayer(tile.cover, layer))
|
2020-10-17 00:58:31 +02:00
|
|
|
continue;
|
2021-12-02 14:44:26 +01:00
|
|
|
ForgeHooksClient.setRenderType(layer);
|
2022-06-27 13:57:06 +02:00
|
|
|
renderer.getModelRenderer().tesselateBlock(tile.getLevel(), renderer.getBlockModel(tile.cover), tile.cover, tile.getBlockPos(), matrixStack, source.getBuffer(layer), true, RandomSource.create(), tile.cover.getSeed(tile.getBlockPos()), overlay, EmptyModelData.INSTANCE);
|
2021-12-02 22:00:00 +01:00
|
|
|
}
|
2021-12-02 14:44:26 +01:00
|
|
|
ForgeHooksClient.setRenderType(null);
|
|
|
|
ForgeBlockModelRenderer.clearCache();
|
|
|
|
matrixStack.popPose();
|
2020-04-14 17:14:24 +02:00
|
|
|
}
|
|
|
|
}
|
2021-12-02 14:44:26 +01:00
|
|
|
|
2020-04-14 17:14:24 +02:00
|
|
|
}
|