From 2cd30a58a58ad14779741ed6b492e66fdce5a41d Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Wed, 12 Mar 2025 21:35:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E7=BC=93=E5=AD=98getAllWeapo?= =?UTF-8?q?ns?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/vehicle/Ah6Entity.java | 2 +- .../entity/vehicle/AnnihilatorEntity.java | 2 +- .../entity/vehicle/Bmp2Entity.java | 2 +- .../entity/vehicle/Lav150Entity.java | 2 +- .../entity/vehicle/Mk42Entity.java | 2 +- .../entity/vehicle/Mle1934Entity.java | 2 +- .../entity/vehicle/SpeedboatEntity.java | 2 +- .../entity/vehicle/Yx100Entity.java | 2 +- .../entity/vehicle/base/VehicleEntity.java | 9 +++------ .../vehicle/base/WeaponVehicleEntity.java | 20 ++++++++++++++++++- 10 files changed, 30 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java index 15ce814cb..138636e83 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Ah6Entity.java @@ -90,7 +90,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity } @Override - public VehicleWeapon[][] getAllWeapons() { + public VehicleWeapon[][] initWeapons() { return new VehicleWeapon[][]{ new VehicleWeapon[]{ new ProjectileWeapon() diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java index 7759687cd..3f27dd527 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -87,7 +87,7 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, } @Override - public VehicleWeapon[][] getAllWeapons() { + public VehicleWeapon[][] initWeapons() { return new VehicleWeapon[][]{ new VehicleWeapon[]{ new LaserWeapon() diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java index f1e7fb8ec..a580f71ea 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Bmp2Entity.java @@ -77,7 +77,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit } @Override - public VehicleWeapon[][] getAllWeapons() { + public VehicleWeapon[][] initWeapons() { return new VehicleWeapon[][]{ new VehicleWeapon[]{ new SmallCannonShellWeapon() diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java index 7798af98d..9e5548f6b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Lav150Entity.java @@ -71,7 +71,7 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt } @Override - public VehicleWeapon[][] getAllWeapons() { + public VehicleWeapon[][] initWeapons() { return new VehicleWeapon[][]{ new VehicleWeapon[]{ new SmallCannonShellWeapon() diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java index d10d79261..e3be72551 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mk42Entity.java @@ -79,7 +79,7 @@ public class Mk42Entity extends VehicleEntity implements GeoEntity, CannonEntity } @Override - public VehicleWeapon[][] getAllWeapons() { + public VehicleWeapon[][] initWeapons() { return new VehicleWeapon[][]{ new VehicleWeapon[]{ new CannonShellWeapon() diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java index be6ff0143..b6994a3f1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Mle1934Entity.java @@ -72,7 +72,7 @@ public class Mle1934Entity extends VehicleEntity implements GeoEntity, CannonEnt } @Override - public VehicleWeapon[][] getAllWeapons() { + public VehicleWeapon[][] initWeapons() { return new VehicleWeapon[][]{ new VehicleWeapon[]{ new CannonShellWeapon() diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java index e82bf2436..ec1778437 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/SpeedboatEntity.java @@ -66,7 +66,7 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo } @Override - public VehicleWeapon[][] getAllWeapons() { + public VehicleWeapon[][] initWeapons() { return new VehicleWeapon[][]{ new VehicleWeapon[]{ new ProjectileWeapon() diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java index edcabc2b2..2b1edde81 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/Yx100Entity.java @@ -86,7 +86,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti } @Override - public VehicleWeapon[][] getAllWeapons() { + public VehicleWeapon[][] initWeapons() { return new VehicleWeapon[][]{ new VehicleWeapon[]{ // AP diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java index eebf6352f..f3172bddc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/VehicleEntity.java @@ -252,12 +252,8 @@ public abstract class VehicleEntity extends Entity { } private int[] initSelectedWeaponArray(WeaponVehicleEntity weaponVehicle) { - this.availableWeapons = new VehicleWeapon[this.getMaxPassengers()][]; - - var weapons = weaponVehicle.getAllWeapons(); - for (int i = 0; i < weapons.length && i < this.getMaxPassengers(); i++) { - this.availableWeapons[i] = weapons[i]; - } + // 初始化武器数组 + weaponVehicle.getAllWeapons(); var selected = new int[this.getMaxPassengers()]; for (int i = 0; i < this.getMaxPassengers(); i++) { @@ -277,6 +273,7 @@ public abstract class VehicleEntity extends Entity { var selected = compound.getIntArray("SelectedWeapon"); if (selected.length != this.getMaxPassengers()) { + // 数量不符时(可能是更新或遇到损坏数据),重新初始化已选择武器 this.entityData.set(SELECTED_WEAPON, IntList.of(initSelectedWeaponArray(weaponVehicle))); } else { this.entityData.set(SELECTED_WEAPON, IntList.of(selected)); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/WeaponVehicleEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/WeaponVehicleEntity.java index e0d3bcdd8..b71a0b87e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/WeaponVehicleEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/base/WeaponVehicleEntity.java @@ -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(); /** * 获取该槽位可用的武器列表