From f73d7b86f9475836335d19502d9606e44439a783 Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Fri, 22 Nov 2024 14:03:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=BC=80=E7=81=AB=E9=94=AE?= =?UTF-8?q?=E7=9A=84=E9=94=AE=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/client/ClickHandler.java | 111 +++++++++++------- .../entity/projectile/RgoGrenadeEntity.java | 16 ++- .../event/ClientEventHandler.java | 2 +- .../superbwarfare/init/ModKeyMappings.java | 3 + .../mcreator/superbwarfare/item/Monitor.java | 14 ++- .../assets/superbwarfare/lang/en_us.json | 1 + .../assets/superbwarfare/lang/zh_cn.json | 1 + 7 files changed, 92 insertions(+), 56 deletions(-) diff --git a/src/main/java/net/mcreator/superbwarfare/client/ClickHandler.java b/src/main/java/net/mcreator/superbwarfare/client/ClickHandler.java index 4d63ed7a3..92cb24188 100644 --- a/src/main/java/net/mcreator/superbwarfare/client/ClickHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/client/ClickHandler.java @@ -55,10 +55,8 @@ public class ClickHandler { if (player == null) return; int button = event.getButton(); - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { - ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1)); - ClientEventHandler.holdFire = false; - ClientEventHandler.customRpm = 0; + if (button == ModKeyMappings.FIRE.getKey().getValue()) { + handleWeaponFireRelease(); } if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { if (player.hasEffect(ModMobEffects.SHOCK.get())) { @@ -82,48 +80,17 @@ public class ClickHandler { int button = event.getButton(); - if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { - if (player.hasEffect(ModMobEffects.SHOCK.get())) { + if (player.getMainHandItem().is(ModTags.Items.GUN) + || stack.is(ModItems.MONITOR.get()) + || player.hasEffect(ModMobEffects.SHOCK.get()) + || (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && player.getMainHandItem().getItem() instanceof CannonShellItem)) { + if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { event.setCanceled(true); - return; } - if (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get())) { - ModUtils.PACKET_HANDLER.sendToServer(new SetFiringParametersMessage(0)); - } - if (stack.is(ModItems.MONITOR.get())) { - event.setCanceled(true); - ModUtils.PACKET_HANDLER.sendToServer(new DroneFireMessage(0)); - } - if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && player.getMainHandItem().getItem() instanceof CannonShellItem) { - event.setCanceled(true); - ModUtils.PACKET_HANDLER.sendToServer(new VehicleFireMessage(0)); - return; - } - if (player.getMainHandItem().is(ModTags.Items.GUN)) { - event.setCanceled(true); + } - if (stack.is(ModTags.Items.GUN) && (!(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) - && !stack.getOrCreateTag().getBoolean("reloading") - && !stack.getOrCreateTag().getBoolean("charging") - && !stack.getOrCreateTag().getBoolean("need_bolt_action")) - && cantFireTime == 0 - && drawTime < 0.01 - && !notInGame()) { - player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1); - } - - if (stack.is(ModTags.Items.GUN) && !stack.is(ModTags.Items.CANNOT_RELOAD) && stack.getOrCreateTag().getInt("ammo") <= 0) { - if (ReloadConfig.LEFT_CLICK_RELOAD.get()) { - ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0)); - } - } else { - ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0)); - ClientEventHandler.holdFire = true; - if (GunsTool.getGunIntTag(stack, "FireMode") == 1 && ClientEventHandler.burstFireSize == 0) { - ClientEventHandler.burstFireSize = (int) stack.getOrCreateTag().getDouble("burst_size"); - } - } - } + if (button == ModKeyMappings.FIRE.getKey().getValue()) { + handleWeaponFirePress(player, stack); } if (button == GLFW.GLFW_MOUSE_BUTTON_RIGHT) { @@ -233,7 +200,65 @@ public class ClickHandler { if (key == ModKeyMappings.SENSITIVITY_REDUCE.getKey().getValue()) { ModUtils.PACKET_HANDLER.sendToServer(new SensitivityMessage(false)); } + + if (key == ModKeyMappings.FIRE.getKey().getValue()) { + handleWeaponFirePress(player, stack); + } } + + if (event.getAction() == GLFW.GLFW_RELEASE) { + handleWeaponFireRelease(); + } + } + + public static void handleWeaponFirePress (Player player, ItemStack stack) { + + if (player.hasEffect(ModMobEffects.SHOCK.get())) { + return; + } + + if (stack.is(Items.SPYGLASS) && player.isScoping() && player.getOffhandItem().is(ModItems.FIRING_PARAMETERS.get())) { + ModUtils.PACKET_HANDLER.sendToServer(new SetFiringParametersMessage(0)); + } + + if (stack.is(ModItems.MONITOR.get())) { + ModUtils.PACKET_HANDLER.sendToServer(new DroneFireMessage(0)); + } + + if (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity && player.getMainHandItem().getItem() instanceof CannonShellItem) { + ModUtils.PACKET_HANDLER.sendToServer(new VehicleFireMessage(0)); + return; + } + + if (player.getMainHandItem().is(ModTags.Items.GUN)) { + if (stack.is(ModTags.Items.GUN) && (!(stack.getOrCreateTag().getBoolean("is_normal_reloading") || stack.getOrCreateTag().getBoolean("is_empty_reloading")) + && !stack.getOrCreateTag().getBoolean("reloading") + && !stack.getOrCreateTag().getBoolean("charging") + && !stack.getOrCreateTag().getBoolean("need_bolt_action")) + && cantFireTime == 0 + && drawTime < 0.01 + && !notInGame()) { + player.playSound(ModSounds.TRIGGER_CLICK.get(), 1, 1); + } + + if (stack.is(ModTags.Items.GUN) && !stack.is(ModTags.Items.CANNOT_RELOAD) && stack.getOrCreateTag().getInt("ammo") <= 0) { + if (ReloadConfig.LEFT_CLICK_RELOAD.get()) { + ModUtils.PACKET_HANDLER.sendToServer(new ReloadMessage(0)); + } + } else { + ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(0)); + ClientEventHandler.holdFire = true; + if (GunsTool.getGunIntTag(stack, "FireMode") == 1 && ClientEventHandler.burstFireSize == 0) { + ClientEventHandler.burstFireSize = (int) stack.getOrCreateTag().getDouble("burst_size"); + } + } + } + } + + public static void handleWeaponFireRelease () { + ModUtils.PACKET_HANDLER.sendToServer(new FireMessage(1)); + ClientEventHandler.holdFire = false; + ClientEventHandler.customRpm = 0; } private static void editModelShake() { diff --git a/src/main/java/net/mcreator/superbwarfare/entity/projectile/RgoGrenadeEntity.java b/src/main/java/net/mcreator/superbwarfare/entity/projectile/RgoGrenadeEntity.java index 7369b34af..a0575ca3d 100644 --- a/src/main/java/net/mcreator/superbwarfare/entity/projectile/RgoGrenadeEntity.java +++ b/src/main/java/net/mcreator/superbwarfare/entity/projectile/RgoGrenadeEntity.java @@ -18,7 +18,6 @@ import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; -import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.projectile.ThrowableItemProjectile; @@ -27,7 +26,6 @@ import net.minecraft.world.level.Level; import net.minecraft.world.level.block.BellBlock; import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.BlockHitResult; -import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.HitResult; import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.PacketDistributor; @@ -82,14 +80,12 @@ public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEnti if (state.getBlock() instanceof BellBlock bell) { bell.attemptToRing(this.level(), resultPos, blockResult.getDirection()); } - ProjectileTool.causeCustomExplode(this, 135f, 6.75f, 1.5f); + if (this.tickCount > 2) { + ProjectileTool.causeCustomExplode(this, 135f, 6.75f, 1.5f); + } + break; case ENTITY: - EntityHitResult entityResult = (EntityHitResult) result; - Entity entity = entityResult.getEntity(); - - if (entity == this.getOwner()) return; - if (this.getOwner() instanceof LivingEntity living) { if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.level().playSound(null, living.blockPosition(), ModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); @@ -97,7 +93,9 @@ public class RgoGrenadeEntity extends ThrowableItemProjectile implements GeoEnti ModUtils.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); } } - ProjectileTool.causeCustomExplode(this, 150f, 4.75f, 2f); + if (this.tickCount > 2) { + ProjectileTool.causeCustomExplode(this, 150f, 4.75f, 2f); + } break; default: break; diff --git a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java index cb55c5aae..02f97ef06 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/ClientEventHandler.java @@ -243,7 +243,7 @@ public class ClientEventHandler { double spread = stack.is(ModTags.Items.SHOTGUN) || stack.is(ModItems.MINIGUN.get()) ? 1.2 * zoomSpread * (basicDev + 0.2 * (walk + sprint + crouching + prone + jump + ride) + fireSpread) : zoomSpread * (0.7 * basicDev + walk + sprint + crouching + prone + jump + ride + 0.8 * fireSpread); - gunSpread = Mth.lerp(0.07 * times, gunSpread, spread); + gunSpread = Mth.lerp(0.14 * times, gunSpread, spread); // 开火部分 diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModKeyMappings.java b/src/main/java/net/mcreator/superbwarfare/init/ModKeyMappings.java index 43f7e1dc8..61e95c589 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModKeyMappings.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModKeyMappings.java @@ -79,6 +79,8 @@ public class ModKeyMappings { public static final KeyMapping EDIT_GRIP = new KeyMapping("key.superbwarfare.edit_grip", KeyConflictContext.IN_GAME, KeyModifier.SHIFT, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_DOWN, "key.categories.superbwarfare"); + public static final KeyMapping FIRE = new KeyMapping("key.superbwarfare.fire", InputConstants.Type.MOUSE, GLFW.GLFW_MOUSE_BUTTON_LEFT, "key.categories.superbwarfare"); + @SubscribeEvent public static void registerKeyMappings(RegisterKeyMappingsEvent event) { event.register(RELOAD); @@ -94,6 +96,7 @@ public class ModKeyMappings { event.register(EDIT_MAGAZINE); event.register(EDIT_STOCK); event.register(EDIT_GRIP); + event.register(FIRE); } @Mod.EventBusSubscriber(value = Dist.CLIENT) diff --git a/src/main/java/net/mcreator/superbwarfare/item/Monitor.java b/src/main/java/net/mcreator/superbwarfare/item/Monitor.java index 3d28b27ef..497a22bbb 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/Monitor.java +++ b/src/main/java/net/mcreator/superbwarfare/item/Monitor.java @@ -28,6 +28,7 @@ import java.text.DecimalFormat; import java.util.List; public class Monitor extends Item { + private static CameraType lastCameraType; public static final String LINKED = "Linked"; public static final String LINKED_DRONE = "LinkedDrone"; @@ -67,11 +68,14 @@ public class Monitor extends Item { if (stack.getOrCreateTag().getBoolean("Using")) { stack.getOrCreateTag().putBoolean("Using", false); if (world.isClientSide) { - Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON); + if (lastCameraType != null) { + Minecraft.getInstance().options.setCameraType(lastCameraType); + } } } else { stack.getOrCreateTag().putBoolean("Using", true); if (world.isClientSide) { + lastCameraType = Minecraft.getInstance().options.getCameraType(); Minecraft.getInstance().options.setCameraType(CameraType.THIRD_PERSON_BACK); } } @@ -120,7 +124,9 @@ public class Monitor extends Item { if (itemstack.getOrCreateTag().getBoolean("Using")) { itemstack.getOrCreateTag().putBoolean("Using", false); if (entity.level().isClientSide) { - Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON); + if (lastCameraType != null) { + Minecraft.getInstance().options.setCameraType(lastCameraType); + } } } this.resetDroneData(drone); @@ -128,7 +134,9 @@ public class Monitor extends Item { if (itemstack.getOrCreateTag().getBoolean("Using")) { itemstack.getOrCreateTag().putBoolean("Using", false); if (entity.level().isClientSide) { - Minecraft.getInstance().options.setCameraType(CameraType.FIRST_PERSON); + if (lastCameraType != null) { + Minecraft.getInstance().options.setCameraType(lastCameraType); + } } } } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 9264d202c..df496783a 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -333,6 +333,7 @@ "entity.superbwarfare.drone": "Drone", "key.categories.superbwarfare": "Superb Warfare", + "key.superbwarfare.fire": "Fire", "key.superbwarfare.reload": "Reload", "key.superbwarfare.fire_mode": "Fire Mode", "key.superbwarfare.sensitivity_increase": "Increase Sensitivity", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 8222d685d..4cc2a107d 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -333,6 +333,7 @@ "entity.superbwarfare.drone": "无人机", "key.categories.superbwarfare": "卓越前线", + "key.superbwarfare.fire": "开火", "key.superbwarfare.reload": "装填子弹", "key.superbwarfare.fire_mode": "开火模式", "key.superbwarfare.sensitivity_increase": "增加灵敏度",