From f8feb06679b81dfb713ca88316d90fdd50a70d17 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Tue, 15 Oct 2024 16:28:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BD=8E=E5=B8=A7=E7=8E=87?= =?UTF-8?q?=E4=B8=8B=E5=8F=AF=E8=83=BD=E5=87=BA=E7=8E=B0=E7=9A=84=E6=81=B6?= =?UTF-8?q?=E6=80=A7bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/screens/CrossHairOverlay.java | 4 +- .../event/ClientEventHandler.java | 80 ++++++++++--------- .../event/PlayerEventHandler.java | 6 +- .../network/message/ShootMessage.java | 1 - .../data/superbwarfare/guns/minigun.json | 6 +- 5 files changed, 50 insertions(+), 47 deletions(-) diff --git a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java index 27c946524..77020d79f 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java +++ b/src/main/java/net/mcreator/superbwarfare/client/screens/CrossHairOverlay.java @@ -52,7 +52,7 @@ public class CrossHairOverlay { GuiGraphics guiGraphics = event.getGuiGraphics(); ItemStack stack = player.getMainHandItem(); - double spread = ClientEventHandler.gunSpread + 3 * ClientEventHandler.firePos; + double spread = ClientEventHandler.gunSpread + 1 * ClientEventHandler.firePos; float deltaFrame = Minecraft.getInstance().getDeltaFrameTime(); float moveX = 0; float moveY = 0; @@ -60,7 +60,7 @@ public class CrossHairOverlay { if (DisplayConfig.FLOAT_CROSS_HAIR.get()) { moveX = (float) (-6 * ClientEventHandler.turnRot[1] - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosX); - moveY = (float) (-6 * ClientEventHandler.turnRot[0] + 6 * (float) ClientEventHandler.velocityY - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosY - 2 * ClientEventHandler.firePos); + moveY = (float) (-6 * ClientEventHandler.turnRot[0] + 6 * (float) ClientEventHandler.velocityY - (player.isSprinting() ? 10 : 6) * ClientEventHandler.movePosY - 0.25 * ClientEventHandler.firePos); } RenderSystem.disableDepthTest(); diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index 02e7d85c2..d773732a2 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -78,8 +78,6 @@ public class ClientEventHandler { public static double recoilHorizon = 0; - public static boolean recoil = false; - public static double recoilY = 0; public static double droneCameraRotX = 0; public static double droneCameraRotY = 0; @@ -158,7 +156,7 @@ public class ClientEventHandler { var perk = PerkHelper.getPerkByType(stack, Perk.Type.AMMO); // 精准度 - float times = Minecraft.getInstance().getDeltaFrameTime(); + float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); double basicDev = stack.getOrCreateTag().getDouble("spread"); double walk = isMoving() ? 0.3 * basicDev : 0; @@ -265,7 +263,7 @@ public class ClientEventHandler { if (!player.getMainHandItem().is(ModTags.Items.GUN)) return; float pose; - float times = 2 * Minecraft.getInstance().getDeltaFrameTime(); + float times = 2 * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); if (player.isCrouching() && player.getBbHeight() >= 1 && !isProne(player)) { pose = 0.85f; @@ -380,7 +378,7 @@ public class ClientEventHandler { private static void handleWeaponSway(LivingEntity entity) { if (entity.getMainHandItem().is(ModTags.Items.GUN) && entity instanceof Player player) { - float times = 2 * Minecraft.getInstance().getDeltaFrameTime(); + float times = 2 * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); double pose; if (player.isShiftKeyDown() && player.getBbHeight() >= 1 && isProne(player)) { @@ -399,7 +397,7 @@ public class ClientEventHandler { private static void handleWeaponMove(LivingEntity entity) { if (entity.getMainHandItem().is(ModTags.Items.GUN)) { - float times = 3.7f * Minecraft.getInstance().getDeltaFrameTime(); + float times = 3.7f * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); double moveSpeed = (float) Mth.clamp(entity.getDeltaMovement().horizontalDistanceSqr(), 0, 0.02); double onGround; if (entity.onGround()) { @@ -501,6 +499,11 @@ public class ClientEventHandler { public static void handleFireRecoilTimeMessage(double time, Supplier ctx) { if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) { + Player player = Minecraft.getInstance().player; + if (player == null) return; + CompoundTag tag = player.getMainHandItem().getOrCreateTag(); + if (!player.getMainHandItem().is(ModTags.Items.GUN)) return; + fireRecoilTime = time; shellIndex++; @@ -509,14 +512,22 @@ public class ClientEventHandler { randomShell[0] = (1 + 0.2 * (Math.random() - 0.5)); randomShell[1] = (0.2 + (Math.random() - 0.5)); randomShell[2] = (0.7 + (Math.random() - 0.5)); + + Minecraft.getInstance().player.getPersistentData().putDouble("noRun", 20); + + float gunRecoilY = (float) tag.getDouble("recoil_y") * 10; + + recoilTime = 0.01; + recoilY = (float) (2 * Math.random() - 1) * gunRecoilY; + } } private static void handleWeaponFire(ViewportEvent.ComputeCameraAngles event, LivingEntity entity) { - float times = 1.5f * Minecraft.getInstance().getDeltaFrameTime(); - double yaw = event.getYaw(); - double pitch = event.getPitch(); - double roll = event.getRoll(); + float times = 1.5f * Math.min(Minecraft.getInstance().getDeltaFrameTime(), 1); + float yaw = event.getYaw(); + float pitch = event.getPitch(); + float roll = event.getRoll(); ItemStack stack = entity.getMainHandItem(); double amplitude = 15000 * stack.getOrCreateTag().getDouble("recoil_y") * stack.getOrCreateTag().getDouble("recoil_x"); @@ -528,7 +539,7 @@ public class ClientEventHandler { fireSpread += 0.1; } - fireSpread = Mth.clamp(fireSpread - 0.1 * (Math.pow(fireSpread, 2) * times), 0, 100); + fireSpread = Mth.clamp(fireSpread - 0.1 * (Math.pow(fireSpread, 2) * times), 0, 2); firePosZ = Mth.clamp(firePosZ - 0.02 * times, 0, 0.6); if (0 < firePosTimer) { @@ -545,16 +556,20 @@ public class ClientEventHandler { fireRotTimer += 0.18 * (1.9 - fireRotTimer) * times; } + float[] shake = {0,0}; + shake[0] = (float) (1.3 * amplitude * (1 / 6.3 * (fireRotTimer - 0.5)) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)) + 1 * Mth.clamp(0.3 - fireRotTimer, 0, 1) * (2 * Math.random() - 1)); + shake[1] = (float) (4.2 * amplitude * (1 / 6.3 * (fireRotTimer - 0.5)) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)) + 3 * Mth.clamp(0.5 - fireRotTimer, 0, 0.5) * (2 * Math.random() - 1)); + if (0 < fireRotTimer && fireRotTimer < 1.732) { fireRot = 1 / 6.3 * (fireRotTimer - 0.5) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)); if (recoilY > 0) { - event.setYaw((float) (yaw - 1.3 * amplitude * (1 / 6.3 * (fireRotTimer - 0.5)) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)) + 1 * Mth.clamp(0.3 - fireRotTimer, 0, 1) * (2 * Math.random() - 1))); - event.setPitch((float) (pitch + 1.3 * amplitude * (1 / 6.3 * (fireRotTimer - 0.5)) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)) + 1 * Mth.clamp(0.3 - fireRotTimer, 0, 1) * (2 * Math.random() - 1))); - event.setRoll((float) (roll + 4.2 * amplitude * (1 / 6.3 * (fireRotTimer - 0.5)) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)) + 3 * Mth.clamp(0.5 - fireRotTimer, 0, 0.5) * (2 * Math.random() - 1))); + event.setYaw(yaw - shake[0]); + event.setPitch(pitch + shake[0]); + event.setRoll(roll + shake[1]); } else if (recoilY <= 0) { - event.setYaw((float) (yaw + 1.3 * amplitude * (1 / 6.3 * (fireRotTimer - 0.5)) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)) + 1 * Mth.clamp(0.3 - fireRotTimer, 0, 1) * (2 * Math.random() - 1))); - event.setPitch((float) (pitch - 1.3 * amplitude * (1 / 6.3 * (fireRotTimer - 0.5)) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)) + 1 * Mth.clamp(0.3 - fireRotTimer, 0, 1) * (2 * Math.random() - 1))); - event.setRoll((float) (roll - 4.2 * amplitude * (1 / 6.3 * (fireRotTimer - 0.5)) * Math.sin(6.3 * (fireRotTimer - 0.5)) * (3 - Math.pow(fireRotTimer, 2)) + 3 * Mth.clamp(0.5 - fireRotTimer, 0, 0.5) * (2 * Math.random() - 1))); + event.setYaw(yaw + shake[0]); + event.setPitch(pitch - shake[0]); + event.setRoll(roll - shake[1]); } } @@ -571,7 +586,7 @@ public class ClientEventHandler { Player player = Minecraft.getInstance().player; if (player == null) return; - float times = Minecraft.getInstance().getDeltaFrameTime(); + float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); if (shellIndex >= 5) { shellIndex = 0; @@ -594,25 +609,15 @@ public class ClientEventHandler { if (!player.getMainHandItem().is(ModTags.Items.GUN)) return; CompoundTag tag = player.getMainHandItem().getOrCreateTag(); - float times = Minecraft.getInstance().getDeltaFrameTime(); - float gunRecoilX = (float) tag.getDouble("recoil_x") * 80; - float gunRecoilY = (float) tag.getDouble("recoil_y") * 60; - - if (fireRecoilTime > 0) { - recoil = true; - } - - if (recoil) { - recoilTime = 0.01; - recoilY = (float) (2 * Math.random() - 1) * gunRecoilY; - recoil = false; - } + float times = (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 1.6); + float gunRecoilX = (float) tag.getDouble("recoil_x") * 60; if (recoilHorizon > 0) { - recoilHorizon -= (4 * Math.pow(recoilHorizon, 2) + recoilY) * times; + recoilHorizon = recoilHorizon - Math.min(Math.pow(recoilHorizon, 2), 6) * times + recoilY; } else { - recoilHorizon += (4 * Math.pow(recoilHorizon, 2) + recoilY) * times; + recoilHorizon = recoilHorizon + Math.min(Math.pow(recoilHorizon, 2), 6) * times + recoilY ; } + recoilY = 0; // 计算后坐力 @@ -627,7 +632,7 @@ public class ClientEventHandler { } } - float newYaw = (float) (player.getYRot() - 0.6 * recoilHorizon * pose * times * (0.5 + fireSpread)); + float newYaw = player.getYRot() - (float) (0.6 * recoilHorizon * pose * times * (0.5 + fireSpread)); player.setYRot(newYaw); player.yRotO = player.getYRot(); @@ -650,7 +655,7 @@ public class ClientEventHandler { } if (0 < recoilTime && recoilTime < 2.5) { - float newPitch = (float) (player.getXRot() - 1.5 * pose * gunRecoilX * (sinRes + Mth.clamp(0.5 - recoilTime, 0, 0.5)) * times * (0.5 + fireSpread)); + float newPitch = player.getXRot() - (float) (1.5 * pose * gunRecoilX * (sinRes + Mth.clamp(0.5 - recoilTime, 0, 0.5)) * times * (0.5 + fireSpread)); player.setXRot(newPitch); player.xRotO = player.getXRot(); } @@ -659,7 +664,7 @@ public class ClientEventHandler { } private static void handlePlayerBreath(LivingEntity entity) { - float times = 4 * Minecraft.getInstance().getDeltaFrameTime(); + float times = 4 * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); if ((entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).breath) { breathTime = Mth.clamp(breathTime + 0.06 * times, 0, 1); @@ -737,7 +742,7 @@ public class ClientEventHandler { } private static void handleBowPullAnimation(LivingEntity entity) { - float times = 4 * Minecraft.getInstance().getDeltaFrameTime(); + float times = 4 * (float) Math.min(Minecraft.getInstance().getDeltaFrameTime(), 0.8); if ((entity.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).bowPull) { pullTimer = Math.min(pullTimer + 0.018 * times, 1); @@ -844,7 +849,6 @@ public class ClientEventHandler { } public static void handleShells(float x, float y, CoreGeoBone... shells) { - float times = Minecraft.getInstance().getDeltaFrameTime(); for (int i = 0; i < shells.length; i++) { if (i >= 5) break; diff --git a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java index 74cb6e0f6..3cd2cbfff 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/PlayerEventHandler.java @@ -197,9 +197,9 @@ public class PlayerEventHandler { * 判断玩家是否在奔跑 */ private static void handlePlayerSprint(Player player) { - if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0 || player.getMainHandItem().getOrCreateTag().getInt("fire_animation") > 0) { - player.getPersistentData().putDouble("noRun", 20); - } +// if (player.getMainHandItem().getOrCreateTag().getInt("flash_time") > 0 || player.getMainHandItem().getOrCreateTag().getInt("fire_animation") > 0) { +// player.getPersistentData().putDouble("noRun", 20); +// } if ((player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables())).holdFire) { player.getPersistentData().putDouble("noRun", 10); 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 4e5b83fc8..65b806fb1 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java @@ -110,7 +110,6 @@ public class ShootMessage { stack.getOrCreateTag().putInt("ammo", (stack.getOrCreateTag().getInt("ammo") - 1)); stack.getOrCreateTag().putInt("fire_animation", coolDownTick); - player.getPersistentData().putInt("noRun_time", coolDownTick + 2); stack.getOrCreateTag().putDouble("flash_time", 2); stack.getOrCreateTag().putDouble("empty", 1); diff --git a/src/main/resources/data/superbwarfare/guns/minigun.json b/src/main/resources/data/superbwarfare/guns/minigun.json index 9e853c258..6ee310825 100644 --- a/src/main/resources/data/superbwarfare/guns/minigun.json +++ b/src/main/resources/data/superbwarfare/guns/minigun.json @@ -1,8 +1,8 @@ { "zoom": 1, - "spread": 2.5, - "recoil_x": 0.012, - "recoil_y": 0.011, + "spread": 1.5, + "recoil_x": 0.005, + "recoil_y": 0.070, "damage": 8, "headshot": 2, "velocity": 24,