From aa8e951e512522631f4e0d230ae0bb36b6d4926a Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Mon, 14 Apr 2025 15:38:12 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8F=96AmmoType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/overlay/AmmoBarOverlay.java | 32 ++--- .../superbwarfare/event/GunEventHandler.java | 132 ++++++++++-------- .../event/LivingEventHandler.java | 44 ++---- .../event/PlayerEventHandler.java | 63 +++++---- .../superbwarfare/item/gun/GunItem.java | 57 +++----- .../item/gun/data/DefaultGunData.java | 3 + .../superbwarfare/item/gun/data/GunData.java | 38 ++++- .../item/gun/launcher/JavelinItem.java | 6 +- .../item/gun/launcher/M79Item.java | 6 +- .../item/gun/launcher/RpgItem.java | 6 +- .../item/gun/launcher/SecondaryCataclysm.java | 29 ++-- .../item/gun/special/BocekItem.java | 3 +- .../item/gun/special/TaserItem.java | 6 +- .../network/message/send/ReloadMessage.java | 26 ++-- .../data/superbwarfare/guns/aa_12.json | 3 +- .../data/superbwarfare/guns/ak_12.json | 3 +- .../data/superbwarfare/guns/ak_47.json | 3 +- .../data/superbwarfare/guns/bocek.json | 3 +- .../data/superbwarfare/guns/devotion.json | 3 +- .../data/superbwarfare/guns/glock_17.json | 3 +- .../data/superbwarfare/guns/glock_18.json | 3 +- .../data/superbwarfare/guns/hk_416.json | 3 +- .../superbwarfare/guns/homemade_shotgun.json | 3 +- .../superbwarfare/guns/hunting_rifle.json | 3 +- .../data/superbwarfare/guns/insidious.json | 3 +- .../data/superbwarfare/guns/javelin.json | 3 +- .../data/superbwarfare/guns/k_98.json | 3 +- .../data/superbwarfare/guns/m_1911.json | 3 +- .../data/superbwarfare/guns/m_4.json | 3 +- .../data/superbwarfare/guns/m_60.json | 3 +- .../data/superbwarfare/guns/m_79.json | 3 +- .../data/superbwarfare/guns/m_870.json | 3 +- .../data/superbwarfare/guns/m_98b.json | 3 +- .../data/superbwarfare/guns/marlin.json | 3 +- .../data/superbwarfare/guns/minigun.json | 3 +- .../data/superbwarfare/guns/mk_14.json | 3 +- .../data/superbwarfare/guns/mosin_nagant.json | 3 +- .../data/superbwarfare/guns/mp_443.json | 3 +- .../data/superbwarfare/guns/ntw_20.json | 3 +- .../data/superbwarfare/guns/qbz_95.json | 3 +- .../data/superbwarfare/guns/rpg.json | 3 +- .../data/superbwarfare/guns/rpk.json | 3 +- .../guns/secondary_cataclysm.json | 3 +- .../data/superbwarfare/guns/sentinel.json | 3 +- .../data/superbwarfare/guns/sks.json | 3 +- .../data/superbwarfare/guns/svd.json | 3 +- .../data/superbwarfare/guns/taser.json | 3 +- .../data/superbwarfare/guns/trachelium.json | 3 +- .../data/superbwarfare/guns/vector.json | 3 +- 49 files changed, 290 insertions(+), 266 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java index e27293b2d..faae60c46 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java @@ -9,6 +9,7 @@ import com.atsuishio.superbwarfare.init.ModKeyMappings; import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.data.GunData; +import com.atsuishio.superbwarfare.tools.AmmoType; import com.atsuishio.superbwarfare.tools.InventoryTool; import com.atsuishio.superbwarfare.tools.NBTTool; import com.mojang.blaze3d.vertex.PoseStack; @@ -71,22 +72,19 @@ public class AmmoBarOverlay implements LayeredDraw.Layer { if (stack.is(ModTags.Items.LAUNCHER) || stack.getItem() == ModItems.TASER.get()) { return "" + data.maxAmmo.get(); } - if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - return "" + cap.rifleAmmo; - } - if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - return "" + cap.handgunAmmo; - } - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - return "" + cap.shotgunAmmo; - } - if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - return "" + cap.sniperAmmo; - } - if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - return "" + cap.heavyAmmo; - } - return ""; + var ammoTypeInfo = data.ammoTypeInfo(); + return switch (ammoTypeInfo.type()) { + case PLAYER_AMMO -> { + var type = AmmoType.getType(ammoTypeInfo.value()); + assert type != null; + + yield type.get(cap) + ""; + } + + // TODO 正确计算弹药数量 + case ITEM, TAG -> "" + data.maxAmmo.get(); + default -> ""; + }; } return "∞"; @@ -247,7 +245,7 @@ public class AmmoBarOverlay implements LayeredDraw.Layer { ); // 渲染弹药类型 - String ammoName = gunItem.getAmmoDisplayName(stack); + String ammoName = gunItem.getAmmoDisplayName(data); guiGraphics.drawString( Minecraft.getInstance().font, ammoName, diff --git a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java index 9c23a3665..e11a0185b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java @@ -16,8 +16,10 @@ import com.atsuishio.superbwarfare.tools.InventoryTool; import com.atsuishio.superbwarfare.tools.SoundTool; import net.minecraft.core.Holder; import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; +import net.minecraft.tags.ItemTags; import net.minecraft.world.effect.MobEffect; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.player.Player; @@ -286,6 +288,7 @@ public class GunEventHandler { reload.reduce(); + // 换弹时额外行为 var behavior = gunItem.reloadTimeBehaviors.get(reload.time()); if (behavior != null) { behavior.accept(gun); @@ -305,26 +308,20 @@ public class GunEventHandler { } } - public static void playGunNormalReload(Player player, GunData gunData) { - var stack = gunData.stack(); - var gunItem = gunData.item(); + public static void playGunNormalReload(Player player, GunData data) { + var stack = data.stack(); + var gunItem = data.item(); if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) { - gunData.ammo.set(gunData.magazine() + (gunItem.hasBulletInBarrel(stack) ? 1 : 0)); + data.ammo.set(data.magazine() + (gunItem.hasBulletInBarrel(stack) ? 1 : 0)); } else { - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - GunsTool.reload(player, stack, gunData, AmmoType.SHOTGUN, gunItem.hasBulletInBarrel(stack)); - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - GunsTool.reload(player, stack, gunData, AmmoType.SNIPER, true); - } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - GunsTool.reload(player, stack, gunData, AmmoType.HANDGUN, true); - } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - GunsTool.reload(player, stack, gunData, AmmoType.RIFLE, gunItem.hasBulletInBarrel(stack)); - } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - GunsTool.reload(player, stack, gunData, AmmoType.HEAVY, gunItem.hasBulletInBarrel(stack)); + var ammoTypeInfo = data.ammoTypeInfo(); + + if (ammoTypeInfo.type() == GunData.AmmoConsumeType.PLAYER_AMMO) { + GunsTool.reload(player, stack, data, AmmoType.getType(ammoTypeInfo.value()), gunItem.hasBulletInBarrel(stack)); } } - gunData.reload.setState(ReloadState.NOT_RELOADING); + data.reload.setState(ReloadState.NOT_RELOADING); NeoForge.EVENT_BUS.post(new ReloadEvent.Post(player, stack)); } @@ -334,20 +331,25 @@ public class GunEventHandler { if (player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get()))) { data.ammo.set(data.magazine()); } else { - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - GunsTool.reload(player, stack, data, AmmoType.SHOTGUN); - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - GunsTool.reload(player, stack, data, AmmoType.SNIPER); - } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - GunsTool.reload(player, stack, data, AmmoType.HANDGUN); - } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - GunsTool.reload(player, stack, data, AmmoType.RIFLE); - } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - GunsTool.reload(player, stack, data, AmmoType.HEAVY); - } else if (data.item().getCustomAmmoItem() != null) { - var ammoItem = data.item().getCustomAmmoItem(); - data.ammo.set(1); - player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ammoItem, 1, player.inventoryMenu.getCraftSlots()); + var ammoTypeInfo = data.ammoTypeInfo(); + switch (ammoTypeInfo.type()) { + case PLAYER_AMMO -> GunsTool.reload(player, stack, data, AmmoType.getType(ammoTypeInfo.value())); + case TAG -> { + data.ammo.set(1); + player.getInventory().clearOrCountMatchingItems( + p -> p.is(ItemTags.create(ResourceLocation.parse(ammoTypeInfo.value()))), + 1, + player.inventoryMenu.getCraftSlots() + ); + } + case ITEM -> { + data.ammo.set(1); + player.getInventory().clearOrCountMatchingItems( + p -> p.getItem().getDescriptionId().equals(ammoTypeInfo.value()), + 1, + player.inventoryMenu.getCraftSlots() + ); + } } } data.reload.setState(ReloadState.NOT_RELOADING); @@ -449,15 +451,26 @@ public class GunEventHandler { if ((reload.prepareTimer.get() == 1 || reload.prepareLoadTimer.get() == 1)) { if (!InventoryTool.hasCreativeAmmoBox(player)) { var capability = player.getData(ModAttachments.PLAYER_VARIABLE); + var startStage3 = false; - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0 - || stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0 - || stack.is(ModTags.Items.USE_HANDGUN_AMMO) && capability.handgunAmmo == 0 - || stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0 - || stack.is(ModTags.Items.USE_HEAVY_AMMO) && capability.heavyAmmo == 0 - || stack.is(ModTags.Items.LAUNCHER) && data.maxAmmo.get() == 0 + var ammoTypeInfo = data.ammoTypeInfo(); + if (ammoTypeInfo.type() == GunData.AmmoConsumeType.PLAYER_AMMO) { + var type = AmmoType.getType(ammoTypeInfo.value()); + assert type != null; + + if (type.get(capability) == 0) { + startStage3 = true; + } + } + + // TODO 优化这坨判断 + if (stack.is(ModTags.Items.LAUNCHER) && data.maxAmmo.get() == 0 || stack.is(ModItems.SECONDARY_CATACLYSM.get()) && data.ammo.get() >= data.magazine() ) { + startStage3 = true; + } + + if (startStage3) { reload.stage3Starter.markStart(); } else { reload.setStage(2); @@ -521,16 +534,14 @@ public class GunEventHandler { if (!InventoryTool.hasCreativeAmmoBox(player)) { var capability = player.getData(ModAttachments.PLAYER_VARIABLE); - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0) { - reload.setStage(3); - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0) { - reload.setStage(3); - } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO) && capability.handgunAmmo == 0) { - reload.setStage(3); - } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { - reload.setStage(3); - } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && capability.heavyAmmo == 0) { - reload.setStage(3); + var ammoTypeInfo = data.ammoTypeInfo(); + if (ammoTypeInfo.type() == GunData.AmmoConsumeType.PLAYER_AMMO) { + var type = AmmoType.getType(ammoTypeInfo.value()); + assert type != null; + + if (type.get(capability) == 0) { + reload.setStage(3); + } } } @@ -577,19 +588,24 @@ public class GunEventHandler { if (!InventoryTool.hasCreativeAmmoBox(player)) { var cap = player.getData(ModAttachments.PLAYER_VARIABLE); - ItemStack stack = player.getMainHandItem(); - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - AmmoType.SHOTGUN.add(cap, -1); - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - AmmoType.SNIPER.add(cap, -1); - } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - AmmoType.HANDGUN.add(cap, -1); - } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - AmmoType.RIFLE.add(cap, -1); - } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - AmmoType.HEAVY.add(cap, -1); - } else if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get()) { - player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == data.item().getCustomAmmoItem(), 1, player.inventoryMenu.getCraftSlots()); + var ammoTypeInfo = data.ammoTypeInfo(); + switch (ammoTypeInfo.type()) { + case PLAYER_AMMO -> { + var type = AmmoType.getType(ammoTypeInfo.value()); + assert type != null; + + type.add(cap, -1); + } + case ITEM -> player.getInventory().clearOrCountMatchingItems( + p -> p.getItem().getDescriptionId().equals(ammoTypeInfo.value()), + 1, + player.inventoryMenu.getCraftSlots() + ); + case TAG -> player.getInventory().clearOrCountMatchingItems( + p -> p.is(ItemTags.create(ResourceLocation.parse(ammoTypeInfo.value()))), + 1, + player.inventoryMenu.getCraftSlots() + ); } player.setData(ModAttachments.PLAYER_VARIABLE, cap); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index 08152a948..ad1bbd240 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -143,6 +143,7 @@ public class LivingEventHandler { if (DamageTypeTool.isGunDamage(source) && stack.getItem() instanceof GunItem) { double distance = entity.position().distanceTo(sourceEntity.position()); + // TODO 正确计算距离衰减 if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { var perk = data.perk.get(Perk.Type.AMMO); @@ -650,45 +651,18 @@ public class LivingEventHandler { boolean flag = InventoryTool.hasCreativeAmmoBox(player); - if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - int ammoFinal = Math.min(cap.rifleAmmo, ammoNeed); + var ammoTypeInfo = data.ammoTypeInfo(); + if (ammoTypeInfo.type() == GunData.AmmoConsumeType.PLAYER_AMMO) { + var type = AmmoType.getType(ammoTypeInfo.value()); + assert type != null; + + int ammoFinal = Math.min(type.get(cap), ammoNeed); if (flag) { ammoFinal = ammoNeed; } else { - cap.rifleAmmo -= ammoFinal; - } - data.ammo.set(Math.min(mag, ammo + ammoFinal)); - } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - int ammoFinal = Math.min(cap.handgunAmmo, ammoNeed); - if (flag) { - ammoFinal = ammoNeed; - } else { - cap.handgunAmmo -= ammoFinal; - } - data.ammo.set(Math.min(mag, ammo + ammoFinal)); - } else if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - int ammoFinal = Math.min(cap.handgunAmmo, ammoNeed); - if (flag) { - ammoFinal = ammoNeed; - } else { - cap.shotgunAmmo -= ammoFinal; - } - data.ammo.set(Math.min(mag, ammo + ammoFinal)); - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - int ammoFinal = Math.min(cap.handgunAmmo, ammoNeed); - if (flag) { - ammoFinal = ammoNeed; - } else { - cap.sniperAmmo -= ammoFinal; - } - data.ammo.set(Math.min(mag, ammo + ammoFinal)); - } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - int ammoFinal = Math.min(cap.heavyAmmo, ammoNeed); - if (flag) { - ammoFinal = ammoNeed; - } else { - cap.heavyAmmo -= ammoFinal; + type.add(cap, -ammoFinal); } + data.ammo.set(Math.min(mag, ammo + ammoFinal)); } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java index 46118e027..eb027332e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -17,6 +17,7 @@ import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; +import net.minecraft.tags.ItemTags; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; @@ -110,38 +111,38 @@ public class PlayerEventHandler { if (!InventoryTool.hasCreativeAmmoBox(player)) { var cap = player.getData(ModAttachments.PLAYER_VARIABLE); + var ammoTypeInfo = data.ammoTypeInfo(); + switch (ammoTypeInfo.type()) { + case PLAYER_AMMO -> { + var type = AmmoType.getType(ammoTypeInfo.value()); + assert type != null; - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && cap.shotgunAmmo > 0) { - GunsTool.reload(player, stack, data, AmmoType.SHOTGUN); - } - if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && cap.sniperAmmo > 0) { - GunsTool.reload(player, stack, data, AmmoType.SNIPER); - } - if (stack.is(ModTags.Items.USE_HANDGUN_AMMO) && cap.handgunAmmo > 0) { - GunsTool.reload(player, stack, data, AmmoType.HANDGUN); - } - if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && cap.rifleAmmo > 0) { - GunsTool.reload(player, stack, data, AmmoType.RIFLE); - } - if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && cap.heavyAmmo > 0) { - GunsTool.reload(player, stack, data, AmmoType.HEAVY); - } - - if (stack.getItem() == ModItems.TASER.get() && data.maxAmmo.get() > 0 && data.ammo.get() == 0) { - data.ammo.set(1); - player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots()); - } - if (stack.getItem() == ModItems.M_79.get() && data.maxAmmo.get() > 0 && data.ammo.get() == 0) { - data.ammo.set(1); - player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots()); - } - if (stack.getItem() == ModItems.RPG.get() && data.maxAmmo.get() > 0 && data.ammo.get() == 0) { - data.ammo.set(1); - player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.ROCKET.get(), 1, player.inventoryMenu.getCraftSlots()); - } - if (stack.getItem() == ModItems.JAVELIN.get() && data.maxAmmo.get() > 0 && data.ammo.get() == 0) { - data.ammo.set(1); - player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.JAVELIN_MISSILE.get(), 1, player.inventoryMenu.getCraftSlots()); + if (type.get(cap) == 0) { + GunsTool.reload(player, stack, data, type); + } + } + case ITEM -> { + // TODO 弃用maxAmmo + if (data.ammo.get() == 0 && data.maxAmmo.get() == 0) { + data.ammo.set(1); + player.getInventory().clearOrCountMatchingItems( + p -> p.getItem().getDescriptionId().equals(ammoTypeInfo.value()), + 1, + player.inventoryMenu.getCraftSlots() + ); + } + } + case TAG -> { + // TODO 弃用maxAmmo + if (data.ammo.get() == 0 && data.maxAmmo.get() == 0) { + data.ammo.set(1); + player.getInventory().clearOrCountMatchingItems( + p -> p.is(ItemTags.create(ResourceLocation.parse(ammoTypeInfo.value()))), + 1, + player.inventoryMenu.getCraftSlots() + ); + } + } } } else { data.ammo.set(data.magazine()); 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 75689f030..3bd3236bf 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -6,7 +6,6 @@ import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; import com.atsuishio.superbwarfare.init.ModAttachments; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModPerks; -import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.CustomRendererItem; import com.atsuishio.superbwarfare.item.gun.data.GunData; import com.atsuishio.superbwarfare.item.gun.data.value.AttachmentType; @@ -59,10 +58,7 @@ public abstract class GunItem extends Item implements CustomRendererItem { @Override @ParametersAreNonnullByDefault public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) { - if (!(entity instanceof LivingEntity) - || !(stack.getItem() instanceof GunItem) - || !(stack.getItem() instanceof GunItem gunItem) - ) return; + if (!(entity instanceof LivingEntity) || !(stack.getItem() instanceof GunItem gunItem)) return; var data = GunData.from(stack); @@ -81,19 +77,16 @@ public abstract class GunItem extends Item implements CustomRendererItem { if ((hasBulletInBarrel && ammoCount > magazine + 1) || (!hasBulletInBarrel && ammoCount > magazine)) { int count = ammoCount - magazine - (hasBulletInBarrel ? 1 : 0); - var capability = entity.getData(ModAttachments.PLAYER_VARIABLE).watch(); - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - AmmoType.SHOTGUN.add(capability, count); - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - AmmoType.SNIPER.add(capability, count); - } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - AmmoType.HANDGUN.add(capability, count); - } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - AmmoType.RIFLE.add(capability, count); - } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - AmmoType.HEAVY.add(capability, count); + + var ammoTypeInfo = data.ammoTypeInfo(); + if (ammoTypeInfo.type() == GunData.AmmoConsumeType.PLAYER_AMMO) { + var type = AmmoType.getType(ammoTypeInfo.value()); + assert type != null; + + type.add(capability, count); } + entity.setData(ModAttachments.PLAYER_VARIABLE, capability); capability.sync(entity); data.ammo.set(magazine + (hasBulletInBarrel ? 1 : 0)); @@ -465,21 +458,19 @@ public abstract class GunItem extends Item implements CustomRendererItem { /** * 右下角弹药显示名称 */ - public String getAmmoDisplayName(ItemStack stack) { - if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - return "Rifle Ammo"; - } - if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - return "Handgun Ammo"; - } - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - return "Shotgun Ammo"; - } - if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - return "Sniper Ammo"; - } - if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - return "Heavy Ammo"; + public String getAmmoDisplayName(GunData data) { + var ammoTypeInfo = data.ammoTypeInfo(); + if (ammoTypeInfo.type() == GunData.AmmoConsumeType.PLAYER_AMMO) { + var type = AmmoType.getType(ammoTypeInfo.value()); + assert type != null; + + return switch (type) { + case RIFLE -> "Rifle Ammo"; + case HANDGUN -> "Handgun Ammo"; + case SHOTGUN -> "Shotgun Ammo"; + case SNIPER -> "Sniper Ammo"; + case HEAVY -> "Heavy Ammo"; + }; } return ""; } @@ -504,10 +495,6 @@ public abstract class GunItem extends Item implements CustomRendererItem { public void addReloadTimeBehavior(Map> behaviors) { } - public Item getCustomAmmoItem() { - return null; - } - @SubscribeEvent private static void registerGunExtensions(RegisterClientExtensionsEvent event) { for (var item : ModItems.GUNS.getEntries()) { 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 bc7bb0b70..6e50e5c04 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 @@ -37,6 +37,9 @@ public class DefaultGunData { @SerializedName("BypassesArmor") public double bypassArmor; + @SerializedName("AmmoType") + public String ammoType = ""; + @SerializedName("NormalReloadTime") public int normalReloadTime; @SerializedName("EmptyReloadTime") 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 17f688a9c..c4b02457b 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 @@ -5,9 +5,11 @@ import com.atsuishio.superbwarfare.item.gun.data.subdata.*; import com.atsuishio.superbwarfare.item.gun.data.value.*; import com.atsuishio.superbwarfare.perk.AmmoPerk; import com.atsuishio.superbwarfare.perk.Perk; +import com.atsuishio.superbwarfare.tools.AmmoType; import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.core.component.DataComponents; import net.minecraft.nbt.CompoundTag; +import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.CustomData; @@ -259,10 +261,44 @@ public class GunData { return defaultGunData().burstAmount; } + public enum AmmoConsumeType { + PLAYER_AMMO, ITEM, TAG, INVALID, + } + + public record AmmoTypeInfo(AmmoConsumeType type, String value) { + } + + public AmmoTypeInfo ammoTypeInfo() { + var ammoType = defaultGunData().ammoType; + if (ammoType.isEmpty()) { + return new AmmoTypeInfo(AmmoConsumeType.INVALID, ""); + } + + // 玩家弹药 + if (ammoType.startsWith("@")) { + if (AmmoType.getType(ammoType.substring(1)) == null) { + return new AmmoTypeInfo(AmmoConsumeType.INVALID, ammoType.substring(1)); + } + return new AmmoTypeInfo(AmmoConsumeType.PLAYER_AMMO, ammoType.substring(1)); + } + + // 物品Tag + if (ammoType.startsWith("#")) { + if (ResourceLocation.tryParse(ammoType.substring(1)) == null) { + return new AmmoTypeInfo(AmmoConsumeType.INVALID, ammoType.substring(1)); + } + return new AmmoTypeInfo(AmmoConsumeType.TAG, ammoType.substring(1)); + } + + // 普通物品 + if (ResourceLocation.tryParse(ammoType) == null) { + return new AmmoTypeInfo(AmmoConsumeType.INVALID, ammoType); + } + return new AmmoTypeInfo(AmmoConsumeType.ITEM, ammoType); + } // 可持久化属性开始 - public final IntValue ammo; public final IntValue fireMode; public final IntValue level; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java index 2f9686be0..7f158b1de 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/JavelinItem.java @@ -237,7 +237,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon { } @Override - public String getAmmoDisplayName(ItemStack stack) { + public String getAmmoDisplayName(GunData data) { return "Javelin Missile"; } @@ -335,8 +335,4 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon { tag.putInt("SeekTime", 0); } - @Override - public Item getCustomAmmoItem() { - return ModItems.JAVELIN_MISSILE.get(); - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java index 07e787e8d..c09d6fe12 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/M79Item.java @@ -162,7 +162,7 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon { } @Override - public String getAmmoDisplayName(ItemStack stack) { + public String getAmmoDisplayName(GunData data) { return "40mm Grenade"; } @@ -221,8 +221,4 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon { data.ammo.set(data.ammo.get() - 1); } - @Override - public Item getCustomAmmoItem() { - return ModItems.GRENADE_40MM.get(); - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java index d7a666667..6b1ff08aa 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/RpgItem.java @@ -50,7 +50,7 @@ import java.util.function.Supplier; public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon { @Override - public String getAmmoDisplayName(ItemStack stack) { + public String getAmmoDisplayName(GunData data) { return "Yassin105 TBG"; } @@ -253,8 +253,4 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon { behaviors.put(9, data -> data.closeHammer.set(false)); } - @Override - public Item getCustomAmmoItem() { - return ModItems.ROCKET.get(); - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java index 69e49478a..2d229252f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/launcher/SecondaryCataclysm.java @@ -16,6 +16,7 @@ import com.atsuishio.superbwarfare.item.gun.data.GunData; import com.atsuishio.superbwarfare.network.message.receive.ShootClientMessage; import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.PerkHelper; +import com.atsuishio.superbwarfare.tools.InventoryTool; import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.SoundTool; import net.minecraft.client.Minecraft; @@ -155,24 +156,18 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW } public static int getAmmoCount(Player player) { - int count = 0; - for (var inv : player.getInventory().items) { - if (inv.is(ModItems.CREATIVE_AMMO_BOX.get())) { - count++; - } + if (InventoryTool.hasCreativeAmmoBox(player)) { + return (int) Double.POSITIVE_INFINITY; } - if (count == 0) { - int sum = 0; - for (int i = 0; i < player.getInventory().getContainerSize(); ++i) { - ItemStack itemstack = player.getInventory().getItem(i); - if (check(itemstack)) { - sum += itemstack.getCount(); - } + int sum = 0; + for (int i = 0; i < player.getInventory().getContainerSize(); ++i) { + ItemStack itemstack = player.getInventory().getItem(i); + if (check(itemstack)) { + sum += itemstack.getCount(); } - return sum; } - return (int) Double.POSITIVE_INFINITY; + return sum; } @Override @@ -264,7 +259,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW } @Override - public String getAmmoDisplayName(ItemStack stack) { + public String getAmmoDisplayName(GunData data) { return "40mm Grenade"; } @@ -347,8 +342,4 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW return 24000; } - @Override - public Item getCustomAmmoItem() { - return ModItems.GRENADE_40MM.get(); - } } \ No newline at end of file diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/special/BocekItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/special/BocekItem.java index fb2a10d47..76a62f47a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/special/BocekItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/special/BocekItem.java @@ -124,6 +124,7 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon { } } + // TODO 替换硬编码判断 protected static boolean check(ItemStack stack) { return stack.getItem() == Items.ARROW; } @@ -158,7 +159,7 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon { } @Override - public String getAmmoDisplayName(ItemStack stack) { + public String getAmmoDisplayName(GunData data) { return "Arrow"; } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/special/TaserItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/special/TaserItem.java index 89813e47c..9f8a2b23a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/special/TaserItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/special/TaserItem.java @@ -213,7 +213,7 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En } @Override - public String getAmmoDisplayName(ItemStack stack) { + public String getAmmoDisplayName(GunData data) { return "Electrode Rod"; } @@ -264,8 +264,4 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En return MAX_ENERGY; } - @Override - public Item getCustomAmmoItem() { - return ModItems.TASER_ELECTRODE.get(); - } } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/ReloadMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/ReloadMessage.java index 72b60cde7..a5292b38e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/ReloadMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/ReloadMessage.java @@ -3,9 +3,9 @@ package com.atsuishio.superbwarfare.network.message.send; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.init.ModAttachments; import com.atsuishio.superbwarfare.init.ModItems; -import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.data.GunData; +import com.atsuishio.superbwarfare.tools.AmmoType; import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; @@ -54,19 +54,17 @@ public record ReloadMessage(int msgType) implements CustomPacketPayload { boolean hasCreativeAmmoBox = player.getInventory().hasAnyMatching(item -> item.is(ModItems.CREATIVE_AMMO_BOX.get())); if (!hasCreativeAmmoBox) { - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && cap.shotgunAmmo == 0) { - return; - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && cap.sniperAmmo == 0) { - return; - } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO) && cap.handgunAmmo == 0) { - return; - } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && cap.rifleAmmo == 0) { - return; - } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && cap.heavyAmmo == 0) { - return; - } else if (stack.getItem() == ModItems.TASER.get() && data.maxAmmo.get() == 0) { - return; - } else if (stack.is(ModTags.Items.LAUNCHER) && data.maxAmmo.get() == 0) { + var ammoTypeInfo = data.ammoTypeInfo(); + + if (ammoTypeInfo.type() == GunData.AmmoConsumeType.PLAYER_AMMO) { + var ammoType = AmmoType.getType(ammoTypeInfo.value()); + assert ammoType != null; + + if (ammoType.get(cap) == 0) return; + } else if ((ammoTypeInfo.type() == GunData.AmmoConsumeType.ITEM || ammoTypeInfo.type() == GunData.AmmoConsumeType.TAG) + // TODO 弃用maxAmmo + && data.maxAmmo.get() == 0 + ) { return; } } diff --git a/src/main/resources/data/superbwarfare/guns/aa_12.json b/src/main/resources/data/superbwarfare/guns/aa_12.json index d61ad87c4..4c4b2f527 100644 --- a/src/main/resources/data/superbwarfare/guns/aa_12.json +++ b/src/main/resources/data/superbwarfare/guns/aa_12.json @@ -13,5 +13,6 @@ "EmptyReloadTime": 85, "BypassesArmor": 0.05, "SoundRadius": 18, - "RPM": 360 + "RPM": 360, + "AmmoType": "@ShotgunAmmo" } diff --git a/src/main/resources/data/superbwarfare/guns/ak_12.json b/src/main/resources/data/superbwarfare/guns/ak_12.json index e0d8a13c9..b9da83e1c 100644 --- a/src/main/resources/data/superbwarfare/guns/ak_12.json +++ b/src/main/resources/data/superbwarfare/guns/ak_12.json @@ -14,5 +14,6 @@ "EmptyReloadTime": 58, "BypassesArmor": 0.23, "SoundRadius": 12, - "RPM": 700 + "RPM": 700, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/ak_47.json b/src/main/resources/data/superbwarfare/guns/ak_47.json index 10eb5af3b..817f19dff 100644 --- a/src/main/resources/data/superbwarfare/guns/ak_47.json +++ b/src/main/resources/data/superbwarfare/guns/ak_47.json @@ -14,5 +14,6 @@ "EmptyReloadTime": 65, "BypassesArmor": 0.2, "SoundRadius": 14, - "RPM": 600 + "RPM": 600, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/bocek.json b/src/main/resources/data/superbwarfare/guns/bocek.json index a591ebdc2..52b58eae0 100644 --- a/src/main/resources/data/superbwarfare/guns/bocek.json +++ b/src/main/resources/data/superbwarfare/guns/bocek.json @@ -4,5 +4,6 @@ "Headshot": 2.5, "Damage": 48, "Weight": 3, - "BypassesArmor": 0.25 + "BypassesArmor": 0.25, + "AmmoType": "minecraft:arrow" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/devotion.json b/src/main/resources/data/superbwarfare/guns/devotion.json index 637769f4c..7ffe3e42a 100644 --- a/src/main/resources/data/superbwarfare/guns/devotion.json +++ b/src/main/resources/data/superbwarfare/guns/devotion.json @@ -13,5 +13,6 @@ "EmptyReloadTime": 95, "BypassesArmor": 0.25, "SoundRadius": 13, - "RPM": 400 + "RPM": 400, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/glock_17.json b/src/main/resources/data/superbwarfare/guns/glock_17.json index e96aa8237..b44b96fc5 100644 --- a/src/main/resources/data/superbwarfare/guns/glock_17.json +++ b/src/main/resources/data/superbwarfare/guns/glock_17.json @@ -11,5 +11,6 @@ "EmptyReloadTime": 47, "BypassesArmor": 0.15, "SoundRadius": 8, - "RPM": 400 + "RPM": 400, + "AmmoType": "@HandgunAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/glock_18.json b/src/main/resources/data/superbwarfare/guns/glock_18.json index 68925ea43..4b2a02615 100644 --- a/src/main/resources/data/superbwarfare/guns/glock_18.json +++ b/src/main/resources/data/superbwarfare/guns/glock_18.json @@ -12,5 +12,6 @@ "EmptyReloadTime": 47, "BypassesArmor": 0.15, "SoundRadius": 8, - "RPM": 1300 + "RPM": 1300, + "AmmoType": "@HandgunAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/hk_416.json b/src/main/resources/data/superbwarfare/guns/hk_416.json index 545dbd450..5f3b4d225 100644 --- a/src/main/resources/data/superbwarfare/guns/hk_416.json +++ b/src/main/resources/data/superbwarfare/guns/hk_416.json @@ -14,5 +14,6 @@ "EmptyReloadTime": 64, "BypassesArmor": 0.25, "SoundRadius": 14, - "RPM": 900 + "RPM": 900, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/homemade_shotgun.json b/src/main/resources/data/superbwarfare/guns/homemade_shotgun.json index 861af0b1d..759328498 100644 --- a/src/main/resources/data/superbwarfare/guns/homemade_shotgun.json +++ b/src/main/resources/data/superbwarfare/guns/homemade_shotgun.json @@ -12,5 +12,6 @@ "EmptyReloadTime": 83, "BypassesArmor": 0.01, "SoundRadius": 16, - "RPM": 600 + "RPM": 600, + "AmmoType": "@ShotgunAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/hunting_rifle.json b/src/main/resources/data/superbwarfare/guns/hunting_rifle.json index 4ca6850a4..fe92ac4da 100644 --- a/src/main/resources/data/superbwarfare/guns/hunting_rifle.json +++ b/src/main/resources/data/superbwarfare/guns/hunting_rifle.json @@ -9,5 +9,6 @@ "Weight": 5, "EmptyReloadTime": 64, "BypassesArmor": 0.7, - "SoundRadius": 20 + "SoundRadius": 20, + "AmmoType": "@SniperAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/insidious.json b/src/main/resources/data/superbwarfare/guns/insidious.json index 646aad8c4..4b85e86d5 100644 --- a/src/main/resources/data/superbwarfare/guns/insidious.json +++ b/src/main/resources/data/superbwarfare/guns/insidious.json @@ -12,5 +12,6 @@ "EmptyReloadTime": 56, "BypassesArmor": 0.4, "SoundRadius": 12, - "RPM": 900 + "RPM": 900, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/javelin.json b/src/main/resources/data/superbwarfare/guns/javelin.json index 9717c34de..0adfde737 100644 --- a/src/main/resources/data/superbwarfare/guns/javelin.json +++ b/src/main/resources/data/superbwarfare/guns/javelin.json @@ -6,5 +6,6 @@ "EmptyReloadTime": 78, "Damage": 700, "ExplosionDamage": 60, - "ExplosionRadius": 5 + "ExplosionRadius": 5, + "AmmoType": "superbwarfare:javelin_missile" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/k_98.json b/src/main/resources/data/superbwarfare/guns/k_98.json index 6d3a51656..d0b5b41b8 100644 --- a/src/main/resources/data/superbwarfare/guns/k_98.json +++ b/src/main/resources/data/superbwarfare/guns/k_98.json @@ -14,5 +14,6 @@ "IterativeTime": 11, "FinishTime": 18, "BypassesArmor": 0.5, - "SoundRadius": 18 + "SoundRadius": 18, + "AmmoType": "@SniperAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_1911.json b/src/main/resources/data/superbwarfare/guns/m_1911.json index 7da655273..3f9ea8360 100644 --- a/src/main/resources/data/superbwarfare/guns/m_1911.json +++ b/src/main/resources/data/superbwarfare/guns/m_1911.json @@ -11,5 +11,6 @@ "EmptyReloadTime": 47, "BypassesArmor": 0.2, "SoundRadius": 10, - "RPM": 400 + "RPM": 400, + "AmmoType": "@HandgunAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_4.json b/src/main/resources/data/superbwarfare/guns/m_4.json index bdad9e132..73c7d0b69 100644 --- a/src/main/resources/data/superbwarfare/guns/m_4.json +++ b/src/main/resources/data/superbwarfare/guns/m_4.json @@ -14,5 +14,6 @@ "EmptyReloadTime": 64, "BypassesArmor": 0.25, "SoundRadius": 14, - "RPM": 850 + "RPM": 850, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_60.json b/src/main/resources/data/superbwarfare/guns/m_60.json index 11a515089..c4258d33d 100644 --- a/src/main/resources/data/superbwarfare/guns/m_60.json +++ b/src/main/resources/data/superbwarfare/guns/m_60.json @@ -12,5 +12,6 @@ "EmptyReloadTime": 133, "BypassesArmor": 0.25, "SoundRadius": 15, - "RPM": 600 + "RPM": 600, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_79.json b/src/main/resources/data/superbwarfare/guns/m_79.json index 0d7cc1681..ffd6af3b0 100644 --- a/src/main/resources/data/superbwarfare/guns/m_79.json +++ b/src/main/resources/data/superbwarfare/guns/m_79.json @@ -8,5 +8,6 @@ "Velocity": 3.75, "Magazine": 1, "Weight": 4, - "EmptyReloadTime": 64 + "EmptyReloadTime": 64, + "AmmoType": "superbwarfare:grenade_40mm" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_870.json b/src/main/resources/data/superbwarfare/guns/m_870.json index c5774572f..255599ab8 100644 --- a/src/main/resources/data/superbwarfare/guns/m_870.json +++ b/src/main/resources/data/superbwarfare/guns/m_870.json @@ -14,5 +14,6 @@ "FinishTime": 12, "BypassesArmor": 0.05, "SoundRadius": 16, - "BoltActionTime": 11 + "BoltActionTime": 11, + "AmmoType": "@ShotgunAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_98b.json b/src/main/resources/data/superbwarfare/guns/m_98b.json index 0080ee747..73e341727 100644 --- a/src/main/resources/data/superbwarfare/guns/m_98b.json +++ b/src/main/resources/data/superbwarfare/guns/m_98b.json @@ -14,5 +14,6 @@ "NormalReloadTime": 60, "EmptyReloadTime": 78, "BypassesArmor": 0.6, - "SoundRadius": 18 + "SoundRadius": 18, + "AmmoType": "@SniperAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/marlin.json b/src/main/resources/data/superbwarfare/guns/marlin.json index 111a87fa9..ff166c7e9 100644 --- a/src/main/resources/data/superbwarfare/guns/marlin.json +++ b/src/main/resources/data/superbwarfare/guns/marlin.json @@ -12,5 +12,6 @@ "FinishTime": 19, "BypassesArmor": 0.3, "SoundRadius": 15, - "BoltActionTime": 12 + "BoltActionTime": 12, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/minigun.json b/src/main/resources/data/superbwarfare/guns/minigun.json index 92e4e445b..4aa46ed5e 100644 --- a/src/main/resources/data/superbwarfare/guns/minigun.json +++ b/src/main/resources/data/superbwarfare/guns/minigun.json @@ -8,5 +8,6 @@ "Weight": 10, "BypassesArmor": 0.3, "SoundRadius": 14, - "RPM": 1200 + "RPM": 1200, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/mk_14.json b/src/main/resources/data/superbwarfare/guns/mk_14.json index a88d5d450..206a4e983 100644 --- a/src/main/resources/data/superbwarfare/guns/mk_14.json +++ b/src/main/resources/data/superbwarfare/guns/mk_14.json @@ -14,5 +14,6 @@ "EmptyReloadTime": 71, "BypassesArmor": 0.4, "SoundRadius": 16, - "RPM": 700 + "RPM": 700, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/mosin_nagant.json b/src/main/resources/data/superbwarfare/guns/mosin_nagant.json index 1eaeb255c..b15471bb4 100644 --- a/src/main/resources/data/superbwarfare/guns/mosin_nagant.json +++ b/src/main/resources/data/superbwarfare/guns/mosin_nagant.json @@ -14,5 +14,6 @@ "IterativeTime": 11, "FinishTime": 18, "BypassesArmor": 0.54, - "SoundRadius": 18 + "SoundRadius": 18, + "AmmoType": "@SniperAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/mp_443.json b/src/main/resources/data/superbwarfare/guns/mp_443.json index e96aa8237..b44b96fc5 100644 --- a/src/main/resources/data/superbwarfare/guns/mp_443.json +++ b/src/main/resources/data/superbwarfare/guns/mp_443.json @@ -11,5 +11,6 @@ "EmptyReloadTime": 47, "BypassesArmor": 0.15, "SoundRadius": 8, - "RPM": 400 + "RPM": 400, + "AmmoType": "@HandgunAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/ntw_20.json b/src/main/resources/data/superbwarfare/guns/ntw_20.json index 1c91dee3d..bc48b05cf 100644 --- a/src/main/resources/data/superbwarfare/guns/ntw_20.json +++ b/src/main/resources/data/superbwarfare/guns/ntw_20.json @@ -13,5 +13,6 @@ "NormalReloadTime": 84, "EmptyReloadTime": 112, "BypassesArmor": 1, - "SoundRadius": 22 + "SoundRadius": 22, + "AmmoType": "@HeavyAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/qbz_95.json b/src/main/resources/data/superbwarfare/guns/qbz_95.json index b3592ecb8..7ee0f292f 100644 --- a/src/main/resources/data/superbwarfare/guns/qbz_95.json +++ b/src/main/resources/data/superbwarfare/guns/qbz_95.json @@ -14,5 +14,6 @@ "EmptyReloadTime": 74, "BypassesArmor": 0.28, "SoundRadius": 13, - "RPM": 650 + "RPM": 650, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/rpg.json b/src/main/resources/data/superbwarfare/guns/rpg.json index 690dabbc3..bbe0c402d 100644 --- a/src/main/resources/data/superbwarfare/guns/rpg.json +++ b/src/main/resources/data/superbwarfare/guns/rpg.json @@ -8,5 +8,6 @@ "Velocity": 4, "Magazine": 1, "Weight": 7, - "EmptyReloadTime": 103 + "EmptyReloadTime": 103, + "AmmoType": "superbwarfare:rocket" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/rpk.json b/src/main/resources/data/superbwarfare/guns/rpk.json index accb33402..a3e9043cc 100644 --- a/src/main/resources/data/superbwarfare/guns/rpk.json +++ b/src/main/resources/data/superbwarfare/guns/rpk.json @@ -14,5 +14,6 @@ "EmptyReloadTime": 65, "BypassesArmor": 0.23, "SoundRadius": 14, - "RPM": 600 + "RPM": 600, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/secondary_cataclysm.json b/src/main/resources/data/superbwarfare/guns/secondary_cataclysm.json index 1d7c584c5..81b104403 100644 --- a/src/main/resources/data/superbwarfare/guns/secondary_cataclysm.json +++ b/src/main/resources/data/superbwarfare/guns/secondary_cataclysm.json @@ -11,5 +11,6 @@ "PrepareLoadTime": 31, "IterativeTime": 20, "FinishTime": 19, - "SoundRadius": 8 + "SoundRadius": 8, + "AmmoType": "superbwarfare:grenade_40mm" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/sentinel.json b/src/main/resources/data/superbwarfare/guns/sentinel.json index ef7fb98e0..3096b3c21 100644 --- a/src/main/resources/data/superbwarfare/guns/sentinel.json +++ b/src/main/resources/data/superbwarfare/guns/sentinel.json @@ -12,5 +12,6 @@ "NormalReloadTime": 59, "EmptyReloadTime": 89, "BypassesArmor": 0.8, - "SoundRadius": 20 + "SoundRadius": 20, + "AmmoType": "@SniperAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/sks.json b/src/main/resources/data/superbwarfare/guns/sks.json index bc8d0de03..82c25cec1 100644 --- a/src/main/resources/data/superbwarfare/guns/sks.json +++ b/src/main/resources/data/superbwarfare/guns/sks.json @@ -11,5 +11,6 @@ "EmptyReloadTime": 75, "BypassesArmor": 0.23, "SoundRadius": 16, - "RPM": 400 + "RPM": 400, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/svd.json b/src/main/resources/data/superbwarfare/guns/svd.json index 9dad97016..b763bfbd2 100644 --- a/src/main/resources/data/superbwarfare/guns/svd.json +++ b/src/main/resources/data/superbwarfare/guns/svd.json @@ -13,5 +13,6 @@ "EmptyReloadTime": 78, "BypassesArmor": 0.45, "SoundRadius": 17, - "RPM": 300 + "RPM": 300, + "AmmoType": "@SniperAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/taser.json b/src/main/resources/data/superbwarfare/guns/taser.json index e1333470d..7c3dd18fc 100644 --- a/src/main/resources/data/superbwarfare/guns/taser.json +++ b/src/main/resources/data/superbwarfare/guns/taser.json @@ -6,5 +6,6 @@ "Velocity": 3, "Magazine": 1, "Weight": 1, - "EmptyReloadTime": 58 + "EmptyReloadTime": 58, + "AmmoType": "superbwarfare:taser_electrode" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/trachelium.json b/src/main/resources/data/superbwarfare/guns/trachelium.json index fae77792a..05582377b 100644 --- a/src/main/resources/data/superbwarfare/guns/trachelium.json +++ b/src/main/resources/data/superbwarfare/guns/trachelium.json @@ -10,5 +10,6 @@ "EmptyReloadTime": 65, "BypassesArmor": 0.3, "SoundRadius": 10, - "RPM": 240 + "RPM": 240, + "AmmoType": "@RifleAmmo" } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/vector.json b/src/main/resources/data/superbwarfare/guns/vector.json index 0a463a485..fd63b60ea 100644 --- a/src/main/resources/data/superbwarfare/guns/vector.json +++ b/src/main/resources/data/superbwarfare/guns/vector.json @@ -13,5 +13,6 @@ "EmptyReloadTime": 64, "BypassesArmor": 0.15, "SoundRadius": 11, - "RPM": 1200 + "RPM": 1200, + "AmmoType": "@HandgunAmmo" } \ No newline at end of file