diff options
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/world/anhgelus/lifesteal/LifeSteal.java | 10 | ||||
| -rw-r--r-- | src/main/java/world/anhgelus/lifesteal/LifeStealer.java | 12 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java index 419480c..b237e6c 100644 --- a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java +++ b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java @@ -6,6 +6,7 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.entity.event.v1.ServerLivingEntityEvents; import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; +import net.fabricmc.fabric.api.event.player.UseItemCallback; import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory; import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; import net.fabricmc.fabric.api.networking.v1.PacketSender; @@ -18,6 +19,7 @@ import net.minecraft.server.command.CommandManager; import net.minecraft.server.command.ServerCommandSource; import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.util.ActionResult; import net.minecraft.world.GameRules; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -68,5 +70,13 @@ public class LifeSteal implements ModInitializer { ServerPlayerEvents.AFTER_RESPAWN.register((ServerPlayerEntity oldPlayer, ServerPlayerEntity newPlayer, boolean alive) -> { getLifeStealer(oldPlayer).respawn(newPlayer); }); + + UseItemCallback.EVENT.register((player, world, hand) -> { + if (!LifeStealer.Manager.validHeart(player.getMainHandStack())) return ActionResult.PASS; + // if the heart was not added + if (!getLifeStealer((ServerPlayerEntity) player).kill()) return ActionResult.PASS; + player.getMainHandStack().decrement(1); + return ActionResult.SUCCESS; + }); } } diff --git a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java index 390a957..9052515 100644 --- a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java +++ b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java @@ -64,9 +64,11 @@ public class LifeStealer { updateHealth(); } - public void kill() { + public boolean kill() { + final var before = healthModifier; healthModifier = clamp(healthModifier + 2); updateHealth(); + return before != healthModifier; } public void death() { @@ -115,5 +117,13 @@ public class LifeStealer { public static void savePlayers(StateSaver state) { players.forEach((u, player) -> state.players.put(u, LifeStealer.Data.from(player))); } + + public static boolean validHeart(ItemStack is) { + if (!is.isOf(Items.NETHER_STAR)) return false; + final var nbtComponent = is.get(DataComponentTypes.CUSTOM_DATA); + if (nbtComponent == null || nbtComponent.isEmpty()) return false; + final var nbt = nbtComponent.copyNbt(); + return nbt.contains(PLAYER_KEY); + } } } |
