优化NBT#Ammo

This commit is contained in:
17146 2024-12-24 17:43:08 +08:00
parent c442d25d1d
commit 9cb33414c4
19 changed files with 83 additions and 83 deletions

View file

@ -318,7 +318,7 @@ public class ClickHandler {
player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1); player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1);
} }
if (!stack.is(ModTags.Items.CANNOT_RELOAD) && stack.getOrCreateTag().getInt("ammo") <= 0) { if (!stack.is(ModTags.Items.CANNOT_RELOAD) && GunsTool.getGunIntTag(stack, "Ammo", 0) <= 0) {
if (ReloadConfig.LEFT_CLICK_RELOAD.get()) { if (ReloadConfig.LEFT_CLICK_RELOAD.get()) {
ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0)); ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0));
} }

View file

@ -43,7 +43,7 @@ public class K98ItemModel extends GeoModel<K98Item> {
if (!stack.is(ModTags.Items.GUN)) return; if (!stack.is(ModTags.Items.GUN)) return;
if (stack.getOrCreateTag().getDouble("prepare") > 11 && stack.getOrCreateTag().getInt("ammo") == 1) { if (stack.getOrCreateTag().getDouble("prepare") > 11 && GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) {
clip.setScaleX(0); clip.setScaleX(0);
clip.setScaleY(0); clip.setScaleY(0);
clip.setScaleZ(0); clip.setScaleZ(0);

View file

@ -1,12 +1,12 @@
package com.atsuishio.superbwarfare.client.model.item; package com.atsuishio.superbwarfare.client.model.item;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.event.PlayerEventHandler;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.client.AnimationHelper; import com.atsuishio.superbwarfare.client.AnimationHelper;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.event.PlayerEventHandler;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.gun.machinegun.M60Item; import com.atsuishio.superbwarfare.item.gun.machinegun.M60Item;
import com.atsuishio.superbwarfare.tools.GunsTool;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
@ -56,31 +56,33 @@ public class M60ItemModel extends GeoModel<M60Item> {
r.setRotX(1.5f); r.setRotX(1.5f);
} }
if (stack.getOrCreateTag().getInt("ammo") < 5 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0);
if (ammo < 5 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b5.setScaleX(0); b5.setScaleX(0);
b5.setScaleY(0); b5.setScaleY(0);
b5.setScaleZ(0); b5.setScaleZ(0);
} }
if (stack.getOrCreateTag().getInt("ammo") < 4 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { if (ammo < 4 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b4.setScaleX(0); b4.setScaleX(0);
b4.setScaleY(0); b4.setScaleY(0);
b4.setScaleZ(0); b4.setScaleZ(0);
} }
if (stack.getOrCreateTag().getInt("ammo") < 3 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { if (ammo < 3 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b3.setScaleX(0); b3.setScaleX(0);
b3.setScaleY(0); b3.setScaleY(0);
b3.setScaleZ(0); b3.setScaleZ(0);
} }
if (stack.getOrCreateTag().getInt("ammo") < 2 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { if (ammo < 2 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b2.setScaleX(0); b2.setScaleX(0);
b2.setScaleY(0); b2.setScaleY(0);
b2.setScaleZ(0); b2.setScaleZ(0);
} }
if (stack.getOrCreateTag().getInt("ammo") < 1 && stack.getOrCreateTag().getBoolean("HideBulletChain")) { if (ammo < 1 && stack.getOrCreateTag().getBoolean("HideBulletChain")) {
b1.setScaleX(0); b1.setScaleX(0);
b1.setScaleY(0); b1.setScaleY(0);
b1.setScaleZ(0); b1.setScaleZ(0);

View file

@ -100,8 +100,8 @@ public class SentinelItemModel extends GeoModel<SentinelItem> {
root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY)); root.setRotY((float) (0.2f * movePosX + Mth.DEG_TO_RAD * 300 * ClientEventHandler.drawTime + Mth.DEG_TO_RAD * turnRotY));
root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ)); root.setRotZ((float) (0.2f * movePosX + moveRotZ + Mth.DEG_TO_RAD * 90 * ClientEventHandler.drawTime + 2.7f * mph + Mth.DEG_TO_RAD * turnRotZ));
if ((stack.getOrCreateTag().getDouble("ammo") <= 5)) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) <= 5) {
ammo.setScaleX((float) (stack.getOrCreateTag().getDouble("ammo") / 5)); ammo.setScaleX((float) GunsTool.getGunIntTag(stack, "Ammo", 0) / 5);
} }
CoreGeoBone camera = getAnimationProcessor().getBone("camera"); CoreGeoBone camera = getAnimationProcessor().getBone("camera");

View file

@ -228,7 +228,7 @@ public class AmmoBarOverlay {
return stack.getOrCreateTag().getInt("max_ammo"); return stack.getOrCreateTag().getInt("max_ammo");
} }
return stack.getOrCreateTag().getInt("ammo"); return GunsTool.getGunIntTag(stack, "Ammo", 0);
} }
private static String getPlayerAmmoCount(Player player) { private static String getPlayerAmmoCount(Player player) {

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.network.ModVariables; import com.atsuishio.superbwarfare.network.ModVariables;
import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.EntityFindUtil;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.tools.HudUtil; import com.atsuishio.superbwarfare.tools.HudUtil;
import com.atsuishio.superbwarfare.tools.SeekTool; import com.atsuishio.superbwarfare.tools.SeekTool;
import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager;
@ -76,7 +77,7 @@ public class JavelinHudOverlay {
float j1 = l + j; float j1 = l + j;
preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/javelin/javelin_hud.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/javelin/javelin_hud.png"), k, l, 0, 0.0F, i, j, i, j);
preciseBlit(event.getGuiGraphics(), ModUtils.loc(stack.getOrCreateTag().getBoolean("TopMode") ? "textures/screens/javelin/top.png" : "textures/screens/javelin/dir.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), ModUtils.loc(stack.getOrCreateTag().getBoolean("TopMode") ? "textures/screens/javelin/top.png" : "textures/screens/javelin/dir.png"), k, l, 0, 0.0F, i, j, i, j);
preciseBlit(event.getGuiGraphics(), ModUtils.loc(stack.getOrCreateTag().getInt("ammo") > 0 ? "textures/screens/javelin/missile_green.png" : "textures/screens/javelin/missile_red.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), ModUtils.loc(GunsTool.getGunIntTag(stack, "Ammo", 0) > 0 ? "textures/screens/javelin/missile_green.png" : "textures/screens/javelin/missile_red.png"), k, l, 0, 0.0F, i, j, i, j);
if (stack.getOrCreateTag().getInt("SeekTime") > 1 && stack.getOrCreateTag().getInt("SeekTime") < 20) { if (stack.getOrCreateTag().getInt("SeekTime") > 1 && stack.getOrCreateTag().getInt("SeekTime") < 20) {
preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/javelin/seek.png"), k, l, 0, 0.0F, i, j, i, j); preciseBlit(event.getGuiGraphics(), ModUtils.loc("textures/screens/javelin/seek.png"), k, l, 0, 0.0F, i, j, i, j);
} }

View file

@ -135,7 +135,7 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
compound.putBoolean("Linked", this.entityData.get(LINKED)); compound.putBoolean("Linked", this.entityData.get(LINKED));
compound.putString("Controller", this.entityData.get(CONTROLLER)); compound.putString("Controller", this.entityData.get(CONTROLLER));
compound.putInt("ammo", this.entityData.get(AMMO)); compound.putInt("Ammo", this.entityData.get(AMMO));
compound.putBoolean("Kamikaze", this.entityData.get(KAMIKAZE)); compound.putBoolean("Kamikaze", this.entityData.get(KAMIKAZE));
} }
@ -147,8 +147,8 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
this.entityData.set(LINKED, compound.getBoolean("Linked")); this.entityData.set(LINKED, compound.getBoolean("Linked"));
if (compound.contains("Controller")) if (compound.contains("Controller"))
this.entityData.set(CONTROLLER, compound.getString("Controller")); this.entityData.set(CONTROLLER, compound.getString("Controller"));
if (compound.contains("ammo")) if (compound.contains("Ammo"))
this.entityData.set(AMMO, compound.getInt("ammo")); this.entityData.set(AMMO, compound.getInt("Ammo"));
if (compound.contains("Kamikaze")) if (compound.contains("Kamikaze"))
this.entityData.set(KAMIKAZE, compound.getBoolean("Kamikaze")); this.entityData.set(KAMIKAZE, compound.getBoolean("Kamikaze"));
} }
@ -170,7 +170,6 @@ public class DroneEntity extends LivingEntity implements GeoEntity {
} }
@Override @Override
public void baseTick() { public void baseTick() {
super.baseTick(); super.baseTick();

View file

@ -297,7 +297,7 @@ public class ClientEventHandler {
&& (!(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && (!(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
&& !stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("reloading")
&& !stack.getOrCreateTag().getBoolean("charging") && !stack.getOrCreateTag().getBoolean("charging")
&& stack.getOrCreateTag().getInt("ammo") > 0 && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0
&& !player.getCooldowns().isOnCooldown(stack.getItem()) && !player.getCooldowns().isOnCooldown(stack.getItem())
&& !GunsTool.getGunBooleanTag(stack, "NeedBoltAction", false) && !GunsTool.getGunBooleanTag(stack, "NeedBoltAction", false)
&& revolverPre() && revolverPre()
@ -377,14 +377,14 @@ public class ClientEventHandler {
public static void shootClient(Player player) { public static void shootClient(Player player) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.is(ModTags.Items.NORMAL_GUN)) { if (stack.is(ModTags.Items.NORMAL_GUN)) {
if (stack.getOrCreateTag().getInt("ammo") > 0) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) {
int mode = GunsTool.getGunIntTag(stack, "FireMode"); int mode = GunsTool.getGunIntTag(stack, "FireMode");
if (mode != 2) { if (mode != 2) {
holdFire = false; holdFire = false;
} }
if (mode == 1) { if (mode == 1) {
if (stack.getOrCreateTag().getInt("ammo") == 1) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) {
burstFireSize = 1; burstFireSize = 1;
} }
if (burstFireSize == 1) { if (burstFireSize == 1) {

View file

@ -616,18 +616,18 @@ public class LivingEventHandler {
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"); int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag");
int ammo = stack.getOrCreateTag().getInt("ammo"); int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0);
int ammoReload = (int) Math.min(mag, mag * rate); int ammoReload = (int) Math.min(mag, mag * rate);
int ammoNeed = Math.min(mag - ammo, ammoReload); int ammoNeed = Math.min(mag - ammo, ammoReload);
if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) { if (stack.is(ModTags.Items.USE_RIFLE_AMMO)) {
int ammoFinal = Math.min(capability.rifleAmmo, ammoNeed); int ammoFinal = Math.min(capability.rifleAmmo, ammoNeed);
capability.rifleAmmo -= ammoFinal; capability.rifleAmmo -= ammoFinal;
stack.getOrCreateTag().putInt("ammo", Math.min(mag, ammo + ammoFinal)); GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, ammo + ammoFinal));
} else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) { } else if (stack.is(ModTags.Items.USE_HANDGUN_AMMO)) {
int ammoFinal = Math.min(capability.handgunAmmo, ammoNeed); int ammoFinal = Math.min(capability.handgunAmmo, ammoNeed);
capability.handgunAmmo -= ammoFinal; capability.handgunAmmo -= ammoFinal;
stack.getOrCreateTag().putInt("ammo", Math.min(mag, ammo + ammoFinal)); GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, ammo + ammoFinal));
} }
capability.syncPlayerVariables(player); capability.syncPlayerVariables(player);
} }

View file

@ -235,10 +235,7 @@ public class PlayerEventHandler {
private static void handleSpecialWeaponAmmo(Player player) { private static void handleSpecialWeaponAmmo(Player player) {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (stack.getItem() == ModItems.RPG.get() && stack.getOrCreateTag().getInt("ammo") == 1) { if ((stack.is(ModItems.RPG.get()) || stack.is(ModItems.BOCEK.get())) && GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) {
stack.getOrCreateTag().putDouble("empty", 0);
}
if (stack.getItem() == ModItems.BOCEK.get() && stack.getOrCreateTag().getInt("ammo") == 1) {
stack.getOrCreateTag().putDouble("empty", 0); stack.getOrCreateTag().putDouble("empty", 0);
} }
} }

View file

@ -68,10 +68,10 @@ public abstract class GunItem extends Item {
handleGunPerks(stack); handleGunPerks(stack);
handleGunAttachment(stack); handleGunAttachment(stack);
if ((stack.is(ModTags.Items.EXTRA_ONE_AMMO) && stack.getOrCreateTag().getInt("ammo") > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1) if ((stack.is(ModTags.Items.EXTRA_ONE_AMMO) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + 1)
|| (!stack.is(ModTags.Items.EXTRA_ONE_AMMO) && stack.getOrCreateTag().getInt("ammo") > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")) || (!stack.is(ModTags.Items.EXTRA_ONE_AMMO) && GunsTool.getGunIntTag(stack, "Ammo", 0) > GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"))
) { ) {
int count = stack.getOrCreateTag().getInt("ammo") - GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") - (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0); int count = GunsTool.getGunIntTag(stack, "Ammo", 0) - GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") - (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0);
entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) { if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO)) {
@ -86,7 +86,7 @@ public abstract class GunItem extends Item {
capability.syncPlayerVariables(entity); capability.syncPlayerVariables(entity);
}); });
stack.getOrCreateTag().putInt("ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0)); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag") + (stack.is(ModTags.Items.EXTRA_ONE_AMMO) ? 1 : 0));
} }
} }
} }
@ -166,7 +166,7 @@ public abstract class GunItem extends Item {
GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 0); GunsTool.setPerkIntTag(stack, "FourthTimesCharmCount", 0);
int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag"); int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag");
stack.getOrCreateTag().putInt("ammo", Math.min(mag, stack.getOrCreateTag().getInt("ammo") + 2)); GunsTool.setGunIntTag(stack, "Ammo", Math.min(mag, GunsTool.getGunIntTag(stack, "Ammo", 0) + 2));
} }
} }
} }

View file

@ -139,7 +139,7 @@ public class RpgItem extends GunItem implements GeoItem, AnimatedItem {
if (itemStack.getOrCreateTag().getBoolean("draw")) { if (itemStack.getOrCreateTag().getBoolean("draw")) {
itemStack.getOrCreateTag().putBoolean("draw", false); itemStack.getOrCreateTag().putBoolean("draw", false);
if (itemStack.getOrCreateTag().getInt("ammo") == 0) { if (GunsTool.getGunIntTag(itemStack, "Ammo", 0) == 0) {
itemStack.getOrCreateTag().putDouble("empty", 1); itemStack.getOrCreateTag().putDouble("empty", 1);
} }
} }

View file

@ -1,18 +1,18 @@
package com.atsuishio.superbwarfare.item.gun.machinegun; package com.atsuishio.superbwarfare.item.gun.machinegun;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.M60ItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.M60ItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.item.gun.GunItem;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModPerks; import com.atsuishio.superbwarfare.init.ModPerks;
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.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;
@ -138,7 +138,7 @@ public class M60Item extends GunItem implements GeoItem, AnimatedItem {
if (itemstack.getOrCreateTag().getBoolean("draw")) { if (itemstack.getOrCreateTag().getBoolean("draw")) {
itemstack.getOrCreateTag().putBoolean("draw", false); itemstack.getOrCreateTag().putBoolean("draw", false);
if (itemstack.getOrCreateTag().getInt("ammo") <= 5) { if (GunsTool.getGunIntTag(itemstack, "Ammo", 0) <= 5) {
itemstack.getOrCreateTag().putBoolean("HideBulletChain", true); itemstack.getOrCreateTag().putBoolean("HideBulletChain", true);
} }
} }

View file

@ -1,17 +1,17 @@
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.SksItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.SksItemRenderer;
import com.atsuishio.superbwarfare.event.ClientEventHandler; import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.perk.PerkHelper;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.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.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;
@ -123,7 +123,7 @@ public class SksItem extends GunItem implements GeoItem, AnimatedItem {
if (itemstack.getOrCreateTag().getBoolean("draw")) { if (itemstack.getOrCreateTag().getBoolean("draw")) {
itemstack.getOrCreateTag().putBoolean("draw", false); itemstack.getOrCreateTag().putBoolean("draw", false);
if (itemstack.getOrCreateTag().getInt("ammo") == 0) { if (GunsTool.getGunIntTag(itemstack, "Ammo", 0) == 0) {
itemstack.getOrCreateTag().putBoolean("HoldOpen", true); itemstack.getOrCreateTag().putBoolean("HoldOpen", true);
} }
} }

View file

@ -1,6 +1,5 @@
package com.atsuishio.superbwarfare.item.gun.sniper; package com.atsuishio.superbwarfare.item.gun.sniper;
import com.atsuishio.superbwarfare.tools.GunsTool;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.client.PoseTool; import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.renderer.item.MosinNagantItemRenderer; import com.atsuishio.superbwarfare.client.renderer.item.MosinNagantItemRenderer;
@ -12,6 +11,7 @@ import com.atsuishio.superbwarfare.item.AnimatedItem;
import com.atsuishio.superbwarfare.item.gun.GunItem; import com.atsuishio.superbwarfare.item.gun.GunItem;
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 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;
@ -77,11 +77,11 @@ public class MosinNagantItem extends GunItem implements GeoItem, AnimatedItem {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.shift"));
} }
if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getInt("ammo") == 0) { if (stack.getOrCreateTag().getInt("reload_stage") == 1 && GunsTool.getGunIntTag(stack, "Ammo", 0) == 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare_empty"));
} }
if (stack.getOrCreateTag().getInt("reload_stage") == 1 && stack.getOrCreateTag().getInt("ammo") > 0) { if (stack.getOrCreateTag().getInt("reload_stage") == 1 && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) {
return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare")); return event.setAndContinue(RawAnimation.begin().thenPlay("animation.mosin.prepare"));
} }

View file

@ -106,27 +106,28 @@ public class FireMessage {
} }
private static void handlePlayerShoot(Player player) { private static void handlePlayerShoot(Player player) {
var handItem = player.getMainHandItem(); var stack = player.getMainHandItem();
if (!handItem.is(ModTags.Items.GUN)) { if (!stack.is(ModTags.Items.GUN)) {
return; return;
} }
var tag = handItem.getOrCreateTag(); var tag = stack.getOrCreateTag();
if (handItem.getItem() == ModItems.TASER.get()) { if (stack.getItem() == ModItems.TASER.get()) {
handleTaserFire(player); handleTaserFire(player);
} }
if (handItem.getItem() == ModItems.M_79.get()) { if (stack.getItem() == ModItems.M_79.get()) {
handleM79Fire(player); handleM79Fire(player);
} }
if (handItem.getItem() == ModItems.RPG.get()) { if (stack.getItem() == ModItems.RPG.get()) {
handleRpgFire(player); handleRpgFire(player);
} }
if (handItem.getItem() == ModItems.JAVELIN.get() && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom && tag.getInt("ammo") > 0) { if (stack.getItem() == ModItems.JAVELIN.get() && player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null)
.orElse(new ModVariables.PlayerVariables()).zoom && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) {
Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8); Entity seekingEntity = SeekTool.seekEntity(player, player.level(), 512, 8);
if (seekingEntity != null) { if (seekingEntity != null) {
tag.putString("TargetEntity", seekingEntity.getStringUUID()); tag.putString("TargetEntity", seekingEntity.getStringUUID());
@ -135,11 +136,11 @@ public class FireMessage {
} }
} }
if (tag.getDouble("prepare") == 0 && tag.getBoolean("reloading") && tag.getInt("ammo") > 0) { if (tag.getDouble("prepare") == 0 && tag.getBoolean("reloading") && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) {
tag.putDouble("force_stop", 1); tag.putDouble("force_stop", 1);
} }
if (handItem.getItem() == ModItems.BOCEK.get()) { if (stack.getItem() == ModItems.BOCEK.get()) {
player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> {
capability.bowPullHold = true; capability.bowPullHold = true;
capability.syncPlayerVariables(player); capability.syncPlayerVariables(player);
@ -148,7 +149,8 @@ public class FireMessage {
} }
private static void handleGunBolt(Player player, ItemStack stack) { private static void handleGunBolt(Player player, ItemStack stack) {
if (GunsTool.getGunIntTag(stack, "BoltActionTime", 0) > 0 && stack.getOrCreateTag().getInt("ammo") > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0) && stack.getOrCreateTag().getInt("bolt_action_anim") == 0 if (GunsTool.getGunIntTag(stack, "BoltActionTime", 0) > 0 && GunsTool.getGunIntTag(stack, "Ammo", 0) > (stack.is(ModTags.Items.REVOLVER) ? -1 : 0)
&& stack.getOrCreateTag().getInt("bolt_action_anim") == 0
&& !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading"))
&& !stack.getOrCreateTag().getBoolean("reloading") && !stack.getOrCreateTag().getBoolean("reloading")
&& !stack.getOrCreateTag().getBoolean("charging")) { && !stack.getOrCreateTag().getBoolean("charging")) {
@ -318,9 +320,7 @@ public class FireMessage {
iEnergyStorage -> flag.set(iEnergyStorage.getEnergyStored() >= 400 + 100 * perkLevel) iEnergyStorage -> flag.set(iEnergyStorage.getEnergyStored() >= 400 + 100 * perkLevel)
); );
if (!player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0 if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0 && flag.get()) {
&& flag.get()) {
player.getCooldowns().addCooldown(stack.getItem(), 5); player.getCooldowns().addCooldown(stack.getItem(), 5);
if (player instanceof ServerPlayer serverPlayer) { if (player instanceof ServerPlayer serverPlayer) {
@ -345,7 +345,7 @@ public class FireMessage {
level.addFreshEntity(taserBulletProjectile); level.addFreshEntity(taserBulletProjectile);
} }
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1);
stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( stack.getCapability(ForgeCapabilities.ENERGY).ifPresent(
energy -> energy.extractEnergy(400 + 100 * perkLevel, false) energy -> energy.extractEnergy(400 + 100 * perkLevel, false)
@ -364,7 +364,7 @@ public class FireMessage {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
if (!stack.getOrCreateTag().getBoolean("reloading")) { if (!stack.getOrCreateTag().getBoolean("reloading")) {
if (!player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getInt("ammo") > 0) { if (!player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) {
boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom; boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom;
double spread = GunsTool.getGunDoubleTag(stack, "Spread"); double spread = GunsTool.getGunDoubleTag(stack, "Spread");
@ -402,7 +402,7 @@ public class FireMessage {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.M_79_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.M_79_VERYFAR.get(), SoundSource.PLAYERS, 10, 1);
} }
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1);
if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) {
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10)); ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10));
@ -418,7 +418,7 @@ public class FireMessage {
ItemStack stack = player.getMainHandItem(); ItemStack stack = player.getMainHandItem();
CompoundTag tag = stack.getOrCreateTag(); CompoundTag tag = stack.getOrCreateTag();
if (!tag.getBoolean("reloading") && !player.getCooldowns().isOnCooldown(stack.getItem()) && tag.getInt("ammo") > 0) { if (!tag.getBoolean("reloading") && !player.getCooldowns().isOnCooldown(stack.getItem()) && GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) {
boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom; boolean zoom = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).zoom;
double spread = GunsTool.getGunDoubleTag(stack, "Spread"); double spread = GunsTool.getGunDoubleTag(stack, "Spread");
@ -447,7 +447,7 @@ public class FireMessage {
30, 0.4, 0.4, 0.4, 0.005, true); 30, 0.4, 0.4, 0.4, 0.005, true);
} }
if (tag.getInt("ammo") == 1) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) {
tag.putBoolean("empty", true); tag.putBoolean("empty", true);
tag.putBoolean("close_hammer", true); tag.putBoolean("close_hammer", true);
} }
@ -461,7 +461,7 @@ public class FireMessage {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.RPG_VERYFAR.get(), SoundSource.PLAYERS, 10, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.RPG_VERYFAR.get(), SoundSource.PLAYERS, 10, 1);
} }
tag.putInt("ammo", tag.getInt("ammo") - 1); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1);
if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) {
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10)); ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10));
@ -527,7 +527,7 @@ public class FireMessage {
serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.JAVELIN_FAR.get(), SoundSource.PLAYERS, 10, 1); serverPlayer.level().playSound(null, serverPlayer.getOnPos(), ModSounds.JAVELIN_FAR.get(), SoundSource.PLAYERS, 10, 1);
} }
tag.putInt("ammo", tag.getInt("ammo") - 1); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1);
if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) { if (player.level() instanceof ServerLevel && player instanceof ServerPlayer serverPlayer) {
ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10)); ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> serverPlayer), new ShootClientMessage(10));

View file

@ -66,7 +66,7 @@ public class ReloadMessage {
boolean canSingleReload = GunsTool.getGunIntTag(stack, "IterativeTime", 0) != 0; boolean canSingleReload = GunsTool.getGunIntTag(stack, "IterativeTime", 0) != 0;
boolean canReload = (GunsTool.getGunIntTag(stack, "NormalReloadTime") != 0 || GunsTool.getGunIntTag(stack, "EmptyReloadTime") != 0) boolean canReload = (GunsTool.getGunIntTag(stack, "NormalReloadTime") != 0 || GunsTool.getGunIntTag(stack, "EmptyReloadTime") != 0)
&& GunsTool.getGunIntTag(stack, "ClipLoad", 0) != 1; && GunsTool.getGunIntTag(stack, "ClipLoad", 0) != 1;
boolean clipLoad = tag.getInt("ammo") == 0 && GunsTool.getGunIntTag(stack, "ClipLoad", 0) == 1; boolean clipLoad = GunsTool.getGunIntTag(stack, "Ammo", 0) == 0 && GunsTool.getGunIntTag(stack, "ClipLoad", 0) == 1;
// 检查备弹 // 检查备弹
int count = 0; int count = 0;
@ -101,22 +101,22 @@ public class ReloadMessage {
if (stack.is(ModTags.Items.OPEN_BOLT)) { if (stack.is(ModTags.Items.OPEN_BOLT)) {
if (stack.is(ModTags.Items.EXTRA_ONE_AMMO)) { if (stack.is(ModTags.Items.EXTRA_ONE_AMMO)) {
if (tag.getInt("ammo") < magazine + tag.getInt("customMag") + 1) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag") + 1) {
tag.putBoolean("start_reload", true); tag.putBoolean("start_reload", true);
} }
} else { } else {
if (tag.getInt("ammo") < magazine + tag.getInt("customMag")) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) {
tag.putBoolean("start_reload", true); tag.putBoolean("start_reload", true);
} }
} }
} else if (tag.getInt("ammo") < magazine + tag.getInt("customMag")) { } else if (GunsTool.getGunIntTag(stack, "Ammo", 0) < magazine + tag.getInt("customMag")) {
tag.putBoolean("start_reload", true); tag.putBoolean("start_reload", true);
} }
return; return;
} }
if (canSingleReload) { if (canSingleReload) {
if (tag.getInt("ammo") < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) < GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag")) {
tag.putBoolean("start_single_reload", true); tag.putBoolean("start_single_reload", true);
} }
} }

View file

@ -62,9 +62,9 @@ public class ShootMessage {
if (stack.is(ModTags.Items.NORMAL_GUN)) { if (stack.is(ModTags.Items.NORMAL_GUN)) {
int projectileAmount = GunsTool.getGunIntTag(stack, "ProjectileAmount", 1); int projectileAmount = GunsTool.getGunIntTag(stack, "ProjectileAmount", 1);
if (stack.getOrCreateTag().getInt("ammo") > 0) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) > 0) {
// 空仓挂机 // 空仓挂机
if (stack.getOrCreateTag().getInt("ammo") == 1) { if (GunsTool.getGunIntTag(stack, "Ammo", 0) == 1) {
stack.getOrCreateTag().putBoolean("HoldOpen", true); stack.getOrCreateTag().putBoolean("HoldOpen", true);
} }
@ -73,15 +73,15 @@ public class ShootMessage {
} }
// 判断是否为栓动武器BoltActionTime > 0并在开火后给一个需要上膛的状态 // 判断是否为栓动武器BoltActionTime > 0并在开火后给一个需要上膛的状态
if (GunsTool.getGunIntTag(stack, "BoltActionTime", 0) > 0 && stack.getOrCreateTag().getInt("ammo") > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) { if (GunsTool.getGunIntTag(stack, "BoltActionTime", 0) > 0 && GunsTool.getGunIntTag(stack, "Ammo", 0) > (stack.is(ModTags.Items.REVOLVER) ? 0 : 1)) {
GunsTool.setGunBooleanTag(stack, "NeedBoltAction", true); GunsTool.setGunBooleanTag(stack, "NeedBoltAction", true);
} }
stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Ammo", 0) - 1);
stack.getOrCreateTag().putDouble("empty", 1); stack.getOrCreateTag().putDouble("empty", 1);
if (stack.getItem() == ModItems.M_60.get() && stack.getOrCreateTag().getInt("ammo") <= 5) { if (stack.getItem() == ModItems.M_60.get() && GunsTool.getGunIntTag(stack, "Ammo", 0) <= 5) {
stack.getOrCreateTag().putBoolean("HideBulletChain", true); stack.getOrCreateTag().putBoolean("HideBulletChain", true);
} }

View file

@ -70,7 +70,8 @@ public class GunsTool {
data.putDouble(k, v); data.putDouble(k, v);
stack.addTagElement("GunData", data); stack.addTagElement("GunData", data);
}); });
stack.getOrCreateTag().putInt("ammo", GunsTool.getGunIntTag(stack, "Magazine", 0) + stack.getOrCreateTag().getInt("customMag")); GunsTool.setGunIntTag(stack, "Ammo", GunsTool.getGunIntTag(stack, "Magazine", 0)
+ stack.getOrCreateTag().getInt("customMag"));
} }
} }
@ -102,7 +103,7 @@ public class GunsTool {
CompoundTag tag = stack.getOrCreateTag(); CompoundTag tag = stack.getOrCreateTag();
int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag"); int mag = GunsTool.getGunIntTag(stack, "Magazine", 0) + tag.getInt("customMag");
int ammo = tag.getInt("ammo"); int ammo = GunsTool.getGunIntTag(stack, "Ammo", 0);
int ammoToAdd = mag - ammo + (extraOne ? 1 : 0); int ammoToAdd = mag - ammo + (extraOne ? 1 : 0);
// 空仓换弹的栓动武器应该在换弹后取消待上膛标记 // 空仓换弹的栓动武器应该在换弹后取消待上膛标记
@ -131,7 +132,7 @@ public class GunsTool {
int needToAdd = ammo + Math.min(ammoToAdd, playerAmmo); int needToAdd = ammo + Math.min(ammoToAdd, playerAmmo);
tag.putInt("ammo", needToAdd); GunsTool.setGunIntTag(stack, "Ammo", needToAdd);
tag.putBoolean("is_normal_reloading", false); tag.putBoolean("is_normal_reloading", false);
tag.putBoolean("is_empty_reloading", false); tag.putBoolean("is_empty_reloading", false);
} }