diff --git a/src/main/java/com/atsuishio/superbwarfare/Mod.java b/src/main/java/com/atsuishio/superbwarfare/Mod.java index 43c462e23..30cbbdfcf 100644 --- a/src/main/java/com/atsuishio/superbwarfare/Mod.java +++ b/src/main/java/com/atsuishio/superbwarfare/Mod.java @@ -127,7 +127,7 @@ public class Mod { MolangVariable.register(); MobileVehicleEntity.trackSound = vehicle -> Minecraft.getInstance().getSoundManager().play(new VehicleSoundInstance.TrackSound(vehicle)); - MobileVehicleEntity.engineSound = vehicle -> Minecraft.getInstance().getSoundManager().play(new VehicleSoundInstance.EngineSound(vehicle, vehicle.getEngineSound())); + MobileVehicleEntity.engineSound = vehicle -> Minecraft.getInstance().getSoundManager().play(new VehicleSoundInstance.EngineSound(vehicle)); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/sound/VehicleSoundInstance.java b/src/main/java/com/atsuishio/superbwarfare/client/sound/VehicleSoundInstance.java index 74550abfa..4b97dc1d4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/sound/VehicleSoundInstance.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/sound/VehicleSoundInstance.java @@ -82,13 +82,14 @@ public abstract class VehicleSoundInstance extends AbstractTickableSoundInstance } public static class EngineSound extends VehicleSoundInstance { - public EngineSound(MobileVehicleEntity mobileVehicle, SoundEvent soundEvent) { - super(soundEvent, Minecraft.getInstance(), mobileVehicle); + + public EngineSound(MobileVehicleEntity mobileVehicle) { + super(mobileVehicle.getEngineSound(), Minecraft.getInstance(), mobileVehicle); } @Override protected boolean canPlay(MobileVehicleEntity mobileVehicle) { - return true; + return mobileVehicle.engineRunning(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/MobileVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/MobileVehicleEntity.java index ed4590175..bfc5c32b9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/MobileVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/MobileVehicleEntity.java @@ -88,6 +88,8 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements public double lastTickVerticalSpeed; public int collisionCoolDown; + private boolean wasEngineRunning = false; + public float rudderRot; public float rudderRotO; @@ -136,18 +138,6 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements super(pEntityType, pLevel); } - @Override - public void playerTouch(Player pPlayer) { - if (pPlayer.isCrouching() && !this.level().isClientSide) { - double entitySize = pPlayer.getBbWidth() * pPlayer.getBbHeight(); - double thisSize = this.getBbWidth() * this.getBbHeight(); - double f = Math.min(entitySize / thisSize, 2); - double f1 = Math.min(thisSize / entitySize, 4); - this.setDeltaMovement(this.getDeltaMovement().add(new Vec3(pPlayer.position().vectorTo(this.position()).toVector3f()).scale(0.15 * f * pPlayer.getDeltaMovement().length()))); - pPlayer.setDeltaMovement(pPlayer.getDeltaMovement().add(new Vec3(this.position().vectorTo(pPlayer.position()).toVector3f()).scale(0.1 * f1 * pPlayer.getDeltaMovement().length()))); - } - } - @Override public void processInput(short keys) { leftInputDown @@ -170,8 +160,25 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements = (keys & 0b100000000) > 0; } + @Override + public void playerTouch(Player pPlayer) { + if (pPlayer.isCrouching() && !this.level().isClientSide) { + double entitySize = pPlayer.getBbWidth() * pPlayer.getBbHeight(); + double thisSize = this.getBbWidth() * this.getBbHeight(); + double f = Math.min(entitySize / thisSize, 2); + double f1 = Math.min(thisSize / entitySize, 4); + this.setDeltaMovement(this.getDeltaMovement().add(new Vec3(pPlayer.position().vectorTo(this.position()).toVector3f()).scale(0.15 * f * pPlayer.getDeltaMovement().length()))); + pPlayer.setDeltaMovement(pPlayer.getDeltaMovement().add(new Vec3(this.position().vectorTo(pPlayer.position()).toVector3f()).scale(0.1 * f1 * pPlayer.getDeltaMovement().length()))); + } + } + @Override public void baseTick() { + if (!this.wasEngineRunning && this.engineRunning() && this.level().isClientSide()) { + engineSound.accept(this); + } + this.wasEngineRunning = this.engineRunning(); + turretYRotO = this.getTurretYRot(); turretXRotO = this.getTurretXRot(); @@ -223,9 +230,6 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements // 更新前一时刻的速度 previousVelocity = currentVelocity; - - engineSound.accept(this); - double direct = (90 - calculateAngle(this.getDeltaMovement(), this.getViewVector(1))) / 90; setVelocity(Mth.lerp(0.4, getVelocity(), getDeltaMovement().horizontalDistance() * direct * 20)); @@ -881,6 +885,10 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements return false; } + public boolean engineRunning() { + return Math.abs(this.entityData.get(POWER)) > 0; + } + @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder);