diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-10-13 11:18:54 +0200 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-10-13 11:18:54 +0200 |
| commit | 9a7594b43abdd0d6a83326ab5f53b8baf756a3ee (patch) | |
| tree | 2b8b078a838154d1463cf043c06eb43c77745875 | |
| parent | 0a9c370cdfed7442e0b019da302c2f09fb40502d (diff) | |
feat(hearts): disable store hearts in ec
| -rw-r--r-- | README.md | 5 | ||||
| -rw-r--r-- | src/main/java/world/anhgelus/lifesteal/LifeSteal.java | 8 | ||||
| -rw-r--r-- | src/main/java/world/anhgelus/lifesteal/mixin/InventoryMixin.java | 22 | ||||
| -rw-r--r-- | src/main/resources/lifesteal.mixins.json | 1 |
4 files changed, 35 insertions, 1 deletions
@@ -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": { |
