Code/net/minecraft/client/renderer/entity/ArmorStandRenderer.java

100 lines
5.0 KiB
Java
Raw Normal View History

2025-07-01 06:20:03 +00:00
package net.minecraft.client.renderer.entity;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.math.Axis;
import javax.annotation.Nullable;
import net.minecraft.client.model.ArmorStandArmorModel;
import net.minecraft.client.model.ArmorStandModel;
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.layers.CustomHeadLayer;
import net.minecraft.client.renderer.entity.layers.HumanoidArmorLayer;
import net.minecraft.client.renderer.entity.layers.ItemInHandLayer;
import net.minecraft.client.renderer.entity.layers.WingsLayer;
import net.minecraft.client.renderer.entity.state.ArmorStandRenderState;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.decoration.ArmorStand;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public class ArmorStandRenderer extends LivingEntityRenderer<ArmorStand, ArmorStandRenderState, ArmorStandArmorModel> {
public static final ResourceLocation DEFAULT_SKIN_LOCATION = ResourceLocation.withDefaultNamespace("textures/entity/armorstand/wood.png");
private final ArmorStandArmorModel bigModel = this.getModel();
private final ArmorStandArmorModel smallModel;
public ArmorStandRenderer(EntityRendererProvider.Context p_173915_) {
super(p_173915_, new ArmorStandModel(p_173915_.bakeLayer(ModelLayers.ARMOR_STAND)), 0.0F);
this.smallModel = new ArmorStandModel(p_173915_.bakeLayer(ModelLayers.ARMOR_STAND_SMALL));
this.addLayer(
new HumanoidArmorLayer<>(
this,
new ArmorStandArmorModel(p_173915_.bakeLayer(ModelLayers.ARMOR_STAND_INNER_ARMOR)),
new ArmorStandArmorModel(p_173915_.bakeLayer(ModelLayers.ARMOR_STAND_OUTER_ARMOR)),
new ArmorStandArmorModel(p_173915_.bakeLayer(ModelLayers.ARMOR_STAND_SMALL_INNER_ARMOR)),
new ArmorStandArmorModel(p_173915_.bakeLayer(ModelLayers.ARMOR_STAND_SMALL_OUTER_ARMOR)),
p_173915_.getEquipmentRenderer()
)
);
this.addLayer(new ItemInHandLayer<>(this));
this.addLayer(new WingsLayer<>(this, p_173915_.getModelSet(), p_173915_.getEquipmentRenderer()));
this.addLayer(new CustomHeadLayer<>(this, p_173915_.getModelSet()));
}
public ResourceLocation getTextureLocation(ArmorStandRenderState p_361116_) {
return DEFAULT_SKIN_LOCATION;
}
public ArmorStandRenderState createRenderState() {
return new ArmorStandRenderState();
}
public void extractRenderState(ArmorStand p_364068_, ArmorStandRenderState p_361680_, float p_369387_) {
super.extractRenderState(p_364068_, p_361680_, p_369387_);
HumanoidMobRenderer.extractHumanoidRenderState(p_364068_, p_361680_, p_369387_, this.itemModelResolver);
p_361680_.yRot = Mth.rotLerp(p_369387_, p_364068_.yRotO, p_364068_.getYRot());
p_361680_.isMarker = p_364068_.isMarker();
p_361680_.isSmall = p_364068_.isSmall();
p_361680_.showArms = p_364068_.showArms();
p_361680_.showBasePlate = p_364068_.showBasePlate();
p_361680_.bodyPose = p_364068_.getBodyPose();
p_361680_.headPose = p_364068_.getHeadPose();
p_361680_.leftArmPose = p_364068_.getLeftArmPose();
p_361680_.rightArmPose = p_364068_.getRightArmPose();
p_361680_.leftLegPose = p_364068_.getLeftLegPose();
p_361680_.rightLegPose = p_364068_.getRightLegPose();
p_361680_.wiggle = (float)(p_364068_.level().getGameTime() - p_364068_.lastHit) + p_369387_;
}
public void render(ArmorStandRenderState p_368962_, PoseStack p_364467_, MultiBufferSource p_368924_, int p_365572_) {
this.model = p_368962_.isSmall ? this.smallModel : this.bigModel;
super.render(p_368962_, p_364467_, p_368924_, p_365572_);
}
protected void setupRotations(ArmorStandRenderState p_365303_, PoseStack p_113788_, float p_113789_, float p_113790_) {
p_113788_.mulPose(Axis.YP.rotationDegrees(180.0F - p_113789_));
if (p_365303_.wiggle < 5.0F) {
p_113788_.mulPose(Axis.YP.rotationDegrees(Mth.sin(p_365303_.wiggle / 1.5F * (float) Math.PI) * 3.0F));
}
}
protected boolean shouldShowName(ArmorStand p_363344_, double p_365520_) {
return p_363344_.isCustomNameVisible();
}
@Nullable
protected RenderType getRenderType(ArmorStandRenderState p_367706_, boolean p_113807_, boolean p_113808_, boolean p_113809_) {
if (!p_367706_.isMarker) {
return super.getRenderType(p_367706_, p_113807_, p_113808_, p_113809_);
} else {
ResourceLocation resourcelocation = this.getTextureLocation(p_367706_);
if (p_113808_) {
return RenderType.entityTranslucent(resourcelocation, false);
} else {
return p_113807_ ? RenderType.entityCutoutNoCull(resourcelocation, false) : null;
}
}
}
}