From 971abbecb2acc6c2a4e2273d4d18adc6cee23304 Mon Sep 17 00:00:00 2001 From: phil-m-h Date: Sat, 21 Feb 2026 16:29:18 -0500 Subject: [PATCH] add check for empty block in fluid sigil placement, and waterlogging check for water sigil --- changelog.txt | 1 + .../common/item/sigil/ItemSigilFluidBase.java | 2 ++ .../common/item/sigil/ItemSigilLava.java | 5 +---- .../common/item/sigil/ItemSigilWater.java | 22 +++++++++++++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/changelog.txt b/changelog.txt index 61cd69970f..19bea7eff2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -29,6 +29,7 @@ AgriCraft is *not* installed. - prevent a crash when opening the Edit HUD position screen while looking at an entity - soft coating no longer voids the contents of shulker boxes (or other tile-entities) - bloodmagic:geode_harvestable now adds forge:clusters as a tag instead of a block, meaning it'll actually work with them +- Lava and Water sigil check check for existing blocks prior to placing fluids in the world, and water sigil will waterlog blocks. ------------------------------------------------------ Version 3.3.5 diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFluidBase.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFluidBase.java index d52f1016c1..c1d83f1b15 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFluidBase.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilFluidBase.java @@ -100,6 +100,8 @@ protected boolean tryRemoveFluid(IFluidHandler source, int amount, boolean doTra */ protected boolean tryPlaceSigilFluid(Player player, Level world, BlockPos blockPos) { + if (!world.isEmptyBlock(blockPos) && !world.getBlockState(blockPos).canBeReplaced()) return false; + FluidStack resource = sigilFluid; BlockState state = sigilFluid.getFluid().getFluidType().getBlockForFluidState(world, blockPos, sigilFluid.getFluid().defaultFluidState()); diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilLava.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilLava.java index 01917b7bf3..ae55cbf359 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilLava.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilLava.java @@ -19,8 +19,6 @@ import wayoftime.bloodmagic.util.helper.PlayerHelper; import wayoftime.bloodmagic.ConfigManager; -import wayoftime.bloodmagic.common.item.sigil.ISigil.Holding; - public class ItemSigilLava extends ItemSigilFluidBase implements IAlchemyItem { public ItemSigilLava() @@ -82,8 +80,7 @@ public InteractionResultHolder use(Level world, Player player, Intera // Place fluid in world if (destination == null && destinationSide == null) { - BlockPos targetPos = blockPos.relative(sideHit); - if (tryPlaceSigilFluid(player, world, targetPos) && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + if (tryPlaceSigilFluid(player, world, blockpos1) && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) { return InteractionResultHolder.success(stack); } diff --git a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilWater.java b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilWater.java index 140946df1e..a4af2ac042 100644 --- a/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilWater.java +++ b/src/main/java/wayoftime/bloodmagic/common/item/sigil/ItemSigilWater.java @@ -8,6 +8,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.ClipContext; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.SimpleWaterloggedBlock; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.material.Fluids; import net.minecraft.world.phys.BlockHitResult; import net.minecraft.world.phys.HitResult; @@ -82,13 +84,18 @@ public InteractionResultHolder use(Level world, Player player, Intera // world.setBlockAndUpdate(blockPos, Blocks.CAULDRON.defaultBlockState().setValue(CauldronBlock., 3)); // return InteractionResultHolder.success(stack); // } + //waterlog block if possible + if (tryWaterlogBlock(world, player, stack, blockPos) + || tryWaterlogBlock(world, player, stack, blockpos1)) + { + return InteractionResultHolder.success(stack); + } // Case for if block at blockPos is not a tank // Place fluid in world if (destination == null && destinationSide == null) { - BlockPos targetPos = blockPos.relative(sideHit); - if (tryPlaceSigilFluid(player, world, targetPos) && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + if (tryPlaceSigilFluid(player, world, blockpos1) && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) { return InteractionResultHolder.success(stack); } @@ -99,6 +106,17 @@ public InteractionResultHolder use(Level world, Player player, Intera return super.use(world, player, hand); } + private boolean tryWaterlogBlock(Level world, Player player, ItemStack stack, BlockPos blockPos) { + if (world.getBlockState(blockPos).getBlock() instanceof SimpleWaterloggedBlock + && world.setBlock(blockPos, world.getBlockState(blockPos).setValue(BlockStateProperties.WATERLOGGED, true), 3) + && NetworkHelper.getSoulNetwork(getBinding(stack)).syphonAndDamage(player, SoulTicket.item(stack, world, player, getLpUsed())).isSuccess()) + { + world.scheduleTick(blockPos, Fluids.WATER, Fluids.WATER.getTickDelay(world)); + return true; + } + return false; + } + @Override public ItemStack onConsumeInput(ItemStack stack) {