aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeSteal.java10
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeStealer.java12
2 files changed, 21 insertions, 1 deletions
diff --git a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java
index 419480c..b237e6c 100644
--- a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java
+++ b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java
@@ -6,6 +6,7 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
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.event.player.UseItemCallback;
import net.fabricmc.fabric.api.gamerule.v1.GameRuleFactory;
import net.fabricmc.fabric.api.gamerule.v1.GameRuleRegistry;
import net.fabricmc.fabric.api.networking.v1.PacketSender;
@@ -18,6 +19,7 @@ import net.minecraft.server.command.CommandManager;
import net.minecraft.server.command.ServerCommandSource;
import net.minecraft.server.network.ServerPlayNetworkHandler;
import net.minecraft.server.network.ServerPlayerEntity;
+import net.minecraft.util.ActionResult;
import net.minecraft.world.GameRules;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -68,5 +70,13 @@ public class LifeSteal implements ModInitializer {
ServerPlayerEvents.AFTER_RESPAWN.register((ServerPlayerEntity oldPlayer, ServerPlayerEntity newPlayer, boolean alive) -> {
getLifeStealer(oldPlayer).respawn(newPlayer);
});
+
+ UseItemCallback.EVENT.register((player, world, hand) -> {
+ if (!LifeStealer.Manager.validHeart(player.getMainHandStack())) return ActionResult.PASS;
+ // if the heart was not added
+ if (!getLifeStealer((ServerPlayerEntity) player).kill()) return ActionResult.PASS;
+ player.getMainHandStack().decrement(1);
+ return ActionResult.SUCCESS;
+ });
}
}
diff --git a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java
index 390a957..9052515 100644
--- a/src/main/java/world/anhgelus/lifesteal/LifeStealer.java
+++ b/src/main/java/world/anhgelus/lifesteal/LifeStealer.java
@@ -64,9 +64,11 @@ public class LifeStealer {
updateHealth();
}
- public void kill() {
+ public boolean kill() {
+ final var before = healthModifier;
healthModifier = clamp(healthModifier + 2);
updateHealth();
+ return before != healthModifier;
}
public void death() {
@@ -115,5 +117,13 @@ public class LifeStealer {
public static void savePlayers(StateSaver state) {
players.forEach((u, player) -> state.players.put(u, LifeStealer.Data.from(player)));
}
+
+ public static boolean validHeart(ItemStack is) {
+ if (!is.isOf(Items.NETHER_STAR)) return false;
+ final var nbtComponent = is.get(DataComponentTypes.CUSTOM_DATA);
+ if (nbtComponent == null || nbtComponent.isEmpty()) return false;
+ final var nbt = nbtComponent.copyNbt();
+ return nbt.contains(PLAYER_KEY);
+ }
}
}