diff --git a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java index 556b686a..0a82edf0 100644 --- a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java @@ -81,7 +81,7 @@ public abstract class AbstractPonyModel extends ClientPo if (attributes.isCrouching) { ponyCrouch(); } else if (riding) { - ponyRide(); + ponySit(); } else { adjustBody(BODY_ROT_X_NOTSNEAK, BODY_RP_Y_NOTSNEAK, BODY_RP_Z_NOTSNEAK); @@ -135,8 +135,8 @@ public abstract class AbstractPonyModel extends ClientPo ((MsonPart)leftLeg).shift(0, 2, -8); } - protected void ponyRide() { - if (attributes.isSitting) { + protected void ponySit() { + if (attributes.isRidingInteractive) { adjustBodyComponents(BODY_ROT_X_RIDING * 2, BODY_RP_Y_RIDING, BODY_RP_Z_RIDING); adjustNeck(BODY_ROT_X_NOTSNEAK * 2, BODY_RP_Y_NOTSNEAK, BODY_RP_Z_NOTSNEAK - 4); head.setPivot(0, -2, -5); @@ -159,7 +159,7 @@ public abstract class AbstractPonyModel extends ClientPo leftArm.roll = -PI * 0.06f; rightArm.roll = PI * 0.06f; - if (attributes.isSitting) { + if (attributes.isRidingInteractive) { leftLeg.yaw = PI / 15; leftLeg.pitch = PI / 9; diff --git a/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java b/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java index 544fc2e7..b6d28222 100644 --- a/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/ClientPonyModel.java @@ -35,8 +35,9 @@ public abstract class ClientPonyModel extends MsonPlayer @Override public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) { child = entity.isBaby(); - isSneaking = entity.isInSneakingPose(); attributes.updateLivingState(entity, pony, mode); + isSneaking = attributes.isCrouching; + riding = attributes.isSitting; } @Override diff --git a/src/main/java/com/minelittlepony/client/model/entity/race/SeaponyModel.java b/src/main/java/com/minelittlepony/client/model/entity/race/SeaponyModel.java index 6992b996..fc86825a 100644 --- a/src/main/java/com/minelittlepony/client/model/entity/race/SeaponyModel.java +++ b/src/main/java/com/minelittlepony/client/model/entity/race/SeaponyModel.java @@ -58,7 +58,7 @@ public class SeaponyModel extends UnicornModel { protected void ponySleep() {} @Override - protected void ponyRide() {} + protected void ponySit() {} @Override public void setAngles(T entity, float move, float swing, float ticks, float headYaw, float headPitch) { diff --git a/src/main/java/com/minelittlepony/client/pony/Pony.java b/src/main/java/com/minelittlepony/client/pony/Pony.java index 88edc223..772f28b0 100644 --- a/src/main/java/com/minelittlepony/client/pony/Pony.java +++ b/src/main/java/com/minelittlepony/client/pony/Pony.java @@ -155,11 +155,21 @@ public class Pony implements IPony { return metadata; } + @Override + public boolean isSitting(LivingEntity entity) { + return entity.hasVehicle()/* + || (entity instanceof PlayerEntity + && entity.getVelocity().x == 0 && entity.getVelocity().z == 0 + && !entity.isInsideWaterOrBubbleColumn() && entity.onGround && isCrouching(entity))*/; + } + @Override public boolean isRidingInteractive(LivingEntity entity) { - if (entity.hasVehicle() && entity.getVehicle() instanceof LivingEntity) { + + if (isSitting(entity) && entity.getVehicle() instanceof LivingEntity) { return PonyRenderDispatcher.getInstance().getPonyRenderer((LivingEntity) entity.getVehicle()) != null; } + return false; } diff --git a/src/main/java/com/minelittlepony/client/render/entity/PonyRenderer.java b/src/main/java/com/minelittlepony/client/render/entity/PonyRenderer.java index cd7dff68..69300f2a 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/PonyRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/entity/PonyRenderer.java @@ -56,7 +56,12 @@ public abstract class PonyRenderer @Override public void render(T entity, float entityYaw, float tickDelta, MatrixStack stack, VertexConsumerProvider renderContext, int lightUv) { - if (entity.isInSneakingPose()) { + manager.preRenderCallback(entity, stack, tickDelta); + if (getModel() instanceof PlayerEntityModel) { + ((PlayerEntityModel)getModel()).setVisible(true); + } + + if (getModel().getAttributes().isSitting) { stack.translate(0, 0.125D, 0); } @@ -79,12 +84,7 @@ public abstract class PonyRenderer } @Override - public void scale(T entity, MatrixStack stack, float ticks) { - manager.preRenderCallback(entity, stack, ticks); - if (this.getModel() instanceof PlayerEntityModel) { - ((PlayerEntityModel)getModel()).setVisible(true); - } - + public void scale(T entity, MatrixStack stack, float tickDelta) { // shadowRadius shadowSize = manager.getShadowScale(); diff --git a/src/main/java/com/minelittlepony/model/ModelAttributes.java b/src/main/java/com/minelittlepony/model/ModelAttributes.java index 455157e5..aa6c69a1 100644 --- a/src/main/java/com/minelittlepony/model/ModelAttributes.java +++ b/src/main/java/com/minelittlepony/model/ModelAttributes.java @@ -40,6 +40,11 @@ public class ModelAttributes { * True if the pony is crouching. */ public boolean isCrouching; + /** + * True if the pony is sitting. + */ + public boolean isSitting; + /** * True if the entity is left-handed. */ @@ -47,7 +52,7 @@ public class ModelAttributes { /** * True if the model is sitting as in boats. */ - public boolean isSitting; + public boolean isRidingInteractive; /** * Flag indicating that this model is performing a rainboom (flight). */ @@ -92,14 +97,15 @@ public class ModelAttributes { } public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) { - isCrouching = mode == Mode.THIRD_PERSON && pony.isCrouching(entity); + isSitting = pony.isSitting(entity); + isCrouching = !isSitting && mode == Mode.THIRD_PERSON && pony.isCrouching(entity); isSleeping = entity.isSleeping(); isFlying = mode == Mode.THIRD_PERSON && pony.isFlying(entity); isGliding = entity.isFallFlying(); isSwimming = mode == Mode.THIRD_PERSON && pony.isSwimming(entity); isSwimmingRotated = mode == Mode.THIRD_PERSON && isSwimming && (entity instanceof PlayerEntity || entity instanceof IRotatedSwimmer); + isRidingInteractive = pony.isRidingInteractive(entity); hasHeadGear = pony.isWearingHeadgear(entity); - isSitting = pony.isRidingInteractive(entity); interpolatorId = entity.getUuid(); isLeftHanded = entity.getMainArm() == Arm.LEFT; } diff --git a/src/main/java/com/minelittlepony/pony/IPony.java b/src/main/java/com/minelittlepony/pony/IPony.java index 7ab4dad7..9452b0c2 100644 --- a/src/main/java/com/minelittlepony/pony/IPony.java +++ b/src/main/java/com/minelittlepony/pony/IPony.java @@ -85,6 +85,12 @@ public interface IPony { */ Race getRace(boolean ignorePony); + /** + * Returns true if an entity is sitting as when riding a vehicle or + * a customized habitually actuated indoors rester (CHAIR) + */ + boolean isSitting(LivingEntity entity); + /** * Returns true if an entity is riding a pony or other sentient life-form. *