From 39d012b055f9c0a77692a0a858dc5acc12dc7d2c Mon Sep 17 00:00:00 2001 From: Atsuishio <842960157@qq.com> Date: Sun, 4 May 2025 13:32:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8F=96=E8=BD=BD=E5=85=B7=E6=AD=A6?= =?UTF-8?q?=E5=99=A8=E9=9F=B3=E6=95=88=E6=92=AD=E6=94=BE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../renderer/entity/PrismTankRenderer.java | 5 +- .../entity/vehicle/Ah6Entity.java | 27 ++-- .../entity/vehicle/AnnihilatorEntity.java | 5 + .../entity/vehicle/Bmp2Entity.java | 44 ++++--- .../entity/vehicle/Hpj11Entity.java | 4 + .../entity/vehicle/Lav150Entity.java | 36 ++++-- .../entity/vehicle/Mk42Entity.java | 5 + .../entity/vehicle/Mle1934Entity.java | 5 + .../entity/vehicle/PrismTankEntity.java | 17 ++- .../entity/vehicle/SpeedboatEntity.java | 15 ++- .../entity/vehicle/Yx100Entity.java | 59 +++++---- .../vehicle/base/ArmedVehicleEntity.java | 2 + .../vehicle/base/WeaponVehicleEntity.java | 20 +++ .../entity/vehicle/weapon/VehicleWeapon.java | 28 ++++ .../event/ClientEventHandler.java | 122 ++---------------- .../sounds/yx100/yx100_fire_3p.ogg | Bin 21245 -> 18311 bytes 16 files changed, 204 insertions(+), 190 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/PrismTankRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/PrismTankRenderer.java index 1eb8b7f07..e70ef0d1a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/PrismTankRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/PrismTankRenderer.java @@ -17,6 +17,7 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Player; import net.minecraft.world.phys.AABB; +import org.jetbrains.annotations.NotNull; import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.renderer.GeoEntityRenderer; @@ -45,7 +46,7 @@ public class PrismTankRenderer extends GeoEntityRenderer { } @Override - public void render(PrismTankEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { + public void render(PrismTankEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, @NotNull MultiBufferSource bufferIn, int packedLightIn) { poseStack.pushPose(); poseStack.mulPose(Axis.YP.rotationDegrees(-Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot()))); poseStack.mulPose(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot()))); @@ -83,7 +84,7 @@ public class PrismTankRenderer extends GeoEntityRenderer { bone.setRotY(Mth.lerp(partialTick, animatable.turretYRotO, animatable.getTurretYRot()) * Mth.DEG_TO_RAD); } - if (name.equals("head") || name.equals("head2")) { + if (name.equals("head")) { Player player = Minecraft.getInstance().player; bone.setHidden(ClientEventHandler.zoomVehicle && animatable.getFirstPassenger() == player); } 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 3b90b4b0e..2b59f9373 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -28,7 +28,6 @@ import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; -import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.util.Mth; import net.minecraft.world.damagesource.DamageTypes; @@ -84,12 +83,18 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity .explosionDamage(VehicleConfig.AH_6_CANNON_EXPLOSION_DAMAGE.get().floatValue()) .explosionRadius(VehicleConfig.AH_6_CANNON_EXPLOSION_RADIUS.get().floatValue()) .sound(ModSounds.INTO_CANNON.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/cannon_20mm.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/cannon_20mm.png")) + .sound1p(ModSounds.HELICOPTER_CANNON_FIRE_1P.get()) + .sound3p(ModSounds.HELICOPTER_CANNON_FIRE_3P.get()) + .sound3pFar(ModSounds.HELICOPTER_CANNON_FAR.get()) + .sound3pVeryFar(ModSounds.HELICOPTER_CANNON_VERYFAR.get()), new HeliRocketWeapon() .damage(VehicleConfig.AH_6_ROCKET_DAMAGE.get()) .explosionDamage(VehicleConfig.AH_6_ROCKET_EXPLOSION_DAMAGE.get()) .explosionRadius(VehicleConfig.AH_6_ROCKET_EXPLOSION_RADIUS.get()) - .sound(ModSounds.INTO_MISSILE.get()), + .sound(ModSounds.INTO_MISSILE.get()) + .sound1p(ModSounds.HELICOPTER_ROCKET_FIRE_1P.get()) + .sound3p(ModSounds.HELICOPTER_ROCKET_FIRE_3P.get()), } }; } @@ -563,12 +568,9 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity this.entityData.set(HEAT, this.entityData.get(HEAT) + 4); if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.HELICOPTER_CANNON_FIRE_3P.get(), 4, 1); - serverPlayer.playSound(ModSounds.HELICOPTER_CANNON_FAR.get(), 12, 1); - serverPlayer.playSound(ModSounds.HELICOPTER_CANNON_VERYFAR.get(), 24, 1); - } + playShootSound3p(player, 0, 4, 12, 24); } + } else if (getWeaponIndex(0) == 1 && this.getEntityData().get(LOADED_ROCKET) > 0) { x = 1.7f; y = 0.62f - 1.45f; @@ -591,9 +593,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity player.level().addFreshEntity(heliRocketEntity); if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.HELICOPTER_ROCKET_FIRE_3P.get(), 6, 1); - } + playShootSound3p(player, 0, 6, 6, 6); } this.entityData.set(LOADED_ROCKET, this.getEntityData().get(LOADED_ROCKET) - 1); @@ -631,6 +631,11 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity return 3; } + @Override + public int getWeaponHeat(Player player) { + return entityData.get(HEAT); + } + @Override public float getRotX(float tickDelta) { return this.getPitch(tickDelta); 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 d5a7c8c21..89c2877c9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -588,6 +588,11 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, return 5; } + @Override + public int getWeaponHeat(Player player) { + return 0; + } + @Override public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/annihilator_icon.png"); 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 772d6983e..68d07ceae 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java @@ -96,18 +96,28 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit .explosionDamage(VehicleConfig.BMP_2_CANNON_EXPLOSION_DAMAGE.get()) .explosionRadius(VehicleConfig.BMP_2_CANNON_EXPLOSION_RADIUS.get().floatValue()) .sound(ModSounds.INTO_MISSILE.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/cannon_30mm.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/cannon_30mm.png")) + .sound1p(ModSounds.BMP_CANNON_FIRE_1P.get()) + .sound3p(ModSounds.BMP_CANNON_FIRE_3P.get()) + .sound3pFar(ModSounds.LAV_CANNON_FAR.get()) + .sound3pVeryFar(ModSounds.LAV_CANNON_VERYFAR.get()), new ProjectileWeapon() .damage(9.5f) .headShot(2) .zoom(false) .sound(ModSounds.INTO_CANNON.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/gun_7_62mm.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/gun_7_62mm.png")) + .sound1p(ModSounds.COAX_FIRE_1P.get()) + .sound3p(ModSounds.M_60_FIRE_3P.get()) + .sound3pFar(ModSounds.M_60_FAR.get()) + .sound3pVeryFar(ModSounds.M_60_VERYFAR.get()), new WgMissileWeapon() .damage(ExplosionConfig.WIRE_GUIDE_MISSILE_DAMAGE.get()) .explosionDamage(ExplosionConfig.WIRE_GUIDE_MISSILE_EXPLOSION_DAMAGE.get()) .explosionRadius(ExplosionConfig.WIRE_GUIDE_MISSILE_EXPLOSION_RADIUS.get()) - .sound(ModSounds.INTO_MISSILE.get()), + .sound(ModSounds.INTO_MISSILE.get()) + .sound1p(ModSounds.BMP_MISSILE_FIRE_1P.get()) + .sound3p(ModSounds.BMP_MISSILE_FIRE_3P.get()), } }; } @@ -345,14 +355,8 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit sendParticle((ServerLevel) this.level(), ParticleTypes.LARGE_SMOKE, worldPosition.x - 1.1 * this.getDeltaMovement().x, worldPosition.y, worldPosition.z - 1.1 * this.getDeltaMovement().z, 1, 0.02, 0.02, 0.02, 0, false); - float pitch = this.entityData.get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - this.entityData.get(HEAT))); - if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.BMP_CANNON_FIRE_3P.get(), 4, pitch); - serverPlayer.playSound(ModSounds.LAV_CANNON_FAR.get(), 12, pitch); - serverPlayer.playSound(ModSounds.LAV_CANNON_VERYFAR.get(), 24, pitch); - } + playShootSound3p(player, 0, 4, 12, 24); } Level level = player.level(); @@ -410,11 +414,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit this.entityData.set(FIRE_ANIM, 2); if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.M_60_FIRE_3P.get(), 3, 1); - serverPlayer.playSound(ModSounds.M_60_FAR.get(), 6, 1); - serverPlayer.playSound(ModSounds.M_60_VERYFAR.get(), 12, 1); - } + playShootSound3p(player, 0, 3, 6, 12); } } else if (getWeaponIndex(0) == 2 && this.getEntityData().get(LOADED_MISSILE) > 0) { Matrix4f transformT = getBarrelTransform(1); @@ -427,9 +427,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit player.level().addFreshEntity(wgMissileEntity); if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.BMP_MISSILE_FIRE_3P.get(), 6, 1); - } + playShootSound3p(player, 0, 6, 0, 0); } this.entityData.set(LOADED_MISSILE, this.getEntityData().get(LOADED_MISSILE) - 1); @@ -724,6 +722,16 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit return 3; } + @Override + public int getWeaponHeat(Player player) { + if (getWeaponIndex(0) == 0) { + return entityData.get(HEAT); + } else if (getWeaponIndex(0) == 1) { + return entityData.get(COAX_HEAT); + } + return 0; + } + @Override public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/bmp2_icon.png"); 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 dd19b54b4..c5264c68d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Hpj11Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Hpj11Entity.java @@ -575,6 +575,10 @@ public class Hpj11Entity extends ContainerMobileVehicleEntity implements GeoEnti return 2; } + @Override + public int getWeaponHeat(Player player) { + return entityData.get(HEAT); + } @Override public Vec3 getBarrelVector(float pPartialTicks) { if (getFirstPassenger() != null) { 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 32644b1ab..8db8db47a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -84,13 +84,21 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt .explosionDamage(VehicleConfig.LAV_150_CANNON_EXPLOSION_DAMAGE.get()) .explosionRadius(VehicleConfig.LAV_150_CANNON_EXPLOSION_RADIUS.get().floatValue()) .sound(ModSounds.INTO_MISSILE.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/cannon_20mm.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/cannon_20mm.png")) + .sound1p(ModSounds.LAV_CANNON_FIRE_1P.get()) + .sound3p(ModSounds.LAV_CANNON_FIRE_3P.get()) + .sound3pFar(ModSounds.LAV_CANNON_FAR.get()) + .sound3pVeryFar(ModSounds.LAV_CANNON_VERYFAR.get()), new ProjectileWeapon() .damage(9.5f) .headShot(2) .zoom(false) .sound(ModSounds.INTO_CANNON.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/gun_7_62mm.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/gun_7_62mm.png")) + .sound1p(ModSounds.COAX_FIRE_1P.get()) + .sound3p(ModSounds.RPK_FIRE_3P.get()) + .sound3pFar(ModSounds.RPK_FAR.get()) + .sound3pVeryFar(ModSounds.RPK_VERYFAR.get()), } }; } @@ -252,14 +260,8 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt sendParticle((ServerLevel) this.level(), ParticleTypes.LARGE_SMOKE, worldPosition.x - 1.1 * this.getDeltaMovement().x, worldPosition.y, worldPosition.z - 1.1 * this.getDeltaMovement().z, 1, 0.02, 0.02, 0.02, 0, false); - float pitch = this.entityData.get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - this.entityData.get(HEAT))); - if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.LAV_CANNON_FIRE_3P.get(), 4, pitch); - serverPlayer.playSound(ModSounds.LAV_CANNON_FAR.get(), 12, pitch); - serverPlayer.playSound(ModSounds.LAV_CANNON_VERYFAR.get(), 24, pitch); - } + playShootSound3p(player, 0, 4, 12, 24); } Level level = player.level(); @@ -318,11 +320,7 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt this.entityData.set(FIRE_ANIM, 2); if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.RPK_FIRE_3P.get(), 3, 1); - serverPlayer.playSound(ModSounds.RPK_FAR.get(), 6, 1); - serverPlayer.playSound(ModSounds.RPK_VERYFAR.get(), 12, 1); - } + playShootSound3p(player, 0, 3, 6, 12); } } } @@ -591,6 +589,16 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt return 3; } + @Override + public int getWeaponHeat(Player player) { + if (getWeaponIndex(0) == 0) { + return entityData.get(HEAT); + } else if (getWeaponIndex(0) == 1) { + return entityData.get(COAX_HEAT); + } + return 0; + } + @Override public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/lav150_icon.png"); 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 1addc3fa0..09284e416 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java @@ -435,6 +435,11 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity return 5; } + @Override + public int getWeaponHeat(Player player) { + return 0; + } + @Override public Vec3 getBarrelVector(float pPartialTicks) { if (getFirstPassenger() != null) { 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 df4afcd4b..111e40f8f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java @@ -504,6 +504,11 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt return 5; } + @Override + public int getWeaponHeat(Player player) { + return 0; + } + @Override public Vec3 getBarrelVector(float pPartialTicks) { if (getFirstPassenger() != null) { 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 92b478b68..af5b4776b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/PrismTankEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/PrismTankEntity.java @@ -94,7 +94,9 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo return new VehicleWeapon[][]{ new VehicleWeapon[]{ new LaserWeapon() - .sound(ModSounds.INTO_MISSILE.get()), + .sound(ModSounds.INTO_MISSILE.get()) + .sound1p(ModSounds.PRISM_FIRE_1P.get()) + .sound3p(ModSounds.PRISM_FIRE_3P.get()), new LaserWeapon() .sound(ModSounds.INTO_CANNON.get()) } @@ -295,9 +297,7 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo Level level = player.level(); if (level instanceof ServerLevel) { if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.PRISM_FIRE_3P.get(), 5, 1); - } + playShootSound3p(player, 0, 5, 5, 5); } this.entityData.set(HEAT, entityData.get(HEAT) + 55); @@ -336,9 +336,7 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo if (level instanceof ServerLevel) { if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.PRISM_FIRE_3P_2.get(), 4, 1); - } + playShootSound3p(player, 0, 4, 4, 4); } this.entityData.set(HEAT, entityData.get(HEAT) + 2); @@ -771,6 +769,11 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo return 3; } + @Override + public int getWeaponHeat(Player player) { + return entityData.get(HEAT); + } + @Override public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/prism_tank_icon.png"); 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 b7c885a4e..52ade33e8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -66,6 +66,10 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo .headShot(2) .zoom(false) .icon(Mod.loc("textures/screens/vehicle_weapon/gun_12_7mm.png")) + .sound1p(ModSounds.M_2_FIRE_1P.get()) + .sound3p(ModSounds.M_2_FIRE_3P.get()) + .sound3pFar(ModSounds.M_2_FAR.get()) + .sound3pVeryFar(ModSounds.M_2_VERYFAR.get()) } }; } @@ -215,11 +219,7 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo float pitch = this.entityData.get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - this.entityData.get(HEAT))); if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.M_2_FIRE_3P.get(), 4, pitch); - serverPlayer.playSound(ModSounds.M_2_FAR.get(), 12, pitch); - serverPlayer.playSound(ModSounds.M_2_VERYFAR.get(), 24, pitch); - } + playShootSound3p(player, 0, 4, 12, 24); } Level level = player.level(); @@ -561,6 +561,11 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo return 1; } + @Override + public int getWeaponHeat(Player player) { + return entityData.get(HEAT); + } + @Override public ResourceLocation getVehicleIcon() { return Mod.loc("textures/vehicle_icon/speedboat_icon.png"); 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 f59d01ef9..897a813ff 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java @@ -109,7 +109,11 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti .gravity(0.1f) .sound(ModSounds.INTO_MISSILE.get()) .ammo(ModItems.AP_5_INCHES.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/ap_shell.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/ap_shell.png")) + .sound1p(ModSounds.YX_100_FIRE_1P.get()) + .sound3p(ModSounds.YX_100_FIRE_3P.get()) + .sound3pFar(ModSounds.YX_100_FAR.get()) + .sound3pVeryFar(ModSounds.YX_100_VERYFAR.get()), // HE new CannonShellWeapon() .hitDamage(VehicleConfig.YX_100_HE_CANNON_DAMAGE.get()) @@ -122,7 +126,11 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti .gravity(0.1f) .sound(ModSounds.INTO_CANNON.get()) .ammo(ModItems.HE_5_INCHES.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/he_shell.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/he_shell.png")) + .sound1p(ModSounds.YX_100_FIRE_1P.get()) + .sound3p(ModSounds.YX_100_FIRE_3P.get()) + .sound3pFar(ModSounds.YX_100_FAR.get()) + .sound3pVeryFar(ModSounds.YX_100_VERYFAR.get()), // 同轴重机枪 new ProjectileWeapon() .damage(VehicleConfig.HEAVY_MACHINE_GUN_DAMAGE.get()) @@ -131,7 +139,11 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti .bypassArmorRate(0.4f) .ammo(ModItems.HEAVY_AMMO.get()) .sound(ModSounds.INTO_CANNON.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/gun_12_7mm.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/gun_12_7mm.png")) + .sound1p(ModSounds.M_2_FIRE_1P.get()) + .sound3p(ModSounds.M_2_FIRE_3P.get()) + .sound3pFar(ModSounds.M_2_FAR.get()) + .sound3pVeryFar(ModSounds.M_2_VERYFAR.get()), }, new VehicleWeapon[]{ // 机枪 @@ -141,7 +153,11 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti .zoom(false) .bypassArmorRate(0.4f) .ammo(ModItems.HEAVY_AMMO.get()) - .icon(Mod.loc("textures/screens/vehicle_weapon/gun_12_7mm.png")), + .icon(Mod.loc("textures/screens/vehicle_weapon/gun_12_7mm.png")) + .sound1p(ModSounds.M_2_FIRE_1P.get()) + .sound3p(ModSounds.M_2_FIRE_3P.get()) + .sound3pFar(ModSounds.M_2_FAR.get()) + .sound3pVeryFar(ModSounds.M_2_VERYFAR.get()), }, new VehicleWeapon[]{ // 蜂群无人机 @@ -465,11 +481,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti level().addFreshEntity(entityToSpawn); if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.YX_100_FIRE_3P.get(), 8, 1); - serverPlayer.playSound(ModSounds.YX_100_FAR.get(), 16, 1); - serverPlayer.playSound(ModSounds.YX_100_VERYFAR.get(), 32, 1); - } + playShootSound3p(player, 0, 8, 16, 32); } this.entityData.set(CANNON_RECOIL_TIME, 40); @@ -568,14 +580,8 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti this.entityData.set(COAX_HEAT, this.entityData.get(COAX_HEAT) + 4); this.entityData.set(FIRE_ANIM, 2); - float pitch = this.entityData.get(COAX_HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - this.entityData.get(COAX_HEAT))); - if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.M_2_FIRE_3P.get(), 4, pitch); - serverPlayer.playSound(ModSounds.M_2_FAR.get(), 12, pitch); - serverPlayer.playSound(ModSounds.M_2_VERYFAR.get(), 24, pitch); - } + playShootSound3p(player, 0, 4, 12, 24); } } } @@ -593,14 +599,8 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti this.level().addFreshEntity(projectileEntity); - float pitch = this.entityData.get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - this.entityData.get(HEAT))); - if (!player.level().isClientSide) { - if (player instanceof ServerPlayer serverPlayer) { - serverPlayer.playSound(ModSounds.M_2_FIRE_3P.get(), 4, pitch); - serverPlayer.playSound(ModSounds.M_2_FAR.get(), 12, pitch); - serverPlayer.playSound(ModSounds.M_2_VERYFAR.get(), 24, pitch); - } + playShootSound3p(player, 1, 4, 12, 24); } this.entityData.set(GUN_FIRE_TIME, 2); @@ -1163,6 +1163,19 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti return 3; } + @Override + public int getWeaponHeat(Player player) { + if (player == getNthEntity(0)) { + return entityData.get(COAX_HEAT); + } + + if (player == getNthEntity(1)) { + return entityData.get(HEAT); + } + + return 0; + } + @Override public void changeWeapon(int index, int value, boolean isScroll) { if (index != 0) return; diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ArmedVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ArmedVehicleEntity.java index d7fa016e5..7455592ab 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ArmedVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/ArmedVehicleEntity.java @@ -74,4 +74,6 @@ public interface ArmedVehicleEntity { * @return 放大倍率 */ int zoomFov(); + + int getWeaponHeat(Player player); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/WeaponVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/WeaponVehicleEntity.java index d75aeef45..3416dc1e2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/WeaponVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/WeaponVehicleEntity.java @@ -1,6 +1,8 @@ package com.atsuishio.superbwarfare.entity.vehicle.base; import com.atsuishio.superbwarfare.entity.vehicle.weapon.VehicleWeapon; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.entity.player.Player; import java.util.ArrayList; import java.util.List; @@ -144,4 +146,22 @@ public interface WeaponVehicleEntity extends ArmedVehicleEntity { selectedWeapons.set(index, type); vehicle.getEntityData().set(VehicleEntity.SELECTED_WEAPON, selectedWeapons); } + + default void playShootSound3p(Player player, int seat, int radius, int radius2, int radius3) { + var weapons = getAvailableWeapons(seat); + var weapon = weapons.get(getWeaponIndex(seat)); + float pitch = getWeaponHeat(player) <= 60 ? 1 : (float) (1 - 0.011 * java.lang.Math.abs(60 - getWeaponHeat(player))); + + if (player instanceof ServerPlayer serverPlayer) { + if (weapon.sound3p != null) { + serverPlayer.playSound(weapon.sound3p, radius, pitch); + } + if (weapon.sound3pFar != null) { + serverPlayer.playSound(weapon.sound3pFar, radius2, pitch); + } + if (weapon.sound3pVeryFar != null) { + serverPlayer.playSound(weapon.sound3pVeryFar, radius3, pitch); + } + } + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/weapon/VehicleWeapon.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/weapon/VehicleWeapon.java index 6bacdff50..076bda0bb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/weapon/VehicleWeapon.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/weapon/VehicleWeapon.java @@ -24,6 +24,14 @@ public abstract class VehicleWeapon { public int backupAmmo; public SoundEvent sound; + // 第一人称射击音效 + public SoundEvent sound1p; + // 第三人称射击音效 + public SoundEvent sound3p; + public SoundEvent sound3pFar; + // 第一人称射击音效 + public SoundEvent sound3pVeryFar; + public VehicleWeapon icon(ResourceLocation icon) { this.icon = icon; @@ -76,4 +84,24 @@ public abstract class VehicleWeapon { this.maxAmmo = maxAmmo; return this; } + + public VehicleWeapon sound1p(SoundEvent sound1p) { + this.sound1p = sound1p; + return this; + } + + public VehicleWeapon sound3p(SoundEvent sound3p) { + this.sound3p = sound3p; + return this; + } + + public VehicleWeapon sound3pFar(SoundEvent sound3pFar) { + this.sound3pFar = sound3pFar; + return this; + } + + public VehicleWeapon sound3pVeryFar(SoundEvent sound3pVeryFar) { + this.sound3pVeryFar = sound3pVeryFar; + return this; + } } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 02445e014..0a9373b23 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -4,7 +4,8 @@ import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.client.ClickHandler; import com.atsuishio.superbwarfare.config.client.DisplayConfig; import com.atsuishio.superbwarfare.config.server.MiscConfig; -import com.atsuishio.superbwarfare.entity.vehicle.*; +import com.atsuishio.superbwarfare.entity.vehicle.Ah6Entity; +import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.ArmedVehicleEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.MobileVehicleEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; @@ -59,9 +60,6 @@ import software.bernie.geckolib.cache.object.GeoBone; import java.util.List; -import static com.atsuishio.superbwarfare.entity.vehicle.base.MobileVehicleEntity.COAX_HEAT; -import static com.atsuishio.superbwarfare.entity.vehicle.base.MobileVehicleEntity.HEAT; - @EventBusSubscriber(modid = Mod.MODID, bus = EventBusSubscriber.Bus.GAME, value = Dist.CLIENT) public class ClientEventHandler { @@ -860,114 +858,18 @@ public class ClientEventHandler { } public static void playVehicleClientSounds(Player player, WeaponVehicleEntity iVehicle, int type) { - if (iVehicle instanceof SpeedboatEntity speedboat) { - float pitch = speedboat.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - speedboat.getEntityData().get(HEAT))); - player.playSound(ModSounds.M_2_FIRE_1P.get(), 1f, pitch); - player.playSound(ModSounds.SHELL_CASING_50CAL.get(), 0.3f, 1); - } + var weapons = iVehicle.getAvailableWeapons(type); + var weapon = weapons.get(iVehicle.getWeaponIndex(type)); - if (iVehicle instanceof Ah6Entity ah6Entity) { - float pitch = ah6Entity.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - ah6Entity.getEntityData().get(HEAT))); - if (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) { - if (ah6Entity.getWeaponIndex(0) == 0) { - player.playSound(ModSounds.HELICOPTER_CANNON_FIRE_1P.get(), 1f, pitch); - } else if (ah6Entity.getWeaponIndex(0) == 1) { - player.playSound(ModSounds.HELICOPTER_ROCKET_FIRE_1P.get(), 1f, 1); - } - } else { - if (ah6Entity.getWeaponIndex(0) == 0) { - player.playSound(ModSounds.HELICOPTER_CANNON_FIRE_3P.get(), 4f, pitch); - } else if (ah6Entity.getWeaponIndex(0) == 1) { - player.playSound(ModSounds.HELICOPTER_ROCKET_FIRE_3P.get(), 4f, 1); - } + float pitch = iVehicle.getWeaponHeat(player) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - iVehicle.getWeaponHeat(player))); + + if (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || (zoomVehicle && !(iVehicle instanceof Ah6Entity))) { + if (weapon.sound1p != null) { + player.playSound(weapon.sound1p, 1f, pitch); } - - } - if (iVehicle instanceof Lav150Entity lav150) { - if (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) { - if (lav150.getWeaponIndex(0) == 0) { - float pitch = lav150.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - lav150.getEntityData().get(HEAT))); - player.playSound(ModSounds.LAV_CANNON_FIRE_1P.get(), 1f, pitch); - player.playSound(ModSounds.SHELL_CASING_50CAL.get(), 0.3f, 1); - } else if (lav150.getWeaponIndex(0) == 1) { - float pitch = lav150.getEntityData().get(COAX_HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - lav150.getEntityData().get(COAX_HEAT))); - player.playSound(ModSounds.COAX_FIRE_1P.get(), 1f, pitch); - } - } else { - if (lav150.getWeaponIndex(0) == 0) { - float pitch = lav150.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - lav150.getEntityData().get(HEAT))); - player.playSound(ModSounds.LAV_CANNON_FIRE_3P.get(), 4f, pitch); - } else if (lav150.getWeaponIndex(0) == 1) { - float pitch = lav150.getEntityData().get(COAX_HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - lav150.getEntityData().get(COAX_HEAT))); - player.playSound(ModSounds.M_60_FIRE_3P.get(), 4f, pitch); - } - } - - - } - if (iVehicle instanceof Bmp2Entity bmp2) { - if (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) { - if (bmp2.getWeaponIndex(0) == 0) { - float pitch = bmp2.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - bmp2.getEntityData().get(HEAT))); - player.playSound(ModSounds.BMP_CANNON_FIRE_1P.get(), 1f, pitch); - player.playSound(ModSounds.SHELL_CASING_50CAL.get(), 0.3f, 1); - } else if (bmp2.getWeaponIndex(0) == 1) { - float pitch = bmp2.getEntityData().get(COAX_HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - bmp2.getEntityData().get(COAX_HEAT))); - player.playSound(ModSounds.COAX_FIRE_1P.get(), 1f, pitch); - } else if (bmp2.getWeaponIndex(0) == 2) { - player.playSound(ModSounds.BMP_MISSILE_FIRE_1P.get(), 1f, 1); - } - } else { - if (bmp2.getWeaponIndex(0) == 0) { - float pitch = bmp2.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - bmp2.getEntityData().get(HEAT))); - player.playSound(ModSounds.BMP_CANNON_FIRE_3P.get(), 4f, pitch); - } else if (bmp2.getWeaponIndex(0) == 1) { - float pitch = bmp2.getEntityData().get(COAX_HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - bmp2.getEntityData().get(COAX_HEAT))); - player.playSound(ModSounds.M_60_FIRE_3P.get(), 4f, pitch); - } else if (bmp2.getWeaponIndex(0) == 2) { - player.playSound(ModSounds.BMP_MISSILE_FIRE_3P.get(), 4f, 1); - } - } - } - if (iVehicle instanceof Yx100Entity yx100) { - if (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) { - if (type == 1) { - float pitch = yx100.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - yx100.getEntityData().get(HEAT))); - player.playSound(ModSounds.M_2_FIRE_1P.get(), 1f, pitch); - player.playSound(ModSounds.SHELL_CASING_50CAL.get(), 0.3f, 1); - } else if (type == 0) { - if (yx100.getWeaponIndex(0) == 0 || yx100.getWeaponIndex(0) == 1) { - player.playSound(ModSounds.YX_100_FIRE_1P.get(), 1f, 1); - } else if (yx100.getWeaponIndex(0) == 2) { - float pitch = yx100.getEntityData().get(COAX_HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - yx100.getEntityData().get(COAX_HEAT))); - player.playSound(ModSounds.M_2_FIRE_1P.get(), 1f, pitch); - player.playSound(ModSounds.SHELL_CASING_50CAL.get(), 0.3f, 1); - } - } - } else { - if (type == 1) { - float pitch = yx100.getEntityData().get(HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - yx100.getEntityData().get(HEAT))); - player.playSound(ModSounds.M_2_FIRE_3P.get(), 4f, pitch); - } else if (type == 0) { - if (yx100.getWeaponIndex(0) == 0 || yx100.getWeaponIndex(0) == 1) { - player.playSound(ModSounds.YX_100_FIRE_3P.get(), 4f, 1); - } else if (yx100.getWeaponIndex(0) == 2) { - float pitch = yx100.getEntityData().get(COAX_HEAT) <= 60 ? 1 : (float) (1 - 0.011 * Math.abs(60 - yx100.getEntityData().get(COAX_HEAT))); - player.playSound(ModSounds.M_2_FIRE_3P.get(), 4f, pitch); - } - } - } - - } - if (iVehicle instanceof PrismTankEntity prismTank) { - if (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) { - if (prismTank.getWeaponIndex(0) == 0) { - player.playSound(ModSounds.PRISM_FIRE_1P.get(), 1f, 1); - } - } else { - if (prismTank.getWeaponIndex(0) == 0) { - player.playSound(ModSounds.PRISM_FIRE_3P.get(), 4f, 1); - } + } else { + if (weapon.sound3p != null) { + player.playSound(weapon.sound3p, 3f, pitch); } } } diff --git a/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_3p.ogg b/src/main/resources/assets/superbwarfare/sounds/yx100/yx100_fire_3p.ogg index 3765b8f359b3344c589f4f501fcf48014bf7eeb8..946f113cd1062ca2f27107f1defd0e9ed6b520d4 100644 GIT binary patch literal 18311 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