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