From 59912b7037d1c2833f39e237242f27e1e03b9caa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sun, 12 Oct 2025 17:21:36 +0200 Subject: feat(player): handle events --- .../java/world/anhgelus/lifesteal/LifeSteal.java | 25 ++++++++++++++++++++++ .../java/world/anhgelus/lifesteal/LifeStealer.java | 8 +------ 2 files changed, 26 insertions(+), 7 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java index dfbc9d6..eb106bd 100644 --- a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java +++ b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java @@ -1,10 +1,21 @@ package world.anhgelus.lifesteal; import net.fabricmc.api.ModInitializer; +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.networking.v1.PacketSender; +import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ServerPlayNetworkHandler; +import net.minecraft.server.network.ServerPlayerEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static world.anhgelus.lifesteal.LifeStealer.Manager.getLifeStealer; + public class LifeSteal implements ModInitializer { public static final String MOD_ID = "lifesteal"; public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); @@ -22,5 +33,19 @@ public class LifeSteal implements ModInitializer { final var state = StateSaver.getServerState(server); LifeStealer.Manager.savePlayers(state); }); + + ServerPlayConnectionEvents.JOIN.register((ServerPlayNetworkHandler handler, PacketSender sender, MinecraftServer server) -> { + getLifeStealer(handler.player).respawn(handler.player); + }); + + ServerLivingEntityEvents.AFTER_DEATH.register((LivingEntity entity, DamageSource damageSource) -> { + if (!(entity instanceof ServerPlayerEntity player)) return; + getLifeStealer(player).death(); + if (damageSource.getAttacker() instanceof ServerPlayerEntity killer) getLifeStealer(killer).kill(); + }); + + ServerPlayerEvents.AFTER_RESPAWN.register((ServerPlayerEntity oldPlayer, ServerPlayerEntity newPlayer, boolean alive) -> { + getLifeStealer(oldPlayer).respawn(newPlayer); + }); } } diff --git a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java index 9282ea8..2942055 100644 --- a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java +++ b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java @@ -12,7 +12,6 @@ import net.minecraft.nbt.NbtCompound; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.util.Identifier; import net.minecraft.util.math.MathHelper; -import org.jetbrains.annotations.Nullable; import java.util.HashMap; import java.util.Map; @@ -65,7 +64,7 @@ public class LifeStealer { updateHealth(); } - public void killed() { + public void death() { healthModifier = MathHelper.clamp(healthModifier - 2, -20, 20); if (healthModifier <= 0) { //TODO: ban player @@ -98,11 +97,6 @@ public class LifeStealer { return players.computeIfAbsent(player.getUuid(), k -> new LifeStealer(player, Data.DEFAULT)); } - @Nullable - public static LifeStealer getLifeStealer(UUID uuid) { - return players.get(uuid); - } - public static void loadPlayers(StateSaver state) { state.players.forEach((uuid, data) -> players.put(uuid, new LifeStealer(uuid, data))); } -- cgit v1.2.3