From 44ec0df220f78cf4af9b469dcc70cf343c797c9e Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Thu, 23 May 2024 14:40:37 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=87=BB=E4=B8=AD=E5=88=A4?= =?UTF-8?q?=E5=AE=9A=E5=AE=9E=E7=8E=B0=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/mcreator/target/TargetMod.java | 1 + .../client/screens/CrossHairOverlay.java | 47 +++++++++++++------ .../target/entity/BocekArrowEntity.java | 21 ++++----- .../target/entity/GunGrenadeEntity.java | 21 ++++----- .../target/entity/ProjectileEntity.java | 23 +++------ .../target/entity/RpgRocketEntity.java | 21 ++++----- .../entity/TaserBulletProjectileEntity.java | 22 ++++----- .../target/event/ClientEventHandler.java | 5 +- .../target/event/LivingEventHandler.java | 26 ++++------ .../target/event/PlayerEventHandler.java | 31 ++++-------- .../target/network/ClientPacketHandler.java | 12 +++++ .../target/network/TargetModVariables.java | 30 ++++++------ .../message/ClientIndicatorMessage.java | 36 ++++++++++++++ 13 files changed, 163 insertions(+), 133 deletions(-) create mode 100644 src/main/java/net/mcreator/target/network/message/ClientIndicatorMessage.java diff --git a/src/main/java/net/mcreator/target/TargetMod.java b/src/main/java/net/mcreator/target/TargetMod.java index 00e24e3fd..57f0628aa 100644 --- a/src/main/java/net/mcreator/target/TargetMod.java +++ b/src/main/java/net/mcreator/target/TargetMod.java @@ -92,5 +92,6 @@ public class TargetMod { addNetworkMessage(GunRecycleGuiButtonMessage.class, GunRecycleGuiButtonMessage::buffer, GunRecycleGuiButtonMessage::new, GunRecycleGuiButtonMessage::handler); addNetworkMessage(ReloadMessage.class, ReloadMessage::buffer, ReloadMessage::new, ReloadMessage::handler); addNetworkMessage(PlayerGunKillMessage.class, PlayerGunKillMessage::encode, PlayerGunKillMessage::decode, PlayerGunKillMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); + addNetworkMessage(ClientIndicatorMessage.class, ClientIndicatorMessage::encode, ClientIndicatorMessage::decode, ClientIndicatorMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); } } diff --git a/src/main/java/net/mcreator/target/client/screens/CrossHairOverlay.java b/src/main/java/net/mcreator/target/client/screens/CrossHairOverlay.java index a0f190736..90a04cfdd 100644 --- a/src/main/java/net/mcreator/target/client/screens/CrossHairOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/CrossHairOverlay.java @@ -5,7 +5,6 @@ import com.mojang.blaze3d.systems.RenderSystem; import net.mcreator.target.init.TargetModAttributes; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModTags; -import net.mcreator.target.network.TargetModVariables; import net.minecraft.client.CameraType; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.GameRenderer; @@ -13,36 +12,39 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.world.entity.player.Player; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RenderGuiEvent; +import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import static net.mcreator.target.tools.RenderTool.preciseBlit; -@Mod.EventBusSubscriber({Dist.CLIENT}) +@Mod.EventBusSubscriber(value = Dist.CLIENT) public class CrossHairOverlay { + public static int HIT_INDICATOR = 0; + public static int HEAD_INDICATOR = 0; + public static int KILL_INDICATOR = 0; + + // TODO 使用partialTicks修改渲染 @SubscribeEvent(priority = EventPriority.NORMAL) public static void eventHandler(RenderGuiEvent.Pre event) { int w = event.getWindow().getGuiScaledWidth(); int h = event.getWindow().getGuiScaledHeight(); Player entity = Minecraft.getInstance().player; - if (entity == null) return; + if (entity == null) { + return; + } double spread = entity.getAttribute(TargetModAttributes.SPREAD.get()).getBaseValue(); - double hitIndicator = (entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).hitIndicator; - - double headIndicator = (entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).headIndicator; - - double killIndicator = (entity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).killIndicator; - RenderSystem.disableDepthTest(); RenderSystem.depthMask(false); RenderSystem.enableBlend(); RenderSystem.setShader(GameRenderer::getPositionTexShader); RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO); RenderSystem.setShaderColor(1, 1, 1, 1); - if (shouldRenderCrosshair(entity)) { + + if (shouldRenderCrossHair(entity)) { preciseBlit(event.getGuiGraphics(), new ResourceLocation("target:textures/screens/point.png"), w / 2f - 7.5f, h / 2f - 8, 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation("target:textures/screens/rexheng.png"), w / 2f - 9.5f - 2.8f * (float) spread, h / 2f - 8, 0, 0, 16, 16, 16, 16); @@ -56,17 +58,17 @@ public class CrossHairOverlay { float ww = w / 2f - 7.5f + (float) (2 * (Math.random() - 0.5f)); float hh = h / 2f - 8 + (float) (2 * (Math.random() - 0.5f)); - float m = (float) ((40 - killIndicator) / 5.5f); + float m = (40 - KILL_INDICATOR * 5) / 5.5f; - if (hitIndicator > 0) { + if (HIT_INDICATOR > 0) { preciseBlit(event.getGuiGraphics(), new ResourceLocation("target:textures/screens/hit_marker.png"), ww, hh, 0, 0, 16, 16, 16, 16); } - if (headIndicator > 0) { + if (HEAD_INDICATOR > 0) { preciseBlit(event.getGuiGraphics(), new ResourceLocation("target:textures/screens/headshotmark.png"), ww, hh, 0, 0, 16, 16, 16, 16); } - if (killIndicator > 0) { + if (KILL_INDICATOR > 0) { preciseBlit(event.getGuiGraphics(), new ResourceLocation("target:textures/screens/kill_mark1.png"), w / 2f - 7.5f - 2 + m, h / 2f - 8 - 2 + m, 0, 0, 16, 16, 16, 16); preciseBlit(event.getGuiGraphics(), new ResourceLocation("target:textures/screens/kill_mark2.png"), w / 2f - 7.5f + 2 - m, h / 2f - 8 - 2 + m, 0, 0, 16, 16, 16, 16); @@ -83,7 +85,7 @@ public class CrossHairOverlay { RenderSystem.setShaderColor(1, 1, 1, 1); } - private static boolean shouldRenderCrosshair(Player player) { + private static boolean shouldRenderCrossHair(Player player) { if (player == null) return false; if (player.isSpectator()) return false; @@ -93,4 +95,19 @@ public class CrossHairOverlay { return !(player.getMainHandItem().getItem() == TargetModItems.M_79.get()) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON; } + + @SubscribeEvent + public static void onClientTick(TickEvent.ClientTickEvent event) { + if (event.phase != TickEvent.Phase.END) { + return; + } + + handleRenderDamageIndicator(); + } + + private static void handleRenderDamageIndicator() { + HEAD_INDICATOR = Math.max(0, HEAD_INDICATOR - 1); + HIT_INDICATOR = Math.max(0, HIT_INDICATOR - 1); + KILL_INDICATOR = Math.max(0, KILL_INDICATOR - 1); + } } diff --git a/src/main/java/net/mcreator/target/entity/BocekArrowEntity.java b/src/main/java/net/mcreator/target/entity/BocekArrowEntity.java index a032453bc..b1a18f11a 100644 --- a/src/main/java/net/mcreator/target/entity/BocekArrowEntity.java +++ b/src/main/java/net/mcreator/target/entity/BocekArrowEntity.java @@ -1,13 +1,15 @@ package net.mcreator.target.entity; +import net.mcreator.target.TargetMod; import net.mcreator.target.headshot.BoundingBoxManager; import net.mcreator.target.headshot.IHeadshotBox; import net.mcreator.target.init.TargetModDamageTypes; import net.mcreator.target.init.TargetModEntities; import net.mcreator.target.init.TargetModSounds; -import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.network.message.ClientIndicatorMessage; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundEvents; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; @@ -27,6 +29,7 @@ import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.network.NetworkHooks; +import net.minecraftforge.network.PacketDistributor; import net.minecraftforge.network.PlayMessages; import java.util.Optional; @@ -82,12 +85,10 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier { protected void onHitEntity(EntityHitResult result) { Entity entity = result.getEntity(); if (this.getOwner() instanceof LivingEntity living) { - living.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.hitIndicator = 25; - capability.syncPlayerVariables(living); - }); - if (!living.level().isClientSide() && living.getServer() != null) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.playSound(TargetModSounds.INDICATION.get()); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); } } @@ -125,12 +126,10 @@ public class BocekArrowEntity extends AbstractArrow implements ItemSupplier { } if (headshot) { if (this.getOwner() instanceof LivingEntity living) { - living.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.headIndicator = 25; - capability.syncPlayerVariables(living); - }); - if (!living.level().isClientSide() && living.getServer() != null) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.playSound(TargetModSounds.HEADSHOT.get()); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(1, 5)); } } } diff --git a/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java b/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java index be274642b..1cdd0514a 100644 --- a/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java +++ b/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java @@ -1,17 +1,19 @@ package net.mcreator.target.entity; +import net.mcreator.target.TargetMod; import net.mcreator.target.headshot.BoundingBoxManager; import net.mcreator.target.headshot.IHeadshotBox; import net.mcreator.target.init.TargetModDamageTypes; import net.mcreator.target.init.TargetModEntities; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; -import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.network.message.ClientIndicatorMessage; import net.mcreator.target.tools.ParticleTool; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; 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; @@ -24,6 +26,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkHooks; +import net.minecraftforge.network.PacketDistributor; import java.util.Optional; @@ -57,12 +60,10 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { protected void onHitEntity(EntityHitResult result) { Entity entity = result.getEntity(); if (this.getOwner() instanceof LivingEntity living) { - living.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.hitIndicator = 25; - capability.syncPlayerVariables(living); - }); - if (!living.level().isClientSide() && living.getServer() != null) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.level().playSound(null, living.blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); } } @@ -102,12 +103,10 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { } if (headshot) { if (this.getOwner() instanceof LivingEntity living) { - living.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.headIndicator = 25; - capability.syncPlayerVariables(living); - }); - if (!living.level().isClientSide()) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.level().playSound(null, living.getX(), living.getY(), living.getZ(), TargetModSounds.HEADSHOT.get(), SoundSource.VOICE, 1f, 1f); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(1, 5)); } } } diff --git a/src/main/java/net/mcreator/target/entity/ProjectileEntity.java b/src/main/java/net/mcreator/target/entity/ProjectileEntity.java index 82d55d5f3..72fee0590 100644 --- a/src/main/java/net/mcreator/target/entity/ProjectileEntity.java +++ b/src/main/java/net/mcreator/target/entity/ProjectileEntity.java @@ -7,7 +7,7 @@ import net.mcreator.target.init.TargetModDamageTypes; import net.mcreator.target.init.TargetModEntities; import net.mcreator.target.init.TargetModParticleTypes; import net.mcreator.target.init.TargetModSounds; -import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.network.message.ClientIndicatorMessage; import net.mcreator.target.network.message.PlayerGunKillMessage; import net.mcreator.target.tools.ExtendedEntityRayTraceResult; import net.mcreator.target.tools.ParticleTool; @@ -314,10 +314,7 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa if (living.isDeadOrDying()) return; if (this.shooter instanceof ServerPlayer player) { - player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.hitIndicator = 25; - capability.syncPlayerVariables(living); - }); + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); var holder = Holder.direct(TargetModSounds.INDICATION.get()); player.connection.send(new ClientboundSoundPacket(holder, SoundSource.PLAYERS, player.getX(), player.getY(), player.getZ(), 1f, 1f, player.level().random.nextLong())); ((ServerLevel) this.level()).sendParticles(ParticleTypes.DAMAGE_INDICATOR, living.getX(), living.getY() + .5, living.getZ(), 1000, .4, .7, .4, 0); @@ -349,25 +346,17 @@ public class ProjectileEntity extends Entity implements IEntityAdditionalSpawnDa if (!this.shooter.level().isClientSide() && this.shooter instanceof ServerPlayer player) { var holder = Holder.direct(TargetModSounds.HEADSHOT.get()); player.connection.send(new ClientboundSoundPacket(holder, SoundSource.PLAYERS, player.getX(), player.getY(), player.getZ(), 1f, 1f, player.level().random.nextLong())); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(1, 5)); } - - shooter.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.headIndicator = 25; - capability.syncPlayerVariables(shooter); - }); - entity.hurt(TargetModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this.shooter), this.damage * this.headShot); } else { if (!this.shooter.level().isClientSide() && this.shooter instanceof ServerPlayer player) { var holder = Holder.direct(TargetModSounds.INDICATION.get()); player.connection.send(new ClientboundSoundPacket(holder, SoundSource.PLAYERS, player.getX(), player.getY(), player.getZ(), 1f, 1f, player.level().random.nextLong())); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); } - - shooter.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.hitIndicator = 25; - capability.syncPlayerVariables(shooter); - }); - entity.hurt(TargetModDamageTypes.causeGunFireDamage(this.level().registryAccess(), this.shooter), this.damage); } this.discard(); diff --git a/src/main/java/net/mcreator/target/entity/RpgRocketEntity.java b/src/main/java/net/mcreator/target/entity/RpgRocketEntity.java index b31701a5c..1090db8bb 100644 --- a/src/main/java/net/mcreator/target/entity/RpgRocketEntity.java +++ b/src/main/java/net/mcreator/target/entity/RpgRocketEntity.java @@ -1,17 +1,19 @@ package net.mcreator.target.entity; +import net.mcreator.target.TargetMod; import net.mcreator.target.headshot.BoundingBoxManager; import net.mcreator.target.headshot.IHeadshotBox; import net.mcreator.target.init.TargetModDamageTypes; import net.mcreator.target.init.TargetModEntities; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; -import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.network.message.ClientIndicatorMessage; import net.mcreator.target.tools.ParticleTool; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; 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; @@ -24,6 +26,7 @@ import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkHooks; +import net.minecraftforge.network.PacketDistributor; import java.util.Optional; @@ -57,12 +60,10 @@ public class RpgRocketEntity extends ThrowableItemProjectile { protected void onHitEntity(EntityHitResult result) { Entity entity = result.getEntity(); if (this.getOwner() instanceof LivingEntity living) { - living.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.hitIndicator = 25; - capability.syncPlayerVariables(living); - }); - if (!living.level().isClientSide() && living.getServer() != null) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.level().playSound(null, living.blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); } } @@ -101,12 +102,10 @@ public class RpgRocketEntity extends ThrowableItemProjectile { } if (headshot) { if (this.getOwner() instanceof LivingEntity living) { - living.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.headIndicator = 25; - capability.syncPlayerVariables(living); - }); - if (!living.level().isClientSide() && living.getServer() != null) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.playSound(TargetModSounds.HEADSHOT.get(), 1, 1); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(1, 5)); } } } diff --git a/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java b/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java index e3368c91f..d5e4e30ac 100644 --- a/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java +++ b/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java @@ -1,12 +1,14 @@ package net.mcreator.target.entity; +import net.mcreator.target.TargetMod; import net.mcreator.target.headshot.BoundingBoxManager; import net.mcreator.target.headshot.IHeadshotBox; import net.mcreator.target.init.*; -import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.network.message.ClientIndicatorMessage; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; +import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; import net.minecraft.world.effect.MobEffectInstance; import net.minecraft.world.entity.Entity; @@ -20,6 +22,7 @@ import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.EntityHitResult; import net.minecraft.world.phys.Vec3; import net.minecraftforge.network.NetworkHooks; +import net.minecraftforge.network.PacketDistributor; import java.util.Optional; @@ -53,13 +56,10 @@ public class TaserBulletProjectileEntity extends ThrowableItemProjectile { protected void onHitEntity(EntityHitResult result) { Entity entity = result.getEntity(); if (this.getOwner() instanceof LivingEntity living) { - living.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.hitIndicator = 25; - capability.syncPlayerVariables(living); - }); - - if (!living.level().isClientSide()) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.level().playSound(null, living.blockPosition(), TargetModSounds.INDICATION.get(), SoundSource.VOICE, 1, 1); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); } } if (entity instanceof LivingEntity) { @@ -86,12 +86,10 @@ public class TaserBulletProjectileEntity extends ThrowableItemProjectile { headshot = true; } if (headshot && this.getOwner() instanceof LivingEntity living) { - living.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.headIndicator = 25; - capability.syncPlayerVariables(living); - }); - if (!living.level().isClientSide()) { + if (!living.level().isClientSide() && living instanceof ServerPlayer player) { living.level().playSound(null, living.blockPosition(), TargetModSounds.HEADSHOT.get(), SoundSource.VOICE, 1, 1); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(1, 5)); } } } diff --git a/src/main/java/net/mcreator/target/event/ClientEventHandler.java b/src/main/java/net/mcreator/target/event/ClientEventHandler.java index 2b1679fe2..0398c9d27 100644 --- a/src/main/java/net/mcreator/target/event/ClientEventHandler.java +++ b/src/main/java/net/mcreator/target/event/ClientEventHandler.java @@ -33,10 +33,11 @@ public class ClientEventHandler { handleWeaponZoom(living); handleWeaponFire(event, living); handleShockCamera(event, living); - PlayerCameraShake(event, living); + handlePlayerCameraShake(event, living); handleBowPullAnimation(living); } } + private static void handleWeaponSway(LivingEntity entity) { if (entity.getMainHandItem().is(TargetModTags.Items.GUN)) { float fps = Minecraft.getInstance().getFps(); @@ -426,7 +427,7 @@ public class ClientEventHandler { } } - private static void PlayerCameraShake(ViewportEvent.ComputeCameraAngles event, LivingEntity entity) { + private static void handlePlayerCameraShake(ViewportEvent.ComputeCameraAngles event, LivingEntity entity) { var data = entity.getPersistentData(); double yaw = event.getYaw(); double pitch = event.getPitch(); diff --git a/src/main/java/net/mcreator/target/event/LivingEventHandler.java b/src/main/java/net/mcreator/target/event/LivingEventHandler.java index 5406d7b1b..79f79c3b0 100644 --- a/src/main/java/net/mcreator/target/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/target/event/LivingEventHandler.java @@ -8,12 +8,11 @@ import net.mcreator.target.init.TargetModSounds; import net.mcreator.target.init.TargetModTags; import net.mcreator.target.item.gun.GunItem; import net.mcreator.target.network.TargetModVariables; +import net.mcreator.target.network.message.ClientIndicatorMessage; import net.mcreator.target.network.message.PlayerGunKillMessage; import net.mcreator.target.tools.SoundTool; -import net.minecraft.core.registries.Registries; import net.minecraft.network.protocol.game.ClientboundStopSoundPacket; import net.minecraft.resources.ResourceKey; -import net.minecraft.resources.ResourceLocation; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.sounds.SoundSource; @@ -126,12 +125,9 @@ public class LivingEventHandler { if (!sourceEntity.level().isClientSide() && sourceEntity instanceof ServerPlayer player) { SoundTool.playLocalSound(player, TargetModSounds.TARGET_DOWN.get(), 100f, 1f); - } - sourceEntity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.killIndicator = 40; - capability.syncPlayerVariables(sourceEntity); - }); + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(2, 8)); + } } private static void renderDamageIndicator(LivingHurtEvent event) { @@ -140,20 +136,16 @@ public class LivingEventHandler { } var damagesource = event.getSource(); - var sourceEntity = event.getEntity(); + var sourceEntity = damagesource.getDirectEntity(); - if (damagesource == null || sourceEntity == null) { + if (sourceEntity == null) { return; } - if (sourceEntity instanceof Player && (damagesource.is(DamageTypes.EXPLOSION) || damagesource.is(DamageTypes.PLAYER_EXPLOSION) || damagesource.is(ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation("target:mine"))))) { - if (sourceEntity.getServer() != null && sourceEntity instanceof ServerPlayer player) { - SoundTool.playLocalSound(player, TargetModSounds.INDICATION.get(), 1f, 1f); - } - sourceEntity.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.hitIndicator = 25; - capability.syncPlayerVariables(sourceEntity); - }); + if (sourceEntity instanceof ServerPlayer player && (damagesource.is(DamageTypes.EXPLOSION) || damagesource.is(DamageTypes.PLAYER_EXPLOSION) || damagesource.is(TargetModDamageTypes.MINE))) { + SoundTool.playLocalSound(player, TargetModSounds.INDICATION.get(), 1f, 1f); + + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new ClientIndicatorMessage(0, 5)); } } diff --git a/src/main/java/net/mcreator/target/event/PlayerEventHandler.java b/src/main/java/net/mcreator/target/event/PlayerEventHandler.java index 7b7831b67..52e093c0f 100644 --- a/src/main/java/net/mcreator/target/event/PlayerEventHandler.java +++ b/src/main/java/net/mcreator/target/event/PlayerEventHandler.java @@ -63,7 +63,6 @@ public class PlayerEventHandler { handleSpecialWeaponAmmo(player); handleChangeFireRate(player); handleDistantRange(player); - handleRenderDamageIndicator(player); handleBocekPulling(player); handleGunRecoil(player); } @@ -171,15 +170,15 @@ public class PlayerEventHandler { } private static void handleFireTime(Player player) { - if (player == null) { - return; - } - if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).firing > 0) { - player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.firing = (player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).firing - 0.5; - capability.syncPlayerVariables(player); - }); - } + if (player == null) { + return; + } + if ((player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).firing > 0) { + player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { + capability.firing = (player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).orElse(new TargetModVariables.PlayerVariables())).firing - 0.5; + capability.syncPlayerVariables(player); + }); + } } private static void handleGround(Player player) { @@ -254,18 +253,6 @@ public class PlayerEventHandler { } } - - private static void handleRenderDamageIndicator(Player player) { - if (player == null) - return; - player.getCapability(TargetModVariables.PLAYER_VARIABLES_CAPABILITY, null).ifPresent(capability -> { - capability.headIndicator = Math.max(0, capability.headIndicator - 5); - capability.hitIndicator = Math.max(0, capability.hitIndicator - 5); - capability.killIndicator = Math.max(0, capability.killIndicator - 5); - capability.syncPlayerVariables(player); - }); - } - private static void handleBocekPulling(Player player) { ItemStack mainHandItem = player.getMainHandItem(); CompoundTag tag = mainHandItem.getOrCreateTag(); diff --git a/src/main/java/net/mcreator/target/network/ClientPacketHandler.java b/src/main/java/net/mcreator/target/network/ClientPacketHandler.java index 28c46dfbd..1c28f8caf 100644 --- a/src/main/java/net/mcreator/target/network/ClientPacketHandler.java +++ b/src/main/java/net/mcreator/target/network/ClientPacketHandler.java @@ -1,6 +1,8 @@ package net.mcreator.target.network; +import net.mcreator.target.client.screens.CrossHairOverlay; import net.mcreator.target.event.KillMessageHandler; +import net.mcreator.target.network.message.ClientIndicatorMessage; import net.mcreator.target.network.message.GunsDataMessage; import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.PlayerKillRecord; @@ -29,4 +31,14 @@ public class ClientPacketHandler { KillMessageHandler.QUEUE.offer(new PlayerKillRecord(attacker, target, attacker.getMainHandItem(), headshot, damageType)); } } + + public static void handleClientIndicatorMessage(ClientIndicatorMessage message, Supplier ctx) { + if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) { + switch (message.type) { + case 1 -> CrossHairOverlay.HEAD_INDICATOR = message.value; + case 2 -> CrossHairOverlay.KILL_INDICATOR = message.value; + default -> CrossHairOverlay.HIT_INDICATOR = message.value; + } + } + } } diff --git a/src/main/java/net/mcreator/target/network/TargetModVariables.java b/src/main/java/net/mcreator/target/network/TargetModVariables.java index 143b68c87..0bcd31f08 100644 --- a/src/main/java/net/mcreator/target/network/TargetModVariables.java +++ b/src/main/java/net/mcreator/target/network/TargetModVariables.java @@ -90,9 +90,9 @@ public class TargetModVariables { clone.bowPullHold = original.bowPullHold; clone.bowPull = original.bowPull; clone.playerDoubleJump = original.playerDoubleJump; - clone.hitIndicator = original.hitIndicator; - clone.headIndicator = original.headIndicator; - clone.killIndicator = original.killIndicator; +// clone.hitIndicator = original.hitIndicator; +// clone.headIndicator = original.headIndicator; +// clone.killIndicator = original.killIndicator; if (event.getEntity().level().isClientSide()) return; @@ -280,9 +280,9 @@ public class TargetModVariables { public boolean bowPullHold = false; public boolean bowPull = false; public boolean playerDoubleJump = false; - public int hitIndicator = 0; - public int headIndicator = 0; - public int killIndicator = 0; +// public int hitIndicator = 0; +// public int headIndicator = 0; +// public int killIndicator = 0; public void syncPlayerVariables(Entity entity) { if (entity instanceof ServerPlayer) @@ -305,9 +305,9 @@ public class TargetModVariables { nbt.putBoolean("bow_pull_hold", bowPullHold); nbt.putBoolean("bow_pull", bowPull); nbt.putBoolean("player_double_jump", playerDoubleJump); - nbt.putInt("hit_indicator", hitIndicator); - nbt.putInt("head_indicator", headIndicator); - nbt.putInt("kill_indicator", killIndicator); +// nbt.putInt("hit_indicator", hitIndicator); +// nbt.putInt("head_indicator", headIndicator); +// nbt.putInt("kill_indicator", killIndicator); return nbt; } @@ -327,9 +327,9 @@ public class TargetModVariables { bowPullHold = nbt.getBoolean("bow_pull_hold"); bowPull = nbt.getBoolean("bow_pull"); playerDoubleJump = nbt.getBoolean("player_double_jump"); - hitIndicator = nbt.getInt("hit_indicator"); - headIndicator = nbt.getInt("head_indicator"); - killIndicator = nbt.getInt("kill_indicator"); +// hitIndicator = nbt.getInt("hit_indicator"); +// headIndicator = nbt.getInt("head_indicator"); +// killIndicator = nbt.getInt("kill_indicator"); } } @@ -386,9 +386,9 @@ public class TargetModVariables { variables.bowPullHold = message.data.bowPullHold; variables.bowPull = message.data.bowPull; variables.playerDoubleJump = message.data.playerDoubleJump; - variables.hitIndicator = message.data.hitIndicator; - variables.headIndicator = message.data.headIndicator; - variables.killIndicator = message.data.killIndicator; +// variables.hitIndicator = message.data.hitIndicator; +// variables.headIndicator = message.data.headIndicator; +// variables.killIndicator = message.data.killIndicator; }); } } diff --git a/src/main/java/net/mcreator/target/network/message/ClientIndicatorMessage.java b/src/main/java/net/mcreator/target/network/message/ClientIndicatorMessage.java new file mode 100644 index 000000000..e03302215 --- /dev/null +++ b/src/main/java/net/mcreator/target/network/message/ClientIndicatorMessage.java @@ -0,0 +1,36 @@ +package net.mcreator.target.network.message; + +import net.mcreator.target.network.ClientPacketHandler; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class ClientIndicatorMessage { + public final int type; + public final int value; + + public ClientIndicatorMessage(int type, int value) { + this.type = type; + this.value = value; + } + + public static void encode(ClientIndicatorMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.type); + buffer.writeInt(message.value); + } + + public static ClientIndicatorMessage decode(FriendlyByteBuf buffer) { + int type = buffer.readInt(); + int value = buffer.readInt(); + return new ClientIndicatorMessage(type, value); + } + + public static void handler(ClientIndicatorMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> DistExecutor.unsafeRunWhenOn(Dist.CLIENT, + () -> () -> ClientPacketHandler.handleClientIndicatorMessage(message, ctx))); + ctx.get().setPacketHandled(true); + } +}