From 0489c4bb21387ca0e8f08723114f2d41ac1004cd Mon Sep 17 00:00:00 2001 From: Sollace Date: Mon, 16 Dec 2024 22:51:40 +0100 Subject: [PATCH] Fixed tails and necks rendering on spectator mode players, fixed spectators missing snouts and ears, and fixed spectators bodies rotating when flying --- .../api/model/ModelAttributes.java | 1 + .../client/model/AbstractPonyModel.java | 17 +++++++++-------- .../client/model/part/PonyEars.java | 7 +++++-- .../client/model/part/PonySnout.java | 4 ++-- .../client/model/part/PonyTail.java | 14 ++++++++------ 5 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/minelittlepony/api/model/ModelAttributes.java b/src/main/java/com/minelittlepony/api/model/ModelAttributes.java index bf3eca89..406cba5a 100644 --- a/src/main/java/com/minelittlepony/api/model/ModelAttributes.java +++ b/src/main/java/com/minelittlepony/api/model/ModelAttributes.java @@ -131,6 +131,7 @@ public class ModelAttributes { isGoingFast &= zMotion > 0.4F; isGoingFast |= entity.isUsingRiptide(); isGoingFast |= entity.isFallFlying(); + isGoingFast &= !entity.isSpectator(); motionLerp = MathUtil.clampLimit(zMotion * 30, 1); diff --git a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java index 868474ff..0738cc5a 100644 --- a/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java +++ b/src/main/java/com/minelittlepony/client/model/AbstractPonyModel.java @@ -115,6 +115,15 @@ public abstract class AbstractPonyModel extends ClientPo rightPants.copyTransform(rightLeg); jacket.copyTransform(body); hat.copyTransform(head); + + hat.visible = head.visible && !attributes.isHorsey; + neck.visible = body.visible; + if (attributes.isHorsey) { + neck.visible = head.visible; + } else { + neck.hidden = !head.visible; + } + parts.forEach(part -> part.setVisible(body.visible, attributes)); } protected void setModelAngles(T entity, float limbAngle, float limbSpeed, float animationProgress, float headYaw, float headPitch) { @@ -539,14 +548,6 @@ public abstract class AbstractPonyModel extends ClientPo } } - @Override - public void setVisible(boolean visible) { - super.setVisible(visible); - neck.visible = visible; - hat.visible &= !attributes.isHorsey; - parts.forEach(part -> part.setVisible(visible, attributes)); - } - @Override public final void setArmAngle(Arm arm, MatrixStack matrices) { super.setArmAngle(arm, matrices); diff --git a/src/main/java/com/minelittlepony/client/model/part/PonyEars.java b/src/main/java/com/minelittlepony/client/model/part/PonyEars.java index f0f68013..7c87a44b 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonyEars.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonyEars.java @@ -6,6 +6,8 @@ import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.MathHelper; import com.minelittlepony.api.model.SubModel; +import com.minelittlepony.api.pony.meta.Race; +import com.minelittlepony.api.config.PonyConfig; import com.minelittlepony.api.model.ModelAttributes; import com.minelittlepony.mson.api.*; import com.minelittlepony.mson.api.model.PartBuilder; @@ -57,8 +59,9 @@ public class PonyEars implements SubModel, MsonModel { @Override public void setVisible(boolean visible, ModelAttributes attributes) { - right.visible = visible && !attributes.metadata.race().isHuman(); - left.visible = visible && !attributes.metadata.race().isHuman(); + Race race = PonyConfig.getEffectiveRace(attributes.metadata.race()); + right.visible = !race.isHuman(); + left.visible = !race.isHuman(); if (attributes.isHorsey) { left.pivotX = -1; diff --git a/src/main/java/com/minelittlepony/client/model/part/PonySnout.java b/src/main/java/com/minelittlepony/client/model/part/PonySnout.java index e2f4c5cc..e8a44177 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonySnout.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonySnout.java @@ -39,8 +39,8 @@ public class PonySnout implements SubModel, MsonModel { @Override public void setVisible(boolean visible, ModelAttributes attributes) { - visible &= !attributes.isHorsey - && !attributes.metadata.race().isHuman() + visible = !attributes.isHorsey + && !PonyConfig.getEffectiveRace(attributes.metadata.race()).isHuman() && PonyConfig.getInstance().snuzzles.get(); Gender gender = attributes.metadata.gender(); diff --git a/src/main/java/com/minelittlepony/client/model/part/PonyTail.java b/src/main/java/com/minelittlepony/client/model/part/PonyTail.java index d386d067..03cb3d4c 100644 --- a/src/main/java/com/minelittlepony/client/model/part/PonyTail.java +++ b/src/main/java/com/minelittlepony/client/model/part/PonyTail.java @@ -87,14 +87,16 @@ public class PonyTail implements SubModel, MsonModel { @Override public void renderPart(MatrixStack stack, VertexConsumer vertices, int overlay, int light, int color, ModelAttributes attributes) { - stack.push(); - tail.rotate(stack); + if (tail.visible) { + stack.push(); + tail.rotate(stack); - for (int i = 0; i < segments.size(); i++) { - segments.get(i).render(this, stack, vertices, i, overlay, light, color, attributes); + for (int i = 0; i < segments.size(); i++) { + segments.get(i).render(this, stack, vertices, i, overlay, light, color, attributes); + } + + stack.pop(); } - - stack.pop(); } public static class Segment {