From 99b690238e6e50dc9a011b61225e4f85c5907161 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sun, 29 Sep 2024 02:55:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E8=B7=91=E5=B0=84=E5=BB=B6?= =?UTF-8?q?=E8=BF=9F=EF=BC=88=E5=A4=A7=E6=82=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/event/ClientEventHandler.java | 11 +++++++++++ .../superbwarfare/event/GunEventHandler.java | 2 +- .../superbwarfare/event/PlayerEventHandler.java | 12 ++++++++---- .../superbwarfare/network/ModVariables.java | 5 +++++ .../network/message/FireMessage.java | 15 ++++++++++----- .../network/message/ShootMessage.java | 12 +++++++++--- 6 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index 4b027b81e..d8fa57a54 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -79,6 +79,7 @@ public class ClientEventHandler { public static double handPos = 0; public static double gunSpread = 0; public static double fireSpread = 0; + public static double cantFireTime = 0; public static MillisTimer clientTimer = new MillisTimer(); @@ -165,8 +166,18 @@ public class ClientEventHandler { } // 开火部分 + + if (player.getPersistentData().getDouble("noRun") == 0 && player.isSprinting() && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS) { + cantFireTime = Mth.clamp(cantFireTime + 3 * times,0,30); + } else { + cantFireTime = Mth.clamp(cantFireTime - 6 * times,0,30); + } + +// player.displayClientMessage(Component.literal(new java.text.DecimalFormat("##").format(cantFireTime)), true); + if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS && (player.getMainHandItem().is(ModTags.Items.NORMAL_GUN) + && cantFireTime == 0 && !notInGame() || (stack.is(ModItems.MINIGUN.get()) && !player.isSprinting() && stack.getOrCreateTag().getDouble("overheat") == 0 && !player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getDouble("minigun_rotation") >= 10 ))) { diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index 3899e9282..ea153176d 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -83,7 +83,7 @@ public class GunEventHandler { var tag = stack.getOrCreateTag(); - if ((player.getPersistentData().getBoolean("holdFire") || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom)) { + if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).holdFire|| (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) { if (tag.getDouble("minigun_rotation") < 10) { tag.putDouble("minigun_rotation", (tag.getDouble("minigun_rotation") + 1)); } diff --git a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java index 8882430e3..c87de9ccd 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java @@ -5,7 +5,6 @@ import net.mcreator.superbwarfare.init.ModItems; import net.mcreator.superbwarfare.init.ModSounds; import net.mcreator.superbwarfare.init.ModTags; import net.mcreator.superbwarfare.network.ModVariables; -import net.mcreator.superbwarfare.network.message.ReloadMessage; import net.mcreator.superbwarfare.network.message.SimulationDistanceMessage; import net.mcreator.superbwarfare.tools.ItemNBTTool; import net.mcreator.superbwarfare.tools.SoundTool; @@ -258,15 +257,20 @@ public class PlayerEventHandler { player.getPersistentData().putDouble("noRun", 20); } - if (player.isShiftKeyDown() || player.isPassenger() || player.isInWater() || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) { - player.getPersistentData().putDouble("noRun", 1); + if (player.isShiftKeyDown() + || player.isPassenger() + || player.isInWater() + || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom + || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).holdFire) { + player.getPersistentData().putDouble("noRun", 3); } if (player.getPersistentData().getDouble("noRun") > 0) { player.getPersistentData().putDouble("noRun", (player.getPersistentData().getDouble("noRun") - 1)); } - if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom) { + if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).zoom + || (player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).holdFire) { player.setSprinting(false); } } diff --git a/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java b/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java index 5136fc934..40aabe42c 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java +++ b/src/main/java/net/mcreator/superbwarfare/network/ModVariables.java @@ -70,6 +70,7 @@ public class ModVariables { PlayerVariables original = event.getOriginal().getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()); PlayerVariables clone = event.getEntity().getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()); clone.zoom = original.zoom; + clone.holdFire = original.holdFire; clone.recoil = original.recoil; clone.recoilHorizon = original.recoilHorizon; clone.firing = original.firing; @@ -260,6 +261,7 @@ public class ModVariables { public static class PlayerVariables { public boolean zoom = false; + public boolean holdFire = false; public double recoil = 0; public double recoilHorizon = 0; public double firing = 0; @@ -287,6 +289,7 @@ public class ModVariables { public Tag writeNBT() { CompoundTag nbt = new CompoundTag(); nbt.putBoolean("zoom", zoom); + nbt.putBoolean("holdFire", holdFire); nbt.putDouble("recoil", recoil); nbt.putDouble("recoil_horizon", recoilHorizon); nbt.putDouble("firing", firing); @@ -311,6 +314,7 @@ public class ModVariables { public void readNBT(Tag Tag) { CompoundTag nbt = (CompoundTag) Tag; zoom = nbt.getBoolean("zoom"); + holdFire = nbt.getBoolean("holdFire"); recoil = nbt.getDouble("recoil"); recoilHorizon = nbt.getDouble("recoil_horizon"); firing = nbt.getDouble("firing"); @@ -366,6 +370,7 @@ public class ModVariables { PlayerVariables variables = entity.getCapability(PLAYER_VARIABLES_CAPABILITY, null).orElse(new PlayerVariables()); variables.zoom = message.data.zoom; + variables.holdFire = message.data.holdFire; variables.recoil = message.data.recoil; variables.recoilHorizon = message.data.recoilHorizon; variables.firing = message.data.firing; 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 3bb5bda46..2c966f040 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -71,11 +71,14 @@ public class FireMessage { if (type == 0) { handlePlayerShoot(player); + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.holdFire = true; + capability.syncPlayerVariables(player); + }); } else if (type == 1) { - player.getPersistentData().putBoolean("holdFire", false); -// player.getPersistentData().putBoolean("firing", false); player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { capability.bowPullHold = false; + capability.holdFire = false; capability.syncPlayerVariables(player); }); @@ -134,11 +137,13 @@ public class FireMessage { } if (tag.getInt("fire_mode") == 1) { - player.getPersistentData().putBoolean("holdFire", false); + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.holdFire = false; + capability.syncPlayerVariables(player); + }); tag.putInt("burst_fire", (int) tag.getDouble("burst_size")); - } else { - 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 index 5c79e4601..fcb6bf949 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java @@ -66,7 +66,7 @@ public class ShootMessage { int coolDownTick = (int) Math.ceil(20 / (rpm / 60)); double mode = stack.getOrCreateTag().getInt("fire_mode"); - if ((player.getPersistentData().getBoolean("holdFire") || stack.getOrCreateTag().getInt("burst_fire") > 0) + if (((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).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") @@ -76,13 +76,19 @@ public class ShootMessage { int singleInterval = 0; if (mode == 0) { - player.getPersistentData().putBoolean("holdFire", false); + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.holdFire = false; + capability.syncPlayerVariables(player); + }); singleInterval = coolDownTick; } int burstCooldown = 0; if (mode == 1) { - player.getPersistentData().putBoolean("holdFire", false); + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.holdFire = false; + capability.syncPlayerVariables(player); + }); stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1)); burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? coolDownTick + 4 : 0; }