diff options
Diffstat (limited to 'src')
| -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 |
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": { |
