优化NBT#CustomZoom

This commit is contained in:
17146 2024-12-24 16:15:52 +08:00
parent cb78664676
commit 6323be3dc6
12 changed files with 49 additions and 61 deletions

View file

@ -1160,7 +1160,7 @@ public class ClientEventHandler {
p = zoomPos; 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; double zoomFov = 1.25 + customZoom;

View file

@ -293,8 +293,8 @@ public class Trachelium extends GunItem implements GeoItem, AnimatedItem {
}; };
stack.getOrCreateTag().putBoolean("CanSwitchScope", scopeType == 2); stack.getOrCreateTag().putBoolean("CanSwitchScope", scopeType == 2);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
} }
@Override @Override

View file

@ -1,6 +1,7 @@
package com.atsuishio.superbwarfare.item.gun.rifle; package com.atsuishio.superbwarfare.item.gun.rifle;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.AK12ItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.AK12ItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems; 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.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.client.PoseTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -182,13 +182,11 @@ public class AK12Item extends GunItem implements GeoItem, AnimatedItem {
double customZoom = switch (scopeType) { double customZoom = switch (scopeType) {
case 0, 1 -> 0; case 0, 1 -> 0;
case 2 -> 2.15; case 2 -> 2.15;
default -> stack.getOrCreateTag().getDouble("CustomZoom"); default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0);
}; };
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); stack.getOrCreateTag().putInt("customMag", customMag);
} }

View file

@ -1,18 +1,18 @@
package com.atsuishio.superbwarfare.item.gun.rifle; package com.atsuishio.superbwarfare.item.gun.rifle;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.AK47ItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.AK47ItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler; 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.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.AnimatedItem; import com.atsuishio.superbwarfare.item.AnimatedItem;
import com.atsuishio.superbwarfare.item.gun.GunItem; 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.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -191,13 +191,11 @@ public class AK47Item extends GunItem implements GeoItem, AnimatedItem {
double customZoom = switch (scopeType) { double customZoom = switch (scopeType) {
case 0, 1 -> 0; case 0, 1 -> 0;
case 2 -> 2.75; case 2 -> 2.75;
default -> stack.getOrCreateTag().getDouble("CustomZoom"); default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0);
}; };
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); stack.getOrCreateTag().putInt("customMag", customMag);
} }

View file

@ -1,18 +1,18 @@
package com.atsuishio.superbwarfare.item.gun.rifle; package com.atsuishio.superbwarfare.item.gun.rifle;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.Hk416ItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.Hk416ItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler; 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.item.gun.GunItem;
import com.atsuishio.superbwarfare.network.ModVariables; import com.atsuishio.superbwarfare.network.ModVariables;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; 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.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -173,13 +173,11 @@ public class Hk416Item extends GunItem implements GeoItem, AnimatedItem {
double customZoom = switch (scopeType) { double customZoom = switch (scopeType) {
case 0, 1 -> 0; case 0, 1 -> 0;
case 2 -> 2.25; case 2 -> 2.25;
default -> stack.getOrCreateTag().getDouble("CustomZoom"); default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0);
}; };
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); stack.getOrCreateTag().putInt("customMag", customMag);
} }

View file

@ -1,18 +1,18 @@
package com.atsuishio.superbwarfare.item.gun.rifle; package com.atsuishio.superbwarfare.item.gun.rifle;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.M4ItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.M4ItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler; 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.item.gun.GunItem;
import com.atsuishio.superbwarfare.network.ModVariables; import com.atsuishio.superbwarfare.network.ModVariables;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper; import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool; 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.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -191,15 +191,12 @@ public class M4Item extends GunItem implements GeoItem, AnimatedItem {
double customZoom = switch (scopeType) { double customZoom = switch (scopeType) {
case 0, 1 -> 0; case 0, 1 -> 0;
case 2 -> stack.getOrCreateTag().getBoolean("ScopeAlt") ? 0 : 2.75; 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("CanSwitchScope", scopeType == 2);
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); stack.getOrCreateTag().putInt("customMag", customMag);
} }

View file

@ -176,13 +176,11 @@ public class Mk14Item extends GunItem implements GeoItem, AnimatedItem {
double customZoom = switch (scopeType) { double customZoom = switch (scopeType) {
case 0, 1 -> 0; case 0, 1 -> 0;
case 2 -> 2.25; case 2 -> 2.25;
default -> stack.getOrCreateTag().getDouble("CustomZoom"); default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0);
}; };
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); stack.getOrCreateTag().putInt("customMag", customMag);
} }

View file

@ -1,18 +1,18 @@
package com.atsuishio.superbwarfare.item.gun.rifle; package com.atsuishio.superbwarfare.item.gun.rifle;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.Qbz95ItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.Qbz95ItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler; 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.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.AnimatedItem; import com.atsuishio.superbwarfare.item.AnimatedItem;
import com.atsuishio.superbwarfare.item.gun.GunItem; 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.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -179,13 +179,11 @@ public class Qbz95Item extends GunItem implements GeoItem, AnimatedItem {
double customZoom = switch (scopeType) { double customZoom = switch (scopeType) {
case 0, 1 -> 0; case 0, 1 -> 0;
case 2 -> 2.15; case 2 -> 2.15;
default -> stack.getOrCreateTag().getDouble("CustomZoom"); default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0);
}; };
stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3); stack.getOrCreateTag().putBoolean("CanAdjustZoomFov", scopeType == 3);
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); stack.getOrCreateTag().putInt("customMag", customMag);
} }

View file

@ -1,18 +1,18 @@
package com.atsuishio.superbwarfare.item.gun.smg; package com.atsuishio.superbwarfare.item.gun.smg;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.VectorItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.VectorItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler; 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.ModItems;
import com.atsuishio.superbwarfare.init.ModSounds; import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.AnimatedItem; import com.atsuishio.superbwarfare.item.AnimatedItem;
import com.atsuishio.superbwarfare.item.gun.GunItem; 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.Minecraft;
import net.minecraft.client.model.HumanoidModel; import net.minecraft.client.model.HumanoidModel;
import net.minecraft.client.player.LocalPlayer; import net.minecraft.client.player.LocalPlayer;
@ -153,11 +153,10 @@ public class VectorItem extends GunItem implements GeoItem, AnimatedItem {
double customZoom = switch (scopeType) { double customZoom = switch (scopeType) {
case 0, 1 -> 0; case 0, 1 -> 0;
case 2 -> 0.75; case 2 -> 0.75;
default -> stack.getOrCreateTag().getDouble("CustomZoom"); default -> GunsTool.getGunDoubleTag(stack, "CustomZoom", 0);
}; };
GunsTool.setGunDoubleTag(stack, "CustomZoom", customZoom);
stack.getOrCreateTag().putDouble("CustomZoom", customZoom);
stack.getOrCreateTag().putInt("customMag", customMag); stack.getOrCreateTag().putInt("customMag", customMag);
} }

View file

@ -6,6 +6,7 @@ import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModMobEffects; import com.atsuishio.superbwarfare.init.ModMobEffects;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.tools.GunsTool;
import net.minecraft.client.CameraType; import net.minecraft.client.CameraType;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.MouseHandler; import net.minecraft.client.MouseHandler;
@ -60,7 +61,7 @@ public class MouseHandlerMixin {
return original; 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"); float customSens = (float) stack.getOrCreateTag().getInt("sensitivity");
if (!player.getMainHandItem().isEmpty() && mc.options.getCameraType() == CameraType.FIRST_PERSON) { if (!player.getMainHandItem().isEmpty() && mc.options.getCameraType() == CameraType.FIRST_PERSON) {

View file

@ -41,7 +41,6 @@ public class AdjustZoomFovMessage {
if (!stack.is(ModTags.Items.GUN)) { if (!stack.is(ModTags.Items.GUN)) {
return; return;
} }
var tag = stack.getOrCreateTag();
if (stack.is(ModItems.MINIGUN.get())) { if (stack.is(ModItems.MINIGUN.get())) {
double minRpm = 300; double minRpm = 300;
@ -67,8 +66,10 @@ public class AdjustZoomFovMessage {
} else { } else {
double minZoom = GunsTool.getGunDoubleTag(stack, "MinZoom", 0) - 1.25; double minZoom = GunsTool.getGunDoubleTag(stack, "MinZoom", 0) - 1.25;
double maxZoom = GunsTool.getGunDoubleTag(stack, "MaxZoom", 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)); double customZoom = GunsTool.getGunDoubleTag(stack, "CustomZoom", 0);
if (tag.getDouble("CustomZoom") > minZoom && tag.getDouble("CustomZoom") < maxZoom) { 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); SoundTool.playLocalSound(player, ModSounds.ADJUST_FOV.get(), 1f, 0.7f);
} }
} }

View file

@ -56,7 +56,7 @@ public class GunsTool {
// TODO 临时使用移植完毕后删除 // TODO 临时使用移植完毕后删除
private static final Set<String> STRING_SET = Set.of("EmptyReloadTime", "FireMode", "Weight", "SoundRadius", "BurstSize", "ProjectileAmount", private static final Set<String> STRING_SET = Set.of("EmptyReloadTime", "FireMode", "Weight", "SoundRadius", "BurstSize", "ProjectileAmount",
"Spread", "NormalReloadTime", "Headshot", "Semi", "Burst", "Auto", "RecoilX", "RecoilY", "Velocity", "Damage", "BypassesArmor", "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) { public static void initGun(Level level, ItemStack stack, String location) {
if (level.getServer() == null) return; if (level.getServer() == null) return;