From eef5bc9a0c1c84861db9c369927fc2024bbd0b39 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Fri, 14 Feb 2025 16:49:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A3=9E=E8=A1=8C=E8=BD=BD?= =?UTF-8?q?=E5=85=B7=E6=97=8B=E8=BD=AC=E8=BD=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/overlay/HelicopterHudOverlay.java | 2 +- .../client/renderer/entity/Ah6Renderer.java | 8 +++++--- .../client/renderer/entity/Tom6Renderer.java | 8 +++++--- .../superbwarfare/entity/vehicle/Ah6Entity.java | 17 ++++++++++++++--- .../entity/vehicle/Tom6Entity.java | 13 ++++++++++++- 5 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/HelicopterHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/HelicopterHudOverlay.java index 8cb646eb9..4d083cd63 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/HelicopterHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/HelicopterHudOverlay.java @@ -242,7 +242,7 @@ public class HelicopterHudOverlay { public static Matrix4f getVehicleTransform(VehicleEntity vehicle) { Matrix4f transform = new Matrix4f(); - transform.translate((float) vehicle.getX(), (float) vehicle.getY(), (float) vehicle.getZ()); + transform.translate((float) vehicle.getX(), (float) vehicle.getY() + 1.45f, (float) vehicle.getZ()); transform.rotate(Axis.YP.rotationDegrees(-vehicle.getYRot())); transform.rotate(Axis.XP.rotationDegrees(vehicle.getXRot())); transform.rotate(Axis.ZP.rotationDegrees(vehicle.getRoll())); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Ah6Renderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Ah6Renderer.java index ccdf22b93..36164c36f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Ah6Renderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Ah6Renderer.java @@ -10,6 +10,7 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.renderer.GeoEntityRenderer; @@ -38,9 +39,10 @@ public class Ah6Renderer extends GeoEntityRenderer { @Override public void render(Ah6Entity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { poseStack.pushPose(); - poseStack.mulPose(Axis.YP.rotationDegrees(-entityYaw)); - poseStack.mulPose(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot()))); - poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll()))); + Vec3 root = new Vec3(0, 1.45, 0); + poseStack.rotateAround(Axis.YP.rotationDegrees(-entityYaw), (float) root.x, (float) root.y, (float) root.z); + poseStack.rotateAround(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot())), (float) root.x, (float) root.y, (float) root.z); + poseStack.rotateAround(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll())), (float) root.x, (float) root.y, (float) root.z); super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); poseStack.popPose(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Tom6Renderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Tom6Renderer.java index 93d110fbf..626fc31d0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Tom6Renderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/Tom6Renderer.java @@ -10,6 +10,7 @@ import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.renderer.GeoEntityRenderer; @@ -40,9 +41,10 @@ public class Tom6Renderer extends GeoEntityRenderer { @Override public void render(Tom6Entity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { poseStack.pushPose(); - poseStack.mulPose(Axis.YP.rotationDegrees(-entityYaw)); - poseStack.mulPose(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot()))); - poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll()))); + Vec3 root = new Vec3(0, 0.5, 0); + poseStack.rotateAround(Axis.YP.rotationDegrees(-entityYaw), (float) root.x, (float) root.y, (float) root.z); + poseStack.rotateAround(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot())), (float) root.x, (float) root.y, (float) root.z); + poseStack.rotateAround(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll())), (float) root.x, (float) root.y, (float) root.z); super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); poseStack.popPose(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java index 3aa6155cc..e9367fdf7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -13,6 +13,7 @@ import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.SoundTool; import com.google.common.collect.Lists; +import com.mojang.math.Axis; import net.minecraft.core.BlockPos; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; @@ -445,7 +446,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli Matrix4f transform = getVehicleTransform(); float x = 0.6f; - float y = 1.2f; + float y = 1.2f - 1.45f; float z = 1f; y += (float) passenger.getMyRidingOffset(); @@ -481,6 +482,16 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli return 2; } + @Override + public Matrix4f getVehicleTransform() { + Matrix4f transform = new Matrix4f(); + transform.translate((float) getX(), (float) getY() + 1.45f, (float) getZ()); + transform.rotate(Axis.YP.rotationDegrees(-getYRot())); + transform.rotate(Axis.XP.rotationDegrees(getXRot())); + transform.rotate(Axis.ZP.rotationDegrees(getRoll())); + return transform; + } + @Override public void destroy() { Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); @@ -566,7 +577,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli if (this.cannotFire) return; x = 1.15f; - y = 0.62f; + y = 0.62f - 1.45f; z = 0.8f; worldPositionRight = transformPosition(transform, -x, y, z); @@ -628,7 +639,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli } } else if (entityData.get(WEAPON_TYPE) == 1 && this.getEntityData().get(LOADED_ROCKET) > 0) { x = 1.7f; - y = 0.62f; + y = 0.62f - 1.45f; z = 0.8f; worldPositionRight = transformPosition(transform, -x, y, z); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java index d2b817801..d2f821539 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java @@ -10,6 +10,7 @@ import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.tools.CustomExplosion; import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.ParticleTool; +import com.mojang.math.Axis; import net.minecraft.core.BlockPos; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; @@ -259,7 +260,7 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity { Matrix4f transform = getVehicleTransform(); float x = 0f; - float y = 0.95f; + float y = 0.45f; float z = -0.4f; y += (float) passenger.getMyRidingOffset(); @@ -287,6 +288,16 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity { entity.setYBodyRot(getYRot()); } + @Override + public Matrix4f getVehicleTransform() { + Matrix4f transform = new Matrix4f(); + transform.translate((float) getX(), (float) getY() + 0.5f, (float) getZ()); + transform.rotate(Axis.YP.rotationDegrees(-getYRot())); + transform.rotate(Axis.XP.rotationDegrees(getXRot())); + transform.rotate(Axis.ZP.rotationDegrees(getRoll())); + return transform; + } + @Override public void destroy() { Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID));