aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/world
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/world')
-rw-r--r--src/main/java/world/anhgelus/lifesteal/LifeSteal.java8
-rw-r--r--src/main/java/world/anhgelus/lifesteal/mixin/InventoryMixin.java22
2 files changed, 30 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);
+ }
+}