diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index b5d26e18d..2522c647a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -318,7 +318,7 @@ public class ClickHandler { player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1); } - if (!stack.is(ModTags.Items.CANNOT_RELOAD) && stack.getOrCreateTag().getInt("ammo") <= 0) { + if (!stack.is(ModTags.Items.CANNOT_RELOAD) && GunsTool.getGunIntTag(stack, "Ammo", 0) <= 0) { if (ReloadConfig.LEFT_CLICK_RELOAD.get()) { ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0)); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/K98ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/K98ItemModel.java index 97b8c8610..32750c25e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/K98ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/K98ItemModel.java @@ -43,7 +43,7 @@ public class K98ItemModel extends GeoModel { if (!stack.is(ModTags.Items.GUN)) return; - if (stack.getOrCreateTag().getDouble("prepare") > 11 && stack.getOrCreateTag().getInt("ammo") == 1) { + if (stack.getOrCreateTag().getDouble("prepare") > 11 && GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) { clip.setScaleX(0); clip.setScaleY(0); clip.setScaleZ(0); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M60ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M60ItemModel.java index 15e2c42e8..1e856ac2b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M60ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M60ItemModel.java @@ -1,12 +1,12 @@ package com.atsuishio.superbwarfare.client.model.item; import com.atsuishio.superbwarfare.ModUtils; -import com.atsuishio.superbwarfare.event.PlayerEventHandler; -import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.client.AnimationHelper; import com.atsuishio.superbwarfare.event.ClientEventHandler; +import com.atsuishio.superbwarfare.event.PlayerEventHandler; import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.gun.machinegun.M60Item; +import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -56,31 +56,33 @@ public class M60ItemModel extends GeoModel { r.setRotX(1.5f); } - if (stack.getOrCreateTag().getInt("ammo") < 5 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { + int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0); + + if (ammo < 5 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { b5.setScaleX(0); b5.setScaleY(0); b5.setScaleZ(0); } - if (stack.getOrCreateTag().getInt("ammo") < 4 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { + if (ammo < 4 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { b4.setScaleX(0); b4.setScaleY(0); b4.setScaleZ(0); } - if (stack.getOrCreateTag().getInt("ammo") < 3 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { + if (ammo < 3 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { b3.setScaleX(0); b3.setScaleY(0); b3.setScaleZ(0); } - if (stack.getOrCreateTag().getInt("ammo") < 2 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { + if (ammo < 2 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { b2.setScaleX(0); b2.setScaleY(0); b2.setScaleZ(0); } - if (stack.getOrCreateTag().getInt("ammo") < 1 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { + if (ammo < 1 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { b1.setScaleX(0); b1.setScaleY(0); b1.setScaleZ(0); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SentinelItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SentinelItemModel.java index 018e4f61e..1cedf3f30 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SentinelItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SentinelItemModel.java @@ -100,8 +100,8 @@ public class SentinelItemModel extends GeoModel { root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY)); root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ)); - if ((stack.getOrCreateTag().getDouble("ammo") <= 5)) { - ammo.setScaleX((float) (stack.getOrCreateTag().getDouble("ammo") / 5)); + if (GunsTool.getGunIntTag(stack, "Ammo", 0) <= 5) { + ammo.setScaleX((float) GunsTool.getGunIntTag(stack, "Ammo", 0) / 5); } CoreGeoBone camera = getAnimationProcessor().getBone("camera"); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/AmmoBarOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/AmmoBarOverlay.java index 131cb35dd..3d15505e5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/AmmoBarOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/AmmoBarOverlay.java @@ -228,7 +228,7 @@ public class AmmoBarOverlay { return stack.getOrCreateTag().getInt("max_ammo"); } - return stack.getOrCreateTag().getInt("ammo"); + return GunsTool.getGunIntTag(stack, "Ammo", 0); } private static String getPlayerAmmoCount(Player player) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/screens/JavelinHudOverlay.java b/src/main/java/com/atsuishio/superbwarfare/client/screens/JavelinHudOverlay.java index 27ca43788..216ce43d1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/screens/JavelinHudOverlay.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/screens/JavelinHudOverlay.java @@ -6,6 +6,7 @@ import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.network.ModVariables; import com.atsuishio.superbwarfare.tools.EntityFindUtil; +import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.HudUtil; import com.atsuishio.superbwarfare.tools.SeekTool; import com.mojang.blaze3d.platform.GlStateManager; @@ -76,7 +77,7 @@ public class JavelinHudOverlay { float j1 = l + j; preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/javelin/javelin_hud.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), ModUtils.loc(stack.getOrCreateTag().getBoolean("TopMode") ? "textures/screens/javelin/top.png" : "textures/screens/javelin/dir.png"), k, l, 0, 0.0F, i, j, i, j); - preciseBlit(event.getGuiGraphics(), ModUtils.loc(stack.getOrCreateTag().getInt("ammo") > 0 ? "textures/screens/javelin/missile_green.png" : "textures/screens/javelin/missile_red.png"), k, l, 0, 0.0F, i, j, i, j); + preciseBlit(event.getGuiGraphics(), ModUtils.loc(GunsTool.getGunIntTag(stack, "Ammo", 0) > 0 ? "textures/screens/javelin/missile_green.png" : "textures/screens/javelin/missile_red.png"), k, l, 0, 0.0F, i, j, i, j); if (stack.getOrCreateTag().getInt("SeekTime") > 1 && stack.getOrCreateTag().getInt("SeekTime") < 20) { preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/javelin/seek.png"), k, l, 0, 0.0F, i, j, i, j); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/DroneEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/DroneEntity.java index b8e119f4b..d915eb178 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/DroneEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/DroneEntity.java @@ -135,7 +135,7 @@ public class DroneEntity extends LivingEntity implements GeoEntity { compound.putBoolean("Linked", this.entityData.get(LINKED)); compound.putString("Controller", this.entityData.get(CONTROLLER)); - compound.putInt("ammo", this.entityData.get(AMMO)); + compound.putInt("Ammo", this.entityData.get(AMMO)); compound.putBoolean("Kamikaze", this.entityData.get(KAMIKAZE)); } @@ -147,8 +147,8 @@ public class DroneEntity extends LivingEntity implements GeoEntity { this.entityData.set(LINKED, compound.getBoolean("Linked")); if (compound.contains("Controller")) this.entityData.set(CONTROLLER, compound.getString("Controller")); - if (compound.contains("ammo")) - this.entityData.set(AMMO, compound.getInt("ammo")); + if (compound.contains("Ammo")) + this.entityData.set(AMMO, compound.getInt("Ammo")); if (compound.contains("Kamikaze")) this.entityData.set(KAMIKAZE, compound.getBoolean("Kamikaze")); } @@ -170,7 +170,6 @@ public class DroneEntity extends LivingEntity implements GeoEntity { } - @Override public void baseTick() { super.baseTick(); @@ -187,7 +186,7 @@ public class DroneEntity extends LivingEntity implements GeoEntity { if (this.getPersistentData().getBoolean("forward")) { moveZ = Mth.clamp(moveZ + 0.3f, 0, 3); } else if (this.getPersistentData().getBoolean("backward")) { - moveZ= Mth.clamp(moveZ - 0.3f, -3, 0); + moveZ = Mth.clamp(moveZ - 0.3f, -3, 0); } moveX *= 0.25; diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 1e2da05de..dd892f0f6 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -297,7 +297,7 @@ public class ClientEventHandler { && (!(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && !stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("charging") - && stack.getOrCreateTag().getInt("ammo") > 0 + && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0 && !player.getCooldowns().isOnCooldown(stack.getItem()) && !GunsTool.getGunBooleanTag(stack, "NeedBoltAction", false) && revolverPre() @@ -377,14 +377,14 @@ public class ClientEventHandler { public static void shootClient(Player player) { ItemStack stack = player.getMainHandItem(); if (stack.is(ModTags.Items.NORMAL_GUN)) { - if (stack.getOrCreateTag().getInt("ammo") > 0) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) { int mode = GunsTool.getGunIntTag(stack, "FireMode"); if (mode != 2) { holdFire = false; } if (mode == 1) { - if (stack.getOrCreateTag().getInt("ammo") == 1) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) { burstFireSize = 1; } if (burstFireSize == 1) { diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index c9f6ec0de..2e64d18d2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -616,18 +616,18 @@ public class LivingEventHandler { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"); - int ammo = stack.getOrCreateTag().getInt("ammo"); + int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0); int ammoReload = (int) Math.min(mag, mag * rate); int ammoNeed = Math.min(mag - ammo, ammoReload); if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { int ammoFinal = Math.min(capability.rifleAmmo, ammoNeed); capability.rifleAmmo -= ammoFinal; - stack.getOrCreateTag().putInt("ammo", Math.min(mag, ammo + ammoFinal)); + GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, ammo + ammoFinal)); } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { int ammoFinal = Math.min(capability.handgunAmmo, ammoNeed); capability.handgunAmmo -= ammoFinal; - stack.getOrCreateTag().putInt("ammo", Math.min(mag, ammo + ammoFinal)); + GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, ammo + ammoFinal)); } 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 acfe37570..3234f26b0 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -235,10 +235,7 @@ public class PlayerEventHandler { private static void handleSpecialWeaponAmmo(Player player) { ItemStack stack = player.getMainHandItem(); - if (stack.getItem() == ModItems.RPG.get() && stack.getOrCreateTag().getInt("ammo") == 1) { - stack.getOrCreateTag().putDouble("empty", 0); - } - if (stack.getItem() == ModItems.BOCEK.get() && stack.getOrCreateTag().getInt("ammo") == 1) { + if ((stack.is(ModItems.RPG.get()) || stack.is(ModItems.BOCEK.get())) && GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) { stack.getOrCreateTag().putDouble("empty", 0); } } 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 303d48cab..4c37a9d48 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -68,10 +68,10 @@ public abstract class GunItem extends Item { handleGunPerks(stack); handleGunAttachment(stack); - if ((stack.is(ModTags.Items.EXTRA_ONE_AMMO) && stack.getOrCreateTag().getInt("ammo") > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1) - || (!stack.is(ModTags.Items.EXTRA_ONE_AMMO) && stack.getOrCreateTag().getInt("ammo") > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")) + if ((stack.is(ModTags.Items.EXTRA_ONE_AMMO) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1) + || (!stack.is(ModTags.Items.EXTRA_ONE_AMMO) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")) ) { - int count = stack.getOrCreateTag().getInt("ammo") - GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") - (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0); + int count = GunsTool.getGunIntTag(stack, "Ammo", 0) - GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") - (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0); entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { @@ -86,7 +86,7 @@ public abstract class GunItem extends Item { capability.syncPlayerVariables(entity); }); - stack.getOrCreateTag().putInt("ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0)); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0)); } } } @@ -166,7 +166,7 @@ public abstract class GunItem extends Item { GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 0); int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"); - stack.getOrCreateTag().putInt("ammo", Math.min(mag, stack.getOrCreateTag().getInt("ammo") + 2)); + GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, GunsTool.getGunIntTag(stack, "Ammo", 0) + 2)); } } } 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 21a3fa6e0..06c46456f 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 @@ -46,7 +46,7 @@ import java.util.Set; import java.util.function.Consumer; public class RpgItem extends GunItem implements GeoItem, AnimatedItem { - + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public static ItemDisplayContext transformType; @@ -81,7 +81,7 @@ public class RpgItem extends GunItem implements GeoItem, AnimatedItem { if (player == null) return PlayState.STOP; ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return PlayState.STOP; - + if (stack.getOrCreateTag().getBoolean("is_empty_reloading")) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.rpg.reload")); } @@ -139,7 +139,7 @@ public class RpgItem extends GunItem implements GeoItem, AnimatedItem { if (itemStack.getOrCreateTag().getBoolean("draw")) { itemStack.getOrCreateTag().putBoolean("draw", false); - if (itemStack.getOrCreateTag().getInt("ammo") == 0) { + if (GunsTool.getGunIntTag(itemStack, "Ammo", 0) == 0) { itemStack.getOrCreateTag().putDouble("empty", 1); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/M60Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/M60Item.java index 8b94b664f..f64932489 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/M60Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/M60Item.java @@ -1,18 +1,18 @@ package com.atsuishio.superbwarfare.item.gun.machinegun; import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.client.renderer.item.M60ItemRenderer; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.item.gun.GunItem; -import com.atsuishio.superbwarfare.perk.Perk; -import com.atsuishio.superbwarfare.perk.PerkHelper; -import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModPerks; import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.AnimatedItem; +import com.atsuishio.superbwarfare.item.gun.GunItem; +import com.atsuishio.superbwarfare.perk.Perk; +import com.atsuishio.superbwarfare.perk.PerkHelper; +import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; @@ -138,7 +138,7 @@ public class M60Item extends GunItem implements GeoItem, AnimatedItem { if (itemstack.getOrCreateTag().getBoolean("draw")) { itemstack.getOrCreateTag().putBoolean("draw", false); - if (itemstack.getOrCreateTag().getInt("ammo") <= 5) { + if (GunsTool.getGunIntTag(itemstack, "Ammo", 0) <= 5) { itemstack.getOrCreateTag().putBoolean("HideBulletChain", true); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/SksItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/SksItem.java index 1218b4407..702e75fd3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/SksItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/SksItem.java @@ -1,17 +1,17 @@ package com.atsuishio.superbwarfare.item.gun.rifle; import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.client.renderer.item.SksItemRenderer; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.perk.Perk; -import com.atsuishio.superbwarfare.perk.PerkHelper; -import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.AnimatedItem; import com.atsuishio.superbwarfare.item.gun.GunItem; +import com.atsuishio.superbwarfare.perk.Perk; +import com.atsuishio.superbwarfare.perk.PerkHelper; +import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; @@ -123,7 +123,7 @@ public class SksItem extends GunItem implements GeoItem, AnimatedItem { if (itemstack.getOrCreateTag().getBoolean("draw")) { itemstack.getOrCreateTag().putBoolean("draw", false); - if (itemstack.getOrCreateTag().getInt("ammo") == 0) { + if (GunsTool.getGunIntTag(itemstack, "Ammo", 0) == 0) { itemstack.getOrCreateTag().putBoolean("HoldOpen", true); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java index 3076bbd5c..d6fb4e7f3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/MosinNagantItem.java @@ -1,6 +1,5 @@ package com.atsuishio.superbwarfare.item.gun.sniper; -import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.client.renderer.item.MosinNagantItemRenderer; @@ -12,6 +11,7 @@ import com.atsuishio.superbwarfare.item.AnimatedItem; import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.PerkHelper; +import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; @@ -77,11 +77,11 @@ public class MosinNagantItem extends GunItem implements GeoItem, AnimatedItem { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift")); } - if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getInt("ammo") == 0) { + if (stack.getOrCreateTag().getInt("reload_stage") == 1 && GunsTool.getGunIntTag(stack, "Ammo", 0) == 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty")); } - if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getInt("ammo") > 0) { + if (stack.getOrCreateTag().getInt("reload_stage") == 1 && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare")); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java index 05c92b88b..42918f61a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/FireMessage.java @@ -106,27 +106,28 @@ public class FireMessage { } private static void handlePlayerShoot(Player player) { - var handItem = player.getMainHandItem(); + var stack = player.getMainHandItem(); - if (!handItem.is(ModTags.Items.GUN)) { + if (!stack.is(ModTags.Items.GUN)) { return; } - var tag = handItem.getOrCreateTag(); + var tag = stack.getOrCreateTag(); - if (handItem.getItem() == ModItems.TASER.get()) { + if (stack.getItem() == ModItems.TASER.get()) { handleTaserFire(player); } - if (handItem.getItem() == ModItems.M_79.get()) { + if (stack.getItem() == ModItems.M_79.get()) { handleM79Fire(player); } - if (handItem.getItem() == ModItems.RPG.get()) { + if (stack.getItem() == ModItems.RPG.get()) { handleRpgFire(player); } - if (handItem.getItem() == ModItems.JAVELIN.get() && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom && tag.getInt("ammo") > 0) { + if (stack.getItem() == ModItems.JAVELIN.get() && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null) + .orElse(new ModVariables.PlayerVariables()).zoom && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) { Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8); if (seekingEntity != null) { tag.putString("TargetEntity", seekingEntity.getStringUUID()); @@ -135,11 +136,11 @@ public class FireMessage { } } - if (tag.getDouble("prepare") == 0 && tag.getBoolean("reloading") && tag.getInt("ammo") > 0) { + if (tag.getDouble("prepare") == 0 && tag.getBoolean("reloading") && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) { tag.putDouble("force_stop", 1); } - if (handItem.getItem() == ModItems.BOCEK.get()) { + if (stack.getItem() == ModItems.BOCEK.get()) { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { capability.bowPullHold = true; capability.syncPlayerVariables(player); @@ -148,7 +149,8 @@ public class FireMessage { } private static void handleGunBolt(Player player, ItemStack stack) { - if (GunsTool.getGunIntTag(stack, "BoltActionTime", 0) > 0 && stack.getOrCreateTag().getInt("ammo") > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0 + if (GunsTool.getGunIntTag(stack, "BoltActionTime", 0) > 0 && GunsTool.getGunIntTag(stack, "Ammo", 0) > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0) + && stack.getOrCreateTag().getInt("bolt_action_anim") == 0 && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && !stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("charging")) { @@ -318,9 +320,7 @@ public class FireMessage { iEnergyStorage -> flag.set(iEnergyStorage.getEnergyStored() >= 400 + 100 * perkLevel) ); - if (!player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0 - && flag.get()) { - + if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0 && flag.get()) { player.getCooldowns().addCooldown(stack.getItem(), 5); if (player instanceof ServerPlayer serverPlayer) { @@ -345,7 +345,7 @@ public class FireMessage { level.addFreshEntity(taserBulletProjectile); } - stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1); stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( energy -> energy.extractEnergy(400 + 100 * perkLevel, false) @@ -364,7 +364,7 @@ public class FireMessage { ItemStack stack = player.getMainHandItem(); if (!stack.getOrCreateTag().getBoolean("reloading")) { - if (!player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0) { + if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) { boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom; double spread = GunsTool.getGunDoubleTag(stack, "Spread"); @@ -402,7 +402,7 @@ public class FireMessage { serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.M_79_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); } - stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1); if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10)); @@ -418,7 +418,7 @@ public class FireMessage { ItemStack stack = player.getMainHandItem(); CompoundTag tag = stack.getOrCreateTag(); - if (!tag.getBoolean("reloading") && !player.getCooldowns().isOnCooldown(stack.getItem()) && tag.getInt("ammo") > 0) { + if (!tag.getBoolean("reloading") && !player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) { boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom; double spread = GunsTool.getGunDoubleTag(stack, "Spread"); @@ -447,7 +447,7 @@ public class FireMessage { 30, 0.4, 0.4, 0.4, 0.005, true); } - if (tag.getInt("ammo") == 1) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) { tag.putBoolean("empty", true); tag.putBoolean("close_hammer", true); } @@ -461,7 +461,7 @@ public class FireMessage { serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.RPG_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); } - tag.putInt("ammo", tag.getInt("ammo") - 1); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1); if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10)); @@ -527,7 +527,7 @@ public class FireMessage { serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.JAVELIN_FAR.get(), SoundSource.PLAYERS, 10, 1); } - tag.putInt("ammo", tag.getInt("ammo") - 1); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1); if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10)); 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 6e8ea2254..533f73814 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/ReloadMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/ReloadMessage.java @@ -66,7 +66,7 @@ public class ReloadMessage { boolean canSingleReload = GunsTool.getGunIntTag(stack, "IterativeTime", 0) != 0; boolean canReload = (GunsTool.getGunIntTag(stack, "NormalReloadTime") != 0 || GunsTool.getGunIntTag(stack, "EmptyReloadTime") != 0) && GunsTool.getGunIntTag(stack, "ClipLoad", 0) != 1; - boolean clipLoad = tag.getInt("ammo") == 0 && GunsTool.getGunIntTag(stack, "ClipLoad", 0) == 1; + boolean clipLoad = GunsTool.getGunIntTag(stack, "Ammo", 0) == 0 && GunsTool.getGunIntTag(stack, "ClipLoad", 0) == 1; // 检查备弹 int count = 0; @@ -101,22 +101,22 @@ public class ReloadMessage { if (stack.is(ModTags.Items.OPEN_BOLT)) { if (stack.is(ModTags.Items.EXTRA_ONE_AMMO)) { - if (tag.getInt("ammo") < magazine + tag.getInt("customMag") + 1) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag") + 1) { tag.putBoolean("start_reload", true); } } else { - if (tag.getInt("ammo") < magazine + tag.getInt("customMag")) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) { tag.putBoolean("start_reload", true); } } - } else if (tag.getInt("ammo") < magazine + tag.getInt("customMag")) { + } else if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) { tag.putBoolean("start_reload", true); } return; } if (canSingleReload) { - if (tag.getInt("ammo") < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { tag.putBoolean("start_single_reload", true); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/ShootMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/ShootMessage.java index 9baedb7fe..0bbba5d7b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/ShootMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/ShootMessage.java @@ -62,9 +62,9 @@ public class ShootMessage { if (stack.is(ModTags.Items.NORMAL_GUN)) { int projectileAmount = GunsTool.getGunIntTag(stack, "ProjectileAmount", 1); - if (stack.getOrCreateTag().getInt("ammo") > 0) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) { // 空仓挂机 - if (stack.getOrCreateTag().getInt("ammo") == 1) { + if (GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) { stack.getOrCreateTag().putBoolean("HoldOpen", true); } @@ -73,15 +73,15 @@ public class ShootMessage { } // 判断是否为栓动武器(BoltActionTime > 0),并在开火后给一个需要上膛的状态 - if (GunsTool.getGunIntTag(stack, "BoltActionTime", 0) > 0 && stack.getOrCreateTag().getInt("ammo") > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) { + if (GunsTool.getGunIntTag(stack, "BoltActionTime", 0) > 0 && GunsTool.getGunIntTag(stack, "Ammo", 0) > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) { GunsTool.setGunBooleanTag(stack, "NeedBoltAction", true); } - stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1); stack.getOrCreateTag().putDouble("empty", 1); - if (stack.getItem() == ModItems.M_60.get() && stack.getOrCreateTag().getInt("ammo") <= 5) { + if (stack.getItem() == ModItems.M_60.get() && GunsTool.getGunIntTag(stack, "Ammo", 0) <= 5) { stack.getOrCreateTag().putBoolean("HideBulletChain", true); } diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java index 3521e6955..4cd4e0182 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java @@ -70,7 +70,8 @@ public class GunsTool { data.putDouble(k, v); stack.addTagElement("GunData", data); }); - stack.getOrCreateTag().putInt("ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")); + GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + + stack.getOrCreateTag().getInt("customMag")); } } @@ -102,7 +103,7 @@ public class GunsTool { CompoundTag tag = stack.getOrCreateTag(); int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag"); - int ammo = tag.getInt("ammo"); + int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0); int ammoToAdd = mag - ammo + (extraOne ? 1 : 0); // 空仓换弹的栓动武器应该在换弹后取消待上膛标记 @@ -131,7 +132,7 @@ public class GunsTool { int needToAdd = ammo + Math.min(ammoToAdd, playerAmmo); - tag.putInt("ammo", needToAdd); + GunsTool.setGunIntTag(stack, "Ammo", needToAdd); tag.putBoolean("is_normal_reloading", false); tag.putBoolean("is_empty_reloading", false); }