From e02d4bee528ae7011a533fcaed76e9ea110c7f85 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Tue, 21 May 2024 17:07:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E7=8B=97=E7=89=8C?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=E5=92=8C=E9=85=8D=E6=96=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/screens/KillMessageOverlay.java | 38 ++++++++++++++++--- .../java/net/mcreator/target/item/DogTag.java | 15 ++++++++ .../data/target/recipes/dog_tag_crafting.json | 19 ++++++++++ 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 src/main/resources/data/target/recipes/dog_tag_crafting.json 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 0f5e06b8e..01d1343c1 100644 --- a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java @@ -3,6 +3,7 @@ package net.mcreator.target.client.screens; import net.mcreator.target.TargetMod; import net.mcreator.target.event.KillMessageHandler; import net.mcreator.target.init.TargetModDamageTypes; +import net.mcreator.target.init.TargetModItems; import net.mcreator.target.item.gun.GunItem; import net.mcreator.target.tools.PlayerKillRecord; import net.minecraft.client.Minecraft; @@ -16,6 +17,9 @@ import net.minecraftforge.eventbus.api.EventPriority; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import org.jetbrains.annotations.Nullable; +import top.theillusivec4.curios.api.CuriosApi; + +import java.util.concurrent.atomic.AtomicReference; @Mod.EventBusSubscriber(value = Dist.CLIENT) public class KillMessageOverlay { @@ -54,15 +58,27 @@ public class KillMessageOverlay { Font font = Minecraft.getInstance().font; - String targetName = record.target.getDisplayName().getString(); - int targetNameWidth = font.width(targetName); + AtomicReference targetName = new AtomicReference<>(record.target.getDisplayName().getString()); + if (record.target instanceof Player targetPlayer) { + CuriosApi.getCuriosInventory(targetPlayer).ifPresent( + c -> c.findFirstCurio(TargetModItems.DOG_TAG.get()).ifPresent( + s -> { + if (s.stack().hasCustomHoverName()) { + targetName.set(s.stack().getHoverName().getString()); + } + } + ) + ); + } + + int targetNameWidth = font.width(targetName.get()); // 击杀提示是右对齐的,这里从右向左渲染 // 渲染被击杀者名称 event.getGuiGraphics().drawString( Minecraft.getInstance().font, - targetName, + targetName.get(), w - targetNameWidth - 10f, h, record.target.getTeamColor(), @@ -124,8 +140,18 @@ public class KillMessageOverlay { } // 渲染击杀者名称 - String attackerName = record.attacker.getDisplayName().getString(); - int attackerNameWidth = font.width(attackerName); + AtomicReference attackerName = new AtomicReference<>(record.attacker.getDisplayName().getString()); + CuriosApi.getCuriosInventory(record.attacker).ifPresent( + c -> c.findFirstCurio(TargetModItems.DOG_TAG.get()).ifPresent( + s -> { + if (s.stack().hasCustomHoverName()) { + attackerName.set(s.stack().getHoverName().getString()); + } + } + ) + ); + + int attackerNameWidth = font.width(attackerName.get()); int nameW = w - targetNameWidth - 16 - attackerNameWidth; if (renderItem) { nameW -= 32; @@ -136,7 +162,7 @@ public class KillMessageOverlay { event.getGuiGraphics().drawString( Minecraft.getInstance().font, - attackerName, + attackerName.get(), nameW, h, record.attacker.getTeamColor(), diff --git a/src/main/java/net/mcreator/target/item/DogTag.java b/src/main/java/net/mcreator/target/item/DogTag.java index 1aa04e153..53cc3e53c 100644 --- a/src/main/java/net/mcreator/target/item/DogTag.java +++ b/src/main/java/net/mcreator/target/item/DogTag.java @@ -1,10 +1,25 @@ package net.mcreator.target.item; +import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import top.theillusivec4.curios.api.CuriosApi; +import top.theillusivec4.curios.api.SlotContext; import top.theillusivec4.curios.api.type.capability.ICurioItem; +import java.util.concurrent.atomic.AtomicBoolean; + public class DogTag extends Item implements ICurioItem { public DogTag() { super(new Properties().stacksTo(1)); } + + @Override + public boolean canEquip(SlotContext slotContext, ItemStack stack) { + LivingEntity livingEntity = slotContext.entity(); + AtomicBoolean flag = new AtomicBoolean(true); + CuriosApi.getCuriosInventory(livingEntity).ifPresent(c -> c.findFirstCurio(this).ifPresent(s -> flag.set(false))); + + return flag.get(); + } } diff --git a/src/main/resources/data/target/recipes/dog_tag_crafting.json b/src/main/resources/data/target/recipes/dog_tag_crafting.json new file mode 100644 index 000000000..c0c14cc49 --- /dev/null +++ b/src/main/resources/data/target/recipes/dog_tag_crafting.json @@ -0,0 +1,19 @@ +{ + "type": "minecraft:crafting_shaped", + "pattern": [ + "#", + "N" + ], + "key": { + "#": { + "item": "minecraft:chain" + }, + "N": { + "item": "minecraft:name_tag" + } + }, + "result": { + "item": "target:dog_tag", + "count": 1 + } +} \ No newline at end of file