修复一个可能导致玩家卡在载具上的问题

This commit is contained in:
17146 2025-05-11 16:54:20 +08:00 committed by Light_Quanta
parent 7516a365a6
commit 3a36293ae6
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
17 changed files with 54 additions and 17 deletions

View file

@ -264,8 +264,8 @@ public class MortarEntity extends VehicleEntity implements GeoEntity {
ItemEntity mortar = new ItemEntity(level, x, (y + 1), z, new ItemStack(ModItems.MORTAR_DEPLOYER.get())); ItemEntity mortar = new ItemEntity(level, x, (y + 1), z, new ItemStack(ModItems.MORTAR_DEPLOYER.get()));
mortar.setPickUpDelay(10); mortar.setPickUpDelay(10);
level.addFreshEntity(mortar); level.addFreshEntity(mortar);
this.discard();
} }
super.destroy();
} }
@Override @Override

View file

@ -603,7 +603,7 @@ public class A10Entity extends ContainerMobileVehicleEntity implements GeoEntity
explosion.finalizeExplosion(false); explosion.finalizeExplosion(false);
ParticleTool.spawnHugeExplosionParticles(this.level(), this.position()); ParticleTool.spawnHugeExplosionParticles(this.level(), this.position());
} }
this.discard(); super.destroy();
} }
@Override @Override

View file

@ -491,7 +491,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
explosion.finalizeExplosion(false); explosion.finalizeExplosion(false);
ParticleTool.spawnHugeExplosionParticles(this.level(), this.position()); ParticleTool.spawnHugeExplosionParticles(this.level(), this.position());
} }
this.discard(); super.destroy();
} }
@Override @Override

View file

@ -452,7 +452,7 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity,
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
@Override @Override

View file

@ -616,7 +616,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
protected void clampRotation(Entity entity) { protected void clampRotation(Entity entity) {

View file

@ -576,7 +576,7 @@ public class DroneEntity extends MobileVehicleEntity implements GeoEntity {
}); });
} }
this.discard(); super.destroy();
} }
private void kamikazeExplosion(int mode) { private void kamikazeExplosion(int mode) {

View file

@ -429,7 +429,7 @@ public class Hpj11Entity extends ContainerMobileVehicleEntity implements GeoEnti
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
@Override @Override

View file

@ -231,7 +231,7 @@ public class LaserTowerEntity extends EnergyVehicleEntity implements GeoEntity,
ParticleTool.spawnMediumExplosionParticles(this.level(), this.position()); ParticleTool.spawnMediumExplosionParticles(this.level(), this.position());
} }
this.discard(); super.destroy();
} }
public void autoAim() { public void autoAim() {

View file

@ -488,7 +488,7 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
protected void clampRotation(Entity entity) { protected void clampRotation(Entity entity) {

View file

@ -264,7 +264,7 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
@Override @Override

View file

@ -291,7 +291,7 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
@Override @Override

View file

@ -664,7 +664,7 @@ public class PrismTankEntity extends ContainerMobileVehicleEntity implements Geo
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
protected void clampRotation(Entity entity) { protected void clampRotation(Entity entity) {

View file

@ -390,7 +390,7 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
protected void clampRotation(Entity entity) { protected void clampRotation(Entity entity) {

View file

@ -308,7 +308,6 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
@Override @Override
public void destroy() { public void destroy() {
if (this.crash) { if (this.crash) {
crashPassengers(); crashPassengers();
} else { } else {
@ -335,7 +334,7 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
} }
} }
this.discard(); super.destroy();
} }
@Override @Override

View file

@ -290,7 +290,7 @@ public class WheelChairEntity extends MobileVehicleEntity implements GeoEntity {
ParticleTool.spawnSmallExplosionParticles(this.level(), this.position()); ParticleTool.spawnSmallExplosionParticles(this.level(), this.position());
} }
this.discard(); super.destroy();
} }
@Override @Override

View file

@ -942,7 +942,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
} }
explodePassengers(); explodePassengers();
this.discard(); super.destroy();
} }
protected void clampRotation(Entity entity) { protected void clampRotation(Entity entity) {

View file

@ -2,6 +2,7 @@ package com.atsuishio.superbwarfare.entity.vehicle.base;
import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.Mod;
import com.atsuishio.superbwarfare.config.server.VehicleConfig; import com.atsuishio.superbwarfare.config.server.VehicleConfig;
import com.atsuishio.superbwarfare.entity.mixin.CustomStopRiding;
import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity; import com.atsuishio.superbwarfare.entity.vehicle.DroneEntity;
import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier; import com.atsuishio.superbwarfare.entity.vehicle.damage.DamageModifier;
import com.atsuishio.superbwarfare.entity.vehicle.weapon.VehicleWeapon; import com.atsuishio.superbwarfare.entity.vehicle.weapon.VehicleWeapon;
@ -718,6 +719,15 @@ public abstract class VehicleEntity extends Entity {
} }
public void destroy() { public void destroy() {
this.getPassengers().forEach(p -> {
if (p instanceof Player player) {
CustomStopRiding customStopRiding = CustomStopRiding.getInstance(player);
customStopRiding.superbwarfare$stopRiding();
} else {
p.stopRiding();
}
});
this.discard();
} }
protected Entity getAttacker() { protected Entity getAttacker() {
@ -970,6 +980,34 @@ public abstract class VehicleEntity extends Entity {
return getEyePosition(); return getEyePosition();
} }
@Override
public void ejectPassengers() {
for(int i = this.passengers.size() - 1; i >= 0; --i) {
var passenger = this.passengers.get(i);
if (passenger instanceof Player player) {
CustomStopRiding stopRiding = CustomStopRiding.getInstance(player);
stopRiding.superbwarfare$stopRiding();
} else {
passenger.stopRiding();
}
}
}
// @Override
// public void remove(RemovalReason pReason) {
// if (this.getRemovalReason() == null) {
// this.removalReason = pReason;
// }
//
// if (this.getRemovalReason().shouldDestroy()) {
// this.stopRiding();
// }
//
// this.getPassengers().forEach(Entity::stopRiding);
// this.levelCallback.onRemove(pReason);
// this.invalidateCaps();
// }
/** /**
* 渲染载具的第一人称UI * 渲染载具的第一人称UI
* 务必标记 @OnlyIn(Dist.CLIENT) ! * 务必标记 @OnlyIn(Dist.CLIENT) !