正确缓存getAllWeapons

This commit is contained in:
Light_Quanta 2025-03-12 21:35:32 +08:00
parent 314ba3056a
commit 2cd30a58a5
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
10 changed files with 30 additions and 15 deletions

View file

@ -90,7 +90,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
} }
@Override @Override
public VehicleWeapon[][] getAllWeapons() { public VehicleWeapon[][] initWeapons() {
return new VehicleWeapon[][]{ return new VehicleWeapon[][]{
new VehicleWeapon[]{ new VehicleWeapon[]{
new ProjectileWeapon() new ProjectileWeapon()

View file

@ -87,7 +87,7 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity,
} }
@Override @Override
public VehicleWeapon[][] getAllWeapons() { public VehicleWeapon[][] initWeapons() {
return new VehicleWeapon[][]{ return new VehicleWeapon[][]{
new VehicleWeapon[]{ new VehicleWeapon[]{
new LaserWeapon() new LaserWeapon()

View file

@ -77,7 +77,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
} }
@Override @Override
public VehicleWeapon[][] getAllWeapons() { public VehicleWeapon[][] initWeapons() {
return new VehicleWeapon[][]{ return new VehicleWeapon[][]{
new VehicleWeapon[]{ new VehicleWeapon[]{
new SmallCannonShellWeapon() new SmallCannonShellWeapon()

View file

@ -71,7 +71,7 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt
} }
@Override @Override
public VehicleWeapon[][] getAllWeapons() { public VehicleWeapon[][] initWeapons() {
return new VehicleWeapon[][]{ return new VehicleWeapon[][]{
new VehicleWeapon[]{ new VehicleWeapon[]{
new SmallCannonShellWeapon() new SmallCannonShellWeapon()

View file

@ -79,7 +79,7 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity
} }
@Override @Override
public VehicleWeapon[][] getAllWeapons() { public VehicleWeapon[][] initWeapons() {
return new VehicleWeapon[][]{ return new VehicleWeapon[][]{
new VehicleWeapon[]{ new VehicleWeapon[]{
new CannonShellWeapon() new CannonShellWeapon()

View file

@ -72,7 +72,7 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt
} }
@Override @Override
public VehicleWeapon[][] getAllWeapons() { public VehicleWeapon[][] initWeapons() {
return new VehicleWeapon[][]{ return new VehicleWeapon[][]{
new VehicleWeapon[]{ new VehicleWeapon[]{
new CannonShellWeapon() new CannonShellWeapon()

View file

@ -66,7 +66,7 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo
} }
@Override @Override
public VehicleWeapon[][] getAllWeapons() { public VehicleWeapon[][] initWeapons() {
return new VehicleWeapon[][]{ return new VehicleWeapon[][]{
new VehicleWeapon[]{ new VehicleWeapon[]{
new ProjectileWeapon() new ProjectileWeapon()

View file

@ -86,7 +86,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
} }
@Override @Override
public VehicleWeapon[][] getAllWeapons() { public VehicleWeapon[][] initWeapons() {
return new VehicleWeapon[][]{ return new VehicleWeapon[][]{
new VehicleWeapon[]{ new VehicleWeapon[]{
// AP // AP

View file

@ -252,12 +252,8 @@ public abstract class VehicleEntity extends Entity {
} }
private int[] initSelectedWeaponArray(WeaponVehicleEntity weaponVehicle) { private int[] initSelectedWeaponArray(WeaponVehicleEntity weaponVehicle) {
this.availableWeapons = new VehicleWeapon[this.getMaxPassengers()][]; // 初始化武器数组
weaponVehicle.getAllWeapons();
var weapons = weaponVehicle.getAllWeapons();
for (int i = 0; i < weapons.length && i < this.getMaxPassengers(); i++) {
this.availableWeapons[i] = weapons[i];
}
var selected = new int[this.getMaxPassengers()]; var selected = new int[this.getMaxPassengers()];
for (int i = 0; i < this.getMaxPassengers(); i++) { for (int i = 0; i < this.getMaxPassengers(); i++) {
@ -277,6 +273,7 @@ public abstract class VehicleEntity extends Entity {
var selected = compound.getIntArray("SelectedWeapon"); var selected = compound.getIntArray("SelectedWeapon");
if (selected.length != this.getMaxPassengers()) { if (selected.length != this.getMaxPassengers()) {
// 数量不符时可能是更新或遇到损坏数据重新初始化已选择武器
this.entityData.set(SELECTED_WEAPON, IntList.of(initSelectedWeaponArray(weaponVehicle))); this.entityData.set(SELECTED_WEAPON, IntList.of(initSelectedWeaponArray(weaponVehicle)));
} else { } else {
this.entityData.set(SELECTED_WEAPON, IntList.of(selected)); this.entityData.set(SELECTED_WEAPON, IntList.of(selected));

View file

@ -54,7 +54,25 @@ public interface WeaponVehicleEntity extends ArmedVehicleEntity {
/** /**
* 获取所有可用武器列表 * 获取所有可用武器列表
*/ */
VehicleWeapon[][] getAllWeapons(); default VehicleWeapon[][] getAllWeapons() {
if (!(this instanceof VehicleEntity vehicle)) return new VehicleWeapon[][]{};
if (vehicle.availableWeapons == null) {
vehicle.availableWeapons = new VehicleWeapon[vehicle.getMaxPassengers()][];
var weapons = this.initWeapons();
for (int i = 0; i < weapons.length && i < vehicle.getMaxPassengers(); i++) {
vehicle.availableWeapons[i] = weapons[i];
}
}
return vehicle.availableWeapons;
}
/**
* 初始化所有可用武器列表
*/
VehicleWeapon[][] initWeapons();
/** /**
* 获取该槽位可用的武器列表 * 获取该槽位可用的武器列表