From 403171643f154744a1fe050705adc4f68fc7edb9 Mon Sep 17 00:00:00 2001 From: 12emin34 Date: Sun, 12 Jan 2025 11:57:20 -0800 Subject: [PATCH] Option for sponges to work on lava and mud Co-authored by: granny --- ...-for-sponges-to-work-on-lava-and-mud.patch | 49 ------------------- .../world/level/block/SpongeBlock.java.patch | 20 ++++++++ .../purpurmc/purpur/PurpurWorldConfig.java | 4 ++ 3 files changed, 24 insertions(+), 49 deletions(-) delete mode 100644 patches/server/0191-Option-for-sponges-to-work-on-lava-and-mud.patch diff --git a/patches/server/0191-Option-for-sponges-to-work-on-lava-and-mud.patch b/patches/server/0191-Option-for-sponges-to-work-on-lava-and-mud.patch deleted file mode 100644 index 2cd1c9b30..000000000 --- a/patches/server/0191-Option-for-sponges-to-work-on-lava-and-mud.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: 12emin34 -Date: Sat, 7 Aug 2021 20:23:31 +0200 -Subject: [PATCH] Option for sponges to work on lava and mud - -Co-authored by: granny - -diff --git a/net/minecraft/world/level/block/SpongeBlock.java b/net/minecraft/world/level/block/SpongeBlock.java -index 0edb7e821a60fe95fea3cae900e5b88192946fe6..295c1439645c8da7f84f0a72abb3235ee879e89c 100644 ---- a/net/minecraft/world/level/block/SpongeBlock.java -+++ b/net/minecraft/world/level/block/SpongeBlock.java -@@ -80,7 +80,7 @@ public class SpongeBlock extends Block { - FluidState fluid = blockList.getFluidState(blockposition1); - // CraftBukkit end - -- if (!fluid.is(FluidTags.WATER)) { -+ if (!fluid.is(FluidTags.WATER) && (!world.purpurConfig.spongeAbsorbsLava || !fluid.is(FluidTags.LAVA)) && (!world.purpurConfig.spongeAbsorbsWaterFromMud || !iblockdata.is(Blocks.MUD))) { // Purpur - return BlockPos.TraversalNodeStatus.SKIP; - } else { - Block block = iblockdata.getBlock(); -@@ -95,6 +95,10 @@ public class SpongeBlock extends Block { - - if (iblockdata.getBlock() instanceof LiquidBlock) { - blockList.setBlock(blockposition1, Blocks.AIR.defaultBlockState(), 3); // CraftBukkit -+ // Purpur start -+ } else if (iblockdata.is(Blocks.MUD)) { -+ blockList.setBlock(blockposition1, Blocks.CLAY.defaultBlockState(), 3); -+ // Purpur end - } else { - if (!iblockdata.is(Blocks.KELP) && !iblockdata.is(Blocks.KELP_PLANT) && !iblockdata.is(Blocks.SEAGRASS) && !iblockdata.is(Blocks.TALL_SEAGRASS)) { - return BlockPos.TraversalNodeStatus.SKIP; -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ece185b07394b2a09b322b3e00cd78076097b43a..1385065c45b817c4677010b9a4968f0987818f0a 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -973,9 +973,13 @@ public class PurpurWorldConfig { - - public int spongeAbsorptionArea = 65; - public int spongeAbsorptionRadius = 6; -+ public boolean spongeAbsorbsLava = false; -+ public boolean spongeAbsorbsWaterFromMud = false; - private void spongeSettings() { - spongeAbsorptionArea = getInt("blocks.sponge.absorption.area", spongeAbsorptionArea); - spongeAbsorptionRadius = getInt("blocks.sponge.absorption.radius", spongeAbsorptionRadius); -+ spongeAbsorbsLava = getBoolean("blocks.sponge.absorbs-lava", spongeAbsorbsLava); -+ spongeAbsorbsWaterFromMud = getBoolean("blocks.sponge.absorbs-water-from-mud", spongeAbsorbsWaterFromMud); - } - - public boolean turtleEggsBreakFromExpOrbs = false; diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpongeBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpongeBlock.java.patch index ec676e1ca..ab343ffb3 100644 --- a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpongeBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpongeBlock.java.patch @@ -11,3 +11,23 @@ (validPos, queueAdder) -> { for (Direction direction : ALL_DIRECTIONS) { queueAdder.accept(validPos.relative(direction)); +@@ -68,7 +_,7 @@ + BlockState blockState = blockList.getBlockState(blockPos); + FluidState fluidState = blockList.getFluidState(blockPos); + // CraftBukkit end +- if (!fluidState.is(FluidTags.WATER)) { ++ if (!fluidState.is(FluidTags.WATER) && (!level.purpurConfig.spongeAbsorbsLava || !fluidState.is(FluidTags.LAVA)) && (!level.purpurConfig.spongeAbsorbsWaterFromMud || !blockState.is(Blocks.MUD))) { // Purpur - Option for sponges to work on lava and mud + return BlockPos.TraversalNodeStatus.SKIP; + } else if (blockState.getBlock() instanceof BucketPickup bucketPickup + && !bucketPickup.pickupBlock(null, blockList, blockPos, blockState).isEmpty()) { // CraftBukkit +@@ -76,6 +_,10 @@ + } else { + if (blockState.getBlock() instanceof LiquidBlock) { + blockList.setBlock(blockPos, Blocks.AIR.defaultBlockState(), 3); // CraftBukkit ++ // Purpur start - Option for sponges to work on lava and mud ++ } else if (blockState.is(Blocks.MUD)) { ++ blockList.setBlock(blockPos, Blocks.CLAY.defaultBlockState(), 3); ++ // Purpur end - Option for sponges to work on lava and mud + } else { + if (!blockState.is(Blocks.KELP) + && !blockState.is(Blocks.KELP_PLANT) diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index c1c56d78f..96cb4b957 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -972,9 +972,13 @@ public class PurpurWorldConfig { public int spongeAbsorptionArea = 65; public int spongeAbsorptionRadius = 6; + public boolean spongeAbsorbsLava = false; + public boolean spongeAbsorbsWaterFromMud = false; private void spongeSettings() { spongeAbsorptionArea = getInt("blocks.sponge.absorption.area", spongeAbsorptionArea); spongeAbsorptionRadius = getInt("blocks.sponge.absorption.radius", spongeAbsorptionRadius); + spongeAbsorbsLava = getBoolean("blocks.sponge.absorbs-lava", spongeAbsorbsLava); + spongeAbsorbsWaterFromMud = getBoolean("blocks.sponge.absorbs-water-from-mud", spongeAbsorbsWaterFromMud); } public boolean turtleEggsBreakFromExpOrbs = false;