package net.minecraft.client.renderer.entity.layers; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.model.EntityModel; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.LivingEntityRenderer; import net.minecraft.client.renderer.entity.RenderLayerParent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; @Environment(EnvType.CLIENT) public abstract class RenderLayer> { private final RenderLayerParent renderer; public RenderLayer(RenderLayerParent renderer) { this.renderer = renderer; } protected static void coloredCutoutModelCopyLayerRender( EntityModel modelParent, EntityModel model, ResourceLocation textureLocation, PoseStack poseStack, MultiBufferSource buffer, int packedLight, T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float partialTick, int color ) { if (!entity.isInvisible()) { modelParent.copyPropertiesTo(model); model.prepareMobModel(entity, limbSwing, limbSwingAmount, partialTick); model.setupAnim(entity, limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch); renderColoredCutoutModel(model, textureLocation, poseStack, buffer, packedLight, entity, color); } } protected static void renderColoredCutoutModel( EntityModel model, ResourceLocation textureLocation, PoseStack poseStack, MultiBufferSource buffer, int packedLight, T entity, int color ) { VertexConsumer vertexConsumer = buffer.getBuffer(RenderType.entityCutoutNoCull(textureLocation)); model.renderToBuffer(poseStack, vertexConsumer, packedLight, LivingEntityRenderer.getOverlayCoords(entity, 0.0F), color); } public M getParentModel() { return this.renderer.getModel(); } protected ResourceLocation getTextureLocation(T entity) { return this.renderer.getTextureLocation(entity); } public abstract void render( PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, T livingEntity, float limbSwing, float limbSwingAmount, float partialTick, float ageInTicks, float netHeadYaw, float headPitch ); }