diff --git a/paper-api/src/main/java/org/bukkit/block/Block.java b/paper-api/src/main/java/org/bukkit/block/Block.java index 5c75b3d049f2..18854b201bc9 100644 --- a/paper-api/src/main/java/org/bukkit/block/Block.java +++ b/paper-api/src/main/java/org/bukkit/block/Block.java @@ -2,6 +2,7 @@ import java.util.Collection; import org.bukkit.Chunk; +import org.bukkit.Fluid; import org.bukkit.FluidCollisionMode; import org.bukkit.Location; import org.bukkit.Material; @@ -492,6 +493,15 @@ default int getBlockPower() { * @return true if block is replaceable */ boolean isReplaceable(); + + /** + * Checks if this block can be immediately replaced by a specific fluid + * + * @param fluid the fluid to be replaceable with + * @return true if the block can be replaced + */ + boolean isFluidReplaceable(@NotNull Fluid fluid); + /** * Check if this block is solid *

diff --git a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java index 5d6116c55072..f063d425d863 100644 --- a/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java +++ b/paper-server/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java @@ -32,6 +32,7 @@ import net.minecraft.world.phys.shapes.VoxelShape; import org.bukkit.Bukkit; import org.bukkit.Chunk; +import org.bukkit.Fluid; import org.bukkit.FluidCollisionMode; import org.bukkit.Location; import org.bukkit.Material; @@ -42,6 +43,7 @@ import org.bukkit.block.BlockFace; import org.bukkit.block.PistonMoveReaction; import org.bukkit.block.data.BlockData; +import org.bukkit.craftbukkit.CraftFluid; import org.bukkit.craftbukkit.CraftFluidCollisionMode; import org.bukkit.craftbukkit.CraftWorld; import org.bukkit.craftbukkit.block.data.CraftBlockData; @@ -443,6 +445,12 @@ public boolean isReplaceable() { return this.getBlockState().canBeReplaced(); } + @Override + public boolean isFluidReplaceable(final Fluid fluid) { + Preconditions.checkArgument(fluid != null, "Fluid cannot be null"); + return this.getBlockState().canBeReplaced(CraftFluid.bukkitToMinecraft(fluid)); + } + @Override public boolean isSolid() { return this.getBlockState().blocksMotion();