From 6f5a440d41bb718934324b88730a43716737cb37 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Mon, 20 May 2024 18:05:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=88=86=E7=82=B8=E6=95=88?= =?UTF-8?q?=E6=9E=9C=E7=9A=84=E5=9B=BE=E6=A0=87=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/screens/KillMessageOverlay.java | 33 ++++++++++++++---- .../event/LivingEntityEventHandler.java | 13 +++++-- .../target/textures/screens/claymore.png | Bin 0 -> 199 bytes .../target/textures/screens/explosion.png | Bin 0 -> 363 bytes .../assets/target/textures/screens/knife.png | Bin 0 -> 548 bytes 5 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 src/main/resources/assets/target/textures/screens/claymore.png create mode 100644 src/main/resources/assets/target/textures/screens/explosion.png create mode 100644 src/main/resources/assets/target/textures/screens/knife.png diff --git a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java index 2a6be8313..ee673c679 100644 --- a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java @@ -7,6 +7,7 @@ import net.mcreator.target.tools.PlayerKillRecord; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Font; import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.damagesource.DamageTypes; import net.minecraft.world.entity.player.Player; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RenderGuiEvent; @@ -18,6 +19,10 @@ import net.minecraftforge.fml.common.Mod; public class KillMessageOverlay { private static final ResourceLocation HEADSHOT = new ResourceLocation(TargetMod.MODID, "textures/screens/headshot.png"); + private static final ResourceLocation KNIFE = new ResourceLocation(TargetMod.MODID, "textures/screens/knife.png"); + private static final ResourceLocation EXPLOSION = new ResourceLocation(TargetMod.MODID, "textures/screens/explosion.png"); + private static final ResourceLocation CLAYMORE = new ResourceLocation(TargetMod.MODID, "textures/screens/claymore.png"); + @SubscribeEvent(priority = EventPriority.NORMAL) public static void eventHandler(RenderGuiEvent.Pre event) { Player player = Minecraft.getInstance().player; @@ -44,10 +49,7 @@ public class KillMessageOverlay { Font font = Minecraft.getInstance().font; - String attackerName = record.attacker.getDisplayName().getString(); String targetName = record.target.getDisplayName().getString(); - - int attackerNameWidth = font.width(attackerName); int targetNameWidth = font.width(targetName); // 击杀提示是右对齐的,这里从右向左渲染 @@ -76,12 +78,27 @@ public class KillMessageOverlay { ); } + // 如果是爆炸伤害,则渲染爆炸图标 + boolean explosion = false; + if (record.damageType == DamageTypes.EXPLOSION || record.damageType == DamageTypes.PLAYER_EXPLOSION) { + explosion = true; + int explosionW = w - targetNameWidth - 26; + event.getGuiGraphics().blit(EXPLOSION, + explosionW, + h - 2, + 0, + 0, + 12, + 12, + 12, + 12 + ); + } + // 如果是枪械击杀,则渲染枪械图标 if (record.stack.getItem() instanceof GunItem gunItem) { ResourceLocation resourceLocation = gunItem.getGunIcon(); - - int gunIconW = record.headshot ? w - targetNameWidth - 64 : w - targetNameWidth - 46; - + int gunIconW = (record.headshot || explosion) ? w - targetNameWidth - 64 : w - targetNameWidth - 46; event.getGuiGraphics().blit(resourceLocation, gunIconW, h, @@ -95,7 +112,9 @@ public class KillMessageOverlay { } // 渲染击杀者名称 - int nameW = record.headshot ? w - targetNameWidth - 68 - attackerNameWidth : w - targetNameWidth - 50 - attackerNameWidth; + String attackerName = record.attacker.getDisplayName().getString(); + int attackerNameWidth = font.width(attackerName); + int nameW = (record.headshot || explosion) ? w - targetNameWidth - 68 - attackerNameWidth : w - targetNameWidth - 50 - attackerNameWidth; event.getGuiGraphics().drawString( Minecraft.getInstance().font, diff --git a/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java b/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java index 63caf915f..093385236 100644 --- a/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java +++ b/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java @@ -24,6 +24,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; +import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.LevelAccessor; import net.minecraftforge.event.entity.living.LivingAttackEvent; @@ -220,11 +221,19 @@ public class LivingEntityEventHandler { ResourceKey damageTypeResourceKey = source.typeHolder().unwrapKey().isPresent() ? source.typeHolder().unwrapKey().get() : DamageTypes.GENERIC; + ServerPlayer attacker = null; if (source.getDirectEntity() instanceof ServerPlayer player) { + attacker = player; + } + if (source.getDirectEntity() instanceof Projectile projectile && projectile.getOwner() instanceof ServerPlayer player) { + attacker = player; + } + + if (attacker != null) { if (source.is(TargetModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(TargetModDamageTypes.ARROW_IN_BRAIN)) { - TargetMod.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(player.getId(), entity.getId(), true, damageTypeResourceKey)); + TargetMod.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), true, damageTypeResourceKey)); } else { - TargetMod.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(player.getId(), entity.getId(), false, damageTypeResourceKey)); + TargetMod.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerGunKillMessage(attacker.getId(), entity.getId(), false, damageTypeResourceKey)); } } } diff --git a/src/main/resources/assets/target/textures/screens/claymore.png b/src/main/resources/assets/target/textures/screens/claymore.png new file mode 100644 index 0000000000000000000000000000000000000000..83efced73ab3fc04c5286e7f0694c0093cb00621 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4jBOuH;Rhv&5C|K#~ z;usRq`gWQj-vI?4=C`ZrAN^NeU$opSG_*A!By~l;s+zk5gF$`!O(#z#hDnLf)||e= zbinL#%`~69^EsEQ*%`K6YxDK|G;89L455DReE&HQ^(OCX(%;y?s*}LT%@bKG?)LK& s=M?UiIgg|NPH+LTBNoIQm{G*HZGvr*S;mHiKu0imy85}Sb4q9e0GR4VZ2$lO literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/target/textures/screens/explosion.png b/src/main/resources/assets/target/textures/screens/explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..a124709a282f6d68274ad4ca6a364709eab041f4 GIT binary patch literal 363 zcmV-x0hIoUP);wj?NO*9o~y0g>PNLQ@cIG1S>ql374=+y6<~QB;tbxh=@>k zL_{S;CCto>>V!MJhR8_ebJVpqH5iaWNswcCb}#@#EwT|5$vfn&zT5nfs9;# zk46R;5)q+o&&0AE?+pnb7Gxwk1(cILUhWHphy}<*B?pe6BIpr%sMeEqFAFa{1fm{GkT&`8--{ zEX(40y#i1u6rQ?dLJJIsLz&O#n$6}@5`V0)*XxOG+a!}owAL7gLA6@_ z(GSa)4Oo^X>-8D{*L5R-!xs(o`+ad72LR9WNF)-Gz~PeyCX(Xd6;`@#ISMm$&V<4?oqjOsT0000