From 0cb3978a8f26caf294673440cfc412516754cecf Mon Sep 17 00:00:00 2001 From: JustAHuman-xD Date: Thu, 11 Jun 2026 16:29:14 -0500 Subject: [PATCH 1/3] Add Block#isFluidReplaceable --- paper-api/src/main/java/org/bukkit/block/Block.java | 10 ++++++++++ .../java/org/bukkit/craftbukkit/block/CraftBlock.java | 7 +++++++ 2 files changed, 17 insertions(+) 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..b7bf537fc97e 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(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..ca1c4e75a641 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,11 @@ public boolean isReplaceable() { return this.getBlockState().canBeReplaced(); } + @Override + public boolean isFluidReplaceable(final Fluid fluid) { + return this.getBlockState().canBeReplaced(CraftFluid.bukkitToMinecraft(fluid)); + } + @Override public boolean isSolid() { return this.getBlockState().blocksMotion(); From 35dbfbae03c0f891bfc53477c4f6e7f6c5eb792c Mon Sep 17 00:00:00 2001 From: JustAHuman-xD Date: Thu, 11 Jun 2026 16:35:58 -0500 Subject: [PATCH 2/3] add annotation --- paper-api/src/main/java/org/bukkit/block/Block.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b7bf537fc97e..18854b201bc9 100644 --- a/paper-api/src/main/java/org/bukkit/block/Block.java +++ b/paper-api/src/main/java/org/bukkit/block/Block.java @@ -500,7 +500,7 @@ default int getBlockPower() { * @param fluid the fluid to be replaceable with * @return true if the block can be replaced */ - boolean isFluidReplaceable(Fluid fluid); + boolean isFluidReplaceable(@NotNull Fluid fluid); /** * Check if this block is solid From f43bc53a171db743a453da7fd37326bed8187673 Mon Sep 17 00:00:00 2001 From: JustAHuman-xD Date: Sat, 13 Jun 2026 14:05:37 -0500 Subject: [PATCH 3/3] add precondition check --- .../src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java | 1 + 1 file changed, 1 insertion(+) 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 ca1c4e75a641..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 @@ -447,6 +447,7 @@ public boolean isReplaceable() { @Override public boolean isFluidReplaceable(final Fluid fluid) { + Preconditions.checkArgument(fluid != null, "Fluid cannot be null"); return this.getBlockState().canBeReplaced(CraftFluid.bukkitToMinecraft(fluid)); }