尝试修复引擎音效问题

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();
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 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

View file

@ -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);