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 7a8ebeacb..ddbf115d6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/A10Entity.java @@ -1063,4 +1063,9 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity public int getDecoy() { return this.entityData.get(DECOY_COUNT); } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return 0.25; + } } 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 b25d02616..f81b06dfd 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -697,4 +697,9 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity public boolean allowFreeCam() { return true; } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return seatIndex == 0 && !isOnGround ? 0.33 : original; + } } 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 302c7f3ac..731fa3a8f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -605,4 +605,9 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/annihilator_icon.png"); } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return zoom ? 0.15 : 0.3; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java index 4631def2a..913cc8a09 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java @@ -774,4 +774,9 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit public boolean hasDecoy() { return true; } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return zoom ? 0.22 : 0.27; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Hpj11Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Hpj11Entity.java index da35c951c..bdc07316d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Hpj11Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Hpj11Entity.java @@ -588,6 +588,7 @@ public class Hpj11Entity extends ContainerMobileVehicleEntity implements GeoEnti public int getWeaponHeat(Player player) { return entityData.get(HEAT); } + @Override public Vec3 getBarrelVector(float pPartialTicks) { if (getFirstPassenger() != null) { @@ -600,4 +601,9 @@ public class Hpj11Entity extends ContainerMobileVehicleEntity implements GeoEnti public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/hpj_11.png"); } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return zoom ? 0.25 : 0.3; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java index adc350593..9a8c8c732 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -642,4 +642,9 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt public boolean hasDecoy() { return true; } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return zoom ? 0.23 : 0.3; + } } 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 a7eead5c2..eb473a7ed 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java @@ -452,4 +452,9 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/sherman_icon.png"); } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return zoom ? 0.15 : 0.3; + } } 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 494b0b1ac..a5f5e7dd8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java @@ -521,4 +521,9 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/mle1934_icon.png"); } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return zoom ? 0.15 : 0.3; + } } 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 2d016120b..9a34c669b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/PrismTankEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/PrismTankEntity.java @@ -812,4 +812,9 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo public boolean hasDecoy() { return true; } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return zoom ? 0.26 : 0.33; + } } 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 5e83610cf..cf04a8dee 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Tom6Entity.java @@ -232,7 +232,7 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity { @Override public SoundEvent getEngineSound() { - return SoundEvents.EMPTY; + return super.getEngineSound(); } @Override @@ -367,4 +367,9 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity { public boolean allowFreeCam() { return true; } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return 0.3; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java index 7de1f79e3..9bd555dd1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java @@ -1281,4 +1281,13 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti public boolean hasDecoy() { return true; } + + @Override + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + if (seatIndex == 0) { + return zoom ? 0.17 : 0.22; + } else if (seatIndex == 1) { + return zoom ? 0.25 : 0.35; + } else return original; + } } 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 de02d5626..dd7e031c0 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 @@ -971,6 +971,19 @@ public abstract class VehicleEntity extends Entity { return getEyePosition(); } + /** + * 玩家在载具上的灵敏度调整 + * + * @param original 原始灵敏度 + * @param zoom 是否在载具上瞄准 + * @param seatIndex 玩家座位 + * @param isOnGround 载具是否在地面 + * @return 调整后的灵敏度 + */ + public double getSensitivity(double original, boolean zoom, int seatIndex, boolean isOnGround) { + return original; + } + /** * 渲染载具的第一人称UI * 务必标记 @OnlyIn(Dist.CLIENT) ! diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientMouseHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientMouseHandler.java index e1ab9728a..e610aa9a3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientMouseHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientMouseHandler.java @@ -2,8 +2,9 @@ package com.atsuishio.superbwarfare.event; import com.atsuishio.superbwarfare.client.MouseMovementHandler; import com.atsuishio.superbwarfare.config.client.VehicleControlConfig; -import com.atsuishio.superbwarfare.entity.vehicle.*; -import com.atsuishio.superbwarfare.entity.vehicle.base.CannonEntity; +import com.atsuishio.superbwarfare.entity.vehicle.Ah6Entity; +import com.atsuishio.superbwarfare.entity.vehicle.Tom6Entity; +import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModMobEffects; import com.atsuishio.superbwarfare.item.gun.GunItem; @@ -138,44 +139,8 @@ public class ClientMouseHandler { return 0; } - if (player.getVehicle() instanceof Hpj11Entity) { - return ClientEventHandler.zoomVehicle ? 0.25 : 0.3; - } - - if (player.getVehicle() instanceof CannonEntity) { - return ClientEventHandler.zoomVehicle ? 0.15 : 0.3; - } - - if (player.getVehicle() instanceof Lav150Entity) { - return ClientEventHandler.zoomVehicle ? 0.23 : 0.3; - } - - if (player.getVehicle() instanceof Bmp2Entity) { - return ClientEventHandler.zoomVehicle ? 0.22 : 0.27; - } - - if (player.getVehicle() instanceof Yx100Entity yx100) { - if (player == yx100.getFirstPassenger()) { - return ClientEventHandler.zoomVehicle ? 0.17 : 0.22; - } else if (player == yx100.getNthEntity(1)) { - return ClientEventHandler.zoomVehicle ? 0.25 : 0.35; - } - } - - if (player.getVehicle() instanceof PrismTankEntity) { - return ClientEventHandler.zoomVehicle ? 0.26 : 0.33; - } - - if (player.getVehicle() instanceof Ah6Entity ah6Entity && !ah6Entity.onGround() && ah6Entity.getFirstPassenger() == player) { - return 0.33; - } - - if (player.getVehicle() instanceof Tom6Entity) { - return 0.3; - } - - if (player.getVehicle() instanceof A10Entity) { - return 0.25; + if (player.getVehicle() instanceof VehicleEntity vehicle) { + return vehicle.getSensitivity(original, ClientEventHandler.zoomVehicle, vehicle.getSeatIndex(player), vehicle.onGround()); } return original;