- 74
- 2
Создал кастомного моба с анимацией. Пытаюсь сделать отдельную анимацию атаки. В качестве примера использовал ванильного железного голема с его анимацией рук при ударе. В итоге получилось заставить анимацию работать. Но когда она срабатывает при атаке одного моба, она же проигрывается и для мобов, которые в этот момент не атакуют. Происходит это, как я понял, из-за того, что я сделал переменную attackTimer статичной. В ванильном классе голема эта переменная не является статичной. Но, когда я делаю аналогично, при попытке получить значение переменной в классе модели моба с помощью соответствующего метода она всегда выдает 0 и анимация не проигрывается. Подскажите, пожалуйста, как исправить.
Код:
public class EntityThrower extends AbstractSkeleton implements IRangedAttackMob
{
private static int attackTimer;
@Override
public void attackEntityWithRangedAttack(EntityLivingBase target, float distanceFactor)
{
this.attackTimer = 10;
/*какой - либо код
...
*/
}
@Override
public void onLivingUpdate()
{
if (this.attackTimer > 0)
{
--this.attackTimer;
}
super.onLivingUpdate();
}
@SideOnly(Side.CLIENT)
public int getAttackTimer()
{
return this.attackTimer;
}
}
Код:
public class ModelThrower extends ModelBase
{
@Override
public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn)
{
this.Head.rotateAngleX = headPitch * 0.017453292F;
this.Head.rotateAngleY = netHeadYaw * 0.017453292F;
this.Head.rotateAngleZ = MathHelper.cos(limbSwing * 0.6662F ) * 0.1F * limbSwingAmount;
this.Body.rotateAngleY = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 0.4F * limbSwingAmount;
this.LegL.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount - 0.2F;
this.LegR.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount - 0.2F;
this.feetR.rotateAngleX = Math.abs(MathHelper.cos(limbSwing * 0.6662F + ((float)Math.PI)/2) * 1.4F * limbSwingAmount + 0.4F);
this.feetL.rotateAngleX = Math.abs(MathHelper.cos(limbSwing * 0.6662F - ((float)Math.PI)/2) * 1.4F * limbSwingAmount + 0.4F);
this.ArmR.rotateAngleX = MathHelper.cos(ageInTicks * 0.09F) * 0.05F;
this.ArmL.rotateAngleX = MathHelper.cos(ageInTicks * 0.09F) * 0.05F;
this.ArmR.rotateAngleZ = MathHelper.cos(ageInTicks * 0.09F) * 0.05F + 0.1F;
this.ArmL.rotateAngleZ = MathHelper.cos(ageInTicks * 0.09F) * 0.05F * (-1) - 0.1F;
this.ArmR.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F) * 0.6F * limbSwingAmount + 0.1F;
this.ArmL.rotateAngleX = MathHelper.cos(limbSwing * 0.6662F + (float)Math.PI) * 0.6F * limbSwingAmount + 0.1F;
this.jawR.rotateAngleZ = MathHelper.cos(ageInTicks * 0.09F) * 0.01F + 0.42F;
this.jawL.rotateAngleZ = MathHelper.cos(ageInTicks * 0.09F) * 0.01F * (-1) - 0.27F;
}
@Override
public void setLivingAnimations(EntityLivingBase entitylivingbaseIn, float limbSwing, float limbSwingAmount, float partialTickTime)
{
float phase[] = {0.1F, 0.2F, 0.1F, -0.1F, -0.3F, -0.4F, -0.3F, -0.2F, -0.1F, 0.0F};
EntityThrower thrower = (EntityThrower)entitylivingbaseIn;
int attack = thrower.getAttackTimer();
if(attack > 0)
{
this.jawL.rotateAngleX = -0.81F + phase[attack - 1];
this.jawR.rotateAngleX = -0.81F + phase[attack - 1];
}
}
}