From acb9ba48b3e8b087d28f20e8dae1887afc76e03c Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Sun, 11 May 2025 23:42:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8D=95=E6=AC=A1=E5=8D=95?= =?UTF-8?q?=E5=8F=91=E8=A3=85=E5=A1=AB=E4=B8=8A=E5=BC=B9=E6=95=B0=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/event/GunEventHandler.java | 14 ++++++++------ .../item/gun/data/DefaultGunData.java | 9 +++++++++ .../superbwarfare/item/gun/data/GunData.java | 4 ++++ .../item/gun/data/value/IntValue.java | 4 ++++ 4 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java index 08807fd38..73c9ec0bf 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java @@ -257,11 +257,11 @@ public class GunEventHandler { } if (stack.getItem() == ModItems.M_870.get() && reload.prepareLoadTimer.get() == 10) { - singleLoad(player, data); + iterativeLoad(player, data); } if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get() && reload.prepareLoadTimer.get() == 3) { - singleLoad(player, data); + iterativeLoad(player, data); } // 一阶段结束,检查备弹,如果有则二阶段启动,无则直接跳到三阶段 @@ -295,7 +295,7 @@ public class GunEventHandler { // 装填 if (data.iterativeAmmoLoadTime() == reload.iterativeLoadTimer.get()) { - singleLoad(player, data); + iterativeLoad(player, data); } // 二阶段打断 @@ -342,12 +342,14 @@ public class GunEventHandler { } } - public static void singleLoad(Player player, GunData data) { - data.ammo.set(data.ammo.get() + 1); + public static void iterativeLoad(Player player, GunData data) { + var required = Math.min(data.magazine() - data.ammo.get(), data.iterativeLoadAmount()); + var available = Math.min(required, data.countBackupAmmo(player)); + data.ammo.add(available); if (!InventoryTool.hasCreativeAmmoBox(player)) { var cap = player.getData(ModAttachments.PLAYER_VARIABLE); - data.consumeBackupAmmo(player, 1); + data.consumeBackupAmmo(player, available); player.setData(ModAttachments.PLAYER_VARIABLE, cap); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/DefaultGunData.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/DefaultGunData.java index 609c87296..6397c8f89 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/DefaultGunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/DefaultGunData.java @@ -62,10 +62,19 @@ public class DefaultGunData { public int prepareLoadTime; @SerializedName("PrepareEmptyTime") public int prepareEmptyTime; + + // 每次单发装填用时的 @SerializedName("IterativeTime") public int iterativeTime; + + // 单发装填时的上弹时间 @SerializedName("IterativeAmmoLoadTime") public int iterativeAmmoLoadTime = 1; + + // 单次单发装填上弹数量 + @SerializedName("IterativeLoadAmount") + public int iterativeLoadAmount = 1; + @SerializedName("FinishTime") public int finishTime; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java index 9147809f0..0523936cb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/GunData.java @@ -215,6 +215,10 @@ public class GunData { return defaultGunData().iterativeAmmoLoadTime; } + public int iterativeLoadAmount() { + return defaultGunData().iterativeLoadAmount; + } + public int defaultPrepareTime() { return defaultGunData().prepareTime; } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/value/IntValue.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/value/IntValue.java index b09dc4b87..2ef1d8db0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/data/value/IntValue.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/data/value/IntValue.java @@ -32,6 +32,10 @@ public class IntValue { } } + public void add(int value) { + set(get() + value); + } + public void reset() { set(defaultValue); }