From ca73dacbb99a97515f6d7c500194d5ce36a21249 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sun, 3 Nov 2024 20:41:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8D=8A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=92=8C=E8=BF=9E=E5=8F=91bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/client/ClickHandler.java | 5 +++ .../client/model/item/AK12ItemModel.java | 13 +++--- .../client/model/item/AK47ItemModel.java | 2 +- .../client/model/item/Hk416ItemModel.java | 4 +- .../client/model/item/M4ItemModel.java | 4 +- .../event/ClientEventHandler.java | 40 ++++++++++++------- .../network/message/FireMessage.java | 8 ---- .../network/message/ShootMessage.java | 18 +++------ 8 files changed, 49 insertions(+), 45 deletions(-) diff --git a/src/main/java/net/mcreator/superbwarfare/client/ClickHandler.java b/src/main/java/net/mcreator/superbwarfare/client/ClickHandler.java index 32276f09e..86feb5dc7 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/ClickHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/client/ClickHandler.java @@ -52,6 +52,7 @@ public class ClickHandler { int button = event.getButton(); if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1)); + ClientEventHandler.holdFire = false; } if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { if (player.hasEffect(ModMobEffects.SHOCK.get())) { @@ -98,6 +99,10 @@ public class ClickHandler { } } else { ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0)); + ClientEventHandler.holdFire = true; + if (stack.getOrCreateTag().getInt("fire_mode") == 1) { + ClientEventHandler.burstFireSize = (int) stack.getOrCreateTag().getDouble("burst_size"); + } } } } diff --git a/src/main/java/net/mcreator/superbwarfare/client/model/item/AK12ItemModel.java b/src/main/java/net/mcreator/superbwarfare/client/model/item/AK12ItemModel.java index b173655ea..b564cf9f6 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/model/item/AK12ItemModel.java +++ b/src/main/java/net/mcreator/superbwarfare/client/model/item/AK12ItemModel.java @@ -75,20 +75,21 @@ public class AK12ItemModel extends GeoModel { float posY = switch (type) { case 0 -> 0.781f; - case 1 -> 0.351f; + case 1 -> 0.371f; case 2 -> -0.04f; case 3 -> -0.01f; default -> 0f; }; float scaleZ = switch (type) { - case 0 -> 0.45f; - case 1 -> 0.4f; + case 0 -> 0.52f; + case 1 -> 0.6f; case 2 -> 0.77f; case 3 -> 0.78f; default -> 0f; }; float posZ = switch (type) { - case 0, 1 -> 2.8f; + case 0 -> 3f; + case 1 -> 3.4f; case 2 -> 4.1f; case 3 -> 4.5f; default -> 0f; @@ -123,11 +124,11 @@ public class AK12ItemModel extends GeoModel { } fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.2f * ClientEventHandler.recoilHorizon * fpz); - fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5 * fpz) * ClientEventHandler.recoilHorizon); + fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.3f + 0.38 * fpz) * ClientEventHandler.recoilHorizon); shen.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread))); shen.setPosY((float) (0.15f * fp + 0.18f * fr)); - shen.setPosZ((float) (0.275 * fp + 0.34f * fr + 0.65 * fpz)); + shen.setPosZ((float) (0.245 * fp + 0.29f * fr + 0.55 * fpz)); shen.setRotX((float) (0.01f * fp + 0.08f * fr + 0.01f * fpz)); shen.setRotY(fireRotY); shen.setRotZ(fireRotZ); diff --git a/src/main/java/net/mcreator/superbwarfare/client/model/item/AK47ItemModel.java b/src/main/java/net/mcreator/superbwarfare/client/model/item/AK47ItemModel.java index 320a38fbe..97972c95d 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/model/item/AK47ItemModel.java +++ b/src/main/java/net/mcreator/superbwarfare/client/model/item/AK47ItemModel.java @@ -129,7 +129,7 @@ public class AK47ItemModel extends GeoModel { shen.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread))); shen.setPosY((float) (0.15f * fp + 0.18f * fr)); - shen.setPosZ((float) (0.365 * fp + 0.42f * fr + 0.95 * fpz)); + shen.setPosZ((float) (0.475 * fp + 0.64f * fr + 1.25 * fpz)); shen.setRotX((float) (0.01f * fp + 0.08f * fr + 0.01f * fpz)); shen.setRotY(fireRotY); shen.setRotZ(fireRotZ); diff --git a/src/main/java/net/mcreator/superbwarfare/client/model/item/Hk416ItemModel.java b/src/main/java/net/mcreator/superbwarfare/client/model/item/Hk416ItemModel.java index 775f1c96a..fee78b85d 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/model/item/Hk416ItemModel.java +++ b/src/main/java/net/mcreator/superbwarfare/client/model/item/Hk416ItemModel.java @@ -125,14 +125,14 @@ public class Hk416ItemModel extends GeoModel { shen.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread))); shen.setPosY((float) (0.15f * fp + 0.18f * fr)); - shen.setPosZ((float) (0.275 * fp + 0.34f * fr + 0.65 * fpz)); + shen.setPosZ((float) (0.475 * fp + 0.64f * fr + 1.15 * fpz)); shen.setRotX((float) (0.01f * fp + 0.05f * fr + 0.01f * fpz)); shen.setRotY(fireRotY); shen.setRotZ(fireRotZ); shen.setPosX((float) (shen.getPosX() * (1 - 0.1 * zt))); shen.setPosY((float) (shen.getPosY() * (-1 + 0.8 * zt))); - shen.setPosZ((float) (shen.getPosZ() * (1 + 0.3 * zt))); + shen.setPosZ((float) (shen.getPosZ() * (1 - 0.1 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - (type == 3 ? 0.96 : type == 1 ? 0.8 : 0.9) * zt))); shen.setRotY((float) (shen.getRotY() * (1 - (type == 3 ? 0.95 : 0.9) * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.4 * zt))); diff --git a/src/main/java/net/mcreator/superbwarfare/client/model/item/M4ItemModel.java b/src/main/java/net/mcreator/superbwarfare/client/model/item/M4ItemModel.java index 07913426e..c268d4511 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/model/item/M4ItemModel.java +++ b/src/main/java/net/mcreator/superbwarfare/client/model/item/M4ItemModel.java @@ -143,7 +143,7 @@ public class M4ItemModel extends GeoModel { shen.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread))); shen.setPosY((float) (0.15f * fp + 0.18f * fr)); - shen.setPosZ((float) (0.275 * fp + 0.34f * fr + 0.65 * fpz)); + shen.setPosZ((float) (0.475 * fp + 0.64f * fr + 1.15 * fpz)); shen.setRotX((float) (0.01f * fp + 0.05f * fr + 0.01f * fpz)); shen.setRotY(fireRotY); shen.setRotZ(fireRotZ); @@ -155,7 +155,7 @@ public class M4ItemModel extends GeoModel { shen.setPosX((float) (shen.getPosX() * (1 - 0.1 * zt))); shen.setPosY((float) (shen.getPosY() * (-1 + 0.8 * zt))); - shen.setPosZ((float) (shen.getPosZ() * (1 + 0.3 * zt))); + shen.setPosZ((float) (shen.getPosZ() * (1 - 0.1 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - (type == 3 ? 0.96 : type == 1 ? 0.8 : 0.9) * zt))); shen.setRotY((float) (shen.getRotY() * (1 - (type == 3 ? 0.95 : 0.9) * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.4 * zt))); diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index 04a9c8e56..39af586c2 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -112,6 +112,9 @@ public class ClientEventHandler { public static double customZoom = 0; public static MillisTimer clientTimer = new MillisTimer(); + public static boolean holdFire = false; + public static int burstFireSize = 0; + @SubscribeEvent public static void handleWeaponTurn(RenderHandEvent event) { LocalPlayer player = Minecraft.getInstance().player; @@ -152,7 +155,7 @@ public class ClientEventHandler { public static void handleWeaponFire(TickEvent.RenderTickEvent event) { ClientLevel level = Minecraft.getInstance().level; Player player = Minecraft.getInstance().player; -// if (notInGame()) return; + if (player == null) return; if (level == null) return; @@ -191,8 +194,8 @@ public class ClientEventHandler { gunSpread = Mth.lerp(0.07 * times, gunSpread, spread); // 开火部分 - double weight = stack.getOrCreateTag().getDouble("weight") + stack.getOrCreateTag().getDouble("CustomWeight"); + double weight = stack.getOrCreateTag().getDouble("weight") + stack.getOrCreateTag().getDouble("CustomWeight"); double speed = 1 - (0.04 * weight); if (player.getPersistentData().getDouble("noRun") == 0 && player.isSprinting() && GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_RIGHT) != GLFW.GLFW_PRESS) { @@ -201,14 +204,13 @@ public class ClientEventHandler { cantFireTime = Mth.clamp(cantFireTime - 6 * speed * times, 0, 24); } - if (GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS + if ((holdFire || burstFireSize > 0) && (player.getMainHandItem().is(ModTags.Items.NORMAL_GUN) && cantFireTime == 0 && drawTime < 0.01 && !notInGame() && !player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()).edit - && ((GLFW.glfwGetMouseButton(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_MOUSE_BUTTON_LEFT) == GLFW.GLFW_PRESS || stack.getOrCreateTag().getInt("burst_fire") > 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("charging") && stack.getOrCreateTag().getInt("ammo") > 0 @@ -216,41 +218,41 @@ public class ClientEventHandler { && !stack.getOrCreateTag().getBoolean("need_bolt_action")) || (stack.is(ModItems.MINIGUN.get()) && !player.isSprinting() && stack.getOrCreateTag().getDouble("overheat") == 0 && !player.getCooldowns().isOnCooldown(stack.getItem()) && stack.getOrCreateTag().getDouble("minigun_rotation") >= 10 ))) { - double customRpm = 0; + int customRpm = 0; if (stack.getItem() == ModItems.DEVOTION.get()) { customRpm = stack.getOrCreateTag().getInt("customRpm"); } if (stack.getItem() == ModItems.MINIGUN.get() && player.isInWater()) { - customRpm = -0.25 * stack.getOrCreateTag().getDouble("rpm"); + customRpm = (int) (-0.25 * stack.getOrCreateTag().getDouble("rpm")); } - double rpm = stack.getOrCreateTag().getDouble("rpm") + customRpm; + int rpm = (int) (stack.getOrCreateTag().getDouble("rpm") + customRpm); if (rpm == 0) { rpm = 600; } if (GunsTool.getPerkIntTag(stack, "DesperadoTimePost") > 0) { int perkLevel = PerkHelper.getItemPerkLevel(ModPerks.DESPERADO.get(), stack); - rpm *= 1.25 + 0.05 * perkLevel; + rpm *= (int) (1.25 + 0.05 * perkLevel); } - double rps = rpm / 60; + double rps = (double) rpm / 60; // cooldown in ms - double cooldown = 1000 / rps; + int cooldown = (int) (1000 / rps); if (!clientTimer.started()) { clientTimer.start(); // 首发瞬间发射 - clientTimer.setProgress((long) (cooldown + 1)); + clientTimer.setProgress((cooldown + 1)); } if (clientTimer.getProgress() >= cooldown) { shootClient(player); ModUtils.PACKET_HANDLER.sendToServer(new ShootMessage(spread)); - clientTimer.setProgress((long) (clientTimer.getProgress() - cooldown)); + clientTimer.setProgress((clientTimer.getProgress() - cooldown)); } if (notInGame()) { @@ -266,9 +268,19 @@ public class ClientEventHandler { public static void shootClient(Player player) { ItemStack stack = player.getMainHandItem(); if (stack.is(ModTags.Items.NORMAL_GUN)) { - if (stack.getOrCreateTag().getInt("ammo") > 0) { + int mode = stack.getOrCreateTag().getInt("fire_mode"); + if (mode != 2) { + holdFire = false; + } + + if (mode == 1 && stack.getOrCreateTag().getInt("ammo") == 1) { + burstFireSize = 1; + } + + burstFireSize--; + playGunClientSounds(player); handleClientShoot(); } 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 fb33fee06..b7d729ffb 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -138,14 +138,6 @@ public class FireMessage { } - if (tag.getInt("fire_mode") == 1) { - player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.holdFire = false; - capability.syncPlayerVariables(player); - }); - tag.putInt("burst_fire", (int) tag.getDouble("burst_size")); - } - 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 941c3f39f..fa4750387 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/ShootMessage.java @@ -67,7 +67,8 @@ public class ShootMessage { double rpm = stack.getOrCreateTag().getDouble("rpm") + stack.getOrCreateTag().getInt("customRpm");; int coolDownTick = (int) Math.ceil(20 / (rpm / 60)); - double mode = stack.getOrCreateTag().getInt("fire_mode"); + int mode = stack.getOrCreateTag().getInt("fire_mode"); + int projectileAmount = (int) stack.getOrCreateTag().getDouble("projectile_amount"); if (stack.getOrCreateTag().getInt("ammo") > 0) { @@ -75,17 +76,10 @@ public class ShootMessage { int singleInterval = 0; int burstCooldown = 0; - if (mode != 2) { - player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.holdFire = false; - capability.syncPlayerVariables(player); - }); - if (mode == 0) { - singleInterval = coolDownTick; - } else if (mode == 1) { - burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? coolDownTick + 3 : 0; - stack.getOrCreateTag().putInt("burst_fire", (stack.getOrCreateTag().getInt("burst_fire") - 1)); - } + if (mode == 0) { + singleInterval = coolDownTick; + } else if (mode == 1) { + burstCooldown = stack.getOrCreateTag().getInt("burst_fire") == 0 ? coolDownTick + 3 : 0; } /*