From 3e6a27cb7d07bfd30676cd377c7c3ee3f35fd612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?William=20Herg=C3=A8s?= Date: Sun, 12 Oct 2025 17:31:24 +0200 Subject: feat(config): set max hearts --- src/main/java/world/anhgelus/lifesteal/LifeSteal.java | 12 ++++++++++++ src/main/java/world/anhgelus/lifesteal/LifeStealer.java | 8 ++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) (limited to 'src/main/java/world') diff --git a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java index eb106bd..83d442f 100644 --- a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java +++ b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java @@ -4,6 +4,8 @@ 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.gamerule.v1.GameRuleFactory; +import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry; import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.minecraft.entity.LivingEntity; @@ -11,6 +13,7 @@ import net.minecraft.entity.damage.DamageSource; import net.minecraft.server.MinecraftServer; import net.minecraft.server.network.ServerPlayNetworkHandler; import net.minecraft.server.network.ServerPlayerEntity; +import net.minecraft.world.GameRules; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -19,6 +22,15 @@ 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); + public static float MIN_HEALTH = 0; + public static float MAX_HEALTH = 40; + public static final GameRules.Key MAX_HEARTS = GameRuleRegistry.register( + MOD_ID + ":maxHearts", + GameRules.Category.MISC, + GameRuleFactory.createIntRule((int) MAX_HEALTH / 2, (server, rule) -> { + MAX_HEALTH = rule.get() * 2; + }) + ); @Override public void onInitialize() { diff --git a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java index b8d774a..390a957 100644 --- a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java +++ b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java @@ -36,6 +36,10 @@ public class LifeStealer { this.healthModifier = data.healthModifier(); } + private static float clamp(float healthModifier) { + return MathHelper.clamp(healthModifier, LifeSteal.MIN_HEALTH - 20, LifeSteal.MAX_HEALTH - 20); + } + private void updateHealth() { healthModifier = MathHelper.clamp(healthModifier, -20, 20); final var attr = player.getAttributeInstance(EntityAttributes.MAX_HEALTH); @@ -61,12 +65,12 @@ public class LifeStealer { } public void kill() { - healthModifier = MathHelper.clamp(healthModifier + 2, -20, 20); + healthModifier = clamp(healthModifier + 2); updateHealth(); } public void death() { - healthModifier = MathHelper.clamp(healthModifier - 2, -20, 20); + healthModifier = clamp(healthModifier - 2); if (healthModifier <= -20) { player.getEntityWorld() .getServer() -- cgit v1.2.3