diff --git a/src/main/java/net/mcreator/superbwarfare/ModUtils.java b/src/main/java/net/mcreator/superbwarfare/ModUtils.java index 9a58f5529..ba14b4483 100644 --- a/src/main/java/net/mcreator/superbwarfare/ModUtils.java +++ b/src/main/java/net/mcreator/superbwarfare/ModUtils.java @@ -115,6 +115,7 @@ public class ModUtils { addNetworkMessage(ModVariables.SavedDataSyncMessage.class, ModVariables.SavedDataSyncMessage::buffer, ModVariables.SavedDataSyncMessage::new, ModVariables.SavedDataSyncMessage::handler); addNetworkMessage(ModVariables.PlayerVariablesSyncMessage.class, ModVariables.PlayerVariablesSyncMessage::buffer, ModVariables.PlayerVariablesSyncMessage::new, ModVariables.PlayerVariablesSyncMessage::handler); addNetworkMessage(ModVariables.PlayerVariablesSyncMessage.class, ModVariables.PlayerVariablesSyncMessage::buffer, ModVariables.PlayerVariablesSyncMessage::new, ModVariables.PlayerVariablesSyncMessage::handler); + addNetworkMessage(ShootMessage.class, ShootMessage::encode, ShootMessage::decode, ShootMessage::handler); event.enqueueWork(() -> BrewingRecipeRegistry.addRecipe(Ingredient.of(PotionUtils.setPotion(new ItemStack(Items.POTION), Potions.WATER)), Ingredient.of(Items.LIGHTNING_ROD), PotionUtils.setPotion(new ItemStack(Items.POTION), ModPotion.SHOCK.get()))); diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index 4716f84ea..c535e226c 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -7,10 +7,12 @@ import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModMobEffects; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.network.ModVariables; +import net.mcreator.superbwarfare.network.message.ShootMessage; import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; import net.minecraft.client.multiplayer.ClientLevel; import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; @@ -71,6 +73,8 @@ public class ClientEventHandler { public static double bowPos = 0; public static double handPos = 0; + public static double ClientTimer = 0; + @SubscribeEvent public static void handleWeaponTurn(RenderHandEvent event) { LocalPlayer player = Minecraft.getInstance().player; @@ -91,6 +95,43 @@ public class ClientEventHandler { droneCameraRotY = Mth.clamp(0.25f * yRot, -20, 10); } + private static boolean notInGame() { + Minecraft mc = Minecraft.getInstance(); + if (mc.player == null) return true; + if (mc.getOverlay() != null) return true; + if (mc.screen != null) return true; + if (!mc.mouseHandler.isMouseGrabbed()) return true; + return !mc.isWindowActive(); + } + + @SubscribeEvent + public static void handleWeaponFire(RenderHandEvent event) { + if (notInGame()) return; + ClientLevel level = Minecraft.getInstance().level; + Player player = Minecraft.getInstance().player; + if (player != null && level != null && player.getMainHandItem().is(ModTags.Items.NORMAL_GUN)) { + + ItemStack stack = player.getMainHandItem(); + + double customRpm = 0; + + if (stack.getItem() == ModItems.MARLIN.get() && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) == GLFW.GLFW_PRESS) { + customRpm = -40; + } + + double rpm = stack.getOrCreateTag().getDouble("rpm") + customRpm; + + ClientTimer = Mth.clamp(ClientTimer - 25 * Minecraft.getInstance().getDeltaFrameTime(), 0, Double.POSITIVE_INFINITY); + + if (ClientTimer == 0 && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS) { + ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(0)); + ClientTimer = 60 / (rpm == 0 ? 600 : rpm) * 1000; + } + + player.displayClientMessage(Component.literal(new java.text.DecimalFormat("####").format(ClientTimer)), true); + } + } + @SubscribeEvent public static void computeCameraAngles(ViewportEvent.ComputeCameraAngles event) { ClientLevel level = Minecraft.getInstance().level; @@ -315,10 +356,8 @@ public class ClientEventHandler { double yaw = event.getYaw(); double pitch = event.getPitch(); double roll = event.getRoll(); - double amplitude; ItemStack stack = entity.getMainHandItem(); - amplitude = 15000 * stack.getOrCreateTag().getDouble("recoil_y") - * stack.getOrCreateTag().getDouble("recoil_x"); + double amplitude = 15000 * stack.getOrCreateTag().getDouble("recoil_y") * stack.getOrCreateTag().getDouble("recoil_x"); var capability = entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null); if (capability.orElse(new ModVariables.PlayerVariables()).firing > 0) { diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index 0cf37ee9a..936093811 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -13,16 +13,12 @@ import net.mcreator.superbwarfare.perk.Perk; import net.mcreator.superbwarfare.perk.PerkHelper; import net.mcreator.superbwarfare.tools.GunInfo; import net.mcreator.superbwarfare.tools.GunsTool; -import net.mcreator.superbwarfare.tools.ParticleTool; import net.mcreator.superbwarfare.tools.SoundTool; -import net.minecraft.core.particles.ParticleTypes; import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; -import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.InteractionHand; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -62,118 +58,118 @@ public class GunEventHandler { private static void handleGunFire(Player player) { ItemStack stack = player.getMainHandItem(); if (stack.is(ModTags.Items.NORMAL_GUN)) { - double mode = stack.getOrCreateTag().getInt("fire_mode"); - - int interval = stack.getOrCreateTag().getInt("fire_interval"); - - if (!player.getPersistentData().getBoolean("firing") && player.getMainHandItem().getItem() == ModItems.DEVOTION.get()) { - stack.getOrCreateTag().putDouble("fire_increase", 0); - } - - if (stack.getOrCreateTag().getInt("ammo") == 0) { - stack.getOrCreateTag().putInt("burst_fire", 0); - } - - if ((player.getPersistentData().getBoolean("firing") || stack.getOrCreateTag().getInt("burst_fire") > 0) - && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) - && !stack.getOrCreateTag().getBoolean("reloading") - && !stack.getOrCreateTag().getBoolean("charging") - && stack.getOrCreateTag().getInt("ammo") > 0 - && !player.getCooldowns().isOnCooldown(stack.getItem()) - && !stack.getOrCreateTag().getBoolean("need_bolt_action")) { - - playGunSounds(player); - - if (mode == 0) { - player.getPersistentData().putBoolean("firing", false); - } - - int burstCooldown = 0; - if (mode == 1) { - stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1)); - burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0; - } - - if (stack.getOrCreateTag().getDouble("animindex") == 1) { - stack.getOrCreateTag().putDouble("animindex", 0); - } else { - stack.getOrCreateTag().putDouble("animindex", 1); - } - /* - 空仓挂机 - */ - if (stack.getOrCreateTag().getInt("ammo") == 1) { - stack.getOrCreateTag().putBoolean("HoldOpen", true); - } - - /* - 判断是否为栓动武器(bolt_action_time > 0),并在开火后给一个需要上膛的状态 - */ - if (stack.getOrCreateTag().getDouble("bolt_action_time") > 0 && stack.getOrCreateTag().getInt("ammo") > 1) { - stack.getOrCreateTag().putBoolean("need_bolt_action", true); - } - - stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); - stack.getOrCreateTag().putInt("fire_animation", interval); - player.getPersistentData().putInt("noRun_time", interval + 2); - stack.getOrCreateTag().putDouble("flash_time", 2); - - stack.getOrCreateTag().putDouble("empty", 1); - - if (stack.getItem() == ModItems.M_60.get()) { - stack.getOrCreateTag().putBoolean("bullet_chain", true); - } - - if (stack.getItem() == ModItems.M_4.get() || player.getMainHandItem().getItem() == ModItems.HK_416.get() || player.getMainHandItem().getItem() == ModItems.QBZ_95.get()) { - if (stack.getOrCreateTag().getDouble("fire_sequence") == 1) { - stack.getOrCreateTag().putDouble("fire_sequence", 0); - } else { - stack.getOrCreateTag().putDouble("fire_sequence", 1); - } - } - - if (stack.getItem() == ModItems.DEVOTION.get()) { - stack.getOrCreateTag().putDouble("fire_increase", stack.getOrCreateTag().getDouble("fire_increase") + 0.334); - } - - if (stack.getItem() == ModItems.ABEKIRI.get()) { - stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND)); - if (player instanceof ServerPlayer serverPlayer && player.level() instanceof ServerLevel serverLevel) { - ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y, - player.getZ() + 1.8 * player.getLookAngle().z, 30, 0.4, 0.4, 0.4, 0.005, true, serverPlayer); - } - } - - if (stack.getItem() == ModItems.SENTINEL.get()) { - stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( - iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false) - ); - stack.getOrCreateTag().putDouble("chamber_rot", 20); - } - - int zoomAddCooldown = 0; - if (stack.getItem() == ModItems.MARLIN.get()) { - if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) { - zoomAddCooldown = 5; - stack.getOrCreateTag().putDouble("marlin_animation_time", 15); - stack.getOrCreateTag().putBoolean("fastfiring", false); - } else { - stack.getOrCreateTag().putDouble("marlin_animation_time", 10); - stack.getOrCreateTag().putBoolean("fastfiring", true); - } - } - - int cooldown = interval + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase") + burstCooldown + zoomAddCooldown; - player.getCooldowns().addCooldown(stack.getItem(), cooldown); - - for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { - gunShoot(player); - } - - stack.getOrCreateTag().putBoolean("shoot", true); - - } - +// double mode = stack.getOrCreateTag().getInt("fire_mode"); +// +// int interval = stack.getOrCreateTag().getInt("fire_interval"); +// +// if (!player.getPersistentData().getBoolean("firing") && player.getMainHandItem().getItem() == ModItems.DEVOTION.get()) { +// stack.getOrCreateTag().putDouble("fire_increase", 0); +// } +// +// if (stack.getOrCreateTag().getInt("ammo") == 0) { +// stack.getOrCreateTag().putInt("burst_fire", 0); +// } +// +// if ((player.getPersistentData().getBoolean("firing") || stack.getOrCreateTag().getInt("burst_fire") > 0) +// && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) +// && !stack.getOrCreateTag().getBoolean("reloading") +// && !stack.getOrCreateTag().getBoolean("charging") +// && stack.getOrCreateTag().getInt("ammo") > 0 +// && !player.getCooldowns().isOnCooldown(stack.getItem()) +// && !stack.getOrCreateTag().getBoolean("need_bolt_action")) { +// +// playGunSounds(player); +// +// if (mode == 0) { +// player.getPersistentData().putBoolean("firing", false); +// } +// +// int burstCooldown = 0; +// if (mode == 1) { +// stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1)); +// burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0; +// } +// +// if (stack.getOrCreateTag().getDouble("animindex") == 1) { +// stack.getOrCreateTag().putDouble("animindex", 0); +// } else { +// stack.getOrCreateTag().putDouble("animindex", 1); +// } +// /* +// 空仓挂机 +// */ +// if (stack.getOrCreateTag().getInt("ammo") == 1) { +// stack.getOrCreateTag().putBoolean("HoldOpen", true); +// } +// +// /* +// 判断是否为栓动武器(bolt_action_time > 0),并在开火后给一个需要上膛的状态 +// */ +// if (stack.getOrCreateTag().getDouble("bolt_action_time") > 0 && stack.getOrCreateTag().getInt("ammo") > 1) { +// stack.getOrCreateTag().putBoolean("need_bolt_action", true); +// } +// +// stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); +// stack.getOrCreateTag().putInt("fire_animation", interval); +// player.getPersistentData().putInt("noRun_time", interval + 2); +// stack.getOrCreateTag().putDouble("flash_time", 2); +// +// stack.getOrCreateTag().putDouble("empty", 1); +// +// if (stack.getItem() == ModItems.M_60.get()) { +// stack.getOrCreateTag().putBoolean("bullet_chain", true); +// } +// +// if (stack.getItem() == ModItems.M_4.get() || player.getMainHandItem().getItem() == ModItems.HK_416.get() || player.getMainHandItem().getItem() == ModItems.QBZ_95.get()) { +// if (stack.getOrCreateTag().getDouble("fire_sequence") == 1) { +// stack.getOrCreateTag().putDouble("fire_sequence", 0); +// } else { +// stack.getOrCreateTag().putDouble("fire_sequence", 1); +// } +// } +// +// if (stack.getItem() == ModItems.DEVOTION.get()) { +// stack.getOrCreateTag().putDouble("fire_increase", stack.getOrCreateTag().getDouble("fire_increase") + 0.334); +// } +// +// if (stack.getItem() == ModItems.ABEKIRI.get()) { +// stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND)); +// if (player instanceof ServerPlayer serverPlayer && player.level() instanceof ServerLevel serverLevel) { +// ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y, +// player.getZ() + 1.8 * player.getLookAngle().z, 30, 0.4, 0.4, 0.4, 0.005, true, serverPlayer); +// } +// } +// +// if (stack.getItem() == ModItems.SENTINEL.get()) { +// stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( +// iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false) +// ); +// stack.getOrCreateTag().putDouble("chamber_rot", 20); +// } +// +// int zoomAddCooldown = 0; +// if (stack.getItem() == ModItems.MARLIN.get()) { +// if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) { +// zoomAddCooldown = 5; +// stack.getOrCreateTag().putDouble("marlin_animation_time", 15); +// stack.getOrCreateTag().putBoolean("fastfiring", false); +// } else { +// stack.getOrCreateTag().putDouble("marlin_animation_time", 10); +// stack.getOrCreateTag().putBoolean("fastfiring", true); +// } +// } +// +// int cooldown = interval + (int) stack.getOrCreateTag().getDouble("fire_sequence") - (int) stack.getOrCreateTag().getDouble("fire_increase") + burstCooldown + zoomAddCooldown; +// player.getCooldowns().addCooldown(stack.getItem(), cooldown); +// +// for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { +// gunShoot(player); +// } +// +// stack.getOrCreateTag().putBoolean("shoot", true); +// +// } +// /* 在开火动画的最后1tick,设置需要拉栓上膛的武器拉栓动画的倒计时为data里的拉栓时间 */ @@ -202,7 +198,7 @@ public class GunEventHandler { var tag = stack.getOrCreateTag(); - if ((player.getPersistentData().getBoolean("firing") || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) && !player.isSprinting()) { + if ((player.getPersistentData().getBoolean("holdFire") || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) && !player.isSprinting()) { if (tag.getDouble("minigun_rotation") < 10) { tag.putDouble("minigun_rotation", (tag.getDouble("minigun_rotation") + 1)); } diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java index e6ec354b1..9c61edf3c 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -72,8 +72,8 @@ public class FireMessage { if (type == 0) { handlePlayerShoot(player); } else if (type == 1) { - player.getPersistentData().putBoolean("firing", false); - player.getPersistentData().putDouble("minigun_firing", 0); + player.getPersistentData().putBoolean("holdFire", false); +// player.getPersistentData().putBoolean("firing", false); player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { capability.bowPullHold = false; capability.syncPlayerVariables(player); @@ -130,10 +130,10 @@ public class FireMessage { } if (tag.getInt("fire_mode") == 1) { - player.getPersistentData().putBoolean("firing", false); + player.getPersistentData().putBoolean("holdFire", false); tag.putInt("burst_fire", (int) tag.getDouble("burst_size")); } else { - player.getPersistentData().putBoolean("firing", true); + player.getPersistentData().putBoolean("holdFire", true); } if (tag.getDouble("prepare") == 0 && tag.getBoolean("reloading") && tag.getInt("ammo") > 0) { tag.putDouble("force_stop", 1); diff --git a/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java b/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java new file mode 100644 index 000000000..198ed7bd4 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java @@ -0,0 +1,148 @@ +package net.mcreator.superbwarfare.network.message; + +import net.mcreator.superbwarfare.init.ModItems; +import net.mcreator.superbwarfare.init.ModTags; +import net.mcreator.superbwarfare.network.ModVariables; +import net.mcreator.superbwarfare.tools.ParticleTool; +import net.minecraft.core.particles.ParticleTypes; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerLevel; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraftforge.common.capabilities.ForgeCapabilities; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +import static net.mcreator.superbwarfare.event.GunEventHandler.gunShoot; +import static net.mcreator.superbwarfare.event.GunEventHandler.playGunSounds; + +public class ShootMessage { + private final int type; + + public ShootMessage(int type) { + this.type = type; + } + + public static ShootMessage decode(FriendlyByteBuf buffer) { + return new ShootMessage(buffer.readInt()); + } + + public static void encode(ShootMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.type); + } + + public static void handler(ShootMessage message, Supplier contextSupplier) { + NetworkEvent.Context context = contextSupplier.get(); + context.enqueueWork(() -> { + if (context.getSender() != null) { + pressAction(context.getSender(), message.type); + } + }); + context.setPacketHandled(true); + } + + public static void pressAction(Player player, int type) { + Level level = player.level(); + + if (!level.isLoaded(player.blockPosition())) { + return; + } + + ItemStack stack = player.getMainHandItem(); + if (stack.is(ModTags.Items.NORMAL_GUN)) { + + double mode = stack.getOrCreateTag().getInt("fire_mode"); + int interval = stack.getOrCreateTag().getInt("fire_interval"); + + if ((player.getPersistentData().getBoolean("holdFire") || stack.getOrCreateTag().getInt("burst_fire") > 0) + && !(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) + && !stack.getOrCreateTag().getBoolean("reloading") + && !stack.getOrCreateTag().getBoolean("charging") + && stack.getOrCreateTag().getInt("ammo") > 0 + && !player.getCooldowns().isOnCooldown(stack.getItem()) + && !stack.getOrCreateTag().getBoolean("need_bolt_action")) { + + if (mode == 0) { + player.getPersistentData().putBoolean("holdFire", false); + } + + int burstCooldown = 0; + if (mode == 1) { + player.getPersistentData().putBoolean("holdFire", false); + stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1)); + burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? interval + 4 : 0; + } + + if (stack.getOrCreateTag().getDouble("animindex") == 1) { + stack.getOrCreateTag().putDouble("animindex", 0); + } else { + stack.getOrCreateTag().putDouble("animindex", 1); + } + /* + 空仓挂机 + */ + if (stack.getOrCreateTag().getInt("ammo") == 1) { + stack.getOrCreateTag().putBoolean("HoldOpen", true); + } + + /* + 判断是否为栓动武器(bolt_action_time > 0),并在开火后给一个需要上膛的状态 + */ + if (stack.getOrCreateTag().getDouble("bolt_action_time") > 0 && stack.getOrCreateTag().getInt("ammo") > 1) { + stack.getOrCreateTag().putBoolean("need_bolt_action", true); + } + + stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); + stack.getOrCreateTag().putInt("fire_animation", interval); + player.getPersistentData().putInt("noRun_time", interval + 2); + stack.getOrCreateTag().putDouble("flash_time", 2); + + stack.getOrCreateTag().putDouble("empty", 1); + + if (stack.getItem() == ModItems.M_60.get()) { + stack.getOrCreateTag().putBoolean("bullet_chain", true); + } + + if (stack.getItem() == ModItems.ABEKIRI.get()) { + stack.hurtAndBreak(1, player, p -> p.broadcastBreakEvent(InteractionHand.MAIN_HAND)); + if (player instanceof ServerPlayer serverPlayer && player.level() instanceof ServerLevel serverLevel) { + ParticleTool.sendParticle(serverLevel, ParticleTypes.CLOUD, player.getX() + 1.8 * player.getLookAngle().x, player.getY() + player.getBbHeight() - 0.1 + 1.8 * player.getLookAngle().y, + player.getZ() + 1.8 * player.getLookAngle().z, 30, 0.4, 0.4, 0.4, 0.005, true, serverPlayer); + } + } + + if (stack.getItem() == ModItems.SENTINEL.get()) { + stack.getCapability(ForgeCapabilities.ENERGY).ifPresent( + iEnergyStorage -> iEnergyStorage.extractEnergy(3000, false) + ); + stack.getOrCreateTag().putDouble("chamber_rot", 20); + } + + if (stack.getItem() == ModItems.MARLIN.get()) { + if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) { + stack.getOrCreateTag().putDouble("marlin_animation_time", 15); + stack.getOrCreateTag().putBoolean("fastfiring", false); + } else { + stack.getOrCreateTag().putDouble("marlin_animation_time", 10); + stack.getOrCreateTag().putBoolean("fastfiring", true); + } + } + + int cooldown = burstCooldown; + player.getCooldowns().addCooldown(stack.getItem(), cooldown); + + for (int index0 = 0; index0 < (int) stack.getOrCreateTag().getDouble("projectile_amount"); index0++) { + gunShoot(player); + } + playGunSounds(player); + + stack.getOrCreateTag().putBoolean("shoot", true); + + } + } + } +} diff --git a/src/main/resources/data/superbwarfare/guns/aa_12.json b/src/main/resources/data/superbwarfare/guns/aa_12.json index 3d06e12ba..e9eea8fb4 100644 --- a/src/main/resources/data/superbwarfare/guns/aa_12.json +++ b/src/main/resources/data/superbwarfare/guns/aa_12.json @@ -20,5 +20,6 @@ "normal_reload_time": 64, "empty_reload_time": 85, "BypassesArmor": 0.05, - "SoundRadius": 18 + "SoundRadius": 18, + "rpm": 400 } diff --git a/src/main/resources/data/superbwarfare/guns/devotion.json b/src/main/resources/data/superbwarfare/guns/devotion.json index e6e4f4688..55c346e8f 100644 --- a/src/main/resources/data/superbwarfare/guns/devotion.json +++ b/src/main/resources/data/superbwarfare/guns/devotion.json @@ -21,5 +21,6 @@ "normal_reload_time": 73, "empty_reload_time": 95, "BypassesArmor": 0.25, - "SoundRadius": 13 + "SoundRadius": 13, + "rpm": 400 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/glock_18.json b/src/main/resources/data/superbwarfare/guns/glock_18.json index 31b2f1dae..3fc23d76f 100644 --- a/src/main/resources/data/superbwarfare/guns/glock_18.json +++ b/src/main/resources/data/superbwarfare/guns/glock_18.json @@ -20,5 +20,6 @@ "normal_reload_time": 30, "empty_reload_time": 35, "BypassesArmor": 0.15, - "SoundRadius": 16 + "SoundRadius": 16, + "rpm": 1200 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/hk_416.json b/src/main/resources/data/superbwarfare/guns/hk_416.json index b22ef701c..8ffbc8291 100644 --- a/src/main/resources/data/superbwarfare/guns/hk_416.json +++ b/src/main/resources/data/superbwarfare/guns/hk_416.json @@ -20,5 +20,6 @@ "normal_reload_time": 56, "empty_reload_time": 64, "BypassesArmor": 0.25, - "SoundRadius": 14 + "SoundRadius": 14, + "rpm": 800 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_4.json b/src/main/resources/data/superbwarfare/guns/m_4.json index a20182741..df39651ca 100644 --- a/src/main/resources/data/superbwarfare/guns/m_4.json +++ b/src/main/resources/data/superbwarfare/guns/m_4.json @@ -20,5 +20,6 @@ "normal_reload_time": 56, "empty_reload_time": 64, "BypassesArmor": 0.25, - "SoundRadius": 14 + "SoundRadius": 14, + "rpm": 800 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/m_870.json b/src/main/resources/data/superbwarfare/guns/m_870.json index 7325e8862..5fd0cfd97 100644 --- a/src/main/resources/data/superbwarfare/guns/m_870.json +++ b/src/main/resources/data/superbwarfare/guns/m_870.json @@ -23,5 +23,6 @@ "iterative_time": 16, "finish_time": 12, "BypassesArmor": 0.05, - "SoundRadius": 16 + "SoundRadius": 16, + "rpm": 90 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/marlin.json b/src/main/resources/data/superbwarfare/guns/marlin.json index 2a25f3389..7c244b45d 100644 --- a/src/main/resources/data/superbwarfare/guns/marlin.json +++ b/src/main/resources/data/superbwarfare/guns/marlin.json @@ -22,5 +22,6 @@ "iterative_time": 16, "finish_time": 19, "BypassesArmor": 0.3, - "SoundRadius": 15 + "SoundRadius": 15, + "rpm": 120 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/qbz_95.json b/src/main/resources/data/superbwarfare/guns/qbz_95.json index 0f6b7d40f..b5c040dcb 100644 --- a/src/main/resources/data/superbwarfare/guns/qbz_95.json +++ b/src/main/resources/data/superbwarfare/guns/qbz_95.json @@ -20,5 +20,6 @@ "normal_reload_time": 58, "empty_reload_time": 74, "BypassesArmor": 0.28, - "SoundRadius": 13 + "SoundRadius": 13, + "rpm": 750 } \ No newline at end of file diff --git a/src/main/resources/data/superbwarfare/guns/vector.json b/src/main/resources/data/superbwarfare/guns/vector.json index f8639797f..efbdd274c 100644 --- a/src/main/resources/data/superbwarfare/guns/vector.json +++ b/src/main/resources/data/superbwarfare/guns/vector.json @@ -20,5 +20,6 @@ "normal_reload_time": 46, "empty_reload_time": 64, "BypassesArmor": 0.15, - "SoundRadius": 4 + "SoundRadius": 4, + "rpm": 1100 } \ No newline at end of file