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 c0875de8e..4a067bb2b 100644 --- a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java @@ -1,5 +1,6 @@ package net.mcreator.target.client.screens; +import net.mcreator.target.TargetMod; import net.mcreator.target.event.KillMessageHandler; import net.mcreator.target.item.gun.GunItem; import net.mcreator.target.tools.PlayerKillRecord; @@ -15,6 +16,7 @@ import net.minecraftforge.fml.common.Mod; @Mod.EventBusSubscriber(value = Dist.CLIENT) public class KillMessageOverlay { + private static final ResourceLocation HEADSHOT = new ResourceLocation(TargetMod.MODID, "textures/screens/headshot.png"); @SubscribeEvent(priority = EventPriority.NORMAL) public static void eventHandler(RenderGuiEvent.Pre event) { @@ -80,5 +82,18 @@ public class KillMessageOverlay { record.target.getTeamColor(), false ); + + if (record.headshot) { + event.getGuiGraphics().blit(HEADSHOT, + w - targetNameWidth - 65 - attackerNameWidth, + h, + 0, + 0, + 8, + 8, + 8, + 8 + ); + } } } diff --git a/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java b/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java index 6579ff09b..c6801b060 100644 --- a/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java +++ b/src/main/java/net/mcreator/target/event/LivingEntityEventHandler.java @@ -224,12 +224,15 @@ public class LivingEntityEventHandler { LivingEntity entity = event.getEntity(); DamageSource source = event.getSource(); + if (!TargetModVariables.MapVariables.get(entity.level()).pvpMode) { + return; + } + if (source.getDirectEntity() instanceof ServerPlayer player) { - // TODO 修改发包 - if (source.is(TargetModDamageTypes.GUN_FIRE)) { - TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new PlayerKillMessage(player.getId(), entity.getId(), false)); - } else if (source.is(TargetModDamageTypes.GUN_FIRE_HEADSHOT)) { - TargetMod.PACKET_HANDLER.send(PacketDistributor.PLAYER.with(() -> player), new PlayerKillMessage(player.getId(), entity.getId(), true)); + if (source.is(TargetModDamageTypes.GUN_FIRE) || source.is(TargetModDamageTypes.ARROW_IN_BRAIN)) { + TargetMod.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerKillMessage(player.getId(), entity.getId(), false)); + } else if (source.is(TargetModDamageTypes.GUN_FIRE_HEADSHOT) || source.is(TargetModDamageTypes.ARROW_IN_BRAIN_HEADSHOT)) { + TargetMod.PACKET_HANDLER.send(PacketDistributor.ALL.noArg(), new PlayerKillMessage(player.getId(), entity.getId(), true)); } } } diff --git a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java index 5c4bac287..982863346 100644 --- a/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java +++ b/src/main/java/net/mcreator/target/init/TargetModDamageTypes.java @@ -19,6 +19,7 @@ public class TargetModDamageTypes { public static final ResourceKey GUN_FIRE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "gunfire")); public static final ResourceKey GUN_FIRE_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "gunfire_headshot")); public static final ResourceKey ARROW_IN_BRAIN = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "arrow_in_brain")); + public static final ResourceKey ARROW_IN_BRAIN_HEADSHOT = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "arrow_in_brain_headshot")); public static final ResourceKey MINE = ResourceKey.create(Registries.DAMAGE_TYPE, new ResourceLocation(TargetMod.MODID, "mine")); @@ -34,6 +35,10 @@ public class TargetModDamageTypes { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(ARROW_IN_BRAIN), entity); } + public static DamageSource causeArrowInBrainHeadshotDamage(RegistryAccess registryAccess, @Nullable Entity entity) { + return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(ARROW_IN_BRAIN_HEADSHOT), entity); + } + public static DamageSource causeMineDamage(RegistryAccess registryAccess, @Nullable Entity entity) { return new DamageMessages(registryAccess.registry(Registries.DAMAGE_TYPE).get().getHolderOrThrow(MINE), entity); } diff --git a/src/main/resources/assets/target/lang/en_us.json b/src/main/resources/assets/target/lang/en_us.json index 6e1d16653..e273d3104 100644 --- a/src/main/resources/assets/target/lang/en_us.json +++ b/src/main/resources/assets/target/lang/en_us.json @@ -157,8 +157,11 @@ "death.attack.gunfire_headshot.entity": "%1$s was headshot by %2$s", "death.attack.gunfire_headshot.item": "%1$s was headshot by %2$s using %3$s", "death.attack.arrow_in_brain": "%2$s's arrow shot into %1$s's brain", - "death.attack.arrow_in_brain.item": "An arrow shot into %1$s's brain,murderer is %2$s used %3$s", "death.attack.arrow_in_brain.entity": "An arrow shot into %1$s's brain whilst trying to escape %2$s", + "death.attack.arrow_in_brain.item": "%2$s used %3$s to make an arrow shot into %1$s's brain", + "death.attack.arrow_in_brain_headshot": "%1$s was headshot by an arrow from %2$s", + "death.attack.arrow_in_brain_headshot.entity": "%1$s was headshot by an arrow while escaping from %2$s", + "death.attack.arrow_in_brain_headshot.item": "%2$s used %3$s to let %1$s be headshot by an arrow", "death.attack.beast_gun": "%1$s was killed by %2$s using BEAST guns", "Shell Estimated Range": "Estimated Range:", diff --git a/src/main/resources/assets/target/lang/zh_cn.json b/src/main/resources/assets/target/lang/zh_cn.json index f61834d13..be3f603e6 100644 --- a/src/main/resources/assets/target/lang/zh_cn.json +++ b/src/main/resources/assets/target/lang/zh_cn.json @@ -157,8 +157,11 @@ "death.attack.gunfire_headshot.entity": "%1$s被%2$s射爆了脑袋", "death.attack.gunfire_headshot.item": "%1$s被%2$s用%3$s射爆了脑袋", "death.attack.arrow_in_brain": "%1$s的脑子进矢了,凶手是%2$s", - "death.attack.arrow_in_brain.item": "%1$s的脑子进矢了,凶手%2$s使用了%3$s", "death.attack.arrow_in_brain.entity": "%1$s在逃离%2$s的时候脑子进矢了", + "death.attack.arrow_in_brain.item": "%2$s用%3$s让%1$s的脑子进矢了", + "death.attack.arrow_in_brain_headshot": "%1$s被矢爆头了,凶手是%2$s", + "death.attack.arrow_in_brain_headshot.entity": "%1$s在逃离%2$s的时候被矢爆头了", + "death.attack.arrow_in_brain_headshot.item": "%2$s用%3$s让%1$s被矢爆头了", "death.attack.beast_gun": "%1$s被%2$s用BEAST枪械臭炸了", "Shell Estimated Range": "炮弹预估射程:", diff --git a/src/main/resources/assets/target/textures/screens/headshot.png b/src/main/resources/assets/target/textures/screens/headshot.png new file mode 100644 index 000000000..f4be5a370 Binary files /dev/null and b/src/main/resources/assets/target/textures/screens/headshot.png differ diff --git a/src/main/resources/data/target/damage_type/arrow_in_brain_headshot.json b/src/main/resources/data/target/damage_type/arrow_in_brain_headshot.json new file mode 100644 index 000000000..ff4a5328c --- /dev/null +++ b/src/main/resources/data/target/damage_type/arrow_in_brain_headshot.json @@ -0,0 +1,5 @@ +{ + "exhaustion": 0, + "message_id": "arrow_in_brain_headshot", + "scaling": "never" +} \ No newline at end of file