From 006878056d77afe0536798ee81e18d050090df78 Mon Sep 17 00:00:00 2001 From: Mirality Date: Sun, 3 May 2026 15:37:57 +1200 Subject: [PATCH] Fix placeholders being destroyed by water --- .../blocks/schematic/BlockSubstitution.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/ldtteam/structurize/blocks/schematic/BlockSubstitution.java b/src/main/java/com/ldtteam/structurize/blocks/schematic/BlockSubstitution.java index eb9c5cf1c..aeebecea3 100644 --- a/src/main/java/com/ldtteam/structurize/blocks/schematic/BlockSubstitution.java +++ b/src/main/java/com/ldtteam/structurize/blocks/schematic/BlockSubstitution.java @@ -4,11 +4,14 @@ import net.minecraft.core.BlockPos; import net.minecraft.world.entity.player.Player; import net.minecraft.world.level.BlockGetter; -import net.minecraft.world.level.block.AbstractGlassBlock; +import net.minecraft.world.level.LevelAccessor; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LiquidBlockContainer; import net.minecraft.world.level.block.SoundType; import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.material.FluidState; import net.minecraft.world.level.material.MapColor; import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.EntityCollisionContext; @@ -19,14 +22,15 @@ * This block is used as a substitution block for the Builder. Every solid block can be substituted by this block in schematics. This helps make schematics independent from * location and ground. */ -public class BlockSubstitution extends Block +public class BlockSubstitution extends Block implements LiquidBlockContainer { /** * Constructor for the Substitution block. sets the creative tab, as well as the resistance and the hardness. */ public BlockSubstitution() { - super(defaultSubstitutionProperties()); + super(defaultSubstitutionProperties() + .forceSolidOff()); // don't kill farmland and path blocks underneath } public static Properties defaultSubstitutionProperties() @@ -36,8 +40,7 @@ public static Properties defaultSubstitutionProperties() .sound(SoundType.WOOD) .instabreak() // must be before explosionResistance .explosionResistance(Blocks.OAK_PLANKS.getExplosionResistance()) - .noOcclusion() - .forceSolidOff(); + .noOcclusion(); } @Override @@ -66,4 +69,17 @@ public VoxelShape getBlockSupportShape(BlockState state, BlockGetter worldIn, Bl // Allow torches etc to be placed on the faces regardless of collision shape return Shapes.block(); } + + @Override + public boolean canPlaceLiquid(BlockGetter worldIn, BlockPos pos, BlockState state, Fluid fluid) + { + // Don't allow water to flow inside despite being non-solid + return false; + } + + @Override + public boolean placeLiquid(LevelAccessor worldIn, BlockPos pos, BlockState state, FluidState fluid) + { + return false; + } }