HumanoidMobRenderer.java

net.minecraft.client.renderer.entity.HumanoidMobRenderer

信息

  • 全限定名:net.minecraft.client.renderer.entity.HumanoidMobRenderer
  • 类型:public abstract class
  • 包:net.minecraft.client.renderer.entity
  • 源码路径:src/main/java/net/minecraft/client/renderer/entity/HumanoidMobRenderer.java
  • 起始行号:L26
  • 继承:AgeableMobRenderer<T,S,M>
  • 职责:

    TODO

字段/常量

内部类/嵌套类型

构造器

public HumanoidMobRenderer(EntityRendererProvider.Context context, M model, float shadow) @ L27

  • 构造器名:HumanoidMobRenderer
  • 源码定位:L27
  • 修饰符:public

参数:

  • context: EntityRendererProvider.Context
  • model: M
  • shadow: float

说明:

TODO

public HumanoidMobRenderer(EntityRendererProvider.Context context, M model, M babyModel, float shadow) @ L31

  • 构造器名:HumanoidMobRenderer
  • 源码定位:L31
  • 修饰符:public

参数:

  • context: EntityRendererProvider.Context
  • model: M
  • babyModel: M
  • shadow: float

说明:

TODO

public HumanoidMobRenderer(EntityRendererProvider.Context context, M model, M babyModel, float shadow, CustomHeadLayer.Transforms customHeadTransforms) @ L35

  • 构造器名:HumanoidMobRenderer
  • 源码定位:L35
  • 修饰符:public

参数:

  • context: EntityRendererProvider.Context
  • model: M
  • babyModel: M
  • shadow: float
  • customHeadTransforms: CustomHeadLayer.Transforms

说明:

TODO

方法

下面的方法块按源码顺序生成。

protected HumanoidModel.ArmPose getArmPose(T mob, HumanoidArm arm) @ L42

  • 方法名:getArmPose
  • 源码定位:L42
  • 返回类型:HumanoidModel.ArmPose
  • 修饰符:protected

参数:

  • mob: T
  • arm: HumanoidArm

说明:

TODO

public void extractRenderState(T entity, S state, float partialTicks) @ L52

  • 方法名:extractRenderState
  • 源码定位:L52
  • 返回类型:void
  • 修饰符:public

参数:

  • entity: T
  • state: S
  • partialTicks: float

说明:

TODO

public static void extractHumanoidRenderState(LivingEntity entity, HumanoidRenderState state, float partialTicks, ItemModelResolver itemModelResolver) @ L59

  • 方法名:extractHumanoidRenderState
  • 源码定位:L59
  • 返回类型:void
  • 修饰符:public static

参数:

  • entity: LivingEntity
  • state: HumanoidRenderState
  • partialTicks: float
  • itemModelResolver: ItemModelResolver

说明:

TODO

private static ItemStack getEquipmentIfRenderable(LivingEntity entity, EquipmentSlot slot) @ L91

  • 方法名:getEquipmentIfRenderable
  • 源码定位:L91
  • 返回类型:ItemStack
  • 修饰符:private static

参数:

  • entity: LivingEntity
  • slot: EquipmentSlot

说明:

TODO

private static HumanoidArm getAttackArm(LivingEntity entity) @ L96

  • 方法名:getAttackArm
  • 源码定位:L96
  • 返回类型:HumanoidArm
  • 修饰符:private static

参数:

  • entity: LivingEntity

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public abstract class HumanoidMobRenderer<T extends Mob, S extends HumanoidRenderState, M extends HumanoidModel<S>> extends AgeableMobRenderer<T, S, M> {
    public HumanoidMobRenderer(EntityRendererProvider.Context context, M model, float shadow) {
        this(context, model, model, shadow);
    }
 
    public HumanoidMobRenderer(EntityRendererProvider.Context context, M model, M babyModel, float shadow) {
        this(context, model, babyModel, shadow, CustomHeadLayer.Transforms.DEFAULT);
    }
 
    public HumanoidMobRenderer(EntityRendererProvider.Context context, M model, M babyModel, float shadow, CustomHeadLayer.Transforms customHeadTransforms) {
        super(context, model, babyModel, shadow);
        this.addLayer(new CustomHeadLayer<>(this, context.getModelSet(), context.getPlayerSkinRenderCache(), customHeadTransforms));
        this.addLayer(new WingsLayer<>(this, context.getModelSet(), context.getEquipmentRenderer()));
        this.addLayer(new ItemInHandLayer<>(this));
    }
 
    protected HumanoidModel.ArmPose getArmPose(T mob, HumanoidArm arm) {
        ItemStack itemHeldByArm = mob.getItemHeldByArm(arm);
        SwingAnimation anim = itemHeldByArm.get(DataComponents.SWING_ANIMATION);
        if (anim != null && anim.type() == SwingAnimationType.STAB && mob.swinging) {
            return HumanoidModel.ArmPose.SPEAR;
        } else {
            return itemHeldByArm.is(ItemTags.SPEARS) ? HumanoidModel.ArmPose.SPEAR : HumanoidModel.ArmPose.EMPTY;
        }
    }
 
    public void extractRenderState(T entity, S state, float partialTicks) {
        super.extractRenderState(entity, state, partialTicks);
        extractHumanoidRenderState(entity, state, partialTicks, this.itemModelResolver);
        state.leftArmPose = this.getArmPose(entity, HumanoidArm.LEFT);
        state.rightArmPose = this.getArmPose(entity, HumanoidArm.RIGHT);
    }
 
    public static void extractHumanoidRenderState(LivingEntity entity, HumanoidRenderState state, float partialTicks, ItemModelResolver itemModelResolver) {
        ArmedEntityRenderState.extractArmedEntityRenderState(entity, state, itemModelResolver, partialTicks);
        state.isCrouching = entity.isCrouching();
        state.isFallFlying = entity.isFallFlying();
        state.isVisuallySwimming = entity.isVisuallySwimming();
        state.isPassenger = entity.isPassenger();
        state.speedValue = 1.0F;
        if (state.isFallFlying) {
            state.speedValue = (float)entity.getDeltaMovement().lengthSqr();
            state.speedValue /= 0.2F;
            state.speedValue = state.speedValue * (state.speedValue * state.speedValue);
        }
 
        if (state.speedValue < 1.0F) {
            state.speedValue = 1.0F;
        }
 
        state.swimAmount = entity.getSwimAmount(partialTicks);
        state.attackArm = getAttackArm(entity);
        state.useItemHand = entity.getUsedItemHand();
        state.maxCrossbowChargeDuration = CrossbowItem.getChargeDuration(entity.getUseItem(), entity);
        state.ticksUsingItem = entity.getTicksUsingItem(partialTicks);
        state.isUsingItem = entity.isUsingItem();
        state.elytraRotX = entity.elytraAnimationState.getRotX(partialTicks);
        state.elytraRotY = entity.elytraAnimationState.getRotY(partialTicks);
        state.elytraRotZ = entity.elytraAnimationState.getRotZ(partialTicks);
        state.headEquipment = getEquipmentIfRenderable(entity, EquipmentSlot.HEAD);
        state.chestEquipment = getEquipmentIfRenderable(entity, EquipmentSlot.CHEST);
        state.legsEquipment = getEquipmentIfRenderable(entity, EquipmentSlot.LEGS);
        state.feetEquipment = getEquipmentIfRenderable(entity, EquipmentSlot.FEET);
    }
 
    private static ItemStack getEquipmentIfRenderable(LivingEntity entity, EquipmentSlot slot) {
        ItemStack itemStack = entity.getItemBySlot(slot);
        return HumanoidArmorLayer.shouldRender(itemStack, slot) ? itemStack.copy() : ItemStack.EMPTY;
    }
 
    private static HumanoidArm getAttackArm(LivingEntity entity) {
        HumanoidArm mainArm = entity.getMainArm();
        return entity.swingingArm != InteractionHand.OFF_HAND ? mainArm : mainArm.getOpposite();
    }
}

引用的其他类