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

import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import net.fabricmc.fabric.api.client.rendering.v1.EntityRendererRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.LivingEntityFeatureRenderEvents;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderContext;
import net.fabricmc.fabric.api.client.rendering.v1.WorldRenderEvents;
import net.minecraft.entity.EquipmentSlot;
import rearth.oritech.OritechClient;
import rearth.oritech.client.init.ModRenderers;
import rearth.oritech.client.other.OreFinderRenderer;
import rearth.oritech.client.renderers.BlockOutlineRenderer;
import rearth.oritech.client.renderers.PortalEntityRenderer;
import rearth.oritech.init.EntitiesContent;
import rearth.oritech.item.tools.armor.BaseJetpackItem;

public final class OritechFabricModClient implements ClientModInitializer {
    @Override
    public void onInitializeClient() {
        // This entrypoint is suitable for setting up client-specific logic, such as rendering.
        
        OritechClient.initialize();
        OritechClient.registerRenderers();
        
        WorldRenderEvents.BLOCK_OUTLINE.register(OritechFabricModClient::renderBlockOutline);
        WorldRenderEvents.AFTER_ENTITIES.register(OritechFabricModClient::renderWorld);
        
        // used for elytra jetpack cape rendering. No Neoforge equivalent.
        LivingEntityFeatureRenderEvents.ALLOW_CAPE_RENDER.register(player -> !(player.getEquippedStack(EquipmentSlot.CHEST).getItem() instanceof BaseJetpackItem));
        
        for (var entry : ModRenderers.RENDER_LAYERS.entrySet()) {
            BlockRenderLayerMap.INSTANCE.putBlock(entry.getKey(), entry.getValue());
        }
        
        EntityRendererRegistry.register(EntitiesContent.PORTAL_ENTITY, PortalEntityRenderer::new);
    }
    
    private static boolean renderBlockOutline(WorldRenderContext worldRenderContext, WorldRenderContext.BlockOutlineContext blockOutlineContext) {
        BlockOutlineRenderer.render(worldRenderContext.world(), worldRenderContext.camera(), worldRenderContext.matrixStack(), worldRenderContext.consumers());
        return true;
    }
    
    private static void renderWorld(WorldRenderContext worldRenderContext) {
        
        var matrices = worldRenderContext.matrixStack();
        var camera = worldRenderContext.camera();
        var vertexConsumers = worldRenderContext.consumers();
        
        OreFinderRenderer.doRender(matrices, camera, vertexConsumers);
        
    }
}