From 1a177045a96edc8523d4e5a3d911b546ddcf8b41 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Sun, 19 May 2024 00:39:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B9=B6=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/mcreator/target/TargetMod.java | 3 +- .../mcreator/target/client/ClickHandler.java | 2 +- .../client/gui/GunRecycleGuiScreen.java | 2 +- .../target/client/gui/MortarGUIScreen.java | 2 +- .../event/LivingEntityEventHandler.java | 16 ++++++ .../target/init/TargetModKeyMappings.java | 8 +-- .../target/network/ClientPacketHandler.java | 11 ++++- .../{ => message}/DoubleJumpMessage.java | 3 +- .../network/{ => message}/FireMessage.java | 3 +- .../{ => message}/FireModeMessage.java | 2 +- .../GunRecycleGuiButtonMessage.java | 2 +- .../{ => message}/GunsDataMessage.java | 4 +- .../{ => message}/MortarGUIButtonMessage.java | 2 +- .../network/message/PlayerKillMessage.java | 49 +++++++++++++++++++ .../network/{ => message}/ReloadMessage.java | 2 +- .../network/{ => message}/ZoomMessage.java | 3 +- .../net/mcreator/target/tools/GunsTool.java | 2 +- 17 files changed, 97 insertions(+), 19 deletions(-) rename src/main/java/net/mcreator/target/network/{ => message}/DoubleJumpMessage.java (95%) rename src/main/java/net/mcreator/target/network/{ => message}/FireMessage.java (98%) rename src/main/java/net/mcreator/target/network/{ => message}/FireModeMessage.java (98%) rename src/main/java/net/mcreator/target/network/{ => message}/GunRecycleGuiButtonMessage.java (98%) rename src/main/java/net/mcreator/target/network/{ => message}/GunsDataMessage.java (92%) rename src/main/java/net/mcreator/target/network/{ => message}/MortarGUIButtonMessage.java (98%) create mode 100644 src/main/java/net/mcreator/target/network/message/PlayerKillMessage.java rename src/main/java/net/mcreator/target/network/{ => message}/ReloadMessage.java (96%) rename src/main/java/net/mcreator/target/network/{ => message}/ZoomMessage.java (95%) diff --git a/src/main/java/net/mcreator/target/TargetMod.java b/src/main/java/net/mcreator/target/TargetMod.java index 08387811f..b0bafb395 100644 --- a/src/main/java/net/mcreator/target/TargetMod.java +++ b/src/main/java/net/mcreator/target/TargetMod.java @@ -1,7 +1,7 @@ package net.mcreator.target; import net.mcreator.target.init.*; -import net.mcreator.target.network.*; +import net.mcreator.target.network.message.*; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.common.MinecraftForge; @@ -88,5 +88,6 @@ public class TargetMod { addNetworkMessage(FireModeMessage.class, FireModeMessage::buffer, FireModeMessage::new, FireModeMessage::handler); addNetworkMessage(GunRecycleGuiButtonMessage.class, GunRecycleGuiButtonMessage::buffer, GunRecycleGuiButtonMessage::new, GunRecycleGuiButtonMessage::handler); addNetworkMessage(ReloadMessage.class, ReloadMessage::buffer, ReloadMessage::new, ReloadMessage::handler); + addNetworkMessage(PlayerKillMessage.class, PlayerKillMessage::encode, PlayerKillMessage::decode, PlayerKillMessage::handler, Optional.of(NetworkDirection.PLAY_TO_CLIENT)); } } diff --git a/src/main/java/net/mcreator/target/client/ClickHandler.java b/src/main/java/net/mcreator/target/client/ClickHandler.java index 1b9436e00..3f5d84005 100644 --- a/src/main/java/net/mcreator/target/client/ClickHandler.java +++ b/src/main/java/net/mcreator/target/client/ClickHandler.java @@ -3,7 +3,7 @@ package net.mcreator.target.client; import com.mojang.blaze3d.platform.InputConstants; import net.mcreator.target.TargetMod; import net.mcreator.target.init.TargetModTags; -import net.mcreator.target.network.FireMessage; +import net.mcreator.target.network.message.FireMessage; import net.minecraft.client.Minecraft; import net.minecraft.world.entity.player.Player; import net.minecraftforge.api.distmarker.Dist; diff --git a/src/main/java/net/mcreator/target/client/gui/GunRecycleGuiScreen.java b/src/main/java/net/mcreator/target/client/gui/GunRecycleGuiScreen.java index 8fc881b3b..dfbb82f23 100644 --- a/src/main/java/net/mcreator/target/client/gui/GunRecycleGuiScreen.java +++ b/src/main/java/net/mcreator/target/client/gui/GunRecycleGuiScreen.java @@ -2,7 +2,7 @@ package net.mcreator.target.client.gui; import com.mojang.blaze3d.systems.RenderSystem; import net.mcreator.target.TargetMod; -import net.mcreator.target.network.GunRecycleGuiButtonMessage; +import net.mcreator.target.network.message.GunRecycleGuiButtonMessage; import net.mcreator.target.world.inventory.GunRecycleGuiMenu; import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.components.Button; diff --git a/src/main/java/net/mcreator/target/client/gui/MortarGUIScreen.java b/src/main/java/net/mcreator/target/client/gui/MortarGUIScreen.java index cef401ab5..297ddb975 100644 --- a/src/main/java/net/mcreator/target/client/gui/MortarGUIScreen.java +++ b/src/main/java/net/mcreator/target/client/gui/MortarGUIScreen.java @@ -2,7 +2,7 @@ package net.mcreator.target.client.gui; import com.mojang.blaze3d.systems.RenderSystem; import net.mcreator.target.TargetMod; -import net.mcreator.target.network.MortarGUIButtonMessage; +import net.mcreator.target.network.message.MortarGUIButtonMessage; import net.mcreator.target.tools.TraceTool; import net.mcreator.target.world.inventory.MortarGUIMenu; import net.minecraft.client.gui.GuiGraphics; diff --git a/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java b/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java index c494aa2e6..80b0868f5 100644 --- a/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java +++ b/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java @@ -1,5 +1,6 @@ package net.mcreator.target.event; +import net.mcreator.target.TargetMod; import net.mcreator.target.entity.BocekarrowEntity; import net.mcreator.target.entity.Target1Entity; import net.mcreator.target.init.TargetModDamageTypes; @@ -7,6 +8,7 @@ import net.mcreator.target.init.TargetModItems; 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.PlayerKillMessage; import net.minecraft.commands.CommandSource; import net.minecraft.commands.CommandSourceStack; import net.minecraft.core.registries.Registries; @@ -14,6 +16,7 @@ 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; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.damagesource.DamageTypes; @@ -30,6 +33,7 @@ import net.minecraftforge.event.entity.living.LivingHurtEvent; import net.minecraftforge.eventbus.api.Event; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; +import net.minecraftforge.network.PacketDistributor; @Mod.EventBusSubscriber public class LivingEntityEventHandler { @@ -214,4 +218,16 @@ public class LivingEntityEventHandler { server.players().forEach(p -> p.connection.send(clientboundstopsoundpacket)); }); } + + @SubscribeEvent + public static void handlePlayerKillEntity(LivingDeathEvent event) { + LivingEntity entity = event.getEntity(); + DamageSource source = event.getSource(); + + if (source.getDirectEntity() instanceof ServerPlayer player) { + if (source.is(TargetModDamageTypes.GUNFIRE)) { + TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new PlayerKillMessage(player.getId(), entity.getId())); + } + } + } } diff --git a/src/main/java/net/mcreator/target/init/TargetModKeyMappings.java b/src/main/java/net/mcreator/target/init/TargetModKeyMappings.java index b2eefddc9..1bd93d4a2 100644 --- a/src/main/java/net/mcreator/target/init/TargetModKeyMappings.java +++ b/src/main/java/net/mcreator/target/init/TargetModKeyMappings.java @@ -2,10 +2,10 @@ package net.mcreator.target.init; import com.mojang.blaze3d.platform.InputConstants; import net.mcreator.target.TargetMod; -import net.mcreator.target.network.DoubleJumpMessage; -import net.mcreator.target.network.FireModeMessage; -import net.mcreator.target.network.ReloadMessage; -import net.mcreator.target.network.ZoomMessage; +import net.mcreator.target.network.message.DoubleJumpMessage; +import net.mcreator.target.network.message.FireModeMessage; +import net.mcreator.target.network.message.ReloadMessage; +import net.mcreator.target.network.message.ZoomMessage; import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; import net.minecraftforge.api.distmarker.Dist; diff --git a/src/main/java/net/mcreator/target/network/ClientPacketHandler.java b/src/main/java/net/mcreator/target/network/ClientPacketHandler.java index 9adac4069..a3836214f 100644 --- a/src/main/java/net/mcreator/target/network/ClientPacketHandler.java +++ b/src/main/java/net/mcreator/target/network/ClientPacketHandler.java @@ -1,6 +1,9 @@ package net.mcreator.target.network; +import net.mcreator.target.network.message.GunsDataMessage; import net.mcreator.target.tools.GunsTool; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; import net.minecraftforge.fml.LogicalSide; import net.minecraftforge.network.NetworkEvent; @@ -8,9 +11,15 @@ import java.util.function.Supplier; public class ClientPacketHandler { - public static void handleGunsDataMessage(GunsDataMessage message, Supplier ctx) { + public static void handleGunsDataMessage(GunsDataMessage message, Supplier ctx) { if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) { GunsTool.gunsData = message.gunsData; } } + + public static void handlePlayerKillMessage(Player attacker, Entity target, Supplier ctx) { + if (ctx.get().getDirection().getReceptionSide() == LogicalSide.CLIENT) { + System.out.println(attacker + " killed " + target); + } + } } diff --git a/src/main/java/net/mcreator/target/network/DoubleJumpMessage.java b/src/main/java/net/mcreator/target/network/message/DoubleJumpMessage.java similarity index 95% rename from src/main/java/net/mcreator/target/network/DoubleJumpMessage.java rename to src/main/java/net/mcreator/target/network/message/DoubleJumpMessage.java index c996dc462..69ea88c3b 100644 --- a/src/main/java/net/mcreator/target/network/DoubleJumpMessage.java +++ b/src/main/java/net/mcreator/target/network/message/DoubleJumpMessage.java @@ -1,6 +1,7 @@ -package net.mcreator.target.network; +package net.mcreator.target.network.message; import net.mcreator.target.init.TargetModSounds; +import net.mcreator.target.network.TargetModVariables; import net.minecraft.core.BlockPos; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.sounds.SoundSource; diff --git a/src/main/java/net/mcreator/target/network/FireMessage.java b/src/main/java/net/mcreator/target/network/message/FireMessage.java similarity index 98% rename from src/main/java/net/mcreator/target/network/FireMessage.java rename to src/main/java/net/mcreator/target/network/message/FireMessage.java index e6576c0d6..763c8b43f 100644 --- a/src/main/java/net/mcreator/target/network/FireMessage.java +++ b/src/main/java/net/mcreator/target/network/message/FireMessage.java @@ -1,8 +1,9 @@ -package net.mcreator.target.network; +package net.mcreator.target.network.message; import net.mcreator.target.entity.BocekarrowEntity; import net.mcreator.target.init.TargetModEntities; import net.mcreator.target.init.TargetModItems; +import net.mcreator.target.network.TargetModVariables; import net.mcreator.target.procedures.PressFireProcedure; import net.mcreator.target.tools.GunsTool; import net.minecraft.commands.CommandSource; diff --git a/src/main/java/net/mcreator/target/network/FireModeMessage.java b/src/main/java/net/mcreator/target/network/message/FireModeMessage.java similarity index 98% rename from src/main/java/net/mcreator/target/network/FireModeMessage.java rename to src/main/java/net/mcreator/target/network/message/FireModeMessage.java index 5b8f6f22e..5ab792c10 100644 --- a/src/main/java/net/mcreator/target/network/FireModeMessage.java +++ b/src/main/java/net/mcreator/target/network/message/FireModeMessage.java @@ -1,4 +1,4 @@ -package net.mcreator.target.network; +package net.mcreator.target.network.message; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; diff --git a/src/main/java/net/mcreator/target/network/GunRecycleGuiButtonMessage.java b/src/main/java/net/mcreator/target/network/message/GunRecycleGuiButtonMessage.java similarity index 98% rename from src/main/java/net/mcreator/target/network/GunRecycleGuiButtonMessage.java rename to src/main/java/net/mcreator/target/network/message/GunRecycleGuiButtonMessage.java index 97e15044b..4c42d97f5 100644 --- a/src/main/java/net/mcreator/target/network/GunRecycleGuiButtonMessage.java +++ b/src/main/java/net/mcreator/target/network/message/GunRecycleGuiButtonMessage.java @@ -1,4 +1,4 @@ -package net.mcreator.target.network; +package net.mcreator.target.network.message; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModTags; diff --git a/src/main/java/net/mcreator/target/network/GunsDataMessage.java b/src/main/java/net/mcreator/target/network/message/GunsDataMessage.java similarity index 92% rename from src/main/java/net/mcreator/target/network/GunsDataMessage.java rename to src/main/java/net/mcreator/target/network/message/GunsDataMessage.java index 462e08eac..cced6a0cd 100644 --- a/src/main/java/net/mcreator/target/network/GunsDataMessage.java +++ b/src/main/java/net/mcreator/target/network/message/GunsDataMessage.java @@ -1,5 +1,6 @@ -package net.mcreator.target.network; +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; @@ -32,5 +33,4 @@ public class GunsDataMessage { ctx.get().setPacketHandled(true); } - } diff --git a/src/main/java/net/mcreator/target/network/MortarGUIButtonMessage.java b/src/main/java/net/mcreator/target/network/message/MortarGUIButtonMessage.java similarity index 98% rename from src/main/java/net/mcreator/target/network/MortarGUIButtonMessage.java rename to src/main/java/net/mcreator/target/network/message/MortarGUIButtonMessage.java index fcfb4e9af..938caf655 100644 --- a/src/main/java/net/mcreator/target/network/MortarGUIButtonMessage.java +++ b/src/main/java/net/mcreator/target/network/message/MortarGUIButtonMessage.java @@ -1,4 +1,4 @@ -package net.mcreator.target.network; +package net.mcreator.target.network.message; import net.mcreator.target.init.TargetModAttributes; import net.mcreator.target.tools.TraceTool; diff --git a/src/main/java/net/mcreator/target/network/message/PlayerKillMessage.java b/src/main/java/net/mcreator/target/network/message/PlayerKillMessage.java new file mode 100644 index 000000000..ae3f2b2d4 --- /dev/null +++ b/src/main/java/net/mcreator/target/network/message/PlayerKillMessage.java @@ -0,0 +1,49 @@ +package net.mcreator.target.network.message; + +import net.mcreator.target.network.ClientPacketHandler; +import net.minecraft.client.Minecraft; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.fml.DistExecutor; +import net.minecraftforge.network.NetworkEvent; + +import java.util.function.Supplier; + +public class PlayerKillMessage { + public final int attackerId; + public final int targetId; + + public PlayerKillMessage(int attackerId, int targetId) { + this.attackerId = attackerId; + this.targetId = targetId; + } + + public static void encode(PlayerKillMessage message, FriendlyByteBuf buffer) { + buffer.writeInt(message.attackerId); + buffer.writeInt(message.targetId); + } + + public static PlayerKillMessage decode(FriendlyByteBuf buffer) { + int attackerId = buffer.readInt(); + int targetId = buffer.readInt(); + return new PlayerKillMessage(attackerId, targetId); + } + + public static void handler(PlayerKillMessage message, Supplier ctx) { + ctx.get().enqueueWork(() -> { + ClientLevel level = Minecraft.getInstance().level; + if (level != null) { + Player player = level.getEntity(message.attackerId) instanceof Player ? (Player) level.getEntity(message.attackerId) : null; + Entity target = level.getEntity(message.targetId); + + if (player != null && target != null) { + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> ClientPacketHandler.handlePlayerKillMessage(player, target, ctx)); + } + } + }); + ctx.get().setPacketHandled(true); + } +} diff --git a/src/main/java/net/mcreator/target/network/ReloadMessage.java b/src/main/java/net/mcreator/target/network/message/ReloadMessage.java similarity index 96% rename from src/main/java/net/mcreator/target/network/ReloadMessage.java rename to src/main/java/net/mcreator/target/network/message/ReloadMessage.java index 50012d2e6..3a327b4e9 100644 --- a/src/main/java/net/mcreator/target/network/ReloadMessage.java +++ b/src/main/java/net/mcreator/target/network/message/ReloadMessage.java @@ -1,4 +1,4 @@ -package net.mcreator.target.network; +package net.mcreator.target.network.message; import net.mcreator.target.procedures.PlayerReloadProcedure; import net.minecraft.network.FriendlyByteBuf; diff --git a/src/main/java/net/mcreator/target/network/ZoomMessage.java b/src/main/java/net/mcreator/target/network/message/ZoomMessage.java similarity index 95% rename from src/main/java/net/mcreator/target/network/ZoomMessage.java rename to src/main/java/net/mcreator/target/network/message/ZoomMessage.java index 7a557ba66..4049ccaca 100644 --- a/src/main/java/net/mcreator/target/network/ZoomMessage.java +++ b/src/main/java/net/mcreator/target/network/message/ZoomMessage.java @@ -1,5 +1,6 @@ -package net.mcreator.target.network; +package net.mcreator.target.network.message; +import net.mcreator.target.network.TargetModVariables; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.Level; diff --git a/src/main/java/net/mcreator/target/tools/GunsTool.java b/src/main/java/net/mcreator/target/tools/GunsTool.java index 609ef1f75..1c94ee971 100644 --- a/src/main/java/net/mcreator/target/tools/GunsTool.java +++ b/src/main/java/net/mcreator/target/tools/GunsTool.java @@ -5,7 +5,7 @@ import net.mcreator.target.TargetMod; import net.mcreator.target.entity.ProjectileEntity; import net.mcreator.target.init.TargetModAttributes; import net.mcreator.target.init.TargetModItems; -import net.mcreator.target.network.GunsDataMessage; +import net.mcreator.target.network.message.GunsDataMessage; import net.mcreator.target.network.TargetModVariables; import net.minecraft.nbt.CompoundTag; import net.minecraft.server.level.ServerPlayer;