aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeSteal.java8
-rw-r--r--src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java14
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 062278d..f5f8892 100644
--- a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java
+++ b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java
@@ -47,6 +47,14 @@ public class LifeSteal implements ModInitializer {
GRACE_PERIOD = rule.get();
})
);
+ public static boolean CAN_CRAFT_HEARTS_ABOVE_VANILLA_MAX = false;
+ public static final GameRules.Key<GameRules.BooleanRule> RULE_CAN_CRAFT_HEARTS_MAX = GameRuleRegistry.register(
+ MOD_ID + ":canCraftHeartsAboveVanillaMax",
+ GameRules.Category.MISC,
+ GameRuleFactory.createBooleanRule(CAN_CRAFT_HEARTS_ABOVE_VANILLA_MAX, (server, rule) -> {
+ CAN_CRAFT_HEARTS_ABOVE_VANILLA_MAX = rule.get();
+ })
+ );
@Override
public void onInitialize() {
diff --git a/src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java b/src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java
index a405637..3ad1697 100644
--- a/src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java
+++ b/src/main/java/world/anhgelus/lifesteal/mixin/ItemMixin.java
@@ -5,10 +5,12 @@ import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.server.network.ServerPlayerEntity;
+import net.minecraft.text.Text;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import world.anhgelus.lifesteal.LifeSteal;
import world.anhgelus.lifesteal.LifeStealer;
@Mixin(Item.class)
@@ -18,6 +20,16 @@ public class ItemMixin {
if (!is.isOf(Items.NETHER_STAR)) return; // assuming that the nether star cannot be crafted
final var lifestealer = LifeStealer.Manager.getLifeStealer((ServerPlayerEntity) player);
player.getInventory().removeOne(is);
- player.giveOrDropStack(lifestealer.getHeart());
+ if (LifeSteal.CAN_CRAFT_HEARTS_ABOVE_VANILLA_MAX && lifestealer.getHealthModifier() < 0) {
+ player.giveOrDropStack(lifestealer.getHeart());
+ return;
+ }
+ final var netherites = new ItemStack(Items.NETHERITE_INGOT);
+ netherites.setCount(4);
+ player.giveOrDropStack(netherites);
+ final var shells = new ItemStack(Items.NAUTILUS_SHELL);
+ shells.setCount(4);
+ player.giveOrDropStack(shells);
+ player.sendMessage(Text.of("You cannot craft hearts because you at/above 10 hearts."), false);
}
}