aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/world
diff options
context:
space:
mode:
authorWilliam Hergès <william@herges.fr>2025-10-12 17:31:24 +0200
committerWilliam Hergès <william@herges.fr>2025-10-12 17:31:24 +0200
commit3e6a27cb7d07bfd30676cd377c7c3ee3f35fd612 (patch)
tree582c24089b94ae7bd4c34bf3bc0076541afbdc7c /src/main/java/world
parent733d456e75ed80c25a64299203a847841c8134ad (diff)
feat(config): set max hearts
Diffstat (limited to 'src/main/java/world')
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeSteal.java12
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeStealer.java8
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()