@@ -1,8 +1,8 @@
|
||||
--- a/net/minecraft/world/level/block/BlockSponge.java
|
||||
+++ b/net/minecraft/world/level/block/BlockSponge.java
|
||||
@@ -13,6 +13,13 @@
|
||||
@@ -9,6 +9,13 @@
|
||||
import net.minecraft.world.level.block.state.IBlockData;
|
||||
import net.minecraft.world.level.material.Fluid;
|
||||
import net.minecraft.world.level.material.Material;
|
||||
|
||||
+// CraftBukkit start
|
||||
+import java.util.List;
|
||||
@@ -14,57 +14,63 @@
|
||||
public class BlockSponge extends Block {
|
||||
|
||||
public static final int MAX_DEPTH = 6;
|
||||
@@ -48,6 +55,7 @@
|
||||
@@ -41,7 +48,8 @@
|
||||
}
|
||||
|
||||
queue.add(new Tuple<>(blockposition, 0));
|
||||
int i = 0;
|
||||
private boolean removeWaterBreadthFirstSearch(World world, BlockPosition blockposition) {
|
||||
- return BlockPosition.breadthFirstTraversal(blockposition, 6, 65, (blockposition1, consumer) -> {
|
||||
+ BlockStateListPopulator blockList = new BlockStateListPopulator(world); // CraftBukkit - Use BlockStateListPopulator
|
||||
+ BlockPosition.breadthFirstTraversal(blockposition, 6, 65, (blockposition1, consumer) -> {
|
||||
EnumDirection[] aenumdirection = BlockSponge.ALL_DIRECTIONS;
|
||||
int i = aenumdirection.length;
|
||||
|
||||
while (!queue.isEmpty()) {
|
||||
Tuple<BlockPosition, Integer> tuple = (Tuple) queue.poll();
|
||||
@@ -59,27 +67,31 @@
|
||||
for (int l = 0; l < k; ++l) {
|
||||
EnumDirection enumdirection = aenumdirection[l];
|
||||
BlockPosition blockposition2 = blockposition1.relative(enumdirection);
|
||||
- IBlockData iblockdata = world.getBlockState(blockposition2);
|
||||
- Fluid fluid = world.getFluidState(blockposition2);
|
||||
@@ -55,8 +63,10 @@
|
||||
if (blockposition1.equals(blockposition)) {
|
||||
return true;
|
||||
} else {
|
||||
- IBlockData iblockdata = world.getBlockState(blockposition1);
|
||||
- Fluid fluid = world.getFluidState(blockposition1);
|
||||
+ // CraftBukkit start
|
||||
+ IBlockData iblockdata = blockList.getBlockState(blockposition2);
|
||||
+ Fluid fluid = blockList.getFluidState(blockposition2);
|
||||
+ IBlockData iblockdata = blockList.getBlockState(blockposition1);
|
||||
+ Fluid fluid = blockList.getFluidState(blockposition1);
|
||||
+ // CraftBukkit end
|
||||
Material material = iblockdata.getMaterial();
|
||||
|
||||
if (fluid.is(TagsFluid.WATER)) {
|
||||
- if (iblockdata.getBlock() instanceof IFluidSource && !((IFluidSource) iblockdata.getBlock()).pickupBlock(world, blockposition2, iblockdata).isEmpty()) {
|
||||
+ if (iblockdata.getBlock() instanceof IFluidSource && !((IFluidSource) iblockdata.getBlock()).pickupBlock(blockList, blockposition2, iblockdata).isEmpty()) { // CraftBukkit
|
||||
++i;
|
||||
if (j < 6) {
|
||||
queue.add(new Tuple<>(blockposition2, j + 1));
|
||||
if (!fluid.is(TagsFluid.WATER)) {
|
||||
return false;
|
||||
@@ -66,27 +76,64 @@
|
||||
if (block instanceof IFluidSource) {
|
||||
IFluidSource ifluidsource = (IFluidSource) block;
|
||||
|
||||
- if (!ifluidsource.pickupBlock(world, blockposition1, iblockdata).isEmpty()) {
|
||||
+ if (!ifluidsource.pickupBlock(blockList, blockposition1, iblockdata).isEmpty()) { // CraftBukkit
|
||||
return true;
|
||||
}
|
||||
} else if (iblockdata.getBlock() instanceof BlockFluids) {
|
||||
- world.setBlock(blockposition2, Blocks.AIR.defaultBlockState(), 3);
|
||||
+ blockList.setBlock(blockposition2, Blocks.AIR.defaultBlockState(), 3); // CraftBukkit
|
||||
++i;
|
||||
if (j < 6) {
|
||||
queue.add(new Tuple<>(blockposition2, j + 1));
|
||||
}
|
||||
|
||||
if (iblockdata.getBlock() instanceof BlockFluids) {
|
||||
- world.setBlock(blockposition1, Blocks.AIR.defaultBlockState(), 3);
|
||||
+ blockList.setBlock(blockposition1, Blocks.AIR.defaultBlockState(), 3); // CraftBukkit
|
||||
} else {
|
||||
if (!iblockdata.is(Blocks.KELP) && !iblockdata.is(Blocks.KELP_PLANT) && !iblockdata.is(Blocks.SEAGRASS) && !iblockdata.is(Blocks.TALL_SEAGRASS)) {
|
||||
return false;
|
||||
}
|
||||
} else if (material == Material.WATER_PLANT || material == Material.REPLACEABLE_WATER_PLANT) {
|
||||
- TileEntity tileentity = iblockdata.hasBlockEntity() ? world.getBlockEntity(blockposition2) : null;
|
||||
|
||||
- TileEntity tileentity = iblockdata.hasBlockEntity() ? world.getBlockEntity(blockposition1) : null;
|
||||
+ // CraftBukkit start
|
||||
+ // TileEntity tileentity = iblockdata.hasBlockEntity() ? world.getBlockEntity(blockposition2) : null;
|
||||
+ // TileEntity tileentity = iblockdata.hasBlockEntity() ? world.getBlockEntity(blockposition1) : null;
|
||||
|
||||
- dropResources(iblockdata, world, blockposition2, tileentity);
|
||||
- world.setBlock(blockposition2, Blocks.AIR.defaultBlockState(), 3);
|
||||
+ // dropResources(iblockdata, world, blockposition2, tileentity);
|
||||
+ blockList.setBlock(blockposition2, Blocks.AIR.defaultBlockState(), 3);
|
||||
- dropResources(iblockdata, world, blockposition1, tileentity);
|
||||
- world.setBlock(blockposition1, Blocks.AIR.defaultBlockState(), 3);
|
||||
+ // dropResources(iblockdata, world, blockposition1, tileentity);
|
||||
+ blockList.setBlock(blockposition1, Blocks.AIR.defaultBlockState(), 3);
|
||||
+ // CraftBukkit end
|
||||
++i;
|
||||
if (j < 6) {
|
||||
queue.add(new Tuple<>(blockposition2, j + 1));
|
||||
@@ -92,6 +104,39 @@
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
- }) > 1;
|
||||
+ });
|
||||
+ // CraftBukkit start
|
||||
+ List<CraftBlockState> blocks = blockList.getList(); // Is a clone
|
||||
+ if (!blocks.isEmpty()) {
|
||||
@@ -78,26 +84,27 @@
|
||||
+ }
|
||||
+
|
||||
+ for (CraftBlockState block : blocks) {
|
||||
+ BlockPosition blockposition2 = block.getPosition();
|
||||
+ IBlockData iblockdata = world.getBlockState(blockposition2);
|
||||
+ Fluid fluid = world.getFluidState(blockposition2);
|
||||
+ Material material = iblockdata.getMaterial();
|
||||
+ BlockPosition blockposition1 = block.getPosition();
|
||||
+ IBlockData iblockdata = world.getBlockState(blockposition1);
|
||||
+ Fluid fluid = world.getFluidState(blockposition1);
|
||||
+
|
||||
+ if (fluid.is(TagsFluid.WATER)) {
|
||||
+ if (iblockdata.getBlock() instanceof IFluidSource && !((IFluidSource) iblockdata.getBlock()).pickupBlock(blockList, blockposition2, iblockdata).isEmpty()) {
|
||||
+ if (iblockdata.getBlock() instanceof IFluidSource && !((IFluidSource) iblockdata.getBlock()).pickupBlock(blockList, blockposition1, iblockdata).isEmpty()) {
|
||||
+ // NOP
|
||||
+ } else if (iblockdata.getBlock() instanceof BlockFluids) {
|
||||
+ // NOP
|
||||
+ } else if (material == Material.WATER_PLANT || material == Material.REPLACEABLE_WATER_PLANT) {
|
||||
+ TileEntity tileentity = iblockdata.hasBlockEntity() ? world.getBlockEntity(blockposition2) : null;
|
||||
+ } else if (iblockdata.is(Blocks.KELP) || iblockdata.is(Blocks.KELP_PLANT) || iblockdata.is(Blocks.SEAGRASS) || iblockdata.is(Blocks.TALL_SEAGRASS)) {
|
||||
+ TileEntity tileentity = iblockdata.hasBlockEntity() ? world.getBlockEntity(blockposition1) : null;
|
||||
+
|
||||
+ dropResources(iblockdata, world, blockposition2, tileentity);
|
||||
+ dropResources(iblockdata, world, blockposition1, tileentity);
|
||||
+ }
|
||||
+ }
|
||||
+ world.setBlock(blockposition2, block.getHandle(), block.getFlag());
|
||||
+ world.setBlock(blockposition1, block.getHandle(), block.getFlag());
|
||||
+ }
|
||||
+
|
||||
+ return true;
|
||||
+ }
|
||||
+ return false;
|
||||
+ // CraftBukkit end
|
||||
|
||||
return i > 0;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user