RyanHub – file viewer
filename: common/src/main/java/rearth/oritech/client/renderers/UnstableContainerRenderer.java
branch: 1.21
back to repo
package rearth.oritech.client.renderers;

import net.minecraft.block.Blocks;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.LightmapTextureManager;
import net.minecraft.client.render.RenderLayers;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.math.RotationAxis;
import org.jetbrains.annotations.Nullable;
import rearth.oritech.block.entity.storage.UnstableContainerBlockEntity;
import software.bernie.geckolib.cache.object.BakedGeoModel;

public class UnstableContainerRenderer extends MachineRenderer<UnstableContainerBlockEntity> {
    
    public UnstableContainerRenderer(String modelPath) {
        super(modelPath);
    }
    
    @Override
    public void postRender(MatrixStack poseStack, UnstableContainerBlockEntity animatable, BakedGeoModel model, VertexConsumerProvider bufferSource, @Nullable VertexConsumer buffer, boolean isReRender, float partialTick, int packedLight, int packedOverlay, int colour) {
        super.postRender(poseStack, animatable, model, bufferSource, buffer, isReRender, partialTick, packedLight, packedOverlay, colour);
        
        var time = animatable.getWorld().getTime();
        var totalTime = time + partialTick;
        
        var rotationY = (totalTime * 10) % 360;
        
        if (animatable.capturedBlock == null) return;
        
        poseStack.push();
        poseStack.scale(0.6f, 0.6f, 0.6f);
        poseStack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(rotationY));
        poseStack.translate(-0.5, 0, -0.5);
        
        
        var renderManager = MinecraftClient.getInstance().getBlockRenderManager();
        var renderedModel = renderManager.getModel(animatable.capturedBlock);
        
        renderManager.getModelRenderer().render(
          animatable.getWorld(),
          renderedModel,
          Blocks.GLOWSTONE.getDefaultState(),
          animatable.getPos(),
          poseStack,
          bufferSource.getBuffer(RenderLayers.getBlockLayer(animatable.capturedBlock)),
          true,
          animatable.getWorld().random,
          animatable.capturedBlock.getRenderingSeed(animatable.getPos()),
          LightmapTextureManager.MAX_LIGHT_COORDINATE
        );
        
        poseStack.pop();
    }
}