From 23b225e56dfba41e01f977314b12de00d01a4f56 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sun, 2 Mar 2025 23:32:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=9F=BA=E7=A1=80=E5=BC=B9?= =?UTF-8?q?=E8=8D=AF=E6=95=B0=E5=80=BC=EF=BC=8C=E7=89=9B=E5=A4=B4=E7=8E=8B?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=BD=BF=E7=94=A8=E9=87=8D=E5=9E=8B=E5=BC=B9?= =?UTF-8?q?=E8=8D=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2e07f3c482445536d45c00e6abf223465c01c841 | 8 +++-- .../tags/items/heavy_weapon.json | 5 ++++ .../tags/items/sniper_rifle.json | 1 - .../tags/items/use_heavy_ammo.json | 5 ++++ .../tags/items/use_sniper_ammo.json | 1 - .../client/layer/Ntw20Layer.java | 2 +- .../client/model/item/Ntw20Model.java | 4 +-- .../client/overlay/AmmoBarOverlay.java | 6 ++++ .../client/renderer/item/Ntw20Renderer.java | 2 +- .../superbwarfare/command/AmmoCommand.java | 4 +++ .../datagen/ModItemTagProvider.java | 8 +++-- .../entity/vehicle/AnnihilatorEntity.java | 2 +- .../event/ClientEventHandler.java | 4 +-- .../superbwarfare/event/GunEventHandler.java | 17 +++++++++-- .../event/LivingEventHandler.java | 12 +++++--- .../event/PlayerEventHandler.java | 3 ++ .../superbwarfare/init/ModItems.java | 11 +++---- .../atsuishio/superbwarfare/init/ModTabs.java | 1 + .../atsuishio/superbwarfare/init/ModTags.java | 3 ++ .../superbwarfare/init/ModVillagers.java | 28 ++++++++++-------- .../item/common/ammo/AmmoBox.java | 18 ++++++++++- .../item/common/ammo/AmmoSupplierItem.java | 2 ++ .../superbwarfare/item/gun/GunItem.java | 3 ++ .../item/gun/{sniper => heavy}/Ntw20Item.java | 2 +- .../superbwarfare/network/ModVariables.java | 5 ++++ .../network/message/ReloadMessage.java | 2 ++ .../superbwarfare/tools/GunInfo.java | 3 +- .../superbwarfare/tools/GunsTool.java | 2 ++ .../assets/superbwarfare/lang/en_us.json | 13 ++++---- .../assets/superbwarfare/lang/zh_cn.json | 17 ++++++----- .../textures/item/handgunammo.png | Bin 527 -> 337 bytes .../superbwarfare/textures/item/rifleammo.png | Bin 548 -> 407 bytes .../textures/item/shotgunammo.png | Bin 583 -> 456 bytes .../textures/item/sniperammo.png | Bin 543 -> 426 bytes .../loot_tables/chests/blue_print_common.json | 24 +++++++-------- .../loot_tables/chests/blue_print_epic.json | 24 +++++++-------- .../loot_tables/chests/blue_print_rare.json | 24 +++++++-------- .../recipes/handgun_ammo_box_crafting.json | 28 ------------------ .../recipes/handgun_ammo_crafting.json | 2 +- .../recipes/rifle_ammo_box_crafting.json | 28 ------------------ .../recipes/rifle_ammo_crafting.json | 2 +- .../recipes/shotgun_ammo_box_crafting.json | 28 ------------------ .../recipes/shotgun_ammo_crafting.json | 2 +- .../recipes/sniper_ammo_box_crafting.json | 28 ------------------ .../recipes/sniper_ammo_crafting.json | 2 +- 45 files changed, 182 insertions(+), 204 deletions(-) create mode 100644 src/generated/resources/data/superbwarfare/tags/items/heavy_weapon.json create mode 100644 src/generated/resources/data/superbwarfare/tags/items/use_heavy_ammo.json rename src/main/java/com/atsuishio/superbwarfare/item/gun/{sniper => heavy}/Ntw20Item.java (99%) delete mode 100644 src/main/resources/data/superbwarfare/recipes/handgun_ammo_box_crafting.json delete mode 100644 src/main/resources/data/superbwarfare/recipes/rifle_ammo_box_crafting.json delete mode 100644 src/main/resources/data/superbwarfare/recipes/shotgun_ammo_box_crafting.json delete mode 100644 src/main/resources/data/superbwarfare/recipes/sniper_ammo_box_crafting.json diff --git a/src/generated/resources/.cache/2e07f3c482445536d45c00e6abf223465c01c841 b/src/generated/resources/.cache/2e07f3c482445536d45c00e6abf223465c01c841 index 995e6275e..bb984b9c4 100644 --- a/src/generated/resources/.cache/2e07f3c482445536d45c00e6abf223465c01c841 +++ b/src/generated/resources/.cache/2e07f3c482445536d45c00e6abf223465c01c841 @@ -1,4 +1,4 @@ -// 1.20.1 2025-02-09T16:13:02.6424176 Tags for minecraft:item mod id superbwarfare +// 1.20.1 2025-03-02T22:54:17.1079906 Tags for minecraft:item mod id superbwarfare cf8d49a8d2872286d1a9c3d4a7e1c2b7690db0b8 data/forge/tags/items/dusts.json 0fa06c2ff83bf09797e3ddff90f62d1124e645b4 data/forge/tags/items/dusts/coal_coke.json 295ddf906b7133a0558d03e9a60eea18281fe430 data/forge/tags/items/dusts/iron.json @@ -28,6 +28,7 @@ af6fd64b4a685c353f243763db268f7b2304c009 data/forge/tags/items/storage_blocks/le 144e54d908121dee498b2ebba3b24b09fd6f18d9 data/forge/tags/items/storage_blocks/tungsten.json 96a9ddc01147520bc6f573454a329bd67e8d0962 data/superbwarfare/tags/items/gun.json 409af265147e812b6f6558c51f1cb83b0f61b7d3 data/superbwarfare/tags/items/handgun.json +0ab1b2a8f5433e0d1b03446a9d0d9428e9d64feb data/superbwarfare/tags/items/heavy_weapon.json 3cc00928c041f710b50eb1f7a817e0345f6f96b3 data/superbwarfare/tags/items/ingots/cemented_carbide.json 9b38dc57a6ea6b75f183dfe6376190aaf5b575f0 data/superbwarfare/tags/items/ingots/steel.json 65ddb0a8a671cc65af8e3754fc23e7d24c3587b7 data/superbwarfare/tags/items/launcher.json @@ -38,10 +39,11 @@ a53020091752016da6602ee1b8b7e08823614344 data/superbwarfare/tags/items/military_ aaa533157491a82b8e23b2914deef67c4078cbed data/superbwarfare/tags/items/rifle.json acd4d19dfadb71a1cec43e9c0f4a38fe8d3cf8cb data/superbwarfare/tags/items/shotgun.json 4aca0fa3f8b9f2a4920041e35e46dae7e93d5482 data/superbwarfare/tags/items/smg.json -13a23684e04832bea5dfbd2c0a9d9ed52dcb3422 data/superbwarfare/tags/items/sniper_rifle.json +7a12c751d024c06b3e88657afddc84fce8e13295 data/superbwarfare/tags/items/sniper_rifle.json 30a6a2a2031c2fc53accf833c1760697462c5b33 data/superbwarfare/tags/items/storage_blocks/cemented_carbide.json a391df0529d05dbae8f9bc6e9ddce039b63e545a data/superbwarfare/tags/items/storage_blocks/steel.json 9af8a0147d1e920ef2a2b990bc9010367cf3b7df data/superbwarfare/tags/items/use_handgun_ammo.json +0ab1b2a8f5433e0d1b03446a9d0d9428e9d64feb data/superbwarfare/tags/items/use_heavy_ammo.json 2899774c6325135847a85b09121ce25587aa275e data/superbwarfare/tags/items/use_rifle_ammo.json acd4d19dfadb71a1cec43e9c0f4a38fe8d3cf8cb data/superbwarfare/tags/items/use_shotgun_ammo.json -13a23684e04832bea5dfbd2c0a9d9ed52dcb3422 data/superbwarfare/tags/items/use_sniper_ammo.json +7a12c751d024c06b3e88657afddc84fce8e13295 data/superbwarfare/tags/items/use_sniper_ammo.json diff --git a/src/generated/resources/data/superbwarfare/tags/items/heavy_weapon.json b/src/generated/resources/data/superbwarfare/tags/items/heavy_weapon.json new file mode 100644 index 000000000..2aa78be0d --- /dev/null +++ b/src/generated/resources/data/superbwarfare/tags/items/heavy_weapon.json @@ -0,0 +1,5 @@ +{ + "values": [ + "superbwarfare:ntw_20" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/superbwarfare/tags/items/sniper_rifle.json b/src/generated/resources/data/superbwarfare/tags/items/sniper_rifle.json index 923e6b3ec..d869e1190 100644 --- a/src/generated/resources/data/superbwarfare/tags/items/sniper_rifle.json +++ b/src/generated/resources/data/superbwarfare/tags/items/sniper_rifle.json @@ -1,7 +1,6 @@ { "values": [ "superbwarfare:hunting_rifle", - "superbwarfare:ntw_20", "superbwarfare:sentinel", "superbwarfare:svd", "superbwarfare:m_98b", diff --git a/src/generated/resources/data/superbwarfare/tags/items/use_heavy_ammo.json b/src/generated/resources/data/superbwarfare/tags/items/use_heavy_ammo.json new file mode 100644 index 000000000..2aa78be0d --- /dev/null +++ b/src/generated/resources/data/superbwarfare/tags/items/use_heavy_ammo.json @@ -0,0 +1,5 @@ +{ + "values": [ + "superbwarfare:ntw_20" + ] +} \ No newline at end of file diff --git a/src/generated/resources/data/superbwarfare/tags/items/use_sniper_ammo.json b/src/generated/resources/data/superbwarfare/tags/items/use_sniper_ammo.json index 923e6b3ec..d869e1190 100644 --- a/src/generated/resources/data/superbwarfare/tags/items/use_sniper_ammo.json +++ b/src/generated/resources/data/superbwarfare/tags/items/use_sniper_ammo.json @@ -1,7 +1,6 @@ { "values": [ "superbwarfare:hunting_rifle", - "superbwarfare:ntw_20", "superbwarfare:sentinel", "superbwarfare:svd", "superbwarfare:m_98b", diff --git a/src/main/java/com/atsuishio/superbwarfare/client/layer/Ntw20Layer.java b/src/main/java/com/atsuishio/superbwarfare/client/layer/Ntw20Layer.java index c36cc29c7..2aa60d350 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/layer/Ntw20Layer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/layer/Ntw20Layer.java @@ -1,9 +1,9 @@ package com.atsuishio.superbwarfare.client.layer; import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.item.gun.heavy.Ntw20Item; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; -import com.atsuishio.superbwarfare.item.gun.sniper.Ntw20Item; import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.texture.OverlayTexture; diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Ntw20Model.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Ntw20Model.java index 5c54c2fac..de6171604 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Ntw20Model.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Ntw20Model.java @@ -4,7 +4,7 @@ import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.client.overlay.CrossHairOverlay; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModTags; -import com.atsuishio.superbwarfare.item.gun.sniper.Ntw20Item; +import com.atsuishio.superbwarfare.item.gun.heavy.Ntw20Item; import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; @@ -89,7 +89,7 @@ public class Ntw20Model extends GeoModel { CrossHairOverlay.gunRot = shen.getRotZ(); gun.setPosX(4.54f * (float) zp); - gun.setPosY(-0.45f * (float) zp - (float) (0.2f * zpz)); + gun.setPosY(-0.47f * (float) zp - (float) (0.2f * zpz)); gun.setPosZ(10.0f * (float) zp + (float) (0.3f * zpz)); gun.setRotZ((float) (0.02f * zpz)); gun.setScaleZ(1f - (0.8f * (float) zp)); 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 7616555c5..2adf05f36 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/overlay/AmmoBarOverlay.java @@ -249,6 +249,9 @@ public class AmmoBarOverlay { if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { return "" + (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).sniperAmmo; } + if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { + return "" + (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).heavyAmmo; + } return ""; } @@ -286,6 +289,9 @@ public class AmmoBarOverlay { if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { return "Sniper Ammo"; } + if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { + return "Heavy Ammo"; + } return ""; } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/Ntw20Renderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/Ntw20Renderer.java index 9c8fdfca6..999b2f9b1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/Ntw20Renderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/item/Ntw20Renderer.java @@ -5,7 +5,7 @@ import com.atsuishio.superbwarfare.client.layer.Ntw20Layer; import com.atsuishio.superbwarfare.client.model.item.Ntw20Model; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModTags; -import com.atsuishio.superbwarfare.item.gun.sniper.Ntw20Item; +import com.atsuishio.superbwarfare.item.gun.heavy.Ntw20Item; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.client.Minecraft; diff --git a/src/main/java/com/atsuishio/superbwarfare/command/AmmoCommand.java b/src/main/java/com/atsuishio/superbwarfare/command/AmmoCommand.java index 2ffe11fdc..68c640978 100644 --- a/src/main/java/com/atsuishio/superbwarfare/command/AmmoCommand.java +++ b/src/main/java/com/atsuishio/superbwarfare/command/AmmoCommand.java @@ -37,6 +37,7 @@ public class AmmoCommand { case RIFLE -> c.rifleAmmo; case SHOTGUN -> c.shotgunAmmo; case SNIPER -> c.sniperAmmo; + case HEAVY -> c.heavyAmmo; } ).orElse(0); context.getSource().sendSuccess(() -> Component.translatable("commands.ammo.get", Component.translatable(type.translatableKey), value), true); @@ -54,6 +55,7 @@ public class AmmoCommand { case RIFLE -> capability.rifleAmmo = value; case SHOTGUN -> capability.shotgunAmmo = value; case SNIPER -> capability.sniperAmmo = value; + case HEAVY -> capability.heavyAmmo = value; } capability.syncPlayerVariables(player); }); @@ -74,12 +76,14 @@ public class AmmoCommand { case RIFLE -> capability.rifleAmmo += value; case SHOTGUN -> capability.shotgunAmmo += value; case SNIPER -> capability.sniperAmmo += value; + case HEAVY -> capability.heavyAmmo += value; } // 迫真溢出检测 if (capability.handgunAmmo < 0) capability.handgunAmmo = Integer.MAX_VALUE; if (capability.rifleAmmo < 0) capability.rifleAmmo = Integer.MAX_VALUE; if (capability.shotgunAmmo < 0) capability.shotgunAmmo = Integer.MAX_VALUE; if (capability.sniperAmmo < 0) capability.sniperAmmo = Integer.MAX_VALUE; + if (capability.heavyAmmo < 0) capability.heavyAmmo = Integer.MAX_VALUE; capability.syncPlayerVariables(player); }); diff --git a/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemTagProvider.java b/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemTagProvider.java index 2f408cc6d..51db13f5b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemTagProvider.java +++ b/src/main/java/com/atsuishio/superbwarfare/datagen/ModItemTagProvider.java @@ -82,9 +82,11 @@ public class ModItemTagProvider extends ItemTagsProvider { this.tag(ModTags.Items.RIFLE).add(ModItems.M_4.get(), ModItems.HK_416.get(), ModItems.SKS.get(), ModItems.MK_14.get(), ModItems.MARLIN.get(), ModItems.AK_47.get(), ModItems.AK_12.get(), ModItems.QBZ_95.get()); - this.tag(ModTags.Items.SNIPER_RIFLE).add(ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.SENTINEL.get(), + this.tag(ModTags.Items.SNIPER_RIFLE).add(ModItems.HUNTING_RIFLE.get(), ModItems.SENTINEL.get(), ModItems.SVD.get(), ModItems.M_98B.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get()); + this.tag(ModTags.Items.HEAVY_WEAPON).add(ModItems.NTW_20.get()); + this.tag(ModTags.Items.SHOTGUN).add(ModItems.ABEKIRI.get(), ModItems.M_870.get(), ModItems.AA_12.get()); this.tag(ModTags.Items.MACHINE_GUN).add(ModItems.MINIGUN.get(), ModItems.DEVOTION.get(), ModItems.RPK.get(), ModItems.M_60.get()); @@ -101,9 +103,11 @@ public class ModItemTagProvider extends ItemTagsProvider { this.tag(ModTags.Items.USE_SHOTGUN_AMMO).add(ModItems.ABEKIRI.get(), ModItems.M_870.get(), ModItems.AA_12.get()); - this.tag(ModTags.Items.USE_SNIPER_AMMO).add(ModItems.HUNTING_RIFLE.get(), ModItems.NTW_20.get(), ModItems.SENTINEL.get(), + this.tag(ModTags.Items.USE_SNIPER_AMMO).add(ModItems.HUNTING_RIFLE.get(), ModItems.SENTINEL.get(), ModItems.SVD.get(), ModItems.M_98B.get(), ModItems.K_98.get(), ModItems.MOSIN_NAGANT.get()); + this.tag(ModTags.Items.USE_HEAVY_AMMO).add(ModItems.NTW_20.get()); + this.tag(ModTags.Items.LAUNCHER).add(ModItems.M_79.get(), ModItems.RPG.get(), ModItems.JAVELIN.get(), ModItems.SECONDARY_CATACLYSM.get()); this.tag(ModTags.Items.REVOLVER).add(ModItems.TRACHELIUM.get()); diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java index 690b442b9..8b99bd7cc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/vehicle/AnnihilatorEntity.java @@ -194,7 +194,7 @@ public class AnnihilatorEntity extends EnergyVehicleEntity implements GeoEntity, .multiply(0.1f, ModDamageTypes.MINE) .multiply(0.12f, ModDamageTypes.LUNGE_MINE) .multiply(0.22f, ModDamageTypes.CANNON_FIRE) - .multiply(0.15f, ModTags.DamageTypes.PROJECTILE_ABSOLUTE) + .multiply(0.07f, ModTags.DamageTypes.PROJECTILE_ABSOLUTE) .reduce(10); } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index f9ea75ea0..dce53ebe5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -374,7 +374,7 @@ public class ClientEventHandler { double zoomSpread; - if (stack.is(ModTags.Items.SNIPER_RIFLE)) { + if (stack.is(ModTags.Items.SNIPER_RIFLE) || stack.is(ModTags.Items.HEAVY_WEAPON)) { zoomSpread = 1 - (0.995 * zoomTime); } else if (stack.is(ModTags.Items.SHOTGUN)) { if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { @@ -671,7 +671,7 @@ public class ClientEventHandler { if (gunItem.ejectShell(stack)) { if (stack.is(ModTags.Items.SHOTGUN)) { player.playSound(ModSounds.SHELL_CASING_SHOTGUN.get(), (float) Math.max(0.75 - 0.12 * shooterHeight, 0), 1); - } else if (stack.is(ModTags.Items.SNIPER_RIFLE)) { + } else if (stack.is(ModTags.Items.SNIPER_RIFLE) || stack.is(ModTags.Items.HEAVY_WEAPON)) { player.playSound(ModSounds.SHELL_CASING_50CAL.get(), (float) Math.max(1 - 0.15 * shooterHeight, 0), 1); } else { player.playSound(ModSounds.SHELL_CASING_NORMAL.get(), (float) Math.max(1.5 - 0.2 * shooterHeight, 0), 1); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java index f80c17c63..d598b1310 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java @@ -427,6 +427,8 @@ public class GunEventHandler { GunsTool.reload(player, stack, GunInfo.Type.HANDGUN, true); } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { GunsTool.reload(player, stack, GunInfo.Type.RIFLE, gunItem.bulletInBarrel(stack)); + } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { + GunsTool.reload(player, stack, GunInfo.Type.HEAVY, gunItem.bulletInBarrel(stack)); } } stack.getOrCreateTag().putBoolean("is_normal_reloading", false); @@ -450,6 +452,8 @@ public class GunEventHandler { GunsTool.reload(player, stack, GunInfo.Type.HANDGUN); } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { GunsTool.reload(player, stack, GunInfo.Type.RIFLE); + } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { + GunsTool.reload(player, stack, GunInfo.Type.HEAVY); } else if (stack.getItem() == ModItems.TASER.get()) { GunsTool.setGunIntTag(stack, "Ammo", 1); player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots()); @@ -590,6 +594,8 @@ public class GunEventHandler { tag.putBoolean("force_stage3_start", true); } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { tag.putBoolean("force_stage3_start", true); + } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && capability.heavyAmmo == 0) { + tag.putBoolean("force_stage3_start", true); } else if (stack.is(ModTags.Items.LAUNCHER) && GunsTool.getGunIntTag(stack, "MaxAmmo") == 0) { tag.putBoolean("force_stage3_start", true); } else if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && GunsTool.getGunIntTag(stack, "Ammo", 0) >= GunsTool.getGunIntTag(stack, "Magazine", 0)) { @@ -670,6 +676,8 @@ public class GunEventHandler { tag.putInt("reload_stage", 3); } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { tag.putInt("reload_stage", 3); + } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && capability.heavyAmmo == 0) { + tag.putInt("reload_stage", 3); } } @@ -734,6 +742,11 @@ public class GunEventHandler { capability.rifleAmmo -= 1; capability.syncPlayerVariables(player); }); + } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.heavyAmmo -= 1; + capability.syncPlayerVariables(player); + }); } else if (stack.getItem() == ModItems.SECONDARY_CATACLYSM.get()) { player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.GRENADE_40MM.get(), 1, player.inventoryMenu.getCraftSlots()); } @@ -777,7 +790,7 @@ public class GunEventHandler { ModUtils.queueServerWork((int) (GunsTool.getGunIntTag(stack, "PrepareEmptyTime", 0) / 2 + 3 + 1.5 * shooterHeight), () -> { if (stack.is(ModTags.Items.SHOTGUN)) { SoundTool.playLocalSound(serverPlayer, ModSounds.SHELL_CASING_SHOTGUN.get(), (float) Math.max(0.75 - 0.12 * shooterHeight, 0), 1); - } else if (stack.is(ModTags.Items.SNIPER_RIFLE)) { + } else if (stack.is(ModTags.Items.SNIPER_RIFLE) || stack.is(ModTags.Items.HEAVY_WEAPON)) { SoundTool.playLocalSound(serverPlayer, ModSounds.SHELL_CASING_50CAL.get(), (float) Math.max(1 - 0.15 * shooterHeight, 0), 1); } else { SoundTool.playLocalSound(serverPlayer, ModSounds.SHELL_CASING_NORMAL.get(), (float) Math.max(1.5 - 0.2 * shooterHeight, 0), 1); @@ -807,7 +820,7 @@ public class GunEventHandler { ModUtils.queueServerWork((int) (8 + 1.5 * shooterHeight), () -> { if (stack.is(ModTags.Items.SHOTGUN)) { SoundTool.playLocalSound(serverPlayer, ModSounds.SHELL_CASING_SHOTGUN.get(), (float) Math.max(0.75 - 0.12 * shooterHeight, 0), 1); - } else if (stack.is(ModTags.Items.SNIPER_RIFLE)) { + } else if (stack.is(ModTags.Items.SNIPER_RIFLE) || stack.is(ModTags.Items.HEAVY_WEAPON)) { SoundTool.playLocalSound(serverPlayer, ModSounds.SHELL_CASING_50CAL.get(), (float) Math.max(1 - 0.15 * shooterHeight, 0), 1); } else { SoundTool.playLocalSound(serverPlayer, ModSounds.SHELL_CASING_NORMAL.get(), (float) Math.max(1.5 - 0.2 * shooterHeight, 0), 1); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index b600b62f6..83589ad8e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -146,14 +146,16 @@ public class LivingEventHandler { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { if (perk instanceof AmmoPerk ammoPerk && ammoPerk.slug) { - damage = reduceDamageByDistance(amount, distance, 0.015, 50); + damage = reduceDamageByDistance(amount, distance, 0.015, 30); } else { - damage = reduceDamageByDistance(amount, distance, 0.03, 25); + damage = reduceDamageByDistance(amount, distance, 0.05, 15); } } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { damage = reduceDamageByDistance(amount, distance, 0.001, 150); + } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { + damage = reduceDamageByDistance(amount, distance, 0.0007, 250); } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - damage = reduceDamageByDistance(amount, distance, 0.02, 50); + damage = reduceDamageByDistance(amount, distance, 0.03, 40); } else if (stack.is(ModTags.Items.SMG)) { damage = reduceDamageByDistance(amount, distance, 0.02, 50); } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) || stack.getItem() == ModItems.BOCEK.get()) { @@ -706,7 +708,7 @@ public class LivingEventHandler { if (!entity.level().getLevelData().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && entity instanceof Player player) { var cap = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()); - boolean drop = cap.rifleAmmo + cap.handgunAmmo + cap.shotgunAmmo + cap.sniperAmmo > 0; + boolean drop = cap.rifleAmmo + cap.handgunAmmo + cap.shotgunAmmo + cap.sniperAmmo + cap.heavyAmmo > 0; if (drop) { ItemStack stack = new ItemStack(ModItems.AMMO_BOX.get()); @@ -721,6 +723,8 @@ public class LivingEventHandler { capability.shotgunAmmo = 0; tag.putInt("SniperAmmo", cap.sniperAmmo); capability.sniperAmmo = 0; + tag.putInt("HeavyAmmo", cap.heavyAmmo); + capability.heavyAmmo = 0; tag.putBoolean("IsDrop", true); capability.syncPlayerVariables(player); }); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java index e7509c365..ae60bf747 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -302,6 +302,9 @@ public class PlayerEventHandler { if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && cap.rifleAmmo > 0) { GunsTool.reload(player, stack, GunInfo.Type.RIFLE); } + if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && cap.heavyAmmo > 0) { + GunsTool.reload(player, stack, GunInfo.Type.HEAVY); + } if (stack.getItem() == ModItems.TASER.get() && GunsTool.getGunIntTag(stack, "MaxAmmo") > 0 && GunsTool.getGunIntTag(stack, "Ammo", 0) == 0) { GunsTool.setGunIntTag(stack, "Ammo", 1); diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java index 0972a0a24..c49d1f097 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModItems.java @@ -7,6 +7,7 @@ import com.atsuishio.superbwarfare.item.common.BlueprintItem; import com.atsuishio.superbwarfare.item.common.MaterialPack; import com.atsuishio.superbwarfare.item.common.ammo.*; import com.atsuishio.superbwarfare.item.gun.handgun.*; +import com.atsuishio.superbwarfare.item.gun.heavy.Ntw20Item; import com.atsuishio.superbwarfare.item.gun.launcher.JavelinItem; import com.atsuishio.superbwarfare.item.gun.launcher.M79Item; import com.atsuishio.superbwarfare.item.gun.launcher.RpgItem; @@ -85,10 +86,11 @@ public class ModItems { */ public static final DeferredRegister AMMO = DeferredRegister.create(ForgeRegistries.ITEMS, ModUtils.MODID); - public static final RegistryObject HANDGUN_AMMO = AMMO.register("handgun_ammo", () -> new AmmoSupplierItem(GunInfo.Type.HANDGUN, 5, new Item.Properties())); - public static final RegistryObject RIFLE_AMMO = AMMO.register("rifle_ammo", () -> new AmmoSupplierItem(GunInfo.Type.RIFLE, 5, new Item.Properties())); - public static final RegistryObject SNIPER_AMMO = AMMO.register("sniper_ammo", () -> new AmmoSupplierItem(GunInfo.Type.SNIPER, 2, new Item.Properties())); - public static final RegistryObject SHOTGUN_AMMO = AMMO.register("shotgun_ammo", () -> new AmmoSupplierItem(GunInfo.Type.SHOTGUN, 2, new Item.Properties())); + public static final RegistryObject HANDGUN_AMMO = AMMO.register("handgun_ammo", () -> new AmmoSupplierItem(GunInfo.Type.HANDGUN, 1, new Item.Properties())); + public static final RegistryObject RIFLE_AMMO = AMMO.register("rifle_ammo", () -> new AmmoSupplierItem(GunInfo.Type.RIFLE, 1, new Item.Properties())); + public static final RegistryObject SNIPER_AMMO = AMMO.register("sniper_ammo", () -> new AmmoSupplierItem(GunInfo.Type.SNIPER, 1, new Item.Properties())); + public static final RegistryObject SHOTGUN_AMMO = AMMO.register("shotgun_ammo", () -> new AmmoSupplierItem(GunInfo.Type.SHOTGUN, 1, new Item.Properties())); + public static final RegistryObject HEAVY_AMMO = AMMO.register("heavy_ammo", () -> new AmmoSupplierItem(GunInfo.Type.HEAVY, 1, new Item.Properties())); public static final RegistryObject HANDGUN_AMMO_BOX = AMMO.register("handgun_ammo_box", HandgunAmmoBox::new); public static final RegistryObject RIFLE_AMMO_BOX = AMMO.register("rifle_ammo_box", RifleAmmoBox::new); public static final RegistryObject SNIPER_AMMO_BOX = AMMO.register("sniper_ammo_box", SniperAmmoBox::new); @@ -108,7 +110,6 @@ public class ModItems { public static final RegistryObject RGO_GRENADE = AMMO.register("rgo_grenade", RgoGrenade::new); public static final RegistryObject CLAYMORE_MINE = AMMO.register("claymore_mine", ClaymoreMine::new); public static final RegistryObject C4_BOMB = AMMO.register("c4_bomb", C4Bomb::new); - public static final RegistryObject HEAVY_AMMO = AMMO.register("heavy_ammo", () -> new Item(new Item.Properties())); public static final RegistryObject SMALL_SHELL = AMMO.register("small_shell", () -> new Item(new Item.Properties())); public static final RegistryObject ROCKET_70 = AMMO.register("rocket_70", () -> new Item(new Item.Properties())); public static final RegistryObject WIRE_GUIDE_MISSILE = AMMO.register("wire_guide_missile", () -> new Item(new Item.Properties())); diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java index b4e13c724..8599a8912 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java @@ -3,6 +3,7 @@ package com.atsuishio.superbwarfare.init; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.item.ArmorPlate; import com.atsuishio.superbwarfare.item.gun.handgun.*; +import com.atsuishio.superbwarfare.item.gun.heavy.Ntw20Item; import com.atsuishio.superbwarfare.item.gun.launcher.JavelinItem; import com.atsuishio.superbwarfare.item.gun.launcher.M79Item; import com.atsuishio.superbwarfare.item.gun.launcher.RpgItem; diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModTags.java b/src/main/java/com/atsuishio/superbwarfare/init/ModTags.java index e642ce5ac..9bf0da296 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModTags.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModTags.java @@ -18,6 +18,7 @@ public class ModTags { public static final TagKey USE_RIFLE_AMMO = tag("use_rifle_ammo"); public static final TagKey USE_SHOTGUN_AMMO = tag("use_shotgun_ammo"); public static final TagKey USE_SNIPER_AMMO = tag("use_sniper_ammo"); + public static final TagKey USE_HEAVY_AMMO = tag("use_heavy_ammo"); public static final TagKey SMG = tag("smg"); public static final TagKey HANDGUN = tag("handgun"); @@ -25,6 +26,8 @@ public class ModTags { public static final TagKey SNIPER_RIFLE = tag("sniper_rifle"); public static final TagKey MACHINE_GUN = tag("machine_gun"); public static final TagKey SHOTGUN = tag("shotgun"); + public static final TagKey HEAVY_WEAPON = tag("heavy_weapon"); + public static final TagKey LAUNCHER = tag("launcher"); public static final TagKey REVOLVER = tag("revolver"); diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java b/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java index 25b71ebb0..142fd0aae 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModVillagers.java @@ -50,29 +50,29 @@ public class ModVillagers { new ItemStack(Items.EMERALD, 2), 16, 5, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1), - new ItemStack(ModItems.HANDGUN_AMMO.get(), 4), 16, 1, 0.05f)); + new ItemStack(ModItems.HANDGUN_AMMO.get(), 20), 16, 1, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1), - new ItemStack(ModItems.RIFLE_AMMO.get(), 3), 16, 1, 0.05f)); + new ItemStack(ModItems.RIFLE_AMMO.get(), 15), 16, 1, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1), - new ItemStack(ModItems.SNIPER_AMMO.get(), 2), 16, 1, 0.05f)); + new ItemStack(ModItems.SNIPER_AMMO.get(), 8), 16, 1, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1), - new ItemStack(ModItems.SHOTGUN_AMMO.get(), 2), 16, 1, 0.05f)); + new ItemStack(ModItems.SHOTGUN_AMMO.get(), 8), 16, 1, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1), - new ItemStack(ModItems.HEAVY_AMMO.get(), 2), 32, 1, 0.05f)); + new ItemStack(ModItems.HEAVY_AMMO.get(), 6), 32, 1, 0.05f)); trades.get(1).add(new BasicItemListing(new ItemStack(Items.EMERALD, 1), - new ItemStack(ModItems.SMALL_SHELL.get(), 1), 32, 1, 0.05f)); + new ItemStack(ModItems.SMALL_SHELL.get(), 4), 32, 1, 0.05f)); - trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HANDGUN_AMMO.get(), 8), + trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HANDGUN_AMMO.get(), 40), new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f)); - trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.RIFLE_AMMO.get(), 6), + trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.RIFLE_AMMO.get(), 30), new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f)); - trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SNIPER_AMMO.get(), 4), + trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SNIPER_AMMO.get(), 16), new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f)); - trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SHOTGUN_AMMO.get(), 4), + trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SHOTGUN_AMMO.get(), 16), new ItemStack(Items.EMERALD, 1), 32, 2, 0.05f)); - trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HEAVY_AMMO.get(), 4), + trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.HEAVY_AMMO.get(), 12), new ItemStack(Items.EMERALD, 1), 64, 2, 0.05f)); - trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SMALL_SHELL.get(), 2), + trades.get(1).add(new BasicItemListing(new ItemStack(ModItems.SMALL_SHELL.get(), 8), new ItemStack(Items.EMERALD, 1), 64, 2, 0.05f)); // 等级 2 交易 @@ -230,6 +230,8 @@ public class ModVillagers { new ItemStack(ModItems.AP_5_INCHES.get(), 1), 8, 10, 0.05f)); trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 24), new ItemStack(ModItems.JAVELIN_MISSILE.get(), 1), 8, 10, 0.05f)); + trades.get(5).add(new BasicItemListing(new ItemStack(Items.EMERALD, 24), + new ItemStack(ModItems.WIRE_GUIDE_MISSILE.get(), 1), 8, 10, 0.05f)); trades.get(5).add(new BasicItemListing(new ItemStack(ModItems.HE_5_INCHES.get(), 1), new ItemStack(Items.EMERALD, 8), 32, 4, 0.05f)); @@ -237,6 +239,8 @@ public class ModVillagers { new ItemStack(Items.EMERALD, 7), 32, 4, 0.05f)); trades.get(5).add(new BasicItemListing(new ItemStack(ModItems.JAVELIN_MISSILE.get(), 1), new ItemStack(Items.EMERALD, 12), 32, 4, 0.05f)); + trades.get(5).add(new BasicItemListing(new ItemStack(ModItems.WIRE_GUIDE_MISSILE.get(), 1), + new ItemStack(Items.EMERALD, 12), 32, 4, 0.05f)); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/AmmoBox.java b/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/AmmoBox.java index f626a5df6..d9adbcc82 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/AmmoBox.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/AmmoBox.java @@ -58,6 +58,11 @@ public class AmmoBox extends Item { tag.putInt("SniperAmmo", 0); } + if (type == 0 || type == 5) { + capability.heavyAmmo = cap.heavyAmmo + tag.getInt("HeavyAmmo"); + tag.putInt("HeavyAmmo", 0); + } + capability.syncPlayerVariables(player); if (!level.isClientSide()) { @@ -88,6 +93,11 @@ public class AmmoBox extends Item { capability.sniperAmmo = 0; } + if (type == 0 || type == 5) { + tag.putInt("HeavyAmmo", tag.getInt("HeavyAmmo") + cap.heavyAmmo); + capability.heavyAmmo = 0; + } + capability.syncPlayerVariables(player); if (!level.isClientSide()) { @@ -103,7 +113,7 @@ public class AmmoBox extends Item { if (entity instanceof Player player && player.isCrouching()) { int type = stack.getOrCreateTag().getInt("Type"); ++type; - type %= 5; + type %= 6; switch (type) { case 0 -> @@ -116,6 +126,8 @@ public class AmmoBox extends Item { player.displayClientMessage(Component.translatable("des.superbwarfare.ammo_box.type.shotgun").withStyle(ChatFormatting.RED), true); case 4 -> player.displayClientMessage(Component.translatable("des.superbwarfare.ammo_box.type.sniper").withStyle(ChatFormatting.GOLD), true); + case 5 -> + player.displayClientMessage(Component.translatable("des.superbwarfare.ammo_box.type.heavy").withStyle(ChatFormatting.LIGHT_PURPLE), true); } entity.playSound(ModSounds.FIRE_RATE.get(), 1f, 1f); @@ -145,6 +157,10 @@ public class AmmoBox extends Item { tooltip.add(Component.translatable("des.superbwarfare.ammo_box.sniper").withStyle(ChatFormatting.GOLD) .append(Component.literal("").withStyle(ChatFormatting.RESET)) .append(Component.literal(FormatTool.format0D(ItemNBTTool.getInt(stack, "SniperAmmo", 0)) + ((type == 0 || type == 4) ? " ←-" : " ")).withStyle(ChatFormatting.BOLD))); + + tooltip.add(Component.translatable("des.superbwarfare.ammo_box.heavy").withStyle(ChatFormatting.LIGHT_PURPLE) + .append(Component.literal("").withStyle(ChatFormatting.RESET)) + .append(Component.literal(FormatTool.format0D(ItemNBTTool.getInt(stack, "HeavyAmmo", 0)) + ((type == 0 || type == 5) ? " ←-" : " ")).withStyle(ChatFormatting.BOLD))); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/AmmoSupplierItem.java b/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/AmmoSupplierItem.java index 486a5bb0d..3bb635ffb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/AmmoSupplierItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/common/ammo/AmmoSupplierItem.java @@ -36,12 +36,14 @@ public class AmmoSupplierItem extends Item { case RIFLE -> capability.rifleAmmo; case SHOTGUN -> capability.shotgunAmmo; case SNIPER -> capability.sniperAmmo; + case HEAVY -> capability.heavyAmmo; } + ammoToAdd * count; switch (this.type) { case HANDGUN -> capability.handgunAmmo = newAmmoCount; case RIFLE -> capability.rifleAmmo = newAmmoCount; case SHOTGUN -> capability.shotgunAmmo = newAmmoCount; case SNIPER -> capability.sniperAmmo = newAmmoCount; + case HEAVY -> capability.heavyAmmo = newAmmoCount; } capability.syncPlayerVariables(player); }); 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 356526e25..f4b9e417c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -88,7 +88,10 @@ public abstract class GunItem extends Item { capability.handgunAmmo = entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).handgunAmmo + count; } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { capability.rifleAmmo = entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).rifleAmmo + count; + } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { + capability.rifleAmmo = entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).heavyAmmo + count; } + capability.syncPlayerVariables(entity); }); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/Ntw20Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/heavy/Ntw20Item.java similarity index 99% rename from src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/Ntw20Item.java rename to src/main/java/com/atsuishio/superbwarfare/item/gun/heavy/Ntw20Item.java index 64e34b8e0..9dc0b7839 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/Ntw20Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/heavy/Ntw20Item.java @@ -1,4 +1,4 @@ -package com.atsuishio.superbwarfare.item.gun.sniper; +package com.atsuishio.superbwarfare.item.gun.heavy; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.client.PoseTool; diff --git a/src/main/java/com/atsuishio/superbwarfare/network/ModVariables.java b/src/main/java/com/atsuishio/superbwarfare/network/ModVariables.java index 0d7c627c2..b8750c264 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/ModVariables.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/ModVariables.java @@ -73,6 +73,7 @@ public class ModVariables { clone.handgunAmmo = original.handgunAmmo; clone.shotgunAmmo = original.shotgunAmmo; clone.sniperAmmo = original.sniperAmmo; + clone.heavyAmmo = original.heavyAmmo; clone.bowPullHold = original.bowPullHold; clone.bowPull = original.bowPull; clone.playerDoubleJump = original.playerDoubleJump; @@ -213,6 +214,7 @@ public class ModVariables { public int handgunAmmo = 0; public int shotgunAmmo = 0; public int sniperAmmo = 0; + public int heavyAmmo = 0; public boolean bowPullHold = false; public boolean bowPull = false; public boolean playerDoubleJump = false; @@ -237,6 +239,7 @@ public class ModVariables { nbt.putInt("HandgunAmmo", handgunAmmo); nbt.putInt("ShotgunAmmo", shotgunAmmo); nbt.putInt("SniperAmmo", sniperAmmo); + nbt.putInt("HeavyAmmo", heavyAmmo); nbt.putBoolean("BowPullHold", bowPullHold); nbt.putBoolean("BowPull", bowPull); nbt.putBoolean("DoubleJump", playerDoubleJump); @@ -260,6 +263,7 @@ public class ModVariables { handgunAmmo = nbt.getInt("HandgunAmmo"); shotgunAmmo = nbt.getInt("ShotgunAmmo"); sniperAmmo = nbt.getInt("SniperAmmo"); + heavyAmmo = nbt.getInt("HeavyAmmo"); bowPullHold = nbt.getBoolean("BowPullHold"); bowPull = nbt.getBoolean("BowPull"); playerDoubleJump = nbt.getBoolean("DoubleJump"); @@ -313,6 +317,7 @@ public class ModVariables { variables.handgunAmmo = message.data.handgunAmmo; variables.shotgunAmmo = message.data.shotgunAmmo; variables.sniperAmmo = message.data.sniperAmmo; + variables.heavyAmmo = message.data.heavyAmmo; variables.bowPullHold = message.data.bowPullHold; variables.bowPull = message.data.bowPull; variables.playerDoubleJump = message.data.playerDoubleJump; 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 c78709bda..831555475 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/ReloadMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/ReloadMessage.java @@ -74,6 +74,8 @@ public class ReloadMessage { return; } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { return; + } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && capability.heavyAmmo == 0) { + return; } else if (stack.getItem() == ModItems.TASER.get() && GunsTool.getGunIntTag(stack, "MaxAmmo") == 0) { return; } else if (stack.is(ModTags.Items.LAUNCHER) && GunsTool.getGunIntTag(stack, "MaxAmmo") == 0) { diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/GunInfo.java b/src/main/java/com/atsuishio/superbwarfare/tools/GunInfo.java index f045545d0..ed5e87e6c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/GunInfo.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/GunInfo.java @@ -5,7 +5,8 @@ public class GunInfo { HANDGUN("item.superbwarfare.ammo.handgun"), RIFLE("item.superbwarfare.ammo.rifle"), SHOTGUN("item.superbwarfare.ammo.shotgun"), - SNIPER("item.superbwarfare.ammo.sniper"); + SNIPER("item.superbwarfare.ammo.sniper"), + HEAVY("item.superbwarfare.ammo.heavy"); public final String translatableKey; Type(String translatableKey) { diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java index 337248e5b..078fd8e59 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java @@ -119,6 +119,7 @@ public class GunsTool { case HANDGUN -> c.handgunAmmo; case SHOTGUN -> c.shotgunAmmo; case SNIPER -> c.sniperAmmo; + case HEAVY -> c.heavyAmmo; }).orElse(0); player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { @@ -128,6 +129,7 @@ public class GunsTool { case HANDGUN -> capability.handgunAmmo = newAmmoCount; case SHOTGUN -> capability.shotgunAmmo = newAmmoCount; case SNIPER -> capability.sniperAmmo = newAmmoCount; + case HEAVY -> capability.heavyAmmo = newAmmoCount; } capability.syncPlayerVariables(player); diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 077a70ed1..591b93824 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -9,6 +9,7 @@ "item.superbwarfare.ammo.handgun": "Handgun", "item.superbwarfare.ammo.rifle": "Rifle", "item.superbwarfare.ammo.sniper": "Sniper", + "item.superbwarfare.ammo.heavy": "Heavy Weapon", "item.superbwarfare.sentinel": "SENTINEL", "item.superbwarfare.rpk": "RPK", @@ -62,11 +63,13 @@ "des.superbwarfare.ammo_box.handgun": "Storage Handgun Ammo: ", "des.superbwarfare.ammo_box.shotgun": "Storage Shotgun Ammo: ", "des.superbwarfare.ammo_box.sniper": "Storage Sniper Ammo: ", + "des.superbwarfare.ammo_box.heavy": "Storage Heavy Ammo: ", "des.superbwarfare.ammo_box.type.all": "All Ammo Chosen", "des.superbwarfare.ammo_box.type.rifle": "Rifle Ammo Chosen", "des.superbwarfare.ammo_box.type.handgun": "Handgun Ammo Chosen", "des.superbwarfare.ammo_box.type.shotgun": "Shotgun Ammo Chosen", "des.superbwarfare.ammo_box.type.sniper": "Sniper Ammo Chosen", + "des.superbwarfare.ammo_box.type.heavy": "Sniper Heavy Chosen", "des.superbwarfare.ammo_box": "When sneaking, left-click to switch ammo types, right-click to store that type of ammo. Right-click with out sneaking to take out the corresponding type of ammo ", "item.superbwarfare.vector_blueprint": "VECTOR Blueprint", @@ -135,25 +138,25 @@ "item.superbwarfare.potion_mortar_shell": "Potion Mortar Shell", "item.superbwarfare.grenade_40mm": "40mm Gun Grenade", "item.superbwarfare.rocket": "RPG Rocket", - "item.superbwarfare.sniper_ammo": "Sniper Ammo *2", + "item.superbwarfare.sniper_ammo": "Sniper Ammo", "item.superbwarfare.sniper_ammo_box": "Sniper Ammo Box", "des.superbwarfare.sniper_ammo_box": "Sniper Ammo *12", "des.superbwarfare.sniper_ammo_box.use": "Sniper Ammo +12", - "item.superbwarfare.rifle_ammo": "Rifle Ammo *5", + "item.superbwarfare.rifle_ammo": "Rifle Ammo", "item.superbwarfare.rifle_ammo_box": "Rifle Ammo Box", "des.superbwarfare.rifle_ammo_box": "Rifle Ammo *30", - "item.superbwarfare.shotgun_ammo": "Shotgun Ammo *2", + "item.superbwarfare.shotgun_ammo": "Shotgun Ammo", "item.superbwarfare.shotgun_ammo_box": "Shotgun Ammo Box", "des.superbwarfare.shotgun_ammo_box": "Shotgun Ammo *12", - "item.superbwarfare.handgun_ammo": "Handgun Ammo *5", + "item.superbwarfare.handgun_ammo": "Handgun Ammo", "item.superbwarfare.handgun_ammo_box": "Handgun Ammo Box", "des.superbwarfare.handgun_ammo_box": "Handgun Ammo *30", + "item.superbwarfare.heavy_ammo": "Heavy Ammo", "item.superbwarfare.creative_ammo_box": "Creative Ammo Box", "item.superbwarfare.ammo_supplier.supply": "%1$s Ammo +%2$s", "item.superbwarfare.he_5_inches": "HE Shell", "item.superbwarfare.ap_5_inches": "AP Shell", "item.superbwarfare.javelin_missile": "Javelin Missile", - "item.superbwarfare.heavy_ammo": "Heavy Ammo", "item.superbwarfare.lunge_mine": "Lunge Mine", "item.superbwarfare.rocket_70": "70mm Rocket", "item.superbwarfare.small_shell": "Small Caliber Shells", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 5278b6f82..5705ab633 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -9,6 +9,7 @@ "item.superbwarfare.ammo.handgun": "手枪", "item.superbwarfare.ammo.rifle": "步枪", "item.superbwarfare.ammo.sniper": "狙击枪", + "item.superbwarfare.ammo.heavy": "重型武器", "item.superbwarfare.sentinel": "哨兵狙击步枪", "item.superbwarfare.rpk": "RPK轻机枪", @@ -62,11 +63,13 @@ "des.superbwarfare.ammo_box.handgun": "已存储的手枪弹药: ", "des.superbwarfare.ammo_box.shotgun": "已存储的霰弹弹药: ", "des.superbwarfare.ammo_box.sniper": "已存储的狙击弹药: ", + "des.superbwarfare.ammo_box.heavy": "已存储的重型弹药: ", "des.superbwarfare.ammo_box.type.all": "已选择所有弹药种类", "des.superbwarfare.ammo_box.type.rifle": "已选择步枪弹药", "des.superbwarfare.ammo_box.type.handgun": "已选择手枪弹药", "des.superbwarfare.ammo_box.type.shotgun": "已选择霰弹弹药", "des.superbwarfare.ammo_box.type.sniper": "已选择狙击弹药", + "des.superbwarfare.ammo_box.type.heavy": "已选择重型弹药", "des.superbwarfare.ammo_box": "潜行时,左击选择弹药类型,右击存入该类型的弹药,非潜行时右击取出对应类型的弹药", "item.superbwarfare.vector_blueprint": "短剑冲锋枪蓝图", @@ -135,25 +138,25 @@ "item.superbwarfare.potion_mortar_shell": "药水炮弹", "item.superbwarfare.grenade_40mm": "40mm枪榴弹", "item.superbwarfare.rocket": "RPG火箭", - "item.superbwarfare.sniper_ammo": "狙击枪弹药 *2", + "item.superbwarfare.sniper_ammo": "狙击枪弹药", "item.superbwarfare.sniper_ammo_box": "狙击枪弹药盒", "des.superbwarfare.sniper_ammo_box": "狙击枪弹药 *12", "des.superbwarfare.sniper_ammo_box.use": "狙击枪弹药 +12", - "item.superbwarfare.rifle_ammo": "步枪弹药 *5", + "item.superbwarfare.rifle_ammo": "步枪弹药", "item.superbwarfare.rifle_ammo_box": "步枪弹药盒", "des.superbwarfare.rifle_ammo_box": "步枪弹药 *30", - "item.superbwarfare.shotgun_ammo": "霰弹枪弹药 *2", + "item.superbwarfare.shotgun_ammo": "霰弹枪弹药", "item.superbwarfare.shotgun_ammo_box": "霰弹枪弹药盒", "des.superbwarfare.shotgun_ammo_box": "霰弹枪弹药 *12", - "item.superbwarfare.handgun_ammo": "手枪弹药 *5", + "item.superbwarfare.handgun_ammo": "手枪弹药", "item.superbwarfare.handgun_ammo_box": "手枪弹药盒", "des.superbwarfare.handgun_ammo_box": "手枪弹药 *30", + "item.superbwarfare.heavy_ammo": "重型弹药", "item.superbwarfare.creative_ammo_box": "创造弹药盒", "item.superbwarfare.ammo_supplier.supply": "%1$s弹药 +%2$s", "item.superbwarfare.he_5_inches": "高爆弹", "item.superbwarfare.ap_5_inches": "穿甲弹", "item.superbwarfare.javelin_missile": "标枪导弹", - "item.superbwarfare.heavy_ammo": "重型弹药", "item.superbwarfare.lunge_mine": "突刺爆雷", "item.superbwarfare.rocket_70": "70mm火箭弹", "item.superbwarfare.small_shell": "小口径炮弹", @@ -461,8 +464,8 @@ "tips.superbwarfare.drone.warning": "警告!", "tips.superbwarfare.shoot.rings": "环", "tips.superbwarfare.annihilator.energy_not_enough": "能量不足", - "tips.superbwarfare.target.down": "目标倒下 %1$s", - "tips.superbwarfare.target.damage": "伤害:%1$s 距离:%2$s", + "tips.superbwarfare.target.down": "击倒目标 %1$s", + "tips.superbwarfare.target.damage": "伤害:%1$s 距离:%2$s M", "tips.superbwarfare.mortar.range": "射程:", "tips.superbwarfare.mortar.yaw": "水平朝向:", "tips.superbwarfare.mortar.pitch": "俯仰角度:", diff --git a/src/main/resources/assets/superbwarfare/textures/item/handgunammo.png b/src/main/resources/assets/superbwarfare/textures/item/handgunammo.png index e62561595dd5880b75034ae6816825b206001da4..fea11de0ec722d76d20997b45708126f8a380eb0 100644 GIT binary patch delta 289 zcmV++0p9+P1knPJIe!C5L_t(og=1hC1*2dTjDnF47^!8@!7`u!3=9kmPd@!(h@P>F zXmeSpWx1%n8Uq6Z1A{071H(Z+w*U5BTZnQ5#STEW{No=^hMVUOGrYWgo@o6{lvuv0 z&F#NxViv>d`JeA+^WRZ~;Xhq0Mt8)5e7k|M n90mr|@=-7fMjF8=palQ`_xF)ZlV8g<00000NkvXXu0mjfFH(dg delta 480 zcmV<60U!R+0*?fcIe)=PL_t(og=1hC1p^EiiB)*8%;!G?0|Ud8Prn$VXY3+cA0fa( ztmUHmY77hv3=EtNJ;ScmbEsx94B!k#WXnIkzJJMZXx}M@w;yB}r2brF zDBt#(ky>d2t43UwUpjV#VgDNjM&vZXz`(%p`r<7Ha?=Dx6cDnU+GzsC0mN8N?KA<; zhD~t_|M{c@7@D&E7$V|=@LCRY+&d;!29De3DM}M43Y+2-{@Xd3F|1g$j)9%W0I^TT(L%NZ7#L8a zgV;1dPC0?smGnpxc#C3sqzR(piI!=C==@5nG(l4NO^Y-^uswhbXptt!s==t4CP)ea z7})=Yff2dxAjWc7-GQDUDQee|nn&K4xA6O9fKf{UTf4-m1e@799|8%h!-4P4&?FPnj7#L8?Nd*AY WFTmM&Jesrs00009N3 diff --git a/src/main/resources/assets/superbwarfare/textures/item/rifleammo.png b/src/main/resources/assets/superbwarfare/textures/item/rifleammo.png index 3e9d88c3a723000b941d230e3b6047587fe7f815..a6b8c25d4f14479e9843a3980e83becd05f951fe 100644 GIT binary patch delta 359 zcmV-t0hs=z1eXJlIe$q>L_t(og=1hC1*2f314ddJzQ4rlKLY~;!~LJ17?LI*!D<&1 zEiG4Ya$*qGS7Ug2`y5VnG;sjT@~>~7FucBa3$I$LM*+I!C$1b|sNC@lr#)12!2S}i z|DyV84BWypL|aZZ2aszy0|OP(z{VDr|Eh^u3~P3*V|e!REq}wQQ)d|N|NKOh{>mCfq{VmZ>mQJ%+#>_s#Rl5&LKB|4%Ajg;DZ*)W$OaId{IdzK)SU1y z3_>p*J*(-g{eLf9PaRzwP=xEKLlU5ybIHkd)WP+Hw;**V{PW`4_0(a~4A-c`1OP&i zCnF9Ej`r8P!wuBYRv-j<;$5A?`RN7B!;9h*8l*$=4G2M=@KzqSu>m%CLEOmZj71hM zxdp;mkt#T#X{4&XIaKcf zRvk)kfbvDeqJsub-9S4CrH)VzkoYKoP?J918+@V;d;z3wbpN5TdM@f00000NkvXXu0mjfFJcNA+)@hg_)`{KkLs`Q>^3dEmdY9_epRlZH z$ek*wWD?zY!Q0S;Ux}F5vcmFIyBM6G;HFSO4u#%u;thKmT<>`2%hb|m90~Sw@ozVHJJNX_O$MjW$6VG#hpAE&W;x^lu$u3aHY|wka ziq{=tdi8nJoizrr375EZ{VuQPpWrfEnawUxC{^gS9K=%zFunSs<;EKCApZEHlwZtn z>g*L}vsqT&SLm@=@bnGu3b)MtTj#{cahtd}*e!04jM5 diff --git a/src/main/resources/assets/superbwarfare/textures/item/sniperammo.png b/src/main/resources/assets/superbwarfare/textures/item/sniperammo.png index 4965498e99eff577b81daa14f99762fc6b765364..c585686e3c2ebe62e1423c959b1a504721cebb95 100644 GIT binary patch delta 378 zcmV-=0fqjb1gZm&Ie%P9L_t(oh3(WoOF~f?$MLTjGzNj2h*K?rkV6m=Ax=?)&?c=d zAvmx_Q zE)43wSHLUCSYHqTq1ZT+D_d=M*eg7mNbuUcrBSmwz76?_gMa1`IPsH*xWz%k5|;8w5uI{}0|Zs$@l=*`W0&`v=bkty8bK+a6aev57VEUgXlR1sj=}bx z+4KCqJ7C{BI3l>S%2GJ=*#R4WxH_iQxa7KePqqHx8iziX(1};dXEa-3YNjc5&Y%8- zZM^;+uRO_hRdad-zujCGmkyvBmkOW*cO5_%?ka#z9D2M0mD?^IpaXyW!e7+l&}9T& z@guc3{Lq11IwHccX*SoEwBubXmyU>o!m?PM4~Wd-jF=lkcmg{^6f(2^;CA_n56Y|h Y1idIi#ho0GasU7T07*qoM6N<$f?gJ~q5uE@ delta 496 zcmVh35t}aJxT@>&y2b!^1Y>wZ_NZ>#Z5j5~}C!T!+ zLlcWwQAHqkb0IDli&S-upjW&-mTo2cC#1$DVxeh3@*yQRr^O{3&5soG4cz^`m3<)ji mj0>BHhvo)@^EFUh>-qspr-P(!Zvg550000