From 5b64d1ec2219b38e6ea6220c4beabf1189153a48 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Wed, 25 Sep 2024 05:36:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AEbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/event/GunEventHandler.java | 63 +++++++++++++------ .../item/gun/machinegun/MinigunItem.java | 9 ++- .../network/message/FireMessage.java | 10 +-- 3 files changed, 56 insertions(+), 26 deletions(-) diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index 3dfb715aa..60c84b0bf 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) && !player.isSprinting()) { + if ((player.getPersistentData().getBoolean("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)); } @@ -523,19 +523,31 @@ public class GunEventHandler { // 一阶段结束,检查备弹,如果有则二阶段启动,无则直接跳到三阶段 if ((tag.getDouble("prepare") == 1 || tag.getDouble("prepare_load") == 1)) { - // 检查备弹 - var capability = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()); - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0) { - tag.putBoolean("force_stage3_start", true); - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0) { - tag.putBoolean("force_stage3_start", true); - } else if ((stack.is(ModTags.Items.USE_HANDGUN_AMMO) || stack.is(ModTags.Items.SMG)) && capability.handgunAmmo == 0) { - tag.putBoolean("force_stage3_start", true); - } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { - tag.putBoolean("force_stage3_start", true); + int count = 0; + for (var inv : player.getInventory().items) { + if (inv.is(ModItems.CREATIVE_AMMO_BOX.get())) { + count++; + } + } + + if (count == 0) { + var capability = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()); + if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0) { + tag.putBoolean("force_stage3_start", true); + } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0) { + tag.putBoolean("force_stage3_start", true); + } else if ((stack.is(ModTags.Items.USE_HANDGUN_AMMO) || stack.is(ModTags.Items.SMG)) && capability.handgunAmmo == 0) { + tag.putBoolean("force_stage3_start", true); + } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { + tag.putBoolean("force_stage3_start", true); + } else { + tag.putInt("reload_stage", 2); + } } else { tag.putInt("reload_stage", 2); } + // 检查备弹 + } // 强制停止换弹,进入三阶段 @@ -583,17 +595,28 @@ public class GunEventHandler { } // 备弹耗尽结束 - var capability = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()); - if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0) { - tag.putInt("reload_stage", 3); - } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0) { - tag.putInt("reload_stage", 3); - } else if ((stack.is(ModTags.Items.USE_HANDGUN_AMMO) || stack.is(ModTags.Items.SMG)) && capability.handgunAmmo == 0) { - tag.putInt("reload_stage", 3); - } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { - tag.putInt("reload_stage", 3); + + int count = 0; + for (var inv : player.getInventory().items) { + if (inv.is(ModItems.CREATIVE_AMMO_BOX.get())) { + count++; + } } + if (count == 0) { + var capability = player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new ModVariables.PlayerVariables()); + if (stack.is(ModTags.Items.USE_SHOTGUN_AMMO) && capability.shotgunAmmo == 0) { + tag.putInt("reload_stage", 3); + } else if (stack.is(ModTags.Items.USE_SNIPER_AMMO) && capability.sniperAmmo == 0) { + tag.putInt("reload_stage", 3); + } else if ((stack.is(ModTags.Items.USE_HANDGUN_AMMO) || stack.is(ModTags.Items.SMG)) && capability.handgunAmmo == 0) { + tag.putInt("reload_stage", 3); + } else if (stack.is(ModTags.Items.USE_RIFLE_AMMO) && capability.rifleAmmo == 0) { + tag.putInt("reload_stage", 3); + } + } + + // 强制结束 if (tag.getBoolean("stop")) { tag.putInt("reload_stage", 3); diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/MinigunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/MinigunItem.java index da5c5bd3d..c48a4c88a 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/MinigunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/machinegun/MinigunItem.java @@ -171,6 +171,12 @@ public class MinigunItem extends GunItem implements GeoItem, AnimatedItem { yRot = yRot + 90 % 360; var leftPos = new Vector3d(1.2, -0.3, 0.3); + + if (entity.isSprinting()) { + leftPos = new Vector3d(1., -0.4, -0.4); + } + + leftPos.rotateZ(-entity.getXRot() * Mth.DEG_TO_RAD); leftPos.rotateY(-yRot * Mth.DEG_TO_RAD); @@ -183,7 +189,7 @@ public class MinigunItem extends GunItem implements GeoItem, AnimatedItem { cooldown = -0.5; } - if (entity instanceof ServerPlayer serverPlayer && entity.level() instanceof ServerLevel serverLevel && itemstack.getOrCreateTag().getDouble("heat") > 4) { + if (entity instanceof ServerPlayer serverPlayer && entity.level() instanceof ServerLevel serverLevel && itemstack.getOrCreateTag().getDouble("heat") > 4 && entity.isInWaterOrRain()) { if (entity.isInWater()) { ParticleTool.sendParticle(serverLevel, ParticleTypes.BUBBLE_COLUMN_UP, entity.getX() + leftPos.x, @@ -191,7 +197,6 @@ public class MinigunItem extends GunItem implements GeoItem, AnimatedItem { entity.getZ() + leftPos.z, 1, 0.1, 0.1, 0.1, 0.002, true, serverPlayer); } - ParticleTool.sendParticle(serverLevel, ModParticleTypes.CUSTOM_CLOUD.get(), entity.getX() + leftPos.x, entity.getEyeY() + leftPos.y, 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 badc9a8bc..c4090e98e 100644 --- a/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/superbwarfare/network/message/FireMessage.java @@ -152,10 +152,12 @@ public class FireMessage { } } - player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.bowPullHold = true; - capability.syncPlayerVariables(player); - }); + if (handItem.getItem() == ModItems.BOCEK.get()) { + player.getCapability(ModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.bowPullHold = true; + capability.syncPlayerVariables(player); + }); + } // 栓动武器左键手动拉栓 if (tag.getInt("bolt_action_time") > 0 && tag.getInt("ammo") > 0 && tag.getInt("bolt_action_anim") == 0) {