尝试修复引擎音效问题

This commit is contained in:
17146 2025-05-24 16:47:45 +08:00 committed by Light_Quanta
parent b3f8e7d671
commit 0c86fe5755
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
3 changed files with 28 additions and 19 deletions

View file

@ -127,7 +127,7 @@ public class Mod {
MolangVariable.register(); MolangVariable.register();
MobileVehicleEntity.trackSound = vehicle -> Minecraft.getInstance().getSoundManager().play(new VehicleSoundInstance.TrackSound(vehicle)); 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));
} }
} }

View file

@ -82,13 +82,14 @@ public abstract class VehicleSoundInstance extends AbstractTickableSoundInstance
} }
public static class EngineSound extends VehicleSoundInstance { 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 @Override
protected boolean canPlay(MobileVehicleEntity mobileVehicle) { protected boolean canPlay(MobileVehicleEntity mobileVehicle) {
return true; return mobileVehicle.engineRunning();
} }
@Override @Override

View file

@ -88,6 +88,8 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements
public double lastTickVerticalSpeed; public double lastTickVerticalSpeed;
public int collisionCoolDown; public int collisionCoolDown;
private boolean wasEngineRunning = false;
public float rudderRot; public float rudderRot;
public float rudderRotO; public float rudderRotO;
@ -136,18 +138,6 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements
super(pEntityType, pLevel); 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 @Override
public void processInput(short keys) { public void processInput(short keys) {
leftInputDown leftInputDown
@ -170,8 +160,25 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements
= (keys & 0b100000000) > 0; = (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 @Override
public void baseTick() { public void baseTick() {
if (!this.wasEngineRunning && this.engineRunning() && this.level().isClientSide()) {
engineSound.accept(this);
}
this.wasEngineRunning = this.engineRunning();
turretYRotO = this.getTurretYRot(); turretYRotO = this.getTurretYRot();
turretXRotO = this.getTurretXRot(); turretXRotO = this.getTurretXRot();
@ -223,9 +230,6 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements
// 更新前一时刻的速度 // 更新前一时刻的速度
previousVelocity = currentVelocity; previousVelocity = currentVelocity;
engineSound.accept(this);
double direct = (90 - calculateAngle(this.getDeltaMovement(), this.getViewVector(1))) / 90; double direct = (90 - calculateAngle(this.getDeltaMovement(), this.getViewVector(1))) / 90;
setVelocity(Mth.lerp(0.4, getVelocity(), getDeltaMovement().horizontalDistance() * direct * 20)); setVelocity(Mth.lerp(0.4, getVelocity(), getDeltaMovement().horizontalDistance() * direct * 20));
@ -881,6 +885,10 @@ public abstract class MobileVehicleEntity extends EnergyVehicleEntity implements
return false; return false;
} }
public boolean engineRunning() {
return Math.abs(this.entityData.get(POWER)) > 0;
}
@Override @Override
protected void defineSynchedData(SynchedEntityData.Builder builder) { protected void defineSynchedData(SynchedEntityData.Builder builder) {
super.defineSynchedData(builder); super.defineSynchedData(builder);