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();
}
}引用的其他类
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
继承
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
HumanoidArmorLayer.shouldRender()
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
ArmedEntityRenderState.extractArmedEntityRenderState()
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
参数/返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
方法调用 - 关联成员:
CrossbowItem.getChargeDuration()
- 引用位置:
-
- 引用位置:
返回值
- 引用位置: