aboutsummaryrefslogtreecommitdiff
path: root/src
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 /src
parent0a9c370cdfed7442e0b019da302c2f09fb40502d (diff)
feat(hearts): disable store hearts in ec
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/InventoryMixin.java22
-rw-r--r--src/main/resources/lifesteal.mixins.json1
3 files changed, 31 insertions, 0 deletions
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": {