diff --git a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java index 4fbffa6e..b5824427 100644 --- a/src/main/java/com/minelittlepony/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/model/AbstractPonyModel.java @@ -35,6 +35,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { private boolean isSleeping; private boolean isFlying; + private boolean isElytraFlying; private boolean isSwimming; private boolean headGear; @@ -72,7 +73,8 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { * Checks flying and speed conditions and sets rainboom to true if we're a species with wings and is going faaast. */ protected void checkRainboom(Entity entity, float swing) { - rainboom = canFly() && Math.sqrt(entity.motionX * entity.motionX + entity.motionZ * entity.motionZ) > 0.4F; + rainboom = canFly() || isElytraFlying(); + rainboom &= Math.sqrt(entity.motionX * entity.motionX + entity.motionZ * entity.motionZ) > 0.4F; } public void updateLivingState(EntityLivingBase entity, Pony pony) { @@ -80,6 +82,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { isSneak = entity.isSneaking(); isSleeping = entity.isPlayerSleeping(); isFlying = pony.isPegasusFlying(entity); + isElytraFlying = entity.isElytraFlying(); isSwimming = pony.isSwimming(entity); headGear = pony.isWearingHeadgear(entity); } @@ -224,7 +227,7 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { protected void rotateLegs(float move, float swing, float ticks, Entity entity) { if (isSwimming()) { rotateLegsSwimming(move, swing, ticks, entity); - } else if (isFlying()) { + } else if (isGoingFast()) { rotateLegsInFlight(move, swing, ticks, entity); } else { rotateLegsOnGround(move, swing, ticks, entity); @@ -692,6 +695,11 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { return isFlying && canFly(); } + @Override + public boolean isElytraFlying() { + return isElytraFlying; + } + @Override public boolean isSleeping() { return isSleeping; @@ -849,6 +857,8 @@ public abstract class AbstractPonyModel extends ModelPlayer implements IModel { if (model instanceof AbstractPonyModel) { AbstractPonyModel pony = (AbstractPonyModel) model; isFlying = pony.isFlying; + isElytraFlying = pony.isElytraFlying; + isSwimming = pony.isSwimming; isSleeping = pony.isSleeping; metadata = pony.metadata; motionPitch = pony.motionPitch; diff --git a/src/main/java/com/minelittlepony/model/capabilities/IModel.java b/src/main/java/com/minelittlepony/model/capabilities/IModel.java index c823b7e0..5cc5348a 100644 --- a/src/main/java/com/minelittlepony/model/capabilities/IModel.java +++ b/src/main/java/com/minelittlepony/model/capabilities/IModel.java @@ -39,6 +39,12 @@ public interface IModel extends ICapitated { */ boolean isFlying(); + /** + * Returns true if the model is elytra flying. Elytra flying is different + * from regular flying in that there are actual "wings" involved. + */ + boolean isElytraFlying(); + /** * Returns true if this model is lying on a bed or bed-like object. */ diff --git a/src/main/java/com/minelittlepony/model/capabilities/IModelPegasus.java b/src/main/java/com/minelittlepony/model/capabilities/IModelPegasus.java index ea7a5ec2..9161c523 100644 --- a/src/main/java/com/minelittlepony/model/capabilities/IModelPegasus.java +++ b/src/main/java/com/minelittlepony/model/capabilities/IModelPegasus.java @@ -6,11 +6,12 @@ import static com.minelittlepony.model.PonyModelConstants.ROTATE_270; import net.minecraft.util.math.MathHelper; public interface IModelPegasus extends IModel { + /** * Returns true if the wings are spread. */ default boolean wingsAreOpen() { - return isSwimming() || isFlying() || isCrouching(); + return (isSwimming() || isFlying() || isCrouching()) && !isElytraFlying(); }