minecraft-src/net/minecraft/client/renderer/entity/layers/ParrotOnShoulderLayer.java
2025-07-04 01:41:11 +03:00

73 lines
2.7 KiB
Java

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.ParrotModel;
import net.minecraft.client.model.PlayerModel;
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.entity.ParrotRenderer;
import net.minecraft.client.renderer.entity.RenderLayerParent;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.entity.animal.Parrot;
import net.minecraft.world.entity.player.Player;
@Environment(EnvType.CLIENT)
public class ParrotOnShoulderLayer<T extends Player> extends RenderLayer<T, PlayerModel<T>> {
private final ParrotModel model;
public ParrotOnShoulderLayer(RenderLayerParent<T, PlayerModel<T>> renderer, EntityModelSet modelSet) {
super(renderer);
this.model = new ParrotModel(modelSet.bakeLayer(ModelLayers.PARROT));
}
public void render(
PoseStack poseStack,
MultiBufferSource buffer,
int packedLight,
T livingEntity,
float limbSwing,
float limbSwingAmount,
float partialTicks,
float ageInTicks,
float netHeadYaw,
float headPitch
) {
this.render(poseStack, buffer, packedLight, livingEntity, limbSwing, limbSwingAmount, netHeadYaw, headPitch, true);
this.render(poseStack, buffer, packedLight, livingEntity, limbSwing, limbSwingAmount, netHeadYaw, headPitch, false);
}
private void render(
PoseStack poseStack,
MultiBufferSource buffer,
int packedLight,
T livingEntity,
float limbSwing,
float limbSwingAmount,
float netHeadYaw,
float headPitch,
boolean leftShoulder
) {
CompoundTag compoundTag = leftShoulder ? livingEntity.getShoulderEntityLeft() : livingEntity.getShoulderEntityRight();
EntityType.byString(compoundTag.getString("id"))
.filter(entityType -> entityType == EntityType.PARROT)
.ifPresent(
entityType -> {
poseStack.pushPose();
poseStack.translate(leftShoulder ? 0.4F : -0.4F, livingEntity.isCrouching() ? -1.3F : -1.5F, 0.0F);
Parrot.Variant variant = Parrot.Variant.byId(compoundTag.getInt("Variant"));
VertexConsumer vertexConsumer = buffer.getBuffer(this.model.renderType(ParrotRenderer.getVariantTexture(variant)));
this.model
.renderOnShoulder(
poseStack, vertexConsumer, packedLight, OverlayTexture.NO_OVERLAY, limbSwing, limbSwingAmount, netHeadYaw, headPitch, livingEntity.tickCount
);
poseStack.popPose();
}
);
}
}