aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorWilliam Hergès <william@herges.fr>2025-10-12 17:21:36 +0200
committerWilliam Hergès <william@herges.fr>2025-10-12 17:21:36 +0200
commit59912b7037d1c2833f39e237242f27e1e03b9caa (patch)
treeda21e66af28379383fb42da3a2f538b14e3fd21d /src/main/java
parent3d67fd7e20be31eac2c6123e54c3dcfae60c8fea (diff)
feat(player): handle events
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeSteal.java25
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeStealer.java8
2 files changed, 26 insertions, 7 deletions
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)));
}