diff options
| author | William Hergès <william@herges.fr> | 2025-10-12 17:31:24 +0200 |
|---|---|---|
| committer | William Hergès <william@herges.fr> | 2025-10-12 17:31:24 +0200 |
| commit | 3e6a27cb7d07bfd30676cd377c7c3ee3f35fd612 (patch) | |
| tree | 582c24089b94ae7bd4c34bf3bc0076541afbdc7c /src/main/java/world/anhgelus | |
| parent | 733d456e75ed80c25a64299203a847841c8134ad (diff) | |
feat(config): set max hearts
Diffstat (limited to 'src/main/java/world/anhgelus')
| -rw-r--r-- | src/main/java/world/anhgelus/lifesteal/LifeSteal.java | 12 | ||||
| -rw-r--r-- | src/main/java/world/anhgelus/lifesteal/LifeStealer.java | 8 |
2 files changed, 18 insertions, 2 deletions
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<GameRules.IntRule> 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() |
