From 14b22a2efd63f12f17c7bc612faa29a7e80958ff Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sat, 24 May 2025 02:36:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=90=84=E7=A7=8D=E5=85=9C?= =?UTF-8?q?=E5=BA=95=E7=A9=BA=E5=80=BC=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/data/gun/GunData.java | 19 ++++++++++++++++--- .../entity/vehicle/damage/DamageModify.java | 3 +++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java b/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java index 01e9ae250..48804deba 100644 --- a/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/data/gun/GunData.java @@ -71,7 +71,13 @@ public class GunData { perk = new Perks(this); ammo = new IntValue(data, "Ammo"); - fireMode = new StringEnumValue<>(data, "FireMode", defaultGunData().defaultFireMode, FireMode::fromValue); + + var defaultFireMode = defaultGunData().defaultFireMode; + if (defaultFireMode == null) { + defaultFireMode = FireMode.SEMI; + } + + fireMode = new StringEnumValue<>(data, "FireMode", defaultFireMode, FireMode::fromValue); level = new IntValue(data, "Level"); exp = new DoubleValue(data, "Exp"); upgradePoint = new DoubleValue(data, "UpgradePoint"); @@ -203,7 +209,10 @@ public class GunData { } public ProjectileInfo projectileInfo() { - return defaultGunData().projectile; + var info = defaultGunData().projectile; + if (info == null) return new ProjectileInfo(); + + return info; } public String projectileType() { @@ -227,6 +236,8 @@ public class GunData { } public Set reloadTypes() { + if (defaultGunData().reloadTypes == null) return Set.of(); + return defaultGunData().reloadTypes; } @@ -356,7 +367,7 @@ public class GunData { public AmmoTypeInfo ammoTypeInfo() { var ammoType = defaultGunData().ammoType; - if (ammoType.isEmpty()) { + if (ammoType == null || ammoType.isEmpty()) { return new AmmoTypeInfo(AmmoConsumeType.INVALID, ""); } @@ -542,6 +553,8 @@ public class GunData { } public Set getAvailableFireModes() { + if (defaultGunData().availableFireModes == null) return Set.of(); + return defaultGunData().availableFireModes; } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/damage/DamageModify.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/damage/DamageModify.java index 7ef3fbb98..c605f3cf9 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/damage/DamageModify.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/damage/DamageModify.java @@ -142,6 +142,9 @@ public class DamageModify { * @return 计算后的伤害值 */ public float compute(float damage) { + // 类型出错默认视为免疫 + if (type == null) return 0; + return switch (type) { case IMMUNITY -> 0; case REDUCE -> Math.max(damage - value, 0);