diff --git a/src/main/java/com/atsuishio/superbwarfare/api/event/PreKillEvent.java b/src/main/java/com/atsuishio/superbwarfare/api/event/PreKillEvent.java index 03c982f11..1ca33b19d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/api/event/PreKillEvent.java +++ b/src/main/java/com/atsuishio/superbwarfare/api/event/PreKillEvent.java @@ -11,7 +11,7 @@ import org.jetbrains.annotations.ApiStatus; * 玩家击杀生物后,用于判断是否发送击杀播报/显示击杀指示 */ @ApiStatus.Internal -@ApiStatus.AvailableSince("0.7.7") +@ApiStatus.AvailableSince("0.8.0") public class PreKillEvent extends Event implements ICancellableEvent { private final Player player; diff --git a/src/main/java/com/atsuishio/superbwarfare/api/event/RegisterContainersEvent.java b/src/main/java/com/atsuishio/superbwarfare/api/event/RegisterContainersEvent.java index 010f7bd51..57f7775ae 100644 --- a/src/main/java/com/atsuishio/superbwarfare/api/event/RegisterContainersEvent.java +++ b/src/main/java/com/atsuishio/superbwarfare/api/event/RegisterContainersEvent.java @@ -15,7 +15,7 @@ import java.util.List; /** * Register Entities as a container */ -@ApiStatus.AvailableSince("0.7.7") +@ApiStatus.AvailableSince("0.8.0") public class RegisterContainersEvent extends Event implements IModBusEvent { public static final List containers = new ArrayList<>(); diff --git a/src/main/java/com/atsuishio/superbwarfare/api/event/ReloadEvent.java b/src/main/java/com/atsuishio/superbwarfare/api/event/ReloadEvent.java index 7e81fb029..42a2b3f87 100644 --- a/src/main/java/com/atsuishio/superbwarfare/api/event/ReloadEvent.java +++ b/src/main/java/com/atsuishio/superbwarfare/api/event/ReloadEvent.java @@ -7,7 +7,7 @@ import net.neoforged.bus.api.Event; import org.jetbrains.annotations.ApiStatus; @ApiStatus.Internal -@ApiStatus.AvailableSince("0.7.7") +@ApiStatus.AvailableSince("0.8.0") public class ReloadEvent extends Event { public final Player player; diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java index 076e87b33..8db61e466 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java @@ -1094,4 +1094,9 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity } return super.getCameraPosition(partialTicks, player, false, false); } + + @OnlyIn(Dist.CLIENT) + public boolean useFixedCameraPos(Entity entity) { + return true; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java index 31236cd2d..d9e3623fb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -631,4 +631,9 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, } return super.getCameraPosition(partialTicks, player, false, false); } + + @OnlyIn(Dist.CLIENT) + public boolean useFixedCameraPos(Entity entity) { + return true; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java index c13095e1b..03d49d048 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java @@ -483,4 +483,9 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity } return super.getCameraPosition(partialTicks, player, false, false); } + + @OnlyIn(Dist.CLIENT) + public boolean useFixedCameraPos(Entity entity) { + return true; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java index 8d94fda82..07be61d6a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java @@ -552,4 +552,9 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt } return super.getCameraPosition(partialTicks, player, false, false); } + + @OnlyIn(Dist.CLIENT) + public boolean useFixedCameraPos(Entity entity) { + return true; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/PrismTankEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/PrismTankEntity.java index e5e1ebc97..c63045597 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/PrismTankEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/PrismTankEntity.java @@ -844,4 +844,9 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo } return super.getCameraPosition(partialTicks, player, false, false); } + + @OnlyIn(Dist.CLIENT) + public boolean useFixedCameraPos(Entity entity) { + return this.getSeatIndex(entity) == 0; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java index eb0f48dc6..c6fde6af8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -598,4 +598,9 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo } return super.getCameraPosition(partialTicks, player, zoom, isFirstPerson); } + + @OnlyIn(Dist.CLIENT) + public boolean useFixedCameraPos(Entity entity) { + return this.getSeatIndex(entity) == 0; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java index 7faa1a227..c721a7db4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java @@ -1026,14 +1026,33 @@ public abstract class VehicleEntity extends Entity { public void renderThirdPersonOverlay(GuiGraphics guiGraphics, Font font, Player player, int screenWidth, int screenHeight, float scale) { } + /** + * 获取视角旋转 + * + * @param zoom 是否在载具上瞄准 + * @param isFirstPerson 是否是第一人称视角 + */ @OnlyIn(Dist.CLIENT) @Nullable public Vec2 getCameraRotation(float partialTicks, Player player, boolean zoom, boolean isFirstPerson) { return null; } + /** + * 获取视角位置 + * @param zoom 是否在载具上瞄准 + * @param isFirstPerson 是否是第一人称视角 + */ @OnlyIn(Dist.CLIENT) public Vec3 getCameraPosition(float partialTicks, Player player, boolean zoom, boolean isFirstPerson) { return null; } + + /** + * 是否使用载具固定视角 + */ + @OnlyIn(Dist.CLIENT) + public boolean useFixedCameraPos(Entity entity) { + return false; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/GameRendererMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/GameRendererMixin.java index f8d9e146e..9868a3482 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/GameRendererMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/GameRendererMixin.java @@ -1,9 +1,5 @@ package com.atsuishio.superbwarfare.mixins; -import com.atsuishio.superbwarfare.entity.vehicle.A10Entity; -import com.atsuishio.superbwarfare.entity.vehicle.PrismTankEntity; -import com.atsuishio.superbwarfare.entity.vehicle.SpeedboatEntity; -import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.mojang.blaze3d.vertex.PoseStack; @@ -52,11 +48,8 @@ public class GameRendererMixin { if (entity != null && !mainCamera.isDetached() && entity.getRootVehicle() instanceof VehicleEntity vehicle) { // rotate camera float a = vehicle.getTurretYaw(partialTicks); - float r = (Mth.abs(a) - 90f) / 90f; - float r2; - if (Mth.abs(a) <= 90f) { r2 = a / 90f; } else { @@ -69,10 +62,7 @@ public class GameRendererMixin { poseStack.mulPose(Axis.ZP.rotationDegrees(-r * vehicle.getRoll(partialTicks) + r2 * vehicle.getViewXRot(partialTicks))); - if (!(vehicle instanceof SpeedboatEntity speedboat && entity == speedboat.getFirstPassenger()) && - !(vehicle instanceof PrismTankEntity prismTank && entity == prismTank.getFirstPassenger()) && - !(vehicle instanceof CannonEntity) && !(vehicle instanceof A10Entity) - ) { + if (!vehicle.useFixedCameraPos(entity)) { // fetch eye offset float eye = entity.getEyeHeight();