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.model.SheepFurModel; import net.minecraft.client.model.SheepModel; import net.minecraft.client.model.geom.EntityModelSet; import net.minecraft.client.model.geom.ModelLayers; 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.client.renderer.entity.state.SheepRenderState; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.ARGB; import net.minecraft.util.Mth; import net.minecraft.world.entity.animal.Sheep; import net.minecraft.world.item.DyeColor; @Environment(EnvType.CLIENT) public class SheepWoolLayer extends RenderLayer { private static final ResourceLocation SHEEP_FUR_LOCATION = ResourceLocation.withDefaultNamespace("textures/entity/sheep/sheep_fur.png"); private final EntityModel adultModel; private final EntityModel babyModel; public SheepWoolLayer(RenderLayerParent renderer, EntityModelSet modelSet) { super(renderer); this.adultModel = new SheepFurModel(modelSet.bakeLayer(ModelLayers.SHEEP_WOOL)); this.babyModel = new SheepFurModel(modelSet.bakeLayer(ModelLayers.SHEEP_BABY_WOOL)); } public void render(PoseStack poseStack, MultiBufferSource bufferSource, int packedLight, SheepRenderState renderState, float yRot, float xRot) { if (!renderState.isSheared) { EntityModel entityModel = renderState.isBaby ? this.babyModel : this.adultModel; if (renderState.isInvisible) { if (renderState.appearsGlowing) { entityModel.setupAnim(renderState); VertexConsumer vertexConsumer = bufferSource.getBuffer(RenderType.outline(SHEEP_FUR_LOCATION)); entityModel.renderToBuffer(poseStack, vertexConsumer, packedLight, LivingEntityRenderer.getOverlayCoords(renderState, 0.0F), -16777216); } } else { int q; if (renderState.customName != null && "jeb_".equals(renderState.customName.getString())) { int i = 25; int j = Mth.floor(renderState.ageInTicks); int k = j / 25 + renderState.id; int l = DyeColor.values().length; int m = k % l; int n = (k + 1) % l; float f = (j % 25 + Mth.frac(renderState.ageInTicks)) / 25.0F; int o = Sheep.getColor(DyeColor.byId(m)); int p = Sheep.getColor(DyeColor.byId(n)); q = ARGB.lerp(f, o, p); } else { q = Sheep.getColor(renderState.woolColor); } coloredCutoutModelCopyLayerRender(entityModel, SHEEP_FUR_LOCATION, poseStack, bufferSource, packedLight, renderState, q); } } } }