From d51f3acc89146aae496ce5e038af4f4818d5462f Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Mon, 13 Oct 2025 15:16:13 +0200 Subject: refactor(hearts): convert stack into heart instead of creating a new one --- src/main/java/world/anhgelus/lifesteal/LifeStealer.java | 7 ++++++- src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java index 2d1268a..409e3d6 100644 --- a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java +++ b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java @@ -60,9 +60,14 @@ public class LifeStealer { } public ItemStack getHeart() { + return turnsIntoHeart(new ItemStack(Items.NETHER_STAR)); + } + + public ItemStack turnsIntoHeart(ItemStack is) { + if (!is.isOf(Items.NETHER_STAR)) + throw new IllegalArgumentException("Cannot convert a stack into an heart if it's not a nether star"); final var nbt = new NbtCompound(); nbt.putString(PLAYER_KEY, player.getUuid().toString()); - final var is = new ItemStack(Items.NETHER_STAR); is.set(DataComponentTypes.CUSTOM_NAME, Text.empty().append(Text.of("Heart of ")).append(player.getName())); is.set(DataComponentTypes.CUSTOM_DATA, NbtComponent.of(nbt)); return is; diff --git a/src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java b/src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java index d6de2ce..9f6effb 100644 --- a/src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java +++ b/src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java @@ -19,11 +19,11 @@ public class ItemMixin { public void craft(ItemStack is, PlayerEntity player, CallbackInfo ci) { if (!is.isOf(Items.NETHER_STAR)) return; // assuming that the nether star cannot be crafted final var lifestealer = LifeStealer.Manager.getLifeStealer((ServerPlayerEntity) player); - player.getInventory().removeOne(is); if (LifeSteal.CAN_CRAFT_HEARTS_ABOVE_VANILLA_MAX || lifestealer.getHealthModifier() < 0) { - player.giveOrDropStack(lifestealer.getHeart()); + lifestealer.turnsIntoHeart(is); return; } + player.getInventory().removeOne(is); final var ingots = new ItemStack(Items.NETHERITE_INGOT); ingots.setCount(4); player.giveOrDropStack(ingots); -- cgit v1.2.3