Recently started to attempt 1.20.1 modding, in registering idle, walk and attack animations in the mob entity class i've run into two issues:
a) idle and walk animations seem to play simultaneously + the mob itself does not seem to walk
private static final
EntityDataAccessor<Boolean> ATTACKING = SynchedEntityData.defineId(MugaEntity.class, EntityDataSerializers.BOOLEAN);
public MugaEntity(EntityType<? extends Monster > pEntityType, Level pLevel) { super(pEntityType, pLevel); }
public final AnimationState idleAnimationState = new AnimationState(); private int idleAnimationTimeout = 1;
public final AnimationState attackAnimationState = new AnimationState();
public int attackAnimationTimeout = 0;
@Override public void tick()
{ super.tick(); if(this.level().isClientSide()) { setupAnimationStates();
}
} private void setupAnimationStates () { if(this.idleAnimationTimeout <= 0) {
this.idleAnimationTimeout = this.random.nextInt(30) + 60;
this.idleAnimationState.start(this.tickCount);
} else {
--this.idleAnimationTimeout;
}
if (this.isAttacking() && attackAnimationTimeout <= 0 )
{ attackAnimationTimeout = 20;
attackAnimationState.start(this.tickCount);
} else {
--this.attackAnimationTimeout;
}
if(this.isAttacking()) {
attackAnimationState.stop();
}
}
@Override protected void updateWalkAnimation(float pPartialTick) {
float f;
if(this.getPose() == Pose.STANDING) {
f=Math.min(pPartialTick * 3.0F, 1.0F);
} else {
f= 0.0F;
}
this.walkAnimation.update(f, 0.2F);
}
@Override protected void defineSynchedData() {
super.defineSynchedData();
this.entityData.define(ATTACKING, false);
}
public void setAttacking(boolean attacking) {
this.entityData.set(ATTACKING, attacking);
}
public boolean isAttacking() {
return this.entityData.get(ATTACKING);
}
b) the attack animation is never played on attack, despite being registered
@Override
public void setupAnim(Entity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) {
this.root().getAllParts().forEach(ModelPart::resetPose);
this.animateWalk(ModAnimationDefinitions.MUGA_WALKING, limbSwing, limbSwingAmount, 1f, 1f );
this.animate(((MugaEntity)entity).idleAnimationState, ModAnimationDefinitions.MUGA_IDLE, ageInTicks, 1f);
this.animate(((MugaEntity)entity).attackAnimationState, ModAnimationDefinitions.MUGA_ATTACK, ageInTicks, 1f); }