diff --git a/src/main/java/com/minelittlepony/api/pony/PonyPosture.java b/src/main/java/com/minelittlepony/api/pony/PonyPosture.java index 271902f6..cc3f698a 100644 --- a/src/main/java/com/minelittlepony/api/pony/PonyPosture.java +++ b/src/main/java/com/minelittlepony/api/pony/PonyPosture.java @@ -1,6 +1,7 @@ package com.minelittlepony.api.pony; import com.minelittlepony.api.pony.meta.Race; +import com.minelittlepony.client.IPreviewModel; import com.minelittlepony.client.SkinsProxy; import com.minelittlepony.client.render.entity.AquaticPlayerPonyRenderer; @@ -88,10 +89,16 @@ public final class PonyPosture { } public static boolean isSeaponyModifier(LivingEntity entity) { + if (entity instanceof IPreviewModel preview) { + return preview.forceSeapony(); + } return hasSeaponyForm(entity) && isPartiallySubmerged(entity); } public static boolean hasSeaponyForm(LivingEntity entity) { + if (entity instanceof IPreviewModel preview) { + return preview.forceSeapony(); + } return IPony.getManager().getPony(entity).filter(pony -> { return (pony.race() == Race.SEAPONY || (entity instanceof AbstractClientPlayerEntity player && SkinsProxy.instance.getSkin(AquaticPlayerPonyRenderer.SKIN_TYPE_ID, player).isPresent()) diff --git a/src/main/java/com/minelittlepony/client/IPreviewModel.java b/src/main/java/com/minelittlepony/client/IPreviewModel.java index ba873ff7..4b6487a2 100644 --- a/src/main/java/com/minelittlepony/client/IPreviewModel.java +++ b/src/main/java/com/minelittlepony/client/IPreviewModel.java @@ -1,5 +1,5 @@ package com.minelittlepony.client; public interface IPreviewModel { - + boolean forceSeapony(); } diff --git a/src/main/java/com/minelittlepony/client/hdskins/DummyPony.java b/src/main/java/com/minelittlepony/client/hdskins/DummyPony.java index 3a0dcebf..58a751fd 100644 --- a/src/main/java/com/minelittlepony/client/hdskins/DummyPony.java +++ b/src/main/java/com/minelittlepony/client/hdskins/DummyPony.java @@ -26,7 +26,7 @@ class DummyPony extends DummyPlayer implements IPreviewModel, IPonyManager.Force } @Override - public boolean isSubmergedInWater() { - return getTextures().getPosture().getActiveSkinType() == MineLPHDSkins.seaponySkinType || super.isSubmergedInWater(); + public boolean forceSeapony() { + return getTextures().getPosture().getActiveSkinType() == MineLPHDSkins.seaponySkinType; } } diff --git a/src/main/java/com/minelittlepony/client/render/entity/AquaticPlayerPonyRenderer.java b/src/main/java/com/minelittlepony/client/render/entity/AquaticPlayerPonyRenderer.java index 93ad4986..86556360 100644 --- a/src/main/java/com/minelittlepony/client/render/entity/AquaticPlayerPonyRenderer.java +++ b/src/main/java/com/minelittlepony/client/render/entity/AquaticPlayerPonyRenderer.java @@ -3,6 +3,7 @@ package com.minelittlepony.client.render.entity; import com.minelittlepony.api.pony.IPony; import com.minelittlepony.api.pony.PonyPosture; import com.minelittlepony.api.pony.meta.Race; +import com.minelittlepony.client.IPreviewModel; import com.minelittlepony.client.SkinsProxy; import com.minelittlepony.util.MathUtil; @@ -36,7 +37,7 @@ public class AquaticPlayerPonyRenderer extends PlayerPonyRenderer { updateSeaponyState(player); super.render(player, entityYaw, tickDelta, stack, renderContext, light); - if (wet && player.getVelocity().length() > 0.1F) { + if (!(player instanceof IPreviewModel) && wet && player.getVelocity().length() > 0.1F) { double x = player.getEntityWorld().getRandom().nextTriangular(player.getX(), 1); double y = player.getEntityWorld().getRandom().nextTriangular(player.getY(), 1); double z = player.getEntityWorld().getRandom().nextTriangular(player.getZ(), 1); @@ -71,15 +72,17 @@ public class AquaticPlayerPonyRenderer extends PlayerPonyRenderer { IPony pony = getEntityPony(player); wet = PonyPosture.isSeaponyModifier(player); - float state = wet ? 100 : 0; - float interpolated = pony.metadata().getInterpolator(player.getUuid()).interpolate("seapony_state", state, 5); + if (!(player instanceof IPreviewModel)) { + float state = wet ? 100 : 0; + float interpolated = pony.metadata().getInterpolator(player.getUuid()).interpolate("seapony_state", state, 5); - if (!MathUtil.compareFloats(interpolated, state)) { - double x = player.getEntityWorld().getRandom().nextTriangular(player.getX(), 1); - double y = player.getEntityWorld().getRandom().nextTriangular(player.getY() + player.getHeight() * 0.5F, 1); - double z = player.getEntityWorld().getRandom().nextTriangular(player.getZ(), 1); + if (!MathUtil.compareFloats(interpolated, state)) { + double x = player.getEntityWorld().getRandom().nextTriangular(player.getX(), 1); + double y = player.getEntityWorld().getRandom().nextTriangular(player.getY() + player.getHeight() * 0.5F, 1); + double z = player.getEntityWorld().getRandom().nextTriangular(player.getZ(), 1); - player.getEntityWorld().addParticle(ParticleTypes.END_ROD, x, y, z, 0, 0, 0); + player.getEntityWorld().addParticle(ParticleTypes.END_ROD, x, y, z, 0, 0, 0); + } } } }