diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/AK12ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/AK12ItemModel.java index b47ce0610..8dbc75596 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/AK12ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/AK12ItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.rifle.AK12Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -73,7 +73,8 @@ public class AK12ItemModel extends GeoModel { double fp = ClientEventHandler.firePos; double fr = ClientEventHandler.fireRot; - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); int type = GunsTool.getAttachmentType(tag, GunsTool.AttachmentType.SCOPE); float posY = switch (type) { @@ -173,6 +174,6 @@ public class AK12ItemModel extends GeoModel { AnimationHelper.handleReloadShakeAnimation(stack, main, camera, numR, numP); ClientEventHandler.shake(Mth.RAD_TO_DEG * camera.getRotX(), Mth.RAD_TO_DEG * camera.getRotY(), Mth.RAD_TO_DEG * camera.getRotZ()); AnimationHelper.handleShellsAnimation(getAnimationProcessor(), 1f, 0.35f); - NBTTool.saveTag(stack, tag); + data.save(); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/AK47ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/AK47ItemModel.java index d0fb2a18d..2fa853b2a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/AK47ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/AK47ItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.rifle.AK47Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -114,9 +114,10 @@ public class AK47ItemModel extends GeoModel { scope2.setScaleZ(1f - (0.3f * (float) zp)); scope3.setScaleZ(1f - (0.7f * (float) zp)); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); - NBTTool.saveTag(stack, tag); + data.save(); GeoBone shen; if (zt < 0.5) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/BocekItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/BocekItemModel.java index 5abd0f483..780fe5326 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/BocekItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/BocekItemModel.java @@ -4,8 +4,8 @@ import com.atsuishio.superbwarfare.Mod; 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.GunData; import com.atsuishio.superbwarfare.item.gun.special.BocekItem; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -105,9 +105,10 @@ public class BocekItemModel extends GeoModel { r.setScaleZ(1f - (0.31f * (float) zp)); shen.setRotZ(60 * Mth.DEG_TO_RAD * (float) zp + (float) (0.05f * zpz) - 0.2f); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !((shen_pos.getPosX() < -0.6 && gun.getPosZ() < -2))); - NBTTool.saveTag(stack, tag); + data.save(); fire.setPosX((float) (0.75f * ClientEventHandler.recoilHorizon * fpz * fp)); fire.setPosY((float) (-0.03f * fp - 0.06f * fr)); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/DevotionItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/DevotionItemModel.java index 89da6d048..a8222200b 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/DevotionItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/DevotionItemModel.java @@ -5,8 +5,8 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.machinegun.DevotionItem; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -74,9 +74,10 @@ public class DevotionItemModel extends GeoModel { GeoBone shen = getAnimationProcessor().getBone("shen"); GeoBone holo = getAnimationProcessor().getBone("holo"); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); - NBTTool.saveTag(stack, tag); + data.save(); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosY((float) (0.15f * fp + 0.18f * fr)); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock17ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock17ItemModel.java index 2b188b8b0..ea45f3fb2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock17ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock17ItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.handgun.Glock17Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -103,7 +103,8 @@ public class Glock17ItemModel extends GeoModel { float numR = (float) (1 - 0.12 * zt); float numP = (float) (1 - 0.68 * zt); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) { main.setRotX(numR * main.getRotX()); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock18ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock18ItemModel.java index 32e0ed3a1..d9a41db4c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock18ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Glock18ItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.handgun.Glock18Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -47,7 +47,8 @@ public class Glock18ItemModel extends GeoModel { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return; - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); int mode = GunsTool.getGunIntTag(tag, "FireMode"); if (mode == 0) { switch_.setRotX(35 * Mth.DEG_TO_RAD); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Hk416ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Hk416ItemModel.java index 82ee67d96..7627a729f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Hk416ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Hk416ItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.rifle.Hk416Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -108,9 +108,10 @@ public class Hk416ItemModel extends GeoModel { scope2.setScaleZ(1f - (0.8f * (float) zp)); scope3.setScaleZ(1f - (0.5f * (float) zp)); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 3.1)); - NBTTool.saveTag(stack, tag); + data.save(); GeoBone shen; if (zt < 0.5) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/InsidiousItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/InsidiousItemModel.java index 654382bd9..10d1c5ad5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/InsidiousItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/InsidiousItemModel.java @@ -5,8 +5,8 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.rifle.InsidiousItem; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -68,9 +68,10 @@ public class InsidiousItemModel extends GeoModel { gun.setPosZ(6.2f * (float) zp + (float) (0.5f * zpz)); gun.setScaleZ(1f - (0.82f * (float) zp)); - var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 3)); - NBTTool.saveTag(stack, tag); + data.save(); GeoBone shen = getAnimationProcessor().getBone("fireRootNormal"); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/JavelinItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/JavelinItemModel.java index 69fb7af51..cfd181882 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/JavelinItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/JavelinItemModel.java @@ -4,8 +4,8 @@ import com.atsuishio.superbwarfare.Mod; 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.GunData; import com.atsuishio.superbwarfare.item.gun.launcher.JavelinItem; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -68,9 +68,10 @@ public class JavelinItemModel extends GeoModel { javelin.setHidden(gun.getPosZ() > 15.85); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosZ() > 15.85)); - NBTTool.saveTag(stack, tag); + data.save(); shen.setPosX((float) (0.75f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosY((float) (-0.03f * fp - 0.06f * fr)); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M1911ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M1911ItemModel.java index 50039ee8c..b24ccf4cb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M1911ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M1911ItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.handgun.M1911Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -105,7 +105,8 @@ public class M1911ItemModel extends GeoModel { float numR = (float) (1 - 0.12 * zt); float numP = (float) (1 - 0.68 * zt); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) { main.setRotX(numR * main.getRotX()); main.setRotY(numR * main.getRotY()); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M4ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M4ItemModel.java index eb5bdf4a4..998e0ff4d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M4ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M4ItemModel.java @@ -5,6 +5,7 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.rifle.M4Item; import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.NBTTool; @@ -129,9 +130,10 @@ public class M4ItemModel extends GeoModel { button6.setScaleX(1f - (0.5f * (float) zp)); button7.setScaleX(1f - (0.5f * (float) zp)); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.385)); - NBTTool.saveTag(stack, tag); + data.save(); if (type == 3 && zt > 0.5) { lh.setPosY((float) (-zt * 4)); 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 eb5f1b2cd..d757098dd 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 @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.machinegun.M60Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -59,7 +59,8 @@ public class M60ItemModel extends GeoModel { r.setRotX(1.5f); } - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); int ammo = GunsTool.getGunIntTag(tag, "Ammo"); boolean flag = GunsTool.getGunBooleanTag(tag, "HideBulletChain"); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M98bItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M98bItemModel.java index 9333fe9e6..1403e786d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/M98bItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/M98bItemModel.java @@ -4,9 +4,9 @@ import com.atsuishio.superbwarfare.Mod; 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.GunData; import com.atsuishio.superbwarfare.item.gun.sniper.M98bItem; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -88,9 +88,10 @@ public class M98bItemModel extends GeoModel { gun.setPosZ(4.2f * (float) zp + (float) (0.3f * zpz)); gun.setRotZ((float) (0.02f * zpz)); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.8)); - NBTTool.saveTag(stack, tag); + data.save(); GeoBone root = getAnimationProcessor().getBone("root"); GeoBone zhunxing = getAnimationProcessor().getBone("shi"); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mk14ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mk14ItemModel.java index d34ffe04e..1d6c1c292 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mk14ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mk14ItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.rifle.Mk14Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -139,9 +139,10 @@ public class Mk14ItemModel extends GeoModel { action.setPosZ(2.5f * (float) fp); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.5)); - NBTTool.saveTag(stack, tag); + data.save(); GeoBone root = getAnimationProcessor().getBone("root"); root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph)); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/MosinNagantItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/MosinNagantItemModel.java index 3fe8cb197..ef382ed52 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/MosinNagantItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/MosinNagantItemModel.java @@ -7,7 +7,6 @@ import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.item.gun.GunData; import com.atsuishio.superbwarfare.item.gun.sniper.MosinNagantItem; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -90,7 +89,7 @@ public class MosinNagantItemModel extends GeoModel { var data = GunData.from(stack); final var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.4)); - NBTTool.saveTag(stack, tag); + data.save(); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosY((float) (0.4f * fp + 0.44f * fr)); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mp443ItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mp443ItemModel.java index 90f664c5c..d8516623f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mp443ItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/Mp443ItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.handgun.Mp443Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -102,7 +102,8 @@ public class Mp443ItemModel extends GeoModel { float numR = (float) (1 - 0.12 * zt); float numP = (float) (1 - 0.68 * zt); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) { main.setRotX(numR * main.getRotX()); main.setRotY(numR * main.getRotY()); 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 af2c5129d..1305a6059 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,9 +4,9 @@ import com.atsuishio.superbwarfare.Mod; 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.GunData; import com.atsuishio.superbwarfare.item.gun.heavy.Ntw20Item; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -137,9 +137,10 @@ public class Ntw20Model extends GeoModel { CrossHairOverlay.gunRot = shen.getRotZ(); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 4.3)); - NBTTool.saveTag(stack, tag); + data.save(); action.setPosZ(3f * (float) ClientEventHandler.actionMove); lh.setPosZ(-3f * (float) ClientEventHandler.actionMove); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/RpgItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/RpgItemModel.java index 75026ff8f..b260d5534 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/RpgItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/RpgItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.launcher.RpgItem; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -45,7 +45,8 @@ public class RpgItemModel extends GeoModel { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return; - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); if (GunsTool.getGunBooleanTag(tag, "CloseHammer")) { hammer.setRotX(-90 * Mth.DEG_TO_RAD); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/RpkItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/RpkItemModel.java index 7d3e0700e..944961447 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/RpkItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/RpkItemModel.java @@ -5,8 +5,8 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.machinegun.RpkItem; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -75,9 +75,10 @@ public class RpkItemModel extends GeoModel { button.setScaleZ(1f - (0.3f * (float) zp)); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 1.65)); - NBTTool.saveTag(stack, tag); + data.save(); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosY((float) (0.15f * fp + 0.18f * fr)); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SecondaryCataclysmModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SecondaryCataclysmModel.java index 22fa15a0a..3b7418f91 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SecondaryCataclysmModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SecondaryCataclysmModel.java @@ -4,9 +4,9 @@ import com.atsuishio.superbwarfare.Mod; 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.GunData; import com.atsuishio.superbwarfare.item.gun.launcher.SecondaryCataclysm; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -100,7 +100,8 @@ public class SecondaryCataclysmModel extends GeoModel { float numR = (float) (1 - 0.12 * zt); float numP = (float) (1 - 0.68 * zt); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); if (GunsTool.getGunIntTag(tag, "ReloadTime") > 0) { main.setRotX(numR * main.getRotX()); main.setRotY(numR * main.getRotY()); 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 292594323..c1849a047 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 @@ -4,9 +4,9 @@ import com.atsuishio.superbwarfare.Mod; 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.GunData; import com.atsuishio.superbwarfare.item.gun.sniper.SentinelItem; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -76,9 +76,10 @@ public class SentinelItemModel extends GeoModel { GeoBone holo = getAnimationProcessor().getBone("holo"); holo.setPosY(0.09f); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", !(gun.getPosX() > 2.4)); - NBTTool.saveTag(stack, tag); + data.save(); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); shen.setPosY((float) (0.4f * fp + 0.44f * fr)); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SksItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SksItemModel.java index 3e0c7e0e7..601d9601e 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SksItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SksItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.rifle.SksItem; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -68,9 +68,10 @@ public class SksItemModel extends GeoModel { gun.setPosZ(2.5f * (float) zp + (float) (0.5f * zpz)); gun.setRotZ((float) (0.05f * zpz)); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", gun.getPosX() <= 1.2); - NBTTool.saveTag(stack, tag); + data.save(); GeoBone shen = getAnimationProcessor().getBone("shen"); shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SvdItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SvdItemModel.java index a0db0dd7c..0e37efdce 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/SvdItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/SvdItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.sniper.SvdItem; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -110,9 +110,10 @@ public class SvdItemModel extends GeoModel { cross3.setScaleX((float) (1f + (0.1 * zp))); cross3.setScaleY((float) (1f + (0.1 * zp))); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", gun.getPosX() <= 1.4); - NBTTool.saveTag(stack, tag); + data.save(); GeoBone shen; if (zt < 0.5) { diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/TracheliumItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/TracheliumItemModel.java index 4824e17d1..64494f2aa 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/TracheliumItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/TracheliumItemModel.java @@ -153,9 +153,10 @@ public class TracheliumItemModel extends GeoModel { CrossHairOverlay.gunRot = shen.getRotZ(); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); tag.putBoolean("HoloHidden", (gun.getPosX() <= 3 || Mth.abs(shen.getRotX()) > (scopeType == 2 ? 3 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotX()) > (scopeType == 2 ? 5.7 : 1) * Mth.DEG_TO_RAD || Mth.abs(main.getRotY()) > 3 * Mth.DEG_TO_RAD)); - NBTTool.saveTag(stack, tag); + data.save(); hammer.setRotX(50 * Mth.DEG_TO_RAD * (float) ClientEventHandler.revolverPreTime); lun.setRotZ(-60 * Mth.DEG_TO_RAD * (float) ClientEventHandler.revolverWheelPreTime); diff --git a/src/main/java/com/atsuishio/superbwarfare/client/model/item/VectorItemModel.java b/src/main/java/com/atsuishio/superbwarfare/client/model/item/VectorItemModel.java index edd3ffa18..b60ca7830 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/model/item/VectorItemModel.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/model/item/VectorItemModel.java @@ -5,9 +5,9 @@ import com.atsuishio.superbwarfare.client.AnimationHelper; 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.GunData; import com.atsuishio.superbwarfare.item.gun.smg.VectorItem; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; @@ -55,7 +55,8 @@ public class VectorItemModel extends GeoModel { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return; - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); int mode = GunsTool.getGunIntTag(tag, "FireMode"); if (mode == 0) { kmj.setRotX(-120 * Mth.DEG_TO_RAD); @@ -100,7 +101,7 @@ public class VectorItemModel extends GeoModel { scope.setScaleZ(1f - (0.2f * (float) zp)); tag.putBoolean("HoloHidden", gun.getPosX() <= 2); - NBTTool.saveTag(stack, tag); + data.save(); GeoBone shen; if (zt < 0.5) { diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 1212e68ec..603216314 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -378,9 +378,7 @@ public class ClientEventHandler { public static void handleWeaponFire(RenderFrameEvent.Pre event) { ClientLevel level = Minecraft.getInstance().level; Player player = Minecraft.getInstance().player; - - if (player == null) return; - if (level == null) return; + if (player == null || level == null) return; if (notInGame()) { holdFire = false; @@ -525,6 +523,8 @@ public class ClientEventHandler { if (stack.getItem() == ModItems.DEVOTION.get() && (data.normalReloading() || data.emptyReloading())) { customRpm = 0; } + + data.save(); } public static void beamShoot(Player player, ItemStack stack) { @@ -593,7 +593,7 @@ public class ClientEventHandler { revolverWheelPreTime = 0; playGunClientSounds(player, tag); - handleClientShoot(tag); + handleClientShoot(); } } else if (stack.is(ModItems.MINIGUN.get())) { var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); @@ -613,7 +613,7 @@ public class ClientEventHandler { Mod.queueClientWork((int) (1 + 1.5 * shooterHeight), () -> player.playSound(ModSounds.SHELL_CASING_NORMAL.get(), (float) Math.max(1.5 - 0.2 * shooterHeight, 0), 1)); } - handleClientShoot(tag); + handleClientShoot(); } } @@ -622,7 +622,7 @@ public class ClientEventHandler { actionMove = Mth.lerp(0.125 * times, actionMove, 0); } - public static void handleClientShoot(final CompoundTag tag) { + public static void handleClientShoot() { Player player = Minecraft.getInstance().player; if (player == null) return; ItemStack stack = player.getMainHandItem(); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java index d0875b3d5..2ecbfc0e5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/GunEventHandler.java @@ -48,10 +48,12 @@ public class GunEventHandler { if (stack.is(ModTags.Items.GUN)) { var data = GunData.from(stack); - handleGunBolt(player, data.reload()); - handleGunReload(player, data.reload()); - handleGunSingleReload(player, data.reload()); - handleSentinelCharge(player, data.reload()); + + handleGunBolt(player, data); + handleGunReload(player, data); + handleGunSingleReload(player, data); + handleSentinelCharge(player, data); + data.save(); } } @@ -64,7 +66,7 @@ public class GunEventHandler { if (stack.is(ModTags.Items.NORMAL_GUN)) { var tag = gunData.getTag(); - var data = tag.getCompound("GunData"); + var data = gunData.getData(); if (GunsTool.getGunIntTag(tag, "BoltActionTick") > 0) { data.putInt("BoltActionTick", GunsTool.getGunIntTag(tag, "BoltActionTick") - 1); @@ -81,7 +83,6 @@ public class GunEventHandler { } } } - gunData.save(); } /** @@ -400,7 +401,6 @@ public class GunEventHandler { } data.putBoolean("StartReload", false); } - gunData.save(); } public static void playGunNormalReload(Player player, GunData gunData) { @@ -411,15 +411,15 @@ public class GunEventHandler { gunData.setAmmo(gunData.magazine() + (gunItem.hasBulletInBarrel(stack) ? 1 : 0)); } else { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.SHOTGUN, gunItem.hasBulletInBarrel(stack)); + GunsTool.reload(player, stack, gunData, AmmoType.SHOTGUN, gunItem.hasBulletInBarrel(stack)); } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.SNIPER, true); + GunsTool.reload(player, stack, gunData, AmmoType.SNIPER, true); } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.HANDGUN, true); + GunsTool.reload(player, stack, gunData, AmmoType.HANDGUN, true); } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.RIFLE, gunItem.hasBulletInBarrel(stack)); + GunsTool.reload(player, stack, gunData, AmmoType.RIFLE, gunItem.hasBulletInBarrel(stack)); } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.HEAVY, gunItem.hasBulletInBarrel(stack)); + GunsTool.reload(player, stack, gunData, AmmoType.HEAVY, gunItem.hasBulletInBarrel(stack)); } } gunData.setReloadState(GunData.ReloadState.NOT_RELOADING); @@ -433,15 +433,15 @@ public class GunEventHandler { gunData.setAmmo(gunData.magazine()); } else { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.SHOTGUN); + GunsTool.reload(player, stack, gunData, AmmoType.SHOTGUN); } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.SNIPER); + GunsTool.reload(player, stack, gunData, AmmoType.SNIPER); } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.HANDGUN); + GunsTool.reload(player, stack, gunData, AmmoType.HANDGUN); } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.RIFLE); + GunsTool.reload(player, stack, gunData, AmmoType.RIFLE); } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO)) { - GunsTool.reload(player, stack, gunData.reload(), AmmoType.HEAVY); + GunsTool.reload(player, stack, gunData, AmmoType.HEAVY); } else if (stack.getItem() == ModItems.TASER.get()) { gunData.setAmmo(1); player.getInventory().clearOrCountMatchingItems(p -> p.getItem() == ModItems.TASER_ELECTRODE.get(), 1, player.inventoryMenu.getCraftSlots()); @@ -584,26 +584,26 @@ public class GunEventHandler { } else if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.getAmmo() >= gunData.magazine()) { tag.putBoolean("force_stage3_start", true); } else { - tag.putInt("reload_stage", 2); + gunData.setReloadStage(2); } } else { if (stack.is(ModItems.SECONDARY_CATACLYSM.get()) && gunData.getAmmo() >= gunData.magazine()) { tag.putBoolean("force_stage3_start", true); } else { - tag.putInt("reload_stage", 2); + gunData.setReloadStage(2); } } // 检查备弹 } // 强制停止换弹,进入三阶段 - if (tag.getBoolean("force_stop") && tag.getInt("reload_stage") == 2 && tag.getInt("iterative") > 0) { + if (tag.getBoolean("force_stop") && gunData.getReloadStage() == 2 && tag.getInt("iterative") > 0) { tag.putBoolean("stop", true); } // 二阶段 if ((tag.getDouble("prepare") == 0 || tag.getDouble("prepare_load") == 0) - && tag.getInt("reload_stage") == 2 + && gunData.getReloadStage() == 2 && tag.getInt("iterative") == 0 && !tag.getBoolean("stop") && gunData.getAmmo() < gunData.magazine() @@ -644,7 +644,7 @@ public class GunEventHandler { if (tag.getInt("iterative") == 1) { // 装满结束 if (gunData.getAmmo() >= gunData.magazine()) { - tag.putInt("reload_stage", 3); + gunData.setReloadStage(3); } // 备弹耗尽结束 @@ -653,29 +653,29 @@ public class GunEventHandler { if (capability == null) capability = new PlayerVariable(); if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0) { - tag.putInt("reload_stage", 3); + gunData.setReloadStage(3); } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0) { - tag.putInt("reload_stage", 3); + gunData.setReloadStage(3); } else if ((stack.is(ModTags.Items.USE_HANDGUN_AMMO) || stack.is(ModTags.Items.SMG)) && capability.handgunAmmo == 0) { - tag.putInt("reload_stage", 3); + gunData.setReloadStage(3); } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { - tag.putInt("reload_stage", 3); + gunData.setReloadStage(3); } else if (stack.is(ModTags.Items.USE_HEAVY_AMMO) && capability.heavyAmmo == 0) { - tag.putInt("reload_stage", 3); + gunData.setReloadStage(3); } } // 强制结束 if (tag.getBoolean("stop")) { - tag.putInt("reload_stage", 3); + gunData.setReloadStage(3); tag.putBoolean("force_stop", false); tag.putBoolean("stop", false); } } // 三阶段 - if ((tag.getInt("iterative") == 1 && tag.getInt("reload_stage") == 3) || tag.getBoolean("force_stage3_start")) { - tag.putInt("reload_stage", 3); + if ((tag.getInt("iterative") == 1 && gunData.getReloadStage() == 3) || tag.getBoolean("force_stage3_start")) { + gunData.setReloadStage(3); tag.putBoolean("force_stage3_start", false); int finishTime = gunData.finishTime(); tag.putInt("finish", finishTime + 2); @@ -689,7 +689,7 @@ public class GunEventHandler { // 三阶段结束 if (tag.getInt("finish") == 1) { - tag.putInt("reload_stage", 0); + gunData.setReloadStage(0); if (gunData.boltActionTime() > 0) { GunsTool.setGunBooleanTag(tag, "NeedBoltAction", false); } @@ -698,8 +698,6 @@ public class GunEventHandler { NeoForge.EVENT_BUS.post(new ReloadEvent.Post(player, stack)); } - - gunData.save(); } public static void singleLoad(Player player, GunData data) { @@ -890,7 +888,5 @@ public class GunEventHandler { if (GunsTool.getGunIntTag(tag, "ChargeTime") == 1) { data.putBoolean("Charging", false); } - - gunData.save(); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java index 545bd8c72..be2a123a8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/LivingEventHandler.java @@ -210,7 +210,7 @@ public class LivingEventHandler { if (!stack.is(ModTags.Items.GUN)) return; if (event.getEntity() instanceof TargetEntity) return; - var data = GunData.from(stack).reload(); + var data = GunData.from(stack); double amount = Math.min(0.125 * event.getAmount(), event.getEntity().getMaxHealth()); final var tag = NBTTool.getTag(stack); @@ -236,7 +236,7 @@ public class LivingEventHandler { if (!stack.is(ModTags.Items.GUN)) return; if (event.getEntity() instanceof TargetEntity) return; - var data = GunData.from(stack).reload(); + var data = GunData.from(stack); double amount = 20 + 2 * event.getEntity().getMaxHealth(); final var tag = NBTTool.getTag(stack); @@ -276,7 +276,7 @@ public class LivingEventHandler { if (!stack.is(ModTags.Items.GUN)) return; if (event.getEntity() instanceof TargetEntity) return; - var data = GunData.from(stack).reload(); + var data = GunData.from(stack); int level = data.getLevel(); double exp = data.getExp(); double upgradeExpNeeded = 20 * Math.pow(level, 2) + 160 * level + 20; @@ -356,8 +356,9 @@ public class LivingEventHandler { if (oldStack.getItem() instanceof GunItem oldGun) { stopGunReloadSound(serverPlayer, oldGun); - var oldData = GunData.from(oldStack).reload(); - CompoundTag data = oldData.getData(); + var oldData = GunData.from(oldStack); + oldTag = oldData.getTag(); + var data = oldData.getData(); if (oldData.boltActionTime() > 0) { data.putInt("BoltActionTick", 0); @@ -371,7 +372,7 @@ public class LivingEventHandler { if (oldData.iterativeTime() != 0) { oldTag.putBoolean("force_stop", false); oldTag.putBoolean("stop", false); - oldTag.putInt("reload_stage", 0); + oldData.setReloadStage(0); oldTag.putDouble("prepare", 0); oldTag.putDouble("prepare_load", 0); oldTag.putDouble("iterative", 0); @@ -388,10 +389,13 @@ public class LivingEventHandler { cap.edit = false; cap.syncPlayerVariables(player); } + + oldData.save(); } if (newStack.getItem() instanceof GunItem) { var newData = GunData.from(newStack); + newTag = newData.getTag(); player.getPersistentData().putDouble("noRun", 40); newTag.putBoolean("draw", true); @@ -401,14 +405,14 @@ public class LivingEventHandler { newData.setReloadState(GunData.ReloadState.NOT_RELOADING); - CompoundTag data = newTag.getCompound("GunData"); + var data = newTag.getCompound("GunData"); data.putInt("ReloadTime", 0); newTag.put("GunData", data); if (newData.iterativeTime() != 0) { newTag.putBoolean("force_stop", false); newTag.putBoolean("stop", false); - newTag.putInt("reload_stage", 0); + newData.setReloadStage(0); newTag.putDouble("prepare", 0); newTag.putDouble("prepare_load", 0); newTag.putDouble("iterative", 0); @@ -419,7 +423,6 @@ public class LivingEventHandler { GunsTool.setGunBooleanTag(newTag, "Charging", false); GunsTool.setGunIntTag(newTag, "ChargeTime", 0); } - NBTTool.saveTag(newStack, newTag); int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), newTag); if (level != 0) { @@ -435,9 +438,9 @@ public class LivingEventHandler { cap.tacticalSprint = false; cap.syncPlayerVariables(player); } + + newData.save(); } - NBTTool.saveTag(oldStack, oldTag); - NBTTool.saveTag(newStack, newTag); } } } @@ -573,7 +576,8 @@ public class LivingEventHandler { } private static void handleClipPerks(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag); if (healClipLevel != 0) { GunsTool.setPerkIntTag(tag, "HealClipTime", 80 + healClipLevel * 20); @@ -583,11 +587,12 @@ public class LivingEventHandler { if (killClipLevel != 0) { GunsTool.setPerkIntTag(tag, "KillClipReloadTime", 80); } - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleKillClipDamage(ItemStack stack, LivingIncomingDamageEvent event) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (GunsTool.getPerkIntTag(tag, "KillClipTime") > 0) { int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag); if (level == 0) { @@ -599,7 +604,8 @@ public class LivingEventHandler { } private static void handleGutshotStraightDamage(ItemStack stack, LivingIncomingDamageEvent event) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.GUTSHOT_STRAIGHT.get(), tag); if (level == 0) return; @@ -607,7 +613,8 @@ public class LivingEventHandler { } private static void handleKillingTallyDamage(ItemStack stack, LivingIncomingDamageEvent event) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag); if (level == 0) return; @@ -620,16 +627,18 @@ public class LivingEventHandler { } private static void handleKillingTallyAddCount(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag); if (level != 0) { GunsTool.setPerkIntTag(tag, "KillingTally", Math.min(3, GunsTool.getPerkIntTag(tag, "KillingTally") + 1)); - NBTTool.saveTag(stack, tag); + data.save(); } } private static void handleFourthTimesCharm(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.FOURTH_TIMES_CHARM.get(), tag); if (level == 0) return; @@ -643,11 +652,12 @@ public class LivingEventHandler { GunsTool.setPerkIntTag(tag, "FourthTimesCharmCount", Math.min(4, count + 1)); } } - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleSubsistence(ItemStack stack, Player player) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.SUBSISTENCE.get(), tag); if (level == 0) return; @@ -656,7 +666,6 @@ public class LivingEventHandler { var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); if (cap == null) return; - var data = GunData.from(stack); int mag = data.magazine(); int ammo = data.getAmmo(); int ammoReload = (int) Math.min(mag, mag * rate); @@ -687,7 +696,8 @@ public class LivingEventHandler { private static void handleFieldDoctor(ItemStack stack, LivingIncomingDamageEvent event, Player player) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.FIELD_DOCTOR.get(), tag); if (level == 0) return; @@ -698,16 +708,18 @@ public class LivingEventHandler { } private static void handleHeadSeekerTime(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag); if (level == 0) return; GunsTool.setPerkIntTag(tag, "HeadSeeker", 11 + level * 2); - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleHeadSeekerDamage(ItemStack stack, LivingIncomingDamageEvent event) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.HEAD_SEEKER.get(), tag); if (level == 0) return; @@ -717,12 +729,13 @@ public class LivingEventHandler { } private static void handleDesperado(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag); if (level == 0) return; GunsTool.setPerkIntTag(tag, "DesperadoTime", 90 + level * 10); - NBTTool.saveTag(stack, tag); + data.save(); } /** diff --git a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java index 9ff95181a..1a2344fa7 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/PlayerEventHandler.java @@ -37,10 +37,12 @@ public class PlayerEventHandler { } for (ItemStack pStack : player.getInventory().items) { if (pStack.is(ModTags.Items.GUN)) { - tag = NBTTool.getTag(pStack); + var data = GunData.from(stack); + tag = data.getTag(); + tag.putBoolean("draw", true); - tag.putBoolean("init", false); - NBTTool.saveTag(pStack, tag); + + data.save(); } } } @@ -60,11 +62,14 @@ public class PlayerEventHandler { handleRespawnReload(player); handleRespawnAutoArmor(player); - for (ItemStack pStack : player.getInventory().items) { - if (pStack.is(ModTags.Items.GUN)) { - var tag = NBTTool.getTag(pStack); + for (ItemStack stack : player.getInventory().items) { + if (stack.is(ModTags.Items.GUN)) { + var data = GunData.from(stack); + final var tag = data.getTag(); + tag.putBoolean("draw", true); - NBTTool.saveTag(pStack, tag); + + data.save(); } } } @@ -212,7 +217,9 @@ public class PlayerEventHandler { var cap = player.getCapability(ModCapabilities.PLAYER_VARIABLE); if (cap == null) return; - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); + if (cap.bowPullHold) { if (stack.getItem() == ModItems.BOCEK.get() && GunsTool.getGunIntTag(tag, "MaxAmmo") > 0 @@ -246,7 +253,7 @@ public class PlayerEventHandler { player.setSprinting(false); } - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleSimulationDistance(Player player) { @@ -265,7 +272,7 @@ public class PlayerEventHandler { for (ItemStack stack : player.getInventory().items) { if (stack.is(ModTags.Items.GUN)) { - var data = GunData.from(stack).reload(); + var data = GunData.from(stack); var tag = data.getTag(); if (!InventoryTool.hasCreativeAmmoBox(player)) { @@ -356,7 +363,7 @@ public class PlayerEventHandler { if (left.is(ModTags.Items.GUN) && right.getItem() == ModItems.SHORTCUT_PACK.get()) { ItemStack output = left.copy(); - var data = GunData.from(output).reload(); + var data = GunData.from(output); data.setUpgradePoint(data.getUpgradePoint() + 1); data.save(); diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ReloadEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ReloadEventHandler.java index 8d38d6a19..4dfbcd3b3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ReloadEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ReloadEventHandler.java @@ -3,9 +3,9 @@ package com.atsuishio.superbwarfare.event; import com.atsuishio.superbwarfare.event.events.ReloadEvent; import com.atsuishio.superbwarfare.init.ModPerks; import com.atsuishio.superbwarfare.init.ModTags; +import com.atsuishio.superbwarfare.item.gun.GunData; import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.tools.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.neoforged.bus.api.SubscribeEvent; @@ -49,7 +49,8 @@ public class ReloadEventHandler { } private static void handleHealClipPre(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int time = GunsTool.getPerkIntTag(tag, "HealClipTime"); if (time > 0) { GunsTool.setPerkIntTag(tag, "HealClipTime", 0); @@ -57,11 +58,12 @@ public class ReloadEventHandler { } else { GunsTool.setPerkBooleanTag(tag, "HealClip", false); } - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleHealClipPost(Player player, ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (!GunsTool.getPerkBooleanTag(tag, "HealClip")) return; int healClipLevel = PerkHelper.getItemPerkLevel(ModPerks.HEAL_CLIP.get(), tag); @@ -77,7 +79,8 @@ public class ReloadEventHandler { } private static void handleKillClipPre(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int time = GunsTool.getPerkIntTag(tag, "KillClipReloadTime"); if (time > 0) { GunsTool.setPerkIntTag(tag, "KillClipReloadTime", 0); @@ -85,29 +88,32 @@ public class ReloadEventHandler { } else { GunsTool.setPerkBooleanTag(tag, "KillClip", false); } - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleKillClipPost(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (!GunsTool.getPerkBooleanTag(tag, "KillClip")) return; int level = PerkHelper.getItemPerkLevel(ModPerks.KILL_CLIP.get(), tag); GunsTool.setPerkIntTag(tag, "KillClipTime", 90 + 10 * level); - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleKillingTallyPre(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int level = PerkHelper.getItemPerkLevel(ModPerks.KILLING_TALLY.get(), tag); if (level == 0) return; GunsTool.setPerkIntTag(tag, "KillingTally", 0); - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleDesperadoPre(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); int time = GunsTool.getPerkIntTag(tag, "DesperadoTime"); if (time > 0) { GunsTool.setPerkIntTag(tag, "DesperadoTime", 0); @@ -115,15 +121,16 @@ public class ReloadEventHandler { } else { GunsTool.setPerkBooleanTag(tag, "Desperado", false); } - NBTTool.saveTag(stack, tag); + data.save(); } private static void handleDesperadoPost(ItemStack stack) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (!GunsTool.getPerkBooleanTag(tag, "Desperado")) return; int level = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), tag); GunsTool.setPerkIntTag(tag, "DesperadoTimePost", 110 + level * 10); - NBTTool.saveTag(stack, tag); + data.save(); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java index 7507f5bc1..59a417b7d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java +++ b/src/main/java/com/atsuishio/superbwarfare/init/ModTabs.java @@ -2,7 +2,6 @@ package com.atsuishio.superbwarfare.init; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.item.*; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.minecraft.core.HolderLookup; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.Component; @@ -35,11 +34,6 @@ public class ModTabs { .displayItems((param, output) -> ModItems.GUNS.getEntries().forEach(registryObject -> { // 普通枪械 var stack = new ItemStack(registryObject.get()); - var id = stack.getDescriptionId(); - var tag = NBTTool.getTag(stack); - tag.putString("id", id.substring(id.lastIndexOf(".") + 1)); - NBTTool.saveTag(stack, tag); - output.accept(stack); // 充电后枪械 diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunData.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunData.java index 809319684..45d04f405 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunData.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunData.java @@ -19,7 +19,7 @@ public class GunData { private static final WeakHashMap dataCache = new WeakHashMap<>(); - public GunData reload() { + private void loadTags() { var customData = stack.get(DataComponents.CUSTOM_DATA); this.tag = customData != null ? customData.copyTag() : new CompoundTag(); @@ -29,7 +29,6 @@ public class GunData { } else { data = tag.getCompound("GunData"); } - return this; } private GunData(ItemStack stack) { @@ -40,7 +39,7 @@ public class GunData { this.stack = stack; var id = stack.getDescriptionId(); this.id = id.substring(id.lastIndexOf(".") + 1); - reload(); + loadTags(); } public static GunData from(ItemStack stack) { @@ -289,6 +288,5 @@ public class GunData { public void save() { stack.set(DataComponents.CUSTOM_DATA, CustomData.of(tag)); - reload(); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunEvents.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunEvents.java index 42699e49b..ae04281d5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunEvents.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunEvents.java @@ -2,7 +2,6 @@ package com.atsuishio.superbwarfare.item.gun; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.init.ModTags; -import com.atsuishio.superbwarfare.tools.NBTTool; import net.neoforged.bus.api.SubscribeEvent; import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.event.entity.player.ItemEntityPickupEvent; @@ -13,10 +12,10 @@ public class GunEvents { public static void onPickup(ItemEntityPickupEvent.Pre event) { var stack = event.getItemEntity().getItem(); if (stack.is(ModTags.Items.GUN)) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); tag.putBoolean("draw", true); - tag.putBoolean("init", false); - NBTTool.saveTag(stack, tag); + data.save(); } } } 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 105599700..c69a9c411 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/GunItem.java @@ -81,17 +81,11 @@ public abstract class GunItem extends Item implements CustomRendererItem { } else { GunsTool.initGun(tag, name); } - data.reload(); - tag = data.getTag(); - GunsTool.generateAndSetUUID(tag); tag.putBoolean("init", true); } tag.putBoolean("draw", false); - - data.save(); handleGunPerks(data); - data.reload(); var hasBulletInBarrel = gunItem.hasBulletInBarrel(stack); var ammoCount = data.getAmmo(); @@ -193,7 +187,6 @@ public abstract class GunItem extends Item implements CustomRendererItem { int mag = data.magazine(); GunsTool.setGunIntTag(tag, "Ammo", Math.min(mag, GunsTool.getGunIntTag(tag, "Ammo") + 2)); - data.save(); } } } 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 9a263bbeb..66dfbb0ca 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 @@ -133,7 +133,8 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon { @ParametersAreNonnullByDefault public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); - var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (entity instanceof Player player && selected) { GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); @@ -200,7 +201,7 @@ public class JavelinItem extends GunItem implements GeoItem, SpecialFireWeapon { } else { tag.putInt("SeekTime", 0); } - NBTTool.saveTag(stack, tag); + data.save(); } protected static boolean check(ItemStack stack) { 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 a7c1e6e67..ba5d66c81 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 @@ -17,7 +17,6 @@ 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.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.SoundTool; import net.minecraft.client.Minecraft; @@ -129,9 +128,10 @@ public class M79Item extends GunItem implements GeoItem, SpecialFireWeapon { public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); if (entity instanceof Player player) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); - NBTTool.saveTag(stack, tag); + data.save(); } } 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 a15dc0d76..000c4b7b6 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 @@ -17,7 +17,6 @@ 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.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.SoundTool; import net.minecraft.client.Minecraft; @@ -133,7 +132,8 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon { @Override @ParametersAreNonnullByDefault public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (tag.getBoolean("draw")) { tag.putBoolean("draw", false); @@ -145,7 +145,7 @@ public class RpgItem extends GunItem implements GeoItem, SpecialFireWeapon { if (entity instanceof Player player) { GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); } - NBTTool.saveTag(stack, tag); + data.save(); super.inventoryTick(stack, world, entity, slot, selected); } 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 b0a08f796..8e41d2a7c 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 @@ -15,7 +15,6 @@ 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.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.SoundTool; import net.minecraft.client.Minecraft; @@ -91,15 +90,15 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW var data = GunData.from(stack); final var tag = data.getTag(); - if (tag.getInt("reload_stage") == 1 && tag.getDouble("prepare_load") > 0) { + if (data.getReloadStage() == 1 && tag.getDouble("prepare_load") > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.prepare")); } - if (tag.getDouble("load_index") == 0 && tag.getInt("reload_stage") == 2) { + if (tag.getDouble("load_index") == 0 && data.getReloadStage() == 2) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.iterativeload")); } - if (tag.getDouble("load_index") == 1 && tag.getInt("reload_stage") == 2) { + if (tag.getDouble("load_index") == 1 && data.getReloadStage() == 2) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.iterativeload2")); } @@ -107,7 +106,7 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.hit")); } - if (tag.getInt("reload_stage") == 3) { + if (data.getReloadStage() == 3) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.sc.finish")); } @@ -124,9 +123,9 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && !data.emptyReloading() - && data.getTag().getInt("reload_stage") != 1 - && data.getTag().getInt("reload_stage") != 2 - && data.getTag().getInt("reload_stage") != 3 + && data.getReloadStage() != 1 + && data.getReloadStage() != 2 + && data.getReloadStage() != 3 && ClientEventHandler.drawTime < 0.01 && ClientEventHandler.gunMelee == 0 && !data.isReloading() @@ -181,9 +180,10 @@ public class SecondaryCataclysm extends GunItem implements GeoItem, SpecialFireW super.inventoryTick(stack, world, entity, slot, selected); if (entity instanceof Player player) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); - NBTTool.saveTag(stack, tag); + data.save(); } if (entity instanceof Player player) { 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 22bd597f3..b4d20a71a 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 @@ -11,7 +11,6 @@ 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.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; @@ -108,14 +107,15 @@ public class M60Item extends GunItem implements GeoItem { @Override @ParametersAreNonnullByDefault public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (tag.getBoolean("draw")) { tag.putBoolean("draw", false); if (GunsTool.getGunIntTag(tag, "Ammo") <= 5) { GunsTool.setGunBooleanTag(tag, "HideBulletChain", true); } - NBTTool.saveTag(stack, tag); + data.save(); } super.inventoryTick(stack, level, entity, slot, selected); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/MinigunItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/MinigunItem.java index c9005cc77..99f9aa8fc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/MinigunItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/machinegun/MinigunItem.java @@ -128,7 +128,8 @@ public class MinigunItem extends GunItem implements GeoItem { cooldown = -0.1; } - var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var tag = data.getTag(); if (entity instanceof ServerPlayer serverPlayer && entity.level() instanceof ServerLevel serverLevel && tag.getDouble("heat") > 4 && entity.isInWaterOrRain()) { if (entity.isInWater()) { ParticleTool.sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, @@ -149,7 +150,7 @@ public class MinigunItem extends GunItem implements GeoItem { tag.putDouble("overheat", (tag.getDouble("overheat") - 1)); } - NBTTool.saveTag(stack, tag); + data.save(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/MarlinItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/MarlinItem.java index bf3f2cd17..ed61f4409 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/MarlinItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/MarlinItem.java @@ -56,19 +56,19 @@ public class MarlinItem extends GunItem implements GeoItem { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.shift")); } - if (tag.getInt("reload_stage") == 1 && tag.getDouble("prepare") > 0) { + if (data.getReloadStage() == 1 && tag.getDouble("prepare") > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.prepare")); } - if (tag.getDouble("load_index") == 0 && tag.getInt("reload_stage") == 2) { + if (tag.getDouble("load_index") == 0 && data.getReloadStage() == 2) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload")); } - if (tag.getDouble("load_index") == 1 && tag.getInt("reload_stage") == 2) { + if (tag.getDouble("load_index") == 1 && data.getReloadStage() == 2) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.iterativeload2")); } - if (tag.getInt("reload_stage") == 3) { + if (data.getReloadStage() == 3) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.marlin.finish")); } 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 53bb501a0..dadeadcbb 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 @@ -10,7 +10,6 @@ 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.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; @@ -92,14 +91,15 @@ public class SksItem extends GunItem implements GeoItem { @Override @ParametersAreNonnullByDefault public void inventoryTick(ItemStack stack, Level level, Entity entity, int slot, boolean selected) { - if (NBTTool.getTag(stack).getBoolean("draw")) { - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); + if (tag.getBoolean("draw")) { tag.putBoolean("draw", false); if (GunsTool.getGunIntTag(tag, "Ammo") == 0) { GunsTool.setGunBooleanTag(tag, "HoldOpen", true); } - NBTTool.saveTag(stack, tag); + data.save(); } super.inventoryTick(stack, level, entity, slot, selected); } 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 559f9c73d..e85352eb9 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 @@ -57,23 +57,23 @@ public class MosinNagantItem extends GunItem implements GeoItem { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift")); } - if (NBTTool.getTag(stack).getInt("reload_stage") == 1 && GunsTool.getGunIntTag(tag, "Ammo") == 0) { + if (data.getReloadStage() == 1 && GunsTool.getGunIntTag(tag, "Ammo") == 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty")); } - if (NBTTool.getTag(stack).getInt("reload_stage") == 1 && GunsTool.getGunIntTag(tag, "Ammo") > 0) { + if (data.getReloadStage() == 1 && GunsTool.getGunIntTag(tag, "Ammo") > 0) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare")); } - if (NBTTool.getTag(stack).getDouble("load_index") == 0 && NBTTool.getTag(stack).getInt("reload_stage") == 2) { + if (NBTTool.getTag(stack).getDouble("load_index") == 0 && data.getReloadStage() == 2) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.iterativeload")); } - if (NBTTool.getTag(stack).getDouble("load_index") == 1 && NBTTool.getTag(stack).getInt("reload_stage") == 2) { + if (NBTTool.getTag(stack).getDouble("load_index") == 1 && data.getReloadStage() == 2) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.iterativeload2")); } - if (NBTTool.getTag(stack).getInt("reload_stage") == 3) { + if (data.getReloadStage() == 3) { return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.finish")); } @@ -91,9 +91,9 @@ public class MosinNagantItem extends GunItem implements GeoItem { if (player.isSprinting() && player.onGround() && player.getPersistentData().getDouble("noRun") == 0 && !(GunData.from(stack).emptyReloading()) - && NBTTool.getTag(stack).getInt("reload_stage") != 1 - && NBTTool.getTag(stack).getInt("reload_stage") != 2 - && NBTTool.getTag(stack).getInt("reload_stage") != 3 + && data.getReloadStage() != 1 + && data.getReloadStage() != 2 + && data.getReloadStage() != 3 && ClientEventHandler.drawTime < 0.01 && !data.isReloading() ) { diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java index f799ccfa3..cf8c973bb 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/sniper/SentinelItem.java @@ -13,7 +13,6 @@ 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.tools.NBTTool; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; import net.minecraft.resources.ResourceLocation; @@ -138,7 +137,8 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem @ParametersAreNonnullByDefault public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); var cap = stack.getCapability(Capabilities.EnergyStorage.ITEM); if (cap != null && cap.getEnergyStored() > 0) { @@ -148,7 +148,7 @@ public class SentinelItem extends GunItem implements GeoItem, EnergyStorageItem } else { GunsTool.setGunDoubleTag(tag, "ChargedDamage", 0); } - NBTTool.saveTag(stack, tag); + data.save(); } @Override 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 8c67ebdab..599b2809b 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 @@ -18,7 +18,6 @@ import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.InventoryTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.SoundTool; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -118,15 +117,16 @@ public class BocekItem extends GunItem implements GeoItem, SpecialFireWeapon { @ParametersAreNonnullByDefault public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (entity instanceof Player player) { GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); - NBTTool.saveTag(stack, tag); + data.save(); } if (GunsTool.getGunIntTag(tag, "ArrowEmpty") > 0) { GunsTool.setGunIntTag(tag, "ArrowEmpty", GunsTool.getGunIntTag(tag, "ArrowEmpty") - 1); - NBTTool.saveTag(stack, tag); + data.save(); } } 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 f828cf6e2..62b427a69 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 @@ -18,7 +18,6 @@ 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.GunsTool; -import com.atsuishio.superbwarfare.tools.NBTTool; import com.atsuishio.superbwarfare.tools.SoundTool; import net.minecraft.client.Minecraft; import net.minecraft.client.player.LocalPlayer; @@ -147,11 +146,12 @@ public class TaserItem extends GunItem implements GeoItem, SpecialFireWeapon, En @ParametersAreNonnullByDefault public void inventoryTick(ItemStack stack, Level world, Entity entity, int slot, boolean selected) { super.inventoryTick(stack, world, entity, slot, selected); - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (entity instanceof Player player) { GunsTool.setGunIntTag(tag, "MaxAmmo", getAmmoCount(player)); - NBTTool.saveTag(stack, tag); + data.save(); } int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.REGENERATION.get(), tag); diff --git a/src/main/java/com/atsuishio/superbwarfare/menu/ReforgingTableMenu.java b/src/main/java/com/atsuishio/superbwarfare/menu/ReforgingTableMenu.java index c6be83c21..8566e8736 100644 --- a/src/main/java/com/atsuishio/superbwarfare/menu/ReforgingTableMenu.java +++ b/src/main/java/com/atsuishio/superbwarfare/menu/ReforgingTableMenu.java @@ -239,7 +239,8 @@ public class ReforgingTableMenu extends AbstractContainerMenu { } ItemStack result = gun.copy(); - final var tag = NBTTool.getTag(result); + var data = GunData.from(result); + final var tag = data.getTag(); if (!ammo.isEmpty() && ammo.getItem() instanceof PerkItem perkItem) { if (gunItem.canApplyPerk(perkItem.getPerk())) { @@ -262,7 +263,7 @@ public class ReforgingTableMenu extends AbstractContainerMenu { } } - NBTTool.saveTag(result, tag); + data.save(); handleUpgradePoint(result); this.ammoPerkLevel.set(0); diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/receive/ShootClientMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/receive/ShootClientMessage.java index 67812d696..2796e08da 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/receive/ShootClientMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/receive/ShootClientMessage.java @@ -3,7 +3,6 @@ package com.atsuishio.superbwarfare.network.message.receive; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.event.ClientEventHandler; import io.netty.buffer.ByteBuf; -import net.minecraft.nbt.CompoundTag; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; import net.minecraft.network.protocol.common.custom.CustomPacketPayload; @@ -20,7 +19,7 @@ public record ShootClientMessage(double time) implements CustomPacketPayload { ); public static void handler(ShootClientMessage message, final IPayloadContext context) { - ClientEventHandler.handleClientShoot(new CompoundTag()); + ClientEventHandler.handleClientShoot(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/AdjustZoomFovMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/AdjustZoomFovMessage.java index cee7be1e0..430c0d58c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/AdjustZoomFovMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/AdjustZoomFovMessage.java @@ -37,10 +37,10 @@ public record AdjustZoomFovMessage(double scroll) implements CustomPacketPayload var tag = data.getTag(); if (stack.is(ModItems.MINIGUN.get())) { - double minRpm = 300; - double maxRpm = 2400; + double minRpm = 300 - 1200; + double maxRpm = 2400 - 1200; - GunsTool.setGunIntTag(tag, "CustomRPM", (int) Mth.clamp(GunsTool.getGunIntTag(tag, "CustomRPM") - 1200 + 50 * message.scroll, minRpm, maxRpm)); + GunsTool.setGunIntTag(tag, "CustomRPM", (int) Mth.clamp(GunsTool.getGunIntTag(tag, "CustomRPM") + 50 * message.scroll, minRpm, maxRpm)); if (GunsTool.getGunIntTag(tag, "CustomRPM") == 1150 - 1200) { GunsTool.setGunIntTag(tag, "CustomRPM", 1145 - 1200); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/EditMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/EditMessage.java index 5debb08c0..982b1aa8d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/EditMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/EditMessage.java @@ -3,7 +3,7 @@ package com.atsuishio.superbwarfare.network.message.send; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.init.ModTags; -import com.atsuishio.superbwarfare.tools.NBTTool; +import com.atsuishio.superbwarfare.item.gun.GunData; import com.atsuishio.superbwarfare.tools.SoundTool; import io.netty.buffer.ByteBuf; import net.minecraft.nbt.CompoundTag; @@ -34,7 +34,8 @@ public record EditMessage(int msgType) implements CustomPacketPayload { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return; - var rootTag = NBTTool.getTag(stack); + var data = GunData.from(stack); + var rootTag = data.getTag(); CompoundTag tag = rootTag.getCompound("Attachments"); switch (type) { case 0 -> { @@ -69,7 +70,7 @@ public record EditMessage(int msgType) implements CustomPacketPayload { } } rootTag.put("Attachments", tag); - NBTTool.saveTag(stack, rootTag); + data.save(); SoundTool.playLocalSound(player, ModSounds.EDIT.get(), 1f, 1f); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/SensitivityMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/SensitivityMessage.java index 99eac0846..4aeb827d5 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/SensitivityMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/SensitivityMessage.java @@ -2,7 +2,7 @@ package com.atsuishio.superbwarfare.network.message.send; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.init.ModTags; -import com.atsuishio.superbwarfare.tools.NBTTool; +import com.atsuishio.superbwarfare.item.gun.GunData; import io.netty.buffer.ByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.codec.ByteBufCodecs; @@ -27,13 +27,14 @@ public record SensitivityMessage(boolean isAdd) implements CustomPacketPayload { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return; - var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); if (message.isAdd) { tag.putInt("sensitivity", Math.min(10, tag.getInt("sensitivity") + 1)); } else { tag.putInt("sensitivity", Math.max(-10, tag.getInt("sensitivity") - 1)); } - NBTTool.saveTag(stack, tag); + data.save(); player.displayClientMessage(Component.translatable("tips.superbwarfare.sensitivity", tag.getInt("sensitivity")), true); } diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/SwitchScopeMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/SwitchScopeMessage.java index bbd7a387a..df0c3cb53 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/SwitchScopeMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/SwitchScopeMessage.java @@ -2,7 +2,7 @@ package com.atsuishio.superbwarfare.network.message.send; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.init.ModTags; -import com.atsuishio.superbwarfare.tools.NBTTool; +import com.atsuishio.superbwarfare.item.gun.GunData; import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.ByteBufCodecs; import net.minecraft.network.codec.StreamCodec; @@ -27,9 +27,10 @@ public record SwitchScopeMessage(double scroll) implements CustomPacketPayload { ItemStack stack = player.getMainHandItem(); if (!stack.is(ModTags.Items.GUN)) return; - final var tag = NBTTool.getTag(stack); + var data = GunData.from(stack); + final var tag = data.getTag(); tag.putBoolean("ScopeAlt", tag.getBoolean("ScopeAlt")); - NBTTool.saveTag(stack, tag); + data.save(); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/send/ZoomMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/send/ZoomMessage.java index 66c844461..58bd3e57d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/send/ZoomMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/send/ZoomMessage.java @@ -6,7 +6,7 @@ import com.atsuishio.superbwarfare.entity.vehicle.base.VehicleEntity; import com.atsuishio.superbwarfare.entity.vehicle.base.WeaponVehicleEntity; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModSounds; -import com.atsuishio.superbwarfare.tools.NBTTool; +import com.atsuishio.superbwarfare.item.gun.GunData; import com.atsuishio.superbwarfare.tools.SoundTool; import io.netty.buffer.ByteBuf; import net.minecraft.network.codec.ByteBufCodecs; @@ -63,11 +63,14 @@ public record ZoomMessage(int msgType) implements CustomPacketPayload { if (player.getMainHandItem().getItem() == ModItems.JAVELIN.get()) { var handItem = player.getMainHandItem(); - var tag = NBTTool.getTag(handItem); + var data = GunData.from(handItem); + var tag = data.getTag(); + tag.putBoolean("Seeking", false); tag.putInt("SeekTime", 0); tag.putString("TargetEntity", "none"); - NBTTool.saveTag(handItem, tag); + + data.save(); var clientboundstopsoundpacket = new ClientboundStopSoundPacket(Mod.loc("javelin_lock"), SoundSource.PLAYERS); player.connection.send(clientboundstopsoundpacket); diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java index 42b41dc45..2c407fbea 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java @@ -152,7 +152,6 @@ public class GunsTool { gunData.setAmmo(needToAdd); gunData.setReloadState(GunData.ReloadState.NOT_RELOADING); - gunData.save(); } /* PerkData */ diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/NBTTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/NBTTool.java index bce0e97e7..0eeeedc81 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/NBTTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/NBTTool.java @@ -13,6 +13,10 @@ public final class NBTTool { return new CompoundTag(); } + + /** + * 警告:请勿使用该方法保存任何枪械NBT数据!请统一使用GunData.save()保存枪械数据 + */ public static void saveTag(ItemStack stack, CompoundTag tag) { var data = stack.get(DataComponents.CUSTOM_DATA); var oldTag = data != null ? data.copyTag() : new CompoundTag();