From cd0a58f27f67983227c6caa5db92dad96d65d28e Mon Sep 17 00:00:00 2001 From: Sollace Date: Wed, 9 Aug 2023 16:47:03 +0100 Subject: [PATCH] Fixed passenger rendering and fixed passenger players not looking the direction their captor is facing. Closes #155 --- .../unicopia/client/gui/UHud.java | 27 ----------------- .../render/HeldEntityFeatureRenderer.java | 29 ++++++++++++++----- .../client/render/WorldRenderDelegate.java | 2 +- .../unicopia/entity/Living.java | 1 + .../unicopia/entity/player/PlayerPhysics.java | 15 +++++++--- 5 files changed, 34 insertions(+), 40 deletions(-) diff --git a/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java b/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java index 37343fae..006c3004 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java +++ b/src/main/java/com/minelittlepony/unicopia/client/gui/UHud.java @@ -6,13 +6,11 @@ import org.jetbrains.annotations.Nullable; import com.minelittlepony.unicopia.*; import com.minelittlepony.unicopia.ability.*; import com.minelittlepony.unicopia.ability.magic.SpellPredicate; -import com.minelittlepony.unicopia.ability.magic.spell.AbstractDisguiseSpell; import com.minelittlepony.unicopia.ability.magic.spell.TimedSpell; import com.minelittlepony.unicopia.ability.magic.spell.effect.CustomisedSpellType; import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType; import com.minelittlepony.unicopia.client.sound.*; import com.minelittlepony.unicopia.entity.ItemTracker; -import com.minelittlepony.unicopia.entity.behaviour.EntityAppearance; import com.minelittlepony.unicopia.entity.effect.SunBlindnessStatusEffect; import com.minelittlepony.unicopia.entity.effect.UEffects; import com.minelittlepony.unicopia.entity.player.Pony; @@ -24,9 +22,7 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.hud.InGameHud; -import net.minecraft.client.gui.screen.ingame.InventoryScreen; import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.entity.EntityDimensions; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.sound.SoundEvents; @@ -160,29 +156,6 @@ public class UHud { } RenderSystem.disableBlend(); - - if (pony.getSpecies() == Race.CHANGELING && !client.player.isSneaking()) { - pony.getSpellSlot().get(SpellType.CHANGELING_DISGUISE, false).map(AbstractDisguiseSpell::getDisguise) - .map(EntityAppearance::getAppearance) - .ifPresent(appearance -> { - - float baseHeight = 20; - - EntityDimensions dims = appearance.getDimensions(appearance.getPose()); - - float entityHeight = Math.max(dims.height, dims.width); - int scale = (int)(baseHeight / entityHeight); - - int x = scaledWidth / 2 + xDirection * 67; - int y = (int)(scaledHeight - 18 - dims.height/2F); - - matrices.push(); - matrices.translate(x, y, 0); - matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(xDirection * 45)); - InventoryScreen.drawEntity(context, 0, 0, scale, 0, -20, client.player); - matrices.pop(); - }); - } } public void renderSpell(DrawContext context, CustomisedSpellType spell, double x, double y) { diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/HeldEntityFeatureRenderer.java b/src/main/java/com/minelittlepony/unicopia/client/render/HeldEntityFeatureRenderer.java index b49a04cf..0eb56ee9 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/HeldEntityFeatureRenderer.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/HeldEntityFeatureRenderer.java @@ -59,11 +59,9 @@ public class HeldEntityFeatureRenderer implements Access float h = -0.2f * MathHelper.sin(swingProgress * (float)Math.PI); matrices.push(); matrices.translate(f, g, h); - matrices.translate(0, -1.3F, -1.3F); - matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(13)); - if (!(passenger instanceof Pony)) { - matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(90)); - } + matrices.translate(0, -1.3F, passenger instanceof Pony ? -1.9F : -1.3F); + matrices.multiply(RotationAxis.POSITIVE_X.rotationDegrees(passenger instanceof Pony ? 33 : 13)); + matrices.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(passenger instanceof Pony ? 180 : 90)); renderCarriedEntity(passenger.asEntity(), matrices, vertexConsumers, light, tickDelta); matrices.pop(); @@ -76,7 +74,7 @@ public class HeldEntityFeatureRenderer implements Access matrices.push(); sender.invokeRenderArmHoldingItem(matrices, vertexConsumers, light, equipProgress, swingProgress, Arm.RIGHT); matrices.pop(); - return true; + return false; }).isPresent(); } @@ -86,23 +84,38 @@ public class HeldEntityFeatureRenderer implements Access p.prevBodyYaw = 0; p.bodyYaw = 0; + + float oldHeadYaw = p.headYaw; + float oldPrevHeadYaw = p.prevHeadYaw; + float oldPrevYaw = p.prevYaw; + float oldYaw = p.getYaw(); + boolean onGround = p.isOnGround(); p.headYaw = 0; p.prevHeadYaw = 0; p.prevYaw = 0; p.setYaw(0); p.setBodyYaw(0); + p.setOnGround(true); @SuppressWarnings("unchecked") EntityRenderer renderer = (EntityRenderer)MinecraftClient.getInstance().getEntityRenderDispatcher().getRenderer(p); renderer.render(p, 0, tickDelta, matrices, vertexConsumers, light); + p.headYaw = oldHeadYaw; + p.prevHeadYaw = oldPrevHeadYaw; + p.prevYaw = oldPrevYaw; + p.setYaw(oldYaw); + p.setOnGround(onGround); + ((EntityDuck)p).setVehicle(vehicle); } protected Vec3d getCarryPosition(Living entity, Living passenger) { float passengerHeight = MineLPDelegate.getInstance().getPonyHeight(passenger.asEntity()) / 2F; - float carrierHeight = entity.asEntity().getHeight() / 5F; + float carrierHeight = MineLPDelegate.getInstance().getPonyHeight(entity.asEntity()) / 5F; - if (entity instanceof Pony pony && MineLPDelegate.getInstance().getPlayerPonyRace(pony.asEntity()).isEquine() && pony.getPhysics().isFlying()) { + if (entity instanceof Pony pony + && MineLPDelegate.getInstance().getPlayerPonyRace(pony.asEntity()).isEquine() + && pony.getPhysics().isFlying()) { return new Vec3d(0, -carrierHeight * 10 - passengerHeight * 2, 0 diff --git a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java index fc907b10..87c2b070 100644 --- a/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java +++ b/src/main/java/com/minelittlepony/unicopia/client/render/WorldRenderDelegate.java @@ -108,7 +108,7 @@ public class WorldRenderDelegate { double x, double y, double z, float yaw, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light) { - if (pony.isBeingCarried() && !(pony instanceof Pony && ((Pony)pony).isClientPlayer())) { + if (pony.isBeingCarried()) { return true; } diff --git a/src/main/java/com/minelittlepony/unicopia/entity/Living.java b/src/main/java/com/minelittlepony/unicopia/entity/Living.java index f2a028ad..06efc0df 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/Living.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/Living.java @@ -216,6 +216,7 @@ public abstract class Living implements Equine, Caste entity.refreshPositionAfterTeleport(carrier.getOriginVector()); Living.transmitPassengers(carrier.asEntity()); } + entity.setYaw(carrier.asEntity().getYaw()); } updateDragonBreath(); diff --git a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java index 38b60422..42d5c517 100644 --- a/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java +++ b/src/main/java/com/minelittlepony/unicopia/entity/player/PlayerPhysics.java @@ -106,7 +106,11 @@ public class PlayerPhysics extends EntityPhysics implements Tickab @Override public boolean isFlying() { - return isFlyingSurvival && !entity.isFallFlying() && !entity.hasVehicle(); + return isFlyingSurvival + && !entity.isFallFlying() + && !entity.hasVehicle() + && !entity.getAbilities().creativeMode + && !entity.isSpectator(); } @Override @@ -274,9 +278,12 @@ public class PlayerPhysics extends EntityPhysics implements Tickab } } - lastFlightType = type; - isFlyingSurvival = entity.getAbilities().flying && !creative; - isFlyingEither = isFlyingSurvival || (creative && entity.getAbilities().flying); + + if (!pony.isClient()) { + lastFlightType = type; + isFlyingSurvival = entity.getAbilities().flying && !creative; + isFlyingEither = isFlyingSurvival || (creative && entity.getAbilities().flying); + } if (typeChanged || startedFlyingCreative) { entity.calculateDimensions();