From 6323be3dc64447c9906a430cb64045d638be9dff Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Tue, 24 Dec 2024 16:15:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96NBT#CustomZoom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/event/ClientEventHandler.java | 2 +- .../item/gun/handgun/Trachelium.java | 2 +- .../superbwarfare/item/gun/rifle/AK12Item.java | 8 +++----- .../superbwarfare/item/gun/rifle/AK47Item.java | 16 +++++++--------- .../superbwarfare/item/gun/rifle/Hk416Item.java | 16 +++++++--------- .../superbwarfare/item/gun/rifle/M4Item.java | 17 +++++++---------- .../superbwarfare/item/gun/rifle/Mk14Item.java | 6 ++---- .../superbwarfare/item/gun/rifle/Qbz95Item.java | 16 +++++++--------- .../superbwarfare/item/gun/smg/VectorItem.java | 15 +++++++-------- .../superbwarfare/mixins/MouseHandlerMixin.java | 3 ++- .../network/message/AdjustZoomFovMessage.java | 7 ++++--- .../atsuishio/superbwarfare/tools/GunsTool.java | 2 +- 12 files changed, 49 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index dfc4dec17..925d8d867 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -1160,7 +1160,7 @@ public class ClientEventHandler { p = zoomPos; } - customZoom = Mth.lerp(0.6 * times, customZoom, stack.getOrCreateTag().getDouble("CustomZoom")); + customZoom = Mth.lerp(0.6 * times, customZoom, GunsTool.getGunDoubleTag(stack, "CustomZoom", 0)); double zoomFov = 1.25 + customZoom; diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Trachelium.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Trachelium.java index 24d9256a6..f7cac4ad1 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Trachelium.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/handgun/Trachelium.java @@ -293,8 +293,8 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem { }; stack.getOrCreateTag().putBoolean("CanSwitchScope", scopeType == 2); - stack.getOrCreateTag().putDouble("CustomZoom", customZoom); + GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); } @Override diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java index d7a990a1d..363c3f3a3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK12Item.java @@ -1,6 +1,7 @@ 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.AK12ItemRenderer; import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModItems; @@ -12,7 +13,6 @@ import com.atsuishio.superbwarfare.network.ModVariables; 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 net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; @@ -182,13 +182,11 @@ public class AK12Item extends GunItem implements GeoItem, AnimatedItem { double customZoom = switch (scopeType) { case 0, 1 -> 0; case 2 -> 2.15; - default -> stack.getOrCreateTag().getDouble("CustomZoom"); + default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); }; stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); - - stack.getOrCreateTag().putDouble("CustomZoom", customZoom); - + GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); stack.getOrCreateTag().putInt("customMag", customMag); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java index 787c60a22..c049fd614 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/AK47Item.java @@ -1,18 +1,18 @@ 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.AK47ItemRenderer; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.network.ModVariables; -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.network.ModVariables; +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; @@ -191,13 +191,11 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem { double customZoom = switch (scopeType) { case 0, 1 -> 0; case 2 -> 2.75; - default -> stack.getOrCreateTag().getDouble("CustomZoom"); + default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); }; stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); - - stack.getOrCreateTag().putDouble("CustomZoom", customZoom); - + GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); stack.getOrCreateTag().putInt("customMag", customMag); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java index 7ad2326e3..61020edf3 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Hk416Item.java @@ -1,18 +1,18 @@ 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.Hk416ItemRenderer; import com.atsuishio.superbwarfare.event.ClientEventHandler; +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.network.ModVariables; 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 net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; @@ -173,13 +173,11 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem { double customZoom = switch (scopeType) { case 0, 1 -> 0; case 2 -> 2.25; - default -> stack.getOrCreateTag().getDouble("CustomZoom"); + default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); }; stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); - - stack.getOrCreateTag().putDouble("CustomZoom", customZoom); - + GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); stack.getOrCreateTag().putInt("customMag", customMag); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java index 2cb570739..ae059ce7d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/M4Item.java @@ -1,18 +1,18 @@ 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.M4ItemRenderer; import com.atsuishio.superbwarfare.event.ClientEventHandler; +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.network.ModVariables; 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 net.minecraft.client.Minecraft; import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.player.LocalPlayer; @@ -191,15 +191,12 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem { double customZoom = switch (scopeType) { case 0, 1 -> 0; case 2 -> stack.getOrCreateTag().getBoolean("ScopeAlt") ? 0 : 2.75; - default -> stack.getOrCreateTag().getDouble("CustomZoom"); + default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); }; stack.getOrCreateTag().putBoolean("CanSwitchScope", scopeType == 2); - stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); - - stack.getOrCreateTag().putDouble("CustomZoom", customZoom); - + GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); stack.getOrCreateTag().putInt("customMag", customMag); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java index 23b3abf31..33e6db450 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Mk14Item.java @@ -176,13 +176,11 @@ public class Mk14Item extends GunItem implements GeoItem, AnimatedItem { double customZoom = switch (scopeType) { case 0, 1 -> 0; case 2 -> 2.25; - default -> stack.getOrCreateTag().getDouble("CustomZoom"); + default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); }; stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); - - stack.getOrCreateTag().putDouble("CustomZoom", customZoom); - + GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); stack.getOrCreateTag().putInt("customMag", customMag); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java index b13f90f68..f1ccd57be 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/rifle/Qbz95Item.java @@ -1,18 +1,18 @@ 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.Qbz95ItemRenderer; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.network.ModVariables; -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.network.ModVariables; +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; @@ -179,13 +179,11 @@ public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem { double customZoom = switch (scopeType) { case 0, 1 -> 0; case 2 -> 2.15; - default -> stack.getOrCreateTag().getDouble("CustomZoom"); + default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); }; stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); - - stack.getOrCreateTag().putDouble("CustomZoom", customZoom); - + GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); stack.getOrCreateTag().putInt("customMag", customMag); } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java index 6be5849be..fe3322e2d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/gun/smg/VectorItem.java @@ -1,18 +1,18 @@ package com.atsuishio.superbwarfare.item.gun.smg; import com.atsuishio.superbwarfare.ModUtils; +import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.client.renderer.item.VectorItemRenderer; import com.atsuishio.superbwarfare.event.ClientEventHandler; -import com.atsuishio.superbwarfare.network.ModVariables; -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.network.ModVariables; +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; @@ -153,11 +153,10 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem { double customZoom = switch (scopeType) { case 0, 1 -> 0; case 2 -> 0.75; - default -> stack.getOrCreateTag().getDouble("CustomZoom"); + default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); }; - - stack.getOrCreateTag().putDouble("CustomZoom", customZoom); + GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom); stack.getOrCreateTag().putInt("customMag", customMag); } diff --git a/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java b/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java index 6b6c8d78e..14ae4a2e2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java +++ b/src/main/java/com/atsuishio/superbwarfare/mixins/MouseHandlerMixin.java @@ -6,6 +6,7 @@ import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModMobEffects; import com.atsuishio.superbwarfare.init.ModTags; +import com.atsuishio.superbwarfare.tools.GunsTool; import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; import net.minecraft.client.MouseHandler; @@ -60,7 +61,7 @@ public class MouseHandlerMixin { return original; } - double zoom = 1.25 + stack.getOrCreateTag().getDouble("CustomZoom"); + double zoom = 1.25 + GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); float customSens = (float) stack.getOrCreateTag().getInt("sensitivity"); if (!player.getMainHandItem().isEmpty() && mc.options.getCameraType() == CameraType.FIRST_PERSON) { diff --git a/src/main/java/com/atsuishio/superbwarfare/network/message/AdjustZoomFovMessage.java b/src/main/java/com/atsuishio/superbwarfare/network/message/AdjustZoomFovMessage.java index 570ad7a9f..9c748528a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/network/message/AdjustZoomFovMessage.java +++ b/src/main/java/com/atsuishio/superbwarfare/network/message/AdjustZoomFovMessage.java @@ -41,7 +41,6 @@ public class AdjustZoomFovMessage { if (!stack.is(ModTags.Items.GUN)) { return; } - var tag = stack.getOrCreateTag(); if (stack.is(ModItems.MINIGUN.get())) { double minRpm = 300; @@ -67,8 +66,10 @@ public class AdjustZoomFovMessage { } else { double minZoom = GunsTool.getGunDoubleTag(stack, "MinZoom", 0) - 1.25; double maxZoom = GunsTool.getGunDoubleTag(stack, "MaxZoom", 0) - 1.25; - tag.putDouble("CustomZoom", Mth.clamp(tag.getDouble("CustomZoom") + 0.5 * message.scroll, minZoom, maxZoom)); - if (tag.getDouble("CustomZoom") > minZoom && tag.getDouble("CustomZoom") < maxZoom) { + double customZoom = GunsTool.getGunDoubleTag(stack, "CustomZoom", 0); + GunsTool.setGunDoubleTag(stack, "CustomZoom", Mth.clamp(customZoom + 0.5 * message.scroll, minZoom, maxZoom)); + if (GunsTool.getGunDoubleTag(stack, "CustomZoom", 0) > minZoom && + GunsTool.getGunDoubleTag(stack, "CustomZoom", 0) < maxZoom) { SoundTool.playLocalSound(player, ModSounds.ADJUST_FOV.get(), 1f, 0.7f); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java index 04d218348..02d7db98d 100644 --- a/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java +++ b/src/main/java/com/atsuishio/superbwarfare/tools/GunsTool.java @@ -56,7 +56,7 @@ public class GunsTool { // TODO 临时使用,移植完毕后删除 private static final Set STRING_SET = Set.of("EmptyReloadTime", "FireMode", "Weight", "SoundRadius", "BurstSize", "ProjectileAmount", "Spread", "NormalReloadTime", "Headshot", "Semi", "Burst", "Auto", "RecoilX", "RecoilY", "Velocity", "Damage", "BypassesArmor", - "RPM", "Magazine", "MinZoom", "MaxZoom"); + "RPM", "Magazine", "MinZoom", "MaxZoom", "CustomZoom"); public static void initGun(Level level, ItemStack stack, String location) { if (level.getServer() == null) return;