From 4830dc1366344d3183a0ad4b468fcaf8b906655c Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sat, 4 Jan 2025 01:14:28 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96NBT#CustomMagazine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/event/GunEventHandler.java | 12 ++++++++---- .../superbwarfare/event/LivingEventHandler.java | 2 +- .../superbwarfare/event/PlayerEventHandler.java | 3 ++- .../atsuishio/superbwarfare/item/gun/GunItem.java | 14 +++++++++----- .../superbwarfare/item/gun/rifle/AK12Item.java | 2 +- .../superbwarfare/item/gun/rifle/AK47Item.java | 2 +- .../superbwarfare/item/gun/rifle/Hk416Item.java | 2 +- .../superbwarfare/item/gun/rifle/M4Item.java | 2 +- .../superbwarfare/item/gun/rifle/Mk14Item.java | 2 +- .../superbwarfare/item/gun/rifle/Qbz95Item.java | 2 +- .../superbwarfare/item/gun/smg/VectorItem.java | 2 +- .../network/message/ReloadMessage.java | 9 +++++---- .../atsuishio/superbwarfare/tools/GunsTool.java | 6 +++--- 13 files changed, 35 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java index df694687c..92610d7b3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java @@ -401,7 +401,8 @@ public class GunEventHandler { if (!(stack.getItem() instanceof GunItem gunItem)) return; if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) { - GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0) + (gunItem.bulletInBarrel(stack) ? 1 : 0)); } else { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { @@ -424,7 +425,8 @@ public class GunEventHandler { ItemStack stack = player.getMainHandItem(); if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) { - GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)); } else { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { GunsTool.reload(player, stack, GunInfo.Type.SHOTGUN); @@ -581,7 +583,8 @@ public class GunEventHandler { && tag.getInt("reload_stage") == 2 && tag.getInt("iterative") == 0 && !tag.getBoolean("stop") - && GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { + && GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) { playGunLoopReloadSounds(player); int iterativeTime = GunsTool.getGunIntTag(stack, "IterativeTime", 0); @@ -611,7 +614,8 @@ public class GunEventHandler { // 二阶段结束 if (tag.getInt("iterative") == 1) { // 装满结束 - if (GunsTool.getGunIntTag(stack, "Ammo", 0) >= GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) >= GunsTool.getGunIntTag(stack, "Magazine", 0) + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) { tag.putInt("reload_stage", 3); } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index aed790bce..3afc32903 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -615,7 +615,7 @@ public class LivingEventHandler { float rate = level * 0.1f + (stack.is(ModTags.Items.SMG) || stack.is(ModTags.Items.RIFLE) ? 0.07f : 0f); player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"); + int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0); int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0); int ammoReload = (int) Math.min(mag, mag * rate); int ammoNeed = Math.min(mag - ammo, ammoReload); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java index ffea4c8f9..f3352e7aa 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -330,7 +330,8 @@ public class PlayerEventHandler { player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots()); } } else { - GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)); } GunsTool.setGunBooleanTag(stack, "HoldOpen", false); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java index 0a784a9d6..f66cfa382 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -70,10 +70,13 @@ public abstract class GunItem extends Item { handleGunPerks(stack); handleGunAttachment(stack); - if ((gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1) - || (!gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")) + if ((gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) > + GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0) + 1) + || (!gunItem.bulletInBarrel(stack) && GunsTool.getGunIntTag(stack, "Ammo", 0) > + GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) ) { - int count = GunsTool.getGunIntTag(stack, "Ammo", 0) - GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") - (gunItem.bulletInBarrel(stack) ? 1 : 0); + int count = GunsTool.getGunIntTag(stack, "Ammo", 0) - GunsTool.getGunIntTag(stack, "Magazine", 0) + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0) - (gunItem.bulletInBarrel(stack) ? 1 : 0); entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { @@ -88,7 +91,8 @@ public abstract class GunItem extends Item { capability.syncPlayerVariables(entity); }); - GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + (gunItem.bulletInBarrel(stack) ? 1 : 0)); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0) + (gunItem.bulletInBarrel(stack) ? 1 : 0)); } } } @@ -167,7 +171,7 @@ public abstract class GunItem extends Item { GunsTool.setPerkIntTag(stack, "FourthTimesCharmTick", 0); GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 0); - int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"); + int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0); GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, GunsTool.getGunIntTag(stack, "Ammo", 0) + 2)); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java index 59694988d..50f831631 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java @@ -187,7 +187,7 @@ public class AK12Item extends GunItem implements GeoItem, AnimatedItem { stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); - stack.getOrCreateTag().putInt("customMag", customMag); + GunsTool.setGunIntTag(stack, "CustomMagazine", customMag); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java index 05bfabd8b..f858600b5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java @@ -196,7 +196,7 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem { stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); - stack.getOrCreateTag().putInt("customMag", customMag); + GunsTool.setGunIntTag(stack, "CustomMagazine", customMag); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java index 3e007f62c..23baef31d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java @@ -178,7 +178,7 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem { stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); - stack.getOrCreateTag().putInt("customMag", customMag); + GunsTool.setGunIntTag(stack, "CustomMagazine", customMag); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java index 5f827d9c5..7b2444dcb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java @@ -197,7 +197,7 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { GunsTool.setGunBooleanTag(stack, "CanSwitchScope", scopeType == 2); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); - stack.getOrCreateTag().putInt("customMag", customMag); + GunsTool.setGunIntTag(stack, "CustomMagazine", customMag); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java index 5b6c46d39..f3cc40246 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java @@ -181,7 +181,7 @@ public class Mk14Item extends GunItem implements GeoItem, AnimatedItem { stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); - stack.getOrCreateTag().putInt("customMag", customMag); + GunsTool.setGunIntTag(stack, "CustomMagazine", customMag); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java index 7880fc4a4..0ffd7136a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java @@ -184,7 +184,7 @@ public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem { stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); - stack.getOrCreateTag().putInt("customMag", customMag); + GunsTool.setGunIntTag(stack, "CustomMagazine", customMag); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java index e3bd55ac0..a529b4fc3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java @@ -158,7 +158,7 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem { }; GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); - stack.getOrCreateTag().putInt("customMag", customMag); + GunsTool.setGunDoubleTag(stack, "CustomMagazine", customMag); } public static ItemStack getGunInstance() { diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/ReloadMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/ReloadMessage.java index 2f8b4ff3e..3348dd4ab 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/ReloadMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/ReloadMessage.java @@ -94,22 +94,23 @@ public class ReloadMessage { if (gunItem.isOpenBolt(stack)) { if (gunItem.bulletInBarrel(stack)) { - if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag") + 1) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + GunsTool.getGunIntTag(stack, "CustomMagazine", 0) + 1) { GunsTool.setGunBooleanTag(stack, "StartReload", true); } } else { - if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) { GunsTool.setGunBooleanTag(stack, "StartReload", true); } } - } else if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) { + } else if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) { GunsTool.setGunBooleanTag(stack, "StartReload", true); } return; } if (canSingleReload) { - if (GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)) { tag.putBoolean("start_single_reload", true); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java index 6b92b180a..337248e5b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java @@ -73,7 +73,7 @@ public class GunsTool { stack.addTagElement("GunData", data); }); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) - + stack.getOrCreateTag().getInt("customMag")); + + GunsTool.getGunIntTag(stack, "CustomMagazine", 0)); } } @@ -103,9 +103,9 @@ public class GunsTool { public static void reload(Player player, ItemStack stack, GunInfo.Type type, boolean extraOne) { CompoundTag tag = stack.getOrCreateTag(); - if (!(stack.getItem() instanceof GunItem gunItem)) return; + if (!(stack.getItem() instanceof GunItem)) return; - int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag"); + int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + GunsTool.getGunIntTag(stack, "CustomMagazine", 0); int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0); int ammoToAdd = mag - ammo + (extraOne ? 1 : 0);