aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-10-13 11:18:54 +0200
committerAnhgelus Morhtuuzh <william@herges.fr>2025-10-13 11:18:54 +0200
commit9a7594b43abdd0d6a83326ab5f53b8baf756a3ee (patch)
tree2b8b078a838154d1463cf043c06eb43c77745875
parent0a9c370cdfed7442e0b019da302c2f09fb40502d (diff)
feat(hearts): disable store hearts in ec
-rw-r--r--README.md5
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeSteal.java8
-rw-r--r--src/main/java/world/anhgelus/lifesteal/mixin/InventoryMixin.java22
-rw-r--r--src/main/resources/lifesteal.mixins.json1
4 files changed, 35 insertions, 1 deletions
diff --git a/README.md b/README.md
index 807c42c..e187771 100644
--- a/README.md
+++ b/README.md
@@ -10,4 +10,7 @@ A player in the grace period cannot be attacked and cannot attack others.
The time (in minutes) of the grace period can be set via the gamerule `lifesteal:gracePeriod` (default: 30).
Hearts cannot be crafted by a player at/above 10 hearts.
-You can enable this via the gamerule `lifesteal:canCraftHeartsAboveVanillaMax` (default: false). \ No newline at end of file
+You can disable this via the gamerule `lifesteal:canCraftHeartsAboveVanillaMax` (default: false).
+
+Hearts cannot be stored in ender chests.
+You can disable this via the gamerule `lifesteal:canStoreHeartsInEC` (default: false). \ No newline at end of file
diff --git a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java
index f5f8892..d495792 100644
--- a/src/main/java/world/anhgelus/lifesteal/LifeSteal.java
+++ b/src/main/java/world/anhgelus/lifesteal/LifeSteal.java
@@ -55,6 +55,14 @@ public class LifeSteal implements ModInitializer {
CAN_CRAFT_HEARTS_ABOVE_VANILLA_MAX = rule.get();
})
);
+ public static boolean CAN_STORE_HEARTS_IN_EC = false;
+ public static final GameRules.Key<GameRules.BooleanRule> RULE_CAN_STORE_HEARTS_EC = GameRuleRegistry.register(
+ MOD_ID + ":canStoreHeartsInEC",
+ GameRules.Category.MISC,
+ GameRuleFactory.createBooleanRule(CAN_STORE_HEARTS_IN_EC, (server, rule) -> {
+ CAN_STORE_HEARTS_IN_EC = rule.get();
+ })
+ );
@Override
public void onInitialize() {
diff --git a/src/main/java/world/anhgelus/lifesteal/mixin/InventoryMixin.java b/src/main/java/world/anhgelus/lifesteal/mixin/InventoryMixin.java
new file mode 100644
index 0000000..6d2715b
--- /dev/null
+++ b/src/main/java/world/anhgelus/lifesteal/mixin/InventoryMixin.java
@@ -0,0 +1,22 @@
+package world.anhgelus.lifesteal.mixin;
+
+import net.minecraft.inventory.EnderChestInventory;
+import net.minecraft.inventory.SimpleInventory;
+import net.minecraft.item.ItemStack;
+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.CallbackInfoReturnable;
+import world.anhgelus.lifesteal.LifeSteal;
+import world.anhgelus.lifesteal.LifeStealer;
+
+@Mixin(SimpleInventory.class)
+public class InventoryMixin {
+ @Inject(at = @At(value = "HEAD"), method = "addStack", cancellable = true)
+ public void add(ItemStack is, CallbackInfoReturnable<ItemStack> cir) {
+ if (LifeSteal.CAN_STORE_HEARTS_IN_EC) return;
+ final var inv = (SimpleInventory) (Object) this;
+ if (!(inv instanceof EnderChestInventory)) return;
+ if (LifeStealer.Manager.validHeart(is)) cir.setReturnValue(ItemStack.EMPTY);
+ }
+}
diff --git a/src/main/resources/lifesteal.mixins.json b/src/main/resources/lifesteal.mixins.json
index 8e95873..59afe34 100644
--- a/src/main/resources/lifesteal.mixins.json
+++ b/src/main/resources/lifesteal.mixins.json
@@ -4,6 +4,7 @@
"package": "world.anhgelus.lifesteal.mixin",
"compatibilityLevel": "JAVA_21",
"mixins": [
+ "InventoryMixin",
"ItemMixin"
],
"injectors": {